// 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  S79C8_nt  {
  int s79c8f0[2];
  void  mf79c8(); // _ZN8S79C8_nt6mf79c8Ev
};
//SIG(-1 S79C8_nt) C1{ m Fi[2]}


void  S79C8_nt ::mf79c8(){}

//skip512 S79C8_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S79C8_nt[];
VTBL_ENTRY *P__ZTI8S79C8_nt = _ZTI8S79C8_nt; 
Class_Descriptor cd_S79C8_nt = {  "S79C8_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  8, // object size
  NSPAIRA(_ZTI8S79C8_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  S79C7_nt  {
  int s79c7f0;
  __tsi64 s79c7f1;
  void *s79c7f2[4];
  int s79c7f3[2];
  void *s79c7f4;
  ::S79C8_nt s79c7f5;
  void *s79c7f6[2];
  virtual  ~S79C7_nt(); // _ZN8S79C7_ntD1Ev
  virtual void  v4(); // _ZN8S79C7_nt2v4Ev
  virtual void  v5(); // _ZN8S79C7_nt2v5Ev
  virtual void  v6(); // _ZN8S79C7_nt2v6Ev
  virtual void  v7(); // _ZN8S79C7_nt2v7Ev
  virtual void  v8(); // _ZN8S79C7_nt2v8Ev
  virtual void  v9(); // _ZN8S79C7_nt2v9Ev
  virtual void  v10(); // _ZN8S79C7_nt3v10Ev
  virtual void  v11(); // _ZN8S79C7_nt3v11Ev
  virtual void  v12(); // _ZN8S79C7_nt3v12Ev
  virtual void  v13(); // _ZN8S79C7_nt3v13Ev
  virtual void  v14(); // _ZN8S79C7_nt3v14Ev
  virtual void  v15(); // _ZN8S79C7_nt3v15Ev
  virtual void  v16(); // _ZN8S79C7_nt3v16Ev
  virtual void  v17(); // _ZN8S79C7_nt3v17Ev
  virtual void  v18(); // _ZN8S79C7_nt3v18Ev
  virtual void  v19(); // _ZN8S79C7_nt3v19Ev
  virtual void  v20(); // _ZN8S79C7_nt3v20Ev
  virtual void  v21(); // _ZN8S79C7_nt3v21Ev
  virtual void  v22(); // _ZN8S79C7_nt3v22Ev
  virtual void  v23(); // _ZN8S79C7_nt3v23Ev
  virtual void  v24(); // _ZN8S79C7_nt3v24Ev
  virtual void  v25(); // _ZN8S79C7_nt3v25Ev
  virtual void  v26(); // _ZN8S79C7_nt3v26Ev
  virtual void  v27(); // _ZN8S79C7_nt3v27Ev
  virtual void  v28(); // _ZN8S79C7_nt3v28Ev
  virtual void  v29(); // _ZN8S79C7_nt3v29Ev
  virtual void  v30(); // _ZN8S79C7_nt3v30Ev
  virtual void  v31(); // _ZN8S79C7_nt3v31Ev
  virtual void  v32(); // _ZN8S79C7_nt3v32Ev
  virtual void  v33(); // _ZN8S79C7_nt3v33Ev
  virtual void  v34(); // _ZN8S79C7_nt3v34Ev
  virtual void  v35(); // _ZN8S79C7_nt3v35Ev
  virtual void  v36(); // _ZN8S79C7_nt3v36Ev
  virtual void  v37(); // _ZN8S79C7_nt3v37Ev
  virtual void  v38(); // _ZN8S79C7_nt3v38Ev
  virtual void  v39(); // _ZN8S79C7_nt3v39Ev
  virtual void  v40(); // _ZN8S79C7_nt3v40Ev
  virtual void  v41(); // _ZN8S79C7_nt3v41Ev
  virtual void  v42(); // _ZN8S79C7_nt3v42Ev
  virtual void  v43(); // _ZN8S79C7_nt3v43Ev
  virtual void  v44(); // _ZN8S79C7_nt3v44Ev
  virtual void  v45(); // _ZN8S79C7_nt3v45Ev
  virtual void  v46(); // _ZN8S79C7_nt3v46Ev
  virtual void  v47(); // _ZN8S79C7_nt3v47Ev
  virtual void  v48(); // _ZN8S79C7_nt3v48Ev
  virtual void  v49(); // _ZN8S79C7_nt3v49Ev
  virtual void  v50(); // _ZN8S79C7_nt3v50Ev
  virtual void  v51(); // _ZN8S79C7_nt3v51Ev
  virtual void  v52(); // _ZN8S79C7_nt3v52Ev
  virtual void  v53(); // _ZN8S79C7_nt3v53Ev
  virtual void  v54(); // _ZN8S79C7_nt3v54Ev
  virtual void  v55(); // _ZN8S79C7_nt3v55Ev
  virtual void  v56(); // _ZN8S79C7_nt3v56Ev
  virtual void  v57(); // _ZN8S79C7_nt3v57Ev
  virtual void  v58(); // _ZN8S79C7_nt3v58Ev
  virtual void  v59(); // _ZN8S79C7_nt3v59Ev
  virtual void  v60(); // _ZN8S79C7_nt3v60Ev
  virtual void  v61(); // _ZN8S79C7_nt3v61Ev
  virtual void  v62(); // _ZN8S79C7_nt3v62Ev
  virtual void  v63(); // _ZN8S79C7_nt3v63Ev
  virtual void  v64(); // _ZN8S79C7_nt3v64Ev
  virtual void  v65(); // _ZN8S79C7_nt3v65Ev
  virtual void  v66(); // _ZN8S79C7_nt3v66Ev
  virtual void  v67(); // _ZN8S79C7_nt3v67Ev
  S79C7_nt(); // tgen
};
//SIG(-1 S79C7_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]}


 S79C7_nt ::~S79C7_nt(){ note_dtor("S79C7_nt", this);}
void  S79C7_nt ::v4(){vfunc_called(this, "_ZN8S79C7_nt2v4Ev");}
void  S79C7_nt ::v5(){vfunc_called(this, "_ZN8S79C7_nt2v5Ev");}
void  S79C7_nt ::v6(){vfunc_called(this, "_ZN8S79C7_nt2v6Ev");}
void  S79C7_nt ::v7(){vfunc_called(this, "_ZN8S79C7_nt2v7Ev");}
void  S79C7_nt ::v8(){vfunc_called(this, "_ZN8S79C7_nt2v8Ev");}
void  S79C7_nt ::v9(){vfunc_called(this, "_ZN8S79C7_nt2v9Ev");}
void  S79C7_nt ::v10(){vfunc_called(this, "_ZN8S79C7_nt3v10Ev");}
void  S79C7_nt ::v11(){vfunc_called(this, "_ZN8S79C7_nt3v11Ev");}
void  S79C7_nt ::v12(){vfunc_called(this, "_ZN8S79C7_nt3v12Ev");}
void  S79C7_nt ::v13(){vfunc_called(this, "_ZN8S79C7_nt3v13Ev");}
void  S79C7_nt ::v14(){vfunc_called(this, "_ZN8S79C7_nt3v14Ev");}
void  S79C7_nt ::v15(){vfunc_called(this, "_ZN8S79C7_nt3v15Ev");}
void  S79C7_nt ::v16(){vfunc_called(this, "_ZN8S79C7_nt3v16Ev");}
void  S79C7_nt ::v17(){vfunc_called(this, "_ZN8S79C7_nt3v17Ev");}
void  S79C7_nt ::v18(){vfunc_called(this, "_ZN8S79C7_nt3v18Ev");}
void  S79C7_nt ::v19(){vfunc_called(this, "_ZN8S79C7_nt3v19Ev");}
void  S79C7_nt ::v20(){vfunc_called(this, "_ZN8S79C7_nt3v20Ev");}
void  S79C7_nt ::v21(){vfunc_called(this, "_ZN8S79C7_nt3v21Ev");}
void  S79C7_nt ::v22(){vfunc_called(this, "_ZN8S79C7_nt3v22Ev");}
void  S79C7_nt ::v23(){vfunc_called(this, "_ZN8S79C7_nt3v23Ev");}
void  S79C7_nt ::v24(){vfunc_called(this, "_ZN8S79C7_nt3v24Ev");}
void  S79C7_nt ::v25(){vfunc_called(this, "_ZN8S79C7_nt3v25Ev");}
void  S79C7_nt ::v26(){vfunc_called(this, "_ZN8S79C7_nt3v26Ev");}
void  S79C7_nt ::v27(){vfunc_called(this, "_ZN8S79C7_nt3v27Ev");}
void  S79C7_nt ::v28(){vfunc_called(this, "_ZN8S79C7_nt3v28Ev");}
void  S79C7_nt ::v29(){vfunc_called(this, "_ZN8S79C7_nt3v29Ev");}
void  S79C7_nt ::v30(){vfunc_called(this, "_ZN8S79C7_nt3v30Ev");}
void  S79C7_nt ::v31(){vfunc_called(this, "_ZN8S79C7_nt3v31Ev");}
void  S79C7_nt ::v32(){vfunc_called(this, "_ZN8S79C7_nt3v32Ev");}
void  S79C7_nt ::v33(){vfunc_called(this, "_ZN8S79C7_nt3v33Ev");}
void  S79C7_nt ::v34(){vfunc_called(this, "_ZN8S79C7_nt3v34Ev");}
void  S79C7_nt ::v35(){vfunc_called(this, "_ZN8S79C7_nt3v35Ev");}
void  S79C7_nt ::v36(){vfunc_called(this, "_ZN8S79C7_nt3v36Ev");}
void  S79C7_nt ::v37(){vfunc_called(this, "_ZN8S79C7_nt3v37Ev");}
void  S79C7_nt ::v38(){vfunc_called(this, "_ZN8S79C7_nt3v38Ev");}
void  S79C7_nt ::v39(){vfunc_called(this, "_ZN8S79C7_nt3v39Ev");}
void  S79C7_nt ::v40(){vfunc_called(this, "_ZN8S79C7_nt3v40Ev");}
void  S79C7_nt ::v41(){vfunc_called(this, "_ZN8S79C7_nt3v41Ev");}
void  S79C7_nt ::v42(){vfunc_called(this, "_ZN8S79C7_nt3v42Ev");}
void  S79C7_nt ::v43(){vfunc_called(this, "_ZN8S79C7_nt3v43Ev");}
void  S79C7_nt ::v44(){vfunc_called(this, "_ZN8S79C7_nt3v44Ev");}
void  S79C7_nt ::v45(){vfunc_called(this, "_ZN8S79C7_nt3v45Ev");}
void  S79C7_nt ::v46(){vfunc_called(this, "_ZN8S79C7_nt3v46Ev");}
void  S79C7_nt ::v47(){vfunc_called(this, "_ZN8S79C7_nt3v47Ev");}
void  S79C7_nt ::v48(){vfunc_called(this, "_ZN8S79C7_nt3v48Ev");}
void  S79C7_nt ::v49(){vfunc_called(this, "_ZN8S79C7_nt3v49Ev");}
void  S79C7_nt ::v50(){vfunc_called(this, "_ZN8S79C7_nt3v50Ev");}
void  S79C7_nt ::v51(){vfunc_called(this, "_ZN8S79C7_nt3v51Ev");}
void  S79C7_nt ::v52(){vfunc_called(this, "_ZN8S79C7_nt3v52Ev");}
void  S79C7_nt ::v53(){vfunc_called(this, "_ZN8S79C7_nt3v53Ev");}
void  S79C7_nt ::v54(){vfunc_called(this, "_ZN8S79C7_nt3v54Ev");}
void  S79C7_nt ::v55(){vfunc_called(this, "_ZN8S79C7_nt3v55Ev");}
void  S79C7_nt ::v56(){vfunc_called(this, "_ZN8S79C7_nt3v56Ev");}
void  S79C7_nt ::v57(){vfunc_called(this, "_ZN8S79C7_nt3v57Ev");}
void  S79C7_nt ::v58(){vfunc_called(this, "_ZN8S79C7_nt3v58Ev");}
void  S79C7_nt ::v59(){vfunc_called(this, "_ZN8S79C7_nt3v59Ev");}
void  S79C7_nt ::v60(){vfunc_called(this, "_ZN8S79C7_nt3v60Ev");}
void  S79C7_nt ::v61(){vfunc_called(this, "_ZN8S79C7_nt3v61Ev");}
void  S79C7_nt ::v62(){vfunc_called(this, "_ZN8S79C7_nt3v62Ev");}
void  S79C7_nt ::v63(){vfunc_called(this, "_ZN8S79C7_nt3v63Ev");}
void  S79C7_nt ::v64(){vfunc_called(this, "_ZN8S79C7_nt3v64Ev");}
void  S79C7_nt ::v65(){vfunc_called(this, "_ZN8S79C7_nt3v65Ev");}
void  S79C7_nt ::v66(){vfunc_called(this, "_ZN8S79C7_nt3v66Ev");}
void  S79C7_nt ::v67(){vfunc_called(this, "_ZN8S79C7_nt3v67Ev");}
S79C7_nt ::S79C7_nt(){ note_ctor("S79C7_nt", this);} // tgen

//skip512 S79C7_nt

#else // __cplusplus

extern void _ZN8S79C7_ntC1Ev();
extern void _ZN8S79C7_ntD1Ev();
Name_Map name_map_S79C7_nt[] = {
  NSPAIR(_ZN8S79C7_ntC1Ev),
  NSPAIR(_ZN8S79C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S79C7_nt[];
extern void _ZN8S79C7_ntD1Ev();
extern void _ZN8S79C7_ntD0Ev();
extern void _ZN8S79C7_nt2v4Ev();
extern void _ZN8S79C7_nt2v5Ev();
extern void _ZN8S79C7_nt2v6Ev();
extern void _ZN8S79C7_nt2v7Ev();
extern void _ZN8S79C7_nt2v8Ev();
extern void _ZN8S79C7_nt2v9Ev();
extern void _ZN8S79C7_nt3v10Ev();
extern void _ZN8S79C7_nt3v11Ev();
extern void _ZN8S79C7_nt3v12Ev();
extern void _ZN8S79C7_nt3v13Ev();
extern void _ZN8S79C7_nt3v14Ev();
extern void _ZN8S79C7_nt3v15Ev();
extern void _ZN8S79C7_nt3v16Ev();
extern void _ZN8S79C7_nt3v17Ev();
extern void _ZN8S79C7_nt3v18Ev();
extern void _ZN8S79C7_nt3v19Ev();
extern void _ZN8S79C7_nt3v20Ev();
extern void _ZN8S79C7_nt3v21Ev();
extern void _ZN8S79C7_nt3v22Ev();
extern void _ZN8S79C7_nt3v23Ev();
extern void _ZN8S79C7_nt3v24Ev();
extern void _ZN8S79C7_nt3v25Ev();
extern void _ZN8S79C7_nt3v26Ev();
extern void _ZN8S79C7_nt3v27Ev();
extern void _ZN8S79C7_nt3v28Ev();
extern void _ZN8S79C7_nt3v29Ev();
extern void _ZN8S79C7_nt3v30Ev();
extern void _ZN8S79C7_nt3v31Ev();
extern void _ZN8S79C7_nt3v32Ev();
extern void _ZN8S79C7_nt3v33Ev();
extern void _ZN8S79C7_nt3v34Ev();
extern void _ZN8S79C7_nt3v35Ev();
extern void _ZN8S79C7_nt3v36Ev();
extern void _ZN8S79C7_nt3v37Ev();
extern void _ZN8S79C7_nt3v38Ev();
extern void _ZN8S79C7_nt3v39Ev();
extern void _ZN8S79C7_nt3v40Ev();
extern void _ZN8S79C7_nt3v41Ev();
extern void _ZN8S79C7_nt3v42Ev();
extern void _ZN8S79C7_nt3v43Ev();
extern void _ZN8S79C7_nt3v44Ev();
extern void _ZN8S79C7_nt3v45Ev();
extern void _ZN8S79C7_nt3v46Ev();
extern void _ZN8S79C7_nt3v47Ev();
extern void _ZN8S79C7_nt3v48Ev();
extern void _ZN8S79C7_nt3v49Ev();
extern void _ZN8S79C7_nt3v50Ev();
extern void _ZN8S79C7_nt3v51Ev();
extern void _ZN8S79C7_nt3v52Ev();
extern void _ZN8S79C7_nt3v53Ev();
extern void _ZN8S79C7_nt3v54Ev();
extern void _ZN8S79C7_nt3v55Ev();
extern void _ZN8S79C7_nt3v56Ev();
extern void _ZN8S79C7_nt3v57Ev();
extern void _ZN8S79C7_nt3v58Ev();
extern void _ZN8S79C7_nt3v59Ev();
extern void _ZN8S79C7_nt3v60Ev();
extern void _ZN8S79C7_nt3v61Ev();
extern void _ZN8S79C7_nt3v62Ev();
extern void _ZN8S79C7_nt3v63Ev();
extern void _ZN8S79C7_nt3v64Ev();
extern void _ZN8S79C7_nt3v65Ev();
extern void _ZN8S79C7_nt3v66Ev();
extern void _ZN8S79C7_nt3v67Ev();
static  VTBL_ENTRY vtc_S79C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S79C7_nt[0]),
  (VTBL_ENTRY)&_ZN8S79C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN8S79C7_ntD0Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v4Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v6Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v7Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v9Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v13Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v14Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v16Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v17Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v19Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v20Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v21Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v22Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v23Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v24Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v25Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v26Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v27Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v28Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v29Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v30Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v31Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v32Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v33Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v34Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v35Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v36Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v37Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v38Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v39Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v40Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v41Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v42Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v43Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v44Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v45Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v46Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v47Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v48Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v49Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v50Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v51Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v52Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v53Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v54Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v55Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v56Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v57Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v58Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v59Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v60Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v61Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v62Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v63Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v64Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v65Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v66Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v67Ev,
};
extern VTBL_ENTRY _ZTI8S79C7_nt[];
VTBL_ENTRY *P__ZTI8S79C7_nt = _ZTI8S79C7_nt; 
extern  VTBL_ENTRY _ZTV8S79C7_nt[];
Class_Descriptor cd_S79C7_nt = {  "S79C7_nt", // class name
  0,0,//no base classes
  &(vtc_S79C7_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI8S79C7_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S79C7_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  S79C6_nt  : S79C7_nt {
  virtual  ~S79C6_nt(); // _ZN8S79C6_ntD1Ev
  virtual void  v68(); // _ZN8S79C6_nt3v68Ev
  virtual void  v69(); // _ZN8S79C6_nt3v69Ev
  S79C6_nt(); // tgen
};
//SIG(-1 S79C6_nt) C1{ BC2{ vd 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2}


 S79C6_nt ::~S79C6_nt(){ note_dtor("S79C6_nt", this);}
void  S79C6_nt ::v68(){vfunc_called(this, "_ZN8S79C6_nt3v68Ev");}
void  S79C6_nt ::v69(){vfunc_called(this, "_ZN8S79C6_nt3v69Ev");}
S79C6_nt ::S79C6_nt(){ note_ctor("S79C6_nt", this);} // tgen

//skip512 S79C6_nt

#else // __cplusplus

extern void _ZN8S79C6_ntC1Ev();
extern void _ZN8S79C6_ntD1Ev();
Name_Map name_map_S79C6_nt[] = {
  NSPAIR(_ZN8S79C6_ntC1Ev),
  NSPAIR(_ZN8S79C6_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S79C7_nt;
extern VTBL_ENTRY _ZTI8S79C7_nt[];
extern  VTBL_ENTRY _ZTV8S79C7_nt[];
static Base_Class bases_S79C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S79C7_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 _ZTI8S79C6_nt[];
extern void _ZN8S79C6_ntD1Ev();
extern void _ZN8S79C6_ntD0Ev();
extern void _ZN8S79C7_nt2v4Ev();
extern void _ZN8S79C7_nt2v5Ev();
extern void _ZN8S79C7_nt2v6Ev();
extern void _ZN8S79C7_nt2v7Ev();
extern void _ZN8S79C7_nt2v8Ev();
extern void _ZN8S79C7_nt2v9Ev();
extern void _ZN8S79C7_nt3v10Ev();
extern void _ZN8S79C7_nt3v11Ev();
extern void _ZN8S79C7_nt3v12Ev();
extern void _ZN8S79C7_nt3v13Ev();
extern void _ZN8S79C7_nt3v14Ev();
extern void _ZN8S79C7_nt3v15Ev();
extern void _ZN8S79C7_nt3v16Ev();
extern void _ZN8S79C7_nt3v17Ev();
extern void _ZN8S79C7_nt3v18Ev();
extern void _ZN8S79C7_nt3v19Ev();
extern void _ZN8S79C7_nt3v20Ev();
extern void _ZN8S79C7_nt3v21Ev();
extern void _ZN8S79C7_nt3v22Ev();
extern void _ZN8S79C7_nt3v23Ev();
extern void _ZN8S79C7_nt3v24Ev();
extern void _ZN8S79C7_nt3v25Ev();
extern void _ZN8S79C7_nt3v26Ev();
extern void _ZN8S79C7_nt3v27Ev();
extern void _ZN8S79C7_nt3v28Ev();
extern void _ZN8S79C7_nt3v29Ev();
extern void _ZN8S79C7_nt3v30Ev();
extern void _ZN8S79C7_nt3v31Ev();
extern void _ZN8S79C7_nt3v32Ev();
extern void _ZN8S79C7_nt3v33Ev();
extern void _ZN8S79C7_nt3v34Ev();
extern void _ZN8S79C7_nt3v35Ev();
extern void _ZN8S79C7_nt3v36Ev();
extern void _ZN8S79C7_nt3v37Ev();
extern void _ZN8S79C7_nt3v38Ev();
extern void _ZN8S79C7_nt3v39Ev();
extern void _ZN8S79C7_nt3v40Ev();
extern void _ZN8S79C7_nt3v41Ev();
extern void _ZN8S79C7_nt3v42Ev();
extern void _ZN8S79C7_nt3v43Ev();
extern void _ZN8S79C7_nt3v44Ev();
extern void _ZN8S79C7_nt3v45Ev();
extern void _ZN8S79C7_nt3v46Ev();
extern void _ZN8S79C7_nt3v47Ev();
extern void _ZN8S79C7_nt3v48Ev();
extern void _ZN8S79C7_nt3v49Ev();
extern void _ZN8S79C7_nt3v50Ev();
extern void _ZN8S79C7_nt3v51Ev();
extern void _ZN8S79C7_nt3v52Ev();
extern void _ZN8S79C7_nt3v53Ev();
extern void _ZN8S79C7_nt3v54Ev();
extern void _ZN8S79C7_nt3v55Ev();
extern void _ZN8S79C7_nt3v56Ev();
extern void _ZN8S79C7_nt3v57Ev();
extern void _ZN8S79C7_nt3v58Ev();
extern void _ZN8S79C7_nt3v59Ev();
extern void _ZN8S79C7_nt3v60Ev();
extern void _ZN8S79C7_nt3v61Ev();
extern void _ZN8S79C7_nt3v62Ev();
extern void _ZN8S79C7_nt3v63Ev();
extern void _ZN8S79C7_nt3v64Ev();
extern void _ZN8S79C7_nt3v65Ev();
extern void _ZN8S79C7_nt3v66Ev();
extern void _ZN8S79C7_nt3v67Ev();
extern void _ZN8S79C6_nt3v68Ev();
extern void _ZN8S79C6_nt3v69Ev();
static  VTBL_ENTRY vtc_S79C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S79C6_nt[0]),
  (VTBL_ENTRY)&_ZN8S79C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN8S79C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v4Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v6Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v7Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v9Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v13Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v14Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v16Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v17Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v19Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v20Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v21Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v22Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v23Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v24Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v25Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v26Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v27Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v28Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v29Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v30Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v31Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v32Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v33Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v34Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v35Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v36Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v37Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v38Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v39Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v40Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v41Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v42Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v43Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v44Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v45Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v46Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v47Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v48Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v49Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v50Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v51Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v52Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v53Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v54Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v55Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v56Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v57Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v58Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v59Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v60Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v61Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v62Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v63Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v64Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v65Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v66Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v67Ev,
  (VTBL_ENTRY)&_ZN8S79C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN8S79C6_nt3v69Ev,
};
extern VTBL_ENTRY _ZTI8S79C6_nt[];
VTBL_ENTRY *P__ZTI8S79C6_nt = _ZTI8S79C6_nt; 
extern  VTBL_ENTRY _ZTV8S79C6_nt[];
Class_Descriptor cd_S79C6_nt = {  "S79C6_nt", // class name
  bases_S79C6_nt, 1,
  &(vtc_S79C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI8S79C6_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S79C6_nt),70, //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  S79C9_nt  {
  int s79c9f0[4];
  char s79c9f1[9];
  void  mf79c9(); // _ZN8S79C9_nt6mf79c9Ev
};
//SIG(-1 S79C9_nt) C1{ m Fi[4] Fc[9]}


void  S79C9_nt ::mf79c9(){}

//skip512 S79C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S79C12_nt  {
  void *s79c12f0;
  int s79c12f1[2];
  void  mf79c12(); // _ZN9S79C12_nt7mf79c12Ev
};
//SIG(-1 S79C12_nt) C1{ m Fp Fi[2]}


void  S79C12_nt ::mf79c12(){}

//skip512 S79C12_nt

#else // __cplusplus

Class_Descriptor cd_S79C12_nt = {  "S79C12_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  S79C11_nt  : S79C12_nt {
};
//SIG(-1 S79C11_nt) C1{ BC2{ m Fp Fi[2]}}



//skip512 S79C11_nt

#else // __cplusplus

extern Class_Descriptor cd_S79C12_nt;
static Base_Class bases_S79C11_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S79C12_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_S79C11_nt = {  "S79C11_nt", // class name
  bases_S79C11_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  S79C10_nt  : S79C11_nt {
};
//SIG(-1 S79C10_nt) C1{ BC2{ BC3{ m Fp Fi[2]}}}



//skip512 S79C10_nt

#else // __cplusplus

extern Class_Descriptor cd_S79C12_nt;
extern Class_Descriptor cd_S79C11_nt;
static Base_Class bases_S79C10_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S79C12_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_S79C11_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  S79C16  : S79C12_nt {
};
//SIG(-1 S79C16) C1{ BC2{ m Fp Fi[2]}}



static void Test_S79C16()
{
  extern Class_Descriptor cd_S79C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S79C16, buf);
    S79C16 &lv = *(new (buf) S79C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S79C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S79C16)");
    check_base_class_offset(lv, (S79C12_nt*), 0, "S79C16");
    test_class_info(&lv, &cd_S79C16);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS79C16(Test_S79C16, "S79C16", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S79C12_nt;
static Base_Class bases_S79C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S79C12_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_S79C16 = {  "S79C16", // class name
  bases_S79C16, 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  S79C15  : S79C16 {
};
//SIG(-1 S79C15) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S79C15()
{
  extern Class_Descriptor cd_S79C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S79C15, buf);
    S79C15 &lv = *(new (buf) S79C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S79C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S79C15)");
    check_base_class_offset(lv, (S79C12_nt*)(S79C16*), 0, "S79C15");
    check_base_class_offset(lv, (S79C16*), 0, "S79C15");
    test_class_info(&lv, &cd_S79C15);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS79C15(Test_S79C15, "S79C15", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S79C12_nt;
extern Class_Descriptor cd_S79C16;
static Base_Class bases_S79C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S79C12_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_S79C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S79C15 = {  "S79C15", // class name
  bases_S79C15, 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  S79C20  : S79C12_nt {
};
//SIG(-1 S79C20) C1{ BC2{ m Fp Fi[2]}}



static void Test_S79C20()
{
  extern Class_Descriptor cd_S79C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S79C20, buf);
    S79C20 &lv = *(new (buf) S79C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S79C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S79C20)");
    check_base_class_offset(lv, (S79C12_nt*), 0, "S79C20");
    test_class_info(&lv, &cd_S79C20);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS79C20(Test_S79C20, "S79C20", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S79C12_nt;
static Base_Class bases_S79C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S79C12_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_S79C20 = {  "S79C20", // class name
  bases_S79C20, 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  S79C19  : S79C20 {
};
//SIG(-1 S79C19) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S79C19()
{
  extern Class_Descriptor cd_S79C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S79C19, buf);
    S79C19 &lv = *(new (buf) S79C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S79C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S79C19)");
    check_base_class_offset(lv, (S79C12_nt*)(S79C20*), 0, "S79C19");
    check_base_class_offset(lv, (S79C20*), 0, "S79C19");
    test_class_info(&lv, &cd_S79C19);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS79C19(Test_S79C19, "S79C19", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S79C12_nt;
extern Class_Descriptor cd_S79C20;
static Base_Class bases_S79C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S79C12_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_S79C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S79C19 = {  "S79C19", // class name
  bases_S79C19, 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  S79C21_nt  {
  void *s79c21f0;
  ::S79C8_nt s79c21f1;
  void  mf79c21(); // _ZN9S79C21_nt7mf79c21Ev
};
//SIG(-1 S79C21_nt) C1{ m Fp FC2{ m Fi[2]}}


void  S79C21_nt ::mf79c21(){}

//skip512 S79C21_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S79C5_nt  : S79C6_nt {
  ::S79C9_nt s79c5f0;
  int s79c5f1;
  unsigned int s79c5f2:1;
  unsigned int s79c5f3:1;
  unsigned int s79c5f4:1;
  unsigned int s79c5f5:1;
  ::S79C10_nt s79c5f6;
  ::S79C10_nt s79c5f7;
  void *s79c5f8;
  ::S79C15 s79c5f9;
  ::S79C15 s79c5f10;
  ::S79C15 s79c5f11;
  ::S79C19 s79c5f12;
  char s79c5f13;
  int s79c5f14;
  void *s79c5f15;
  ::S79C8_nt s79c5f16;
  ::S79C8_nt s79c5f17;
  ::S79C8_nt s79c5f18;
  ::S79C8_nt s79c5f19;
  ::S79C8_nt s79c5f20;
  ::S79C8_nt s79c5f21;
  ::S79C21_nt s79c5f22;
  ::S79C21_nt s79c5f23;
  ::S79C21_nt s79c5f24;
  ::S79C21_nt s79c5f25;
  ::S79C21_nt s79c5f26;
  ::S79C21_nt s79c5f27;
  ::S79C21_nt s79c5f28;
  ::S79C21_nt s79c5f29;
  ::S79C21_nt s79c5f30;
  ::S79C21_nt s79c5f31;
  virtual  ~S79C5_nt(); // _ZN8S79C5_ntD1Ev
  virtual void  v70(); // _ZN8S79C5_nt3v70Ev
  virtual void  v71(); // _ZN8S79C5_nt3v71Ev
  virtual void  v72(); // _ZN8S79C5_nt3v72Ev
  virtual void  v73(); // _ZN8S79C5_nt3v73Ev
  virtual void  v74(); // _ZN8S79C5_nt3v74Ev
  virtual void  v75(); // _ZN8S79C5_nt3v75Ev
  virtual void  v76(); // _ZN8S79C5_nt3v76Ev
  virtual void  v77(); // _ZN8S79C5_nt3v77Ev
  virtual void  v78(); // _ZN8S79C5_nt3v78Ev
  virtual void  v79(); // _ZN8S79C5_nt3v79Ev
  virtual void  v80(); // _ZN8S79C5_nt3v80Ev
  virtual void  v81(); // _ZN8S79C5_nt3v81Ev
  virtual void  v82(); // _ZN8S79C5_nt3v82Ev
  virtual void  v83(); // _ZN8S79C5_nt3v83Ev
  virtual void  v84(); // _ZN8S79C5_nt3v84Ev
  virtual void  v85(); // _ZN8S79C5_nt3v85Ev
  virtual void  v86(); // _ZN8S79C5_nt3v86Ev
  virtual void  v87(); // _ZN8S79C5_nt3v87Ev
  virtual void  v88(); // _ZN8S79C5_nt3v88Ev
  virtual void  v89(); // _ZN8S79C5_nt3v89Ev
  virtual void  v90(); // _ZN8S79C5_nt3v90Ev
  virtual void  v91(); // _ZN8S79C5_nt3v91Ev
  virtual void  v92(); // _ZN8S79C5_nt3v92Ev
  virtual void  v93(); // _ZN8S79C5_nt3v93Ev
  virtual void  v94(); // _ZN8S79C5_nt3v94Ev
  virtual void  v95(); // _ZN8S79C5_nt3v95Ev
  virtual void  v96(); // _ZN8S79C5_nt3v96Ev
  virtual void  v97(); // _ZN8S79C5_nt3v97Ev
  virtual void  v98(); // _ZN8S79C5_nt3v98Ev
  virtual void  v99(); // _ZN8S79C5_nt3v99Ev
  virtual void  v100(); // _ZN8S79C5_nt4v100Ev
  virtual void  v101(); // _ZN8S79C5_nt4v101Ev
  virtual void  v102(); // _ZN8S79C5_nt4v102Ev
  virtual void  v103(); // _ZN8S79C5_nt4v103Ev
  virtual void  v104(); // _ZN8S79C5_nt4v104Ev
  virtual void  v105(); // _ZN8S79C5_nt4v105Ev
  virtual void  v106(); // _ZN8S79C5_nt4v106Ev
  virtual void  v107(); // _ZN8S79C5_nt4v107Ev
  virtual void  v108(); // _ZN8S79C5_nt4v108Ev
  virtual void  v109(); // _ZN8S79C5_nt4v109Ev
  virtual void  v110(); // _ZN8S79C5_nt4v110Ev
  virtual void  v111(); // _ZN8S79C5_nt4v111Ev
  virtual void  v112(); // _ZN8S79C5_nt4v112Ev
  virtual void  v113(); // _ZN8S79C5_nt4v113Ev
  virtual void  v114(); // _ZN8S79C5_nt4v114Ev
  virtual void  v115(); // _ZN8S79C5_nt4v115Ev
  virtual void  v116(); // _ZN8S79C5_nt4v116Ev
  virtual void  v117(); // _ZN8S79C5_nt4v117Ev
  virtual void  v118(); // _ZN8S79C5_nt4v118Ev
  virtual void  v119(); // _ZN8S79C5_nt4v119Ev
  virtual void  v120(); // _ZN8S79C5_nt4v120Ev
  virtual void  v121(); // _ZN8S79C5_nt4v121Ev
  virtual void  v122(); // _ZN8S79C5_nt4v122Ev
  virtual void  v123(); // _ZN8S79C5_nt4v123Ev
  virtual void  v124(); // _ZN8S79C5_nt4v124Ev
  virtual void  v125(); // _ZN8S79C5_nt4v125Ev
  virtual void  v126(); // _ZN8S79C5_nt4v126Ev
  virtual void  v127(); // _ZN8S79C5_nt4v127Ev
  virtual void  v128(); // _ZN8S79C5_nt4v128Ev
  virtual void  v129(); // _ZN8S79C5_nt4v129Ev
  virtual void  v130(); // _ZN8S79C5_nt4v130Ev
  virtual void  v131(); // _ZN8S79C5_nt4v131Ev
  virtual void  v132(); // _ZN8S79C5_nt4v132Ev
  virtual void  v133(); // _ZN8S79C5_nt4v133Ev
  virtual void  v134(); // _ZN8S79C5_nt4v134Ev
  virtual void  v135(); // _ZN8S79C5_nt4v135Ev
  virtual void  v136(); // _ZN8S79C5_nt4v136Ev
  virtual void  v137(); // _ZN8S79C5_nt4v137Ev
  virtual void  v138(); // _ZN8S79C5_nt4v138Ev
  virtual void  v139(); // _ZN8S79C5_nt4v139Ev
  virtual void  v140(); // _ZN8S79C5_nt4v140Ev
  virtual void  v141(); // _ZN8S79C5_nt4v141Ev
  virtual void  v142(); // _ZN8S79C5_nt4v142Ev
  virtual void  v143(); // _ZN8S79C5_nt4v143Ev
  virtual void  v144(); // _ZN8S79C5_nt4v144Ev
  virtual void  v145(); // _ZN8S79C5_nt4v145Ev
  S79C5_nt(); // tgen
};
//SIG(-1 S79C5_nt) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v141 v142} 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 FC5{ m Fi[4] Fc[9]} Fi Fi:1 Fi:1 Fi:1 Fi:1 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC6 Fp FC9{ BC10{ BC8}} FC9 FC9 FC11{ BC12{ BC8}} Fc Fi Fp FC4 FC4 FC4 FC4 FC4 FC4 FC13{ m Fp FC4} FC13 FC13 FC13 FC13 FC13 FC13 FC13 FC13 FC13}


 S79C5_nt ::~S79C5_nt(){ note_dtor("S79C5_nt", this);}
void  S79C5_nt ::v70(){vfunc_called(this, "_ZN8S79C5_nt3v70Ev");}
void  S79C5_nt ::v71(){vfunc_called(this, "_ZN8S79C5_nt3v71Ev");}
void  S79C5_nt ::v72(){vfunc_called(this, "_ZN8S79C5_nt3v72Ev");}
void  S79C5_nt ::v73(){vfunc_called(this, "_ZN8S79C5_nt3v73Ev");}
void  S79C5_nt ::v74(){vfunc_called(this, "_ZN8S79C5_nt3v74Ev");}
void  S79C5_nt ::v75(){vfunc_called(this, "_ZN8S79C5_nt3v75Ev");}
void  S79C5_nt ::v76(){vfunc_called(this, "_ZN8S79C5_nt3v76Ev");}
void  S79C5_nt ::v77(){vfunc_called(this, "_ZN8S79C5_nt3v77Ev");}
void  S79C5_nt ::v78(){vfunc_called(this, "_ZN8S79C5_nt3v78Ev");}
void  S79C5_nt ::v79(){vfunc_called(this, "_ZN8S79C5_nt3v79Ev");}
void  S79C5_nt ::v80(){vfunc_called(this, "_ZN8S79C5_nt3v80Ev");}
void  S79C5_nt ::v81(){vfunc_called(this, "_ZN8S79C5_nt3v81Ev");}
void  S79C5_nt ::v82(){vfunc_called(this, "_ZN8S79C5_nt3v82Ev");}
void  S79C5_nt ::v83(){vfunc_called(this, "_ZN8S79C5_nt3v83Ev");}
void  S79C5_nt ::v84(){vfunc_called(this, "_ZN8S79C5_nt3v84Ev");}
void  S79C5_nt ::v85(){vfunc_called(this, "_ZN8S79C5_nt3v85Ev");}
void  S79C5_nt ::v86(){vfunc_called(this, "_ZN8S79C5_nt3v86Ev");}
void  S79C5_nt ::v87(){vfunc_called(this, "_ZN8S79C5_nt3v87Ev");}
void  S79C5_nt ::v88(){vfunc_called(this, "_ZN8S79C5_nt3v88Ev");}
void  S79C5_nt ::v89(){vfunc_called(this, "_ZN8S79C5_nt3v89Ev");}
void  S79C5_nt ::v90(){vfunc_called(this, "_ZN8S79C5_nt3v90Ev");}
void  S79C5_nt ::v91(){vfunc_called(this, "_ZN8S79C5_nt3v91Ev");}
void  S79C5_nt ::v92(){vfunc_called(this, "_ZN8S79C5_nt3v92Ev");}
void  S79C5_nt ::v93(){vfunc_called(this, "_ZN8S79C5_nt3v93Ev");}
void  S79C5_nt ::v94(){vfunc_called(this, "_ZN8S79C5_nt3v94Ev");}
void  S79C5_nt ::v95(){vfunc_called(this, "_ZN8S79C5_nt3v95Ev");}
void  S79C5_nt ::v96(){vfunc_called(this, "_ZN8S79C5_nt3v96Ev");}
void  S79C5_nt ::v97(){vfunc_called(this, "_ZN8S79C5_nt3v97Ev");}
void  S79C5_nt ::v98(){vfunc_called(this, "_ZN8S79C5_nt3v98Ev");}
void  S79C5_nt ::v99(){vfunc_called(this, "_ZN8S79C5_nt3v99Ev");}
void  S79C5_nt ::v100(){vfunc_called(this, "_ZN8S79C5_nt4v100Ev");}
void  S79C5_nt ::v101(){vfunc_called(this, "_ZN8S79C5_nt4v101Ev");}
void  S79C5_nt ::v102(){vfunc_called(this, "_ZN8S79C5_nt4v102Ev");}
void  S79C5_nt ::v103(){vfunc_called(this, "_ZN8S79C5_nt4v103Ev");}
void  S79C5_nt ::v104(){vfunc_called(this, "_ZN8S79C5_nt4v104Ev");}
void  S79C5_nt ::v105(){vfunc_called(this, "_ZN8S79C5_nt4v105Ev");}
void  S79C5_nt ::v106(){vfunc_called(this, "_ZN8S79C5_nt4v106Ev");}
void  S79C5_nt ::v107(){vfunc_called(this, "_ZN8S79C5_nt4v107Ev");}
void  S79C5_nt ::v108(){vfunc_called(this, "_ZN8S79C5_nt4v108Ev");}
void  S79C5_nt ::v109(){vfunc_called(this, "_ZN8S79C5_nt4v109Ev");}
void  S79C5_nt ::v110(){vfunc_called(this, "_ZN8S79C5_nt4v110Ev");}
void  S79C5_nt ::v111(){vfunc_called(this, "_ZN8S79C5_nt4v111Ev");}
void  S79C5_nt ::v112(){vfunc_called(this, "_ZN8S79C5_nt4v112Ev");}
void  S79C5_nt ::v113(){vfunc_called(this, "_ZN8S79C5_nt4v113Ev");}
void  S79C5_nt ::v114(){vfunc_called(this, "_ZN8S79C5_nt4v114Ev");}
void  S79C5_nt ::v115(){vfunc_called(this, "_ZN8S79C5_nt4v115Ev");}
void  S79C5_nt ::v116(){vfunc_called(this, "_ZN8S79C5_nt4v116Ev");}
void  S79C5_nt ::v117(){vfunc_called(this, "_ZN8S79C5_nt4v117Ev");}
void  S79C5_nt ::v118(){vfunc_called(this, "_ZN8S79C5_nt4v118Ev");}
void  S79C5_nt ::v119(){vfunc_called(this, "_ZN8S79C5_nt4v119Ev");}
void  S79C5_nt ::v120(){vfunc_called(this, "_ZN8S79C5_nt4v120Ev");}
void  S79C5_nt ::v121(){vfunc_called(this, "_ZN8S79C5_nt4v121Ev");}
void  S79C5_nt ::v122(){vfunc_called(this, "_ZN8S79C5_nt4v122Ev");}
void  S79C5_nt ::v123(){vfunc_called(this, "_ZN8S79C5_nt4v123Ev");}
void  S79C5_nt ::v124(){vfunc_called(this, "_ZN8S79C5_nt4v124Ev");}
void  S79C5_nt ::v125(){vfunc_called(this, "_ZN8S79C5_nt4v125Ev");}
void  S79C5_nt ::v126(){vfunc_called(this, "_ZN8S79C5_nt4v126Ev");}
void  S79C5_nt ::v127(){vfunc_called(this, "_ZN8S79C5_nt4v127Ev");}
void  S79C5_nt ::v128(){vfunc_called(this, "_ZN8S79C5_nt4v128Ev");}
void  S79C5_nt ::v129(){vfunc_called(this, "_ZN8S79C5_nt4v129Ev");}
void  S79C5_nt ::v130(){vfunc_called(this, "_ZN8S79C5_nt4v130Ev");}
void  S79C5_nt ::v131(){vfunc_called(this, "_ZN8S79C5_nt4v131Ev");}
void  S79C5_nt ::v132(){vfunc_called(this, "_ZN8S79C5_nt4v132Ev");}
void  S79C5_nt ::v133(){vfunc_called(this, "_ZN8S79C5_nt4v133Ev");}
void  S79C5_nt ::v134(){vfunc_called(this, "_ZN8S79C5_nt4v134Ev");}
void  S79C5_nt ::v135(){vfunc_called(this, "_ZN8S79C5_nt4v135Ev");}
void  S79C5_nt ::v136(){vfunc_called(this, "_ZN8S79C5_nt4v136Ev");}
void  S79C5_nt ::v137(){vfunc_called(this, "_ZN8S79C5_nt4v137Ev");}
void  S79C5_nt ::v138(){vfunc_called(this, "_ZN8S79C5_nt4v138Ev");}
void  S79C5_nt ::v139(){vfunc_called(this, "_ZN8S79C5_nt4v139Ev");}
void  S79C5_nt ::v140(){vfunc_called(this, "_ZN8S79C5_nt4v140Ev");}
void  S79C5_nt ::v141(){vfunc_called(this, "_ZN8S79C5_nt4v141Ev");}
void  S79C5_nt ::v142(){vfunc_called(this, "_ZN8S79C5_nt4v142Ev");}
void  S79C5_nt ::v143(){vfunc_called(this, "_ZN8S79C5_nt4v143Ev");}
void  S79C5_nt ::v144(){vfunc_called(this, "_ZN8S79C5_nt4v144Ev");}
void  S79C5_nt ::v145(){vfunc_called(this, "_ZN8S79C5_nt4v145Ev");}
S79C5_nt ::S79C5_nt(){ note_ctor("S79C5_nt", this);} // tgen

//skip512 S79C5_nt

#else // __cplusplus

extern void _ZN8S79C5_ntC1Ev();
extern void _ZN8S79C5_ntD1Ev();
Name_Map name_map_S79C5_nt[] = {
  NSPAIR(_ZN8S79C5_ntC1Ev),
  NSPAIR(_ZN8S79C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S79C7_nt;
extern VTBL_ENTRY _ZTI8S79C7_nt[];
extern  VTBL_ENTRY _ZTV8S79C7_nt[];
extern Class_Descriptor cd_S79C6_nt;
extern VTBL_ENTRY _ZTI8S79C6_nt[];
extern  VTBL_ENTRY _ZTV8S79C6_nt[];
static Base_Class bases_S79C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S79C7_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_S79C6_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 _ZTI8S79C5_nt[];
extern void _ZN8S79C5_ntD1Ev();
extern void _ZN8S79C5_ntD0Ev();
extern void _ZN8S79C7_nt2v4Ev();
extern void _ZN8S79C7_nt2v5Ev();
extern void _ZN8S79C7_nt2v6Ev();
extern void _ZN8S79C7_nt2v7Ev();
extern void _ZN8S79C7_nt2v8Ev();
extern void _ZN8S79C7_nt2v9Ev();
extern void _ZN8S79C7_nt3v10Ev();
extern void _ZN8S79C7_nt3v11Ev();
extern void _ZN8S79C7_nt3v12Ev();
extern void _ZN8S79C7_nt3v13Ev();
extern void _ZN8S79C7_nt3v14Ev();
extern void _ZN8S79C7_nt3v15Ev();
extern void _ZN8S79C7_nt3v16Ev();
extern void _ZN8S79C7_nt3v17Ev();
extern void _ZN8S79C7_nt3v18Ev();
extern void _ZN8S79C7_nt3v19Ev();
extern void _ZN8S79C7_nt3v20Ev();
extern void _ZN8S79C7_nt3v21Ev();
extern void _ZN8S79C7_nt3v22Ev();
extern void _ZN8S79C7_nt3v23Ev();
extern void _ZN8S79C7_nt3v24Ev();
extern void _ZN8S79C7_nt3v25Ev();
extern void _ZN8S79C7_nt3v26Ev();
extern void _ZN8S79C7_nt3v27Ev();
extern void _ZN8S79C7_nt3v28Ev();
extern void _ZN8S79C7_nt3v29Ev();
extern void _ZN8S79C7_nt3v30Ev();
extern void _ZN8S79C7_nt3v31Ev();
extern void _ZN8S79C7_nt3v32Ev();
extern void _ZN8S79C7_nt3v33Ev();
extern void _ZN8S79C7_nt3v34Ev();
extern void _ZN8S79C7_nt3v35Ev();
extern void _ZN8S79C7_nt3v36Ev();
extern void _ZN8S79C7_nt3v37Ev();
extern void _ZN8S79C7_nt3v38Ev();
extern void _ZN8S79C7_nt3v39Ev();
extern void _ZN8S79C7_nt3v40Ev();
extern void _ZN8S79C7_nt3v41Ev();
extern void _ZN8S79C7_nt3v42Ev();
extern void _ZN8S79C7_nt3v43Ev();
extern void _ZN8S79C7_nt3v44Ev();
extern void _ZN8S79C7_nt3v45Ev();
extern void _ZN8S79C7_nt3v46Ev();
extern void _ZN8S79C7_nt3v47Ev();
extern void _ZN8S79C7_nt3v48Ev();
extern void _ZN8S79C7_nt3v49Ev();
extern void _ZN8S79C7_nt3v50Ev();
extern void _ZN8S79C7_nt3v51Ev();
extern void _ZN8S79C7_nt3v52Ev();
extern void _ZN8S79C7_nt3v53Ev();
extern void _ZN8S79C7_nt3v54Ev();
extern void _ZN8S79C7_nt3v55Ev();
extern void _ZN8S79C7_nt3v56Ev();
extern void _ZN8S79C7_nt3v57Ev();
extern void _ZN8S79C7_nt3v58Ev();
extern void _ZN8S79C7_nt3v59Ev();
extern void _ZN8S79C7_nt3v60Ev();
extern void _ZN8S79C7_nt3v61Ev();
extern void _ZN8S79C7_nt3v62Ev();
extern void _ZN8S79C7_nt3v63Ev();
extern void _ZN8S79C7_nt3v64Ev();
extern void _ZN8S79C7_nt3v65Ev();
extern void _ZN8S79C7_nt3v66Ev();
extern void _ZN8S79C7_nt3v67Ev();
extern void _ZN8S79C6_nt3v68Ev();
extern void _ZN8S79C6_nt3v69Ev();
extern void _ZN8S79C5_nt3v70Ev();
extern void _ZN8S79C5_nt3v71Ev();
extern void _ZN8S79C5_nt3v72Ev();
extern void _ZN8S79C5_nt3v73Ev();
extern void _ZN8S79C5_nt3v74Ev();
extern void _ZN8S79C5_nt3v75Ev();
extern void _ZN8S79C5_nt3v76Ev();
extern void _ZN8S79C5_nt3v77Ev();
extern void _ZN8S79C5_nt3v78Ev();
extern void _ZN8S79C5_nt3v79Ev();
extern void _ZN8S79C5_nt3v80Ev();
extern void _ZN8S79C5_nt3v81Ev();
extern void _ZN8S79C5_nt3v82Ev();
extern void _ZN8S79C5_nt3v83Ev();
extern void _ZN8S79C5_nt3v84Ev();
extern void _ZN8S79C5_nt3v85Ev();
extern void _ZN8S79C5_nt3v86Ev();
extern void _ZN8S79C5_nt3v87Ev();
extern void _ZN8S79C5_nt3v88Ev();
extern void _ZN8S79C5_nt3v89Ev();
extern void _ZN8S79C5_nt3v90Ev();
extern void _ZN8S79C5_nt3v91Ev();
extern void _ZN8S79C5_nt3v92Ev();
extern void _ZN8S79C5_nt3v93Ev();
extern void _ZN8S79C5_nt3v94Ev();
extern void _ZN8S79C5_nt3v95Ev();
extern void _ZN8S79C5_nt3v96Ev();
extern void _ZN8S79C5_nt3v97Ev();
extern void _ZN8S79C5_nt3v98Ev();
extern void _ZN8S79C5_nt3v99Ev();
extern void _ZN8S79C5_nt4v100Ev();
extern void _ZN8S79C5_nt4v101Ev();
extern void _ZN8S79C5_nt4v102Ev();
extern void _ZN8S79C5_nt4v103Ev();
extern void _ZN8S79C5_nt4v104Ev();
extern void _ZN8S79C5_nt4v105Ev();
extern void _ZN8S79C5_nt4v106Ev();
extern void _ZN8S79C5_nt4v107Ev();
extern void _ZN8S79C5_nt4v108Ev();
extern void _ZN8S79C5_nt4v109Ev();
extern void _ZN8S79C5_nt4v110Ev();
extern void _ZN8S79C5_nt4v111Ev();
extern void _ZN8S79C5_nt4v112Ev();
extern void _ZN8S79C5_nt4v113Ev();
extern void _ZN8S79C5_nt4v114Ev();
extern void _ZN8S79C5_nt4v115Ev();
extern void _ZN8S79C5_nt4v116Ev();
extern void _ZN8S79C5_nt4v117Ev();
extern void _ZN8S79C5_nt4v118Ev();
extern void _ZN8S79C5_nt4v119Ev();
extern void _ZN8S79C5_nt4v120Ev();
extern void _ZN8S79C5_nt4v121Ev();
extern void _ZN8S79C5_nt4v122Ev();
extern void _ZN8S79C5_nt4v123Ev();
extern void _ZN8S79C5_nt4v124Ev();
extern void _ZN8S79C5_nt4v125Ev();
extern void _ZN8S79C5_nt4v126Ev();
extern void _ZN8S79C5_nt4v127Ev();
extern void _ZN8S79C5_nt4v128Ev();
extern void _ZN8S79C5_nt4v129Ev();
extern void _ZN8S79C5_nt4v130Ev();
extern void _ZN8S79C5_nt4v131Ev();
extern void _ZN8S79C5_nt4v132Ev();
extern void _ZN8S79C5_nt4v133Ev();
extern void _ZN8S79C5_nt4v134Ev();
extern void _ZN8S79C5_nt4v135Ev();
extern void _ZN8S79C5_nt4v136Ev();
extern void _ZN8S79C5_nt4v137Ev();
extern void _ZN8S79C5_nt4v138Ev();
extern void _ZN8S79C5_nt4v139Ev();
extern void _ZN8S79C5_nt4v140Ev();
extern void _ZN8S79C5_nt4v141Ev();
extern void _ZN8S79C5_nt4v142Ev();
extern void _ZN8S79C5_nt4v143Ev();
extern void _ZN8S79C5_nt4v144Ev();
extern void _ZN8S79C5_nt4v145Ev();
static  VTBL_ENTRY vtc_S79C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S79C5_nt[0]),
  (VTBL_ENTRY)&_ZN8S79C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN8S79C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v4Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v6Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v7Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v9Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v13Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v14Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v16Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v17Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v19Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v20Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v21Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v22Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v23Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v24Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v25Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v26Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v27Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v28Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v29Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v30Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v31Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v32Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v33Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v34Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v35Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v36Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v37Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v38Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v39Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v40Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v41Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v42Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v43Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v44Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v45Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v46Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v47Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v48Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v49Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v50Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v51Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v52Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v53Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v54Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v55Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v56Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v57Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v58Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v59Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v60Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v61Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v62Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v63Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v64Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v65Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v66Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v67Ev,
  (VTBL_ENTRY)&_ZN8S79C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN8S79C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v91Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v92Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v93Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v94Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v95Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v96Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v97Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v98Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v99Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v100Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v101Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v102Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v103Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v104Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v105Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v106Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v107Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v108Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v109Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v110Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v111Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v112Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v113Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v114Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v115Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v116Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v117Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v118Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v119Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v120Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v121Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v122Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v123Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v124Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v125Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v126Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v127Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v128Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v129Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v130Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v131Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v132Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v133Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v134Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v135Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v136Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v137Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v138Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v139Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v140Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v141Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v142Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v143Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v144Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v145Ev,
};
extern VTBL_ENTRY _ZTI8S79C5_nt[];
VTBL_ENTRY *P__ZTI8S79C5_nt = _ZTI8S79C5_nt; 
extern  VTBL_ENTRY _ZTV8S79C5_nt[];
Class_Descriptor cd_S79C5_nt = {  "S79C5_nt", // class name
  bases_S79C5_nt, 2,
  &(vtc_S79C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(464,352), // object size
  NSPAIRA(_ZTI8S79C5_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S79C5_nt),146, //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  S79C23_nt  {
  int s79c23f0[4];
  void  mf79c23(); // _ZN9S79C23_nt7mf79c23Ev
};
//SIG(-1 S79C23_nt) C1{ m Fi[4]}


void  S79C23_nt ::mf79c23(){}

//skip512 S79C23_nt

#else // __cplusplus

Class_Descriptor cd_S79C23_nt = {  "S79C23_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  S79C22_nt  : S79C23_nt {
};
//SIG(-1 S79C22_nt) C1{ BC2{ m Fi[4]}}



//skip512 S79C22_nt

#else // __cplusplus

extern Class_Descriptor cd_S79C23_nt;
static Base_Class bases_S79C22_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S79C23_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  S79C24_nt  {
  ::S79C8_nt s79c24f0;
  void *s79c24f1;
  ::S79C22_nt s79c24f2;
  void *s79c24f3;
  void  mf79c24(); // _ZN9S79C24_nt7mf79c24Ev
};
//SIG(-1 S79C24_nt) C1{ m FC2{ m Fi[2]} Fp FC3{ BC4{ m Fi[4]}} Fp}


void  S79C24_nt ::mf79c24(){}

//skip512 S79C24_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S79C26_nt  {
  void *s79c26f0[8];
  char s79c26f1[4];
  void  mf79c26(); // _ZN9S79C26_nt7mf79c26Ev
};
//SIG(-1 S79C26_nt) C1{ m Fp[8] Fc[4]}


void  S79C26_nt ::mf79c26(){}

//skip512 S79C26_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S79C28_nt  {
  int s79c28f0[4];
  char s79c28f1[4];
  void  mf79c28(); // _ZN9S79C28_nt7mf79c28Ev
};
//SIG(-1 S79C28_nt) C1{ m Fi[4] Fc[4]}


void  S79C28_nt ::mf79c28(){}

//skip512 S79C28_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S79C27_nt  {
  void *s79c27f0[5];
  ::S79C28_nt s79c27f1;
  unsigned int s79c27f2:1;
  unsigned int s79c27f3:1;
  int s79c27f4;
  char s79c27f5[8];
  void  mf79c27(); // _ZN9S79C27_nt7mf79c27Ev
};
//SIG(-1 S79C27_nt) C1{ m Fp[5] FC2{ m Fi[4] Fc[4]} Fi:1 Fi:1 Fi Fc[8]}


void  S79C27_nt ::mf79c27(){}

//skip512 S79C27_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S79C31_nt  {
  int s79c31f0[3];
  void  mf79c31(); // _ZN9S79C31_nt7mf79c31Ev
};
//SIG(-1 S79C31_nt) C1{ m Fi[3]}


void  S79C31_nt ::mf79c31(){}

//skip512 S79C31_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S79C32_nt  {
  void  mf79c32(); // _ZN9S79C32_nt7mf79c32Ev
};
//SIG(-1 S79C32_nt) C1{ m}


void  S79C32_nt ::mf79c32(){}

//skip512 S79C32_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S79C34_nt  {
  int s79c34f0[2];
  char s79c34f1[2];
  void  mf79c34(); // _ZN9S79C34_nt7mf79c34Ev
};
//SIG(-1 S79C34_nt) C1{ m Fi[2] Fc[2]}


void  S79C34_nt ::mf79c34(){}

//skip512 S79C34_nt

#else // __cplusplus

Class_Descriptor cd_S79C34_nt = {  "S79C34_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  S79C33_nt  : S79C34_nt {
  int s79c33f0;
};
//SIG(-1 S79C33_nt) C1{ BC2{ m Fi[2] Fc[2]} Fi}



//skip512 S79C33_nt

#else // __cplusplus

extern Class_Descriptor cd_S79C34_nt;
static Base_Class bases_S79C33_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S79C34_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  S79C30_nt  {
  ::S79C31_nt s79c30f0;
  ::S79C32_nt s79c30f1;
  ::S79C33_nt s79c30f2;
  char s79c30f3;
  void  mf79c30(); // _ZN9S79C30_nt7mf79c30Ev
};
//SIG(-1 S79C30_nt) C1{ m FC2{ m Fi[3]} FC3{ m} FC4{ BC5{ m Fi[2] Fc[2]} Fi} Fc}


void  S79C30_nt ::mf79c30(){}

//skip512 S79C30_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S79C38_nt  {
  void *s79c38f0[2];
  void  mf79c38(); // _ZN9S79C38_nt7mf79c38Ev
};
//SIG(-1 S79C38_nt) C1{ m Fp[2]}


void  S79C38_nt ::mf79c38(){}

//skip512 S79C38_nt

#else // __cplusplus

Class_Descriptor cd_S79C38_nt = {  "S79C38_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  S79C37_nt  : S79C38_nt {
};
//SIG(-1 S79C37_nt) C1{ BC2{ m Fp[2]}}



//skip512 S79C37_nt

#else // __cplusplus

extern Class_Descriptor cd_S79C38_nt;
static Base_Class bases_S79C37_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S79C38_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  S79C41  : S79C12_nt {
};
//SIG(-1 S79C41) C1{ BC2{ m Fp Fi[2]}}



static void Test_S79C41()
{
  extern Class_Descriptor cd_S79C41;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S79C41, buf);
    S79C41 &lv = *(new (buf) S79C41());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S79C41)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S79C41)");
    check_base_class_offset(lv, (S79C12_nt*), 0, "S79C41");
    test_class_info(&lv, &cd_S79C41);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS79C41(Test_S79C41, "S79C41", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S79C12_nt;
static Base_Class bases_S79C41[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S79C12_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_S79C41 = {  "S79C41", // class name
  bases_S79C41, 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  S79C40  : S79C41 {
};
//SIG(-1 S79C40) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S79C40()
{
  extern Class_Descriptor cd_S79C40;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S79C40, buf);
    S79C40 &lv = *(new (buf) S79C40());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S79C40)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S79C40)");
    check_base_class_offset(lv, (S79C12_nt*)(S79C41*), 0, "S79C40");
    check_base_class_offset(lv, (S79C41*), 0, "S79C40");
    test_class_info(&lv, &cd_S79C40);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS79C40(Test_S79C40, "S79C40", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S79C12_nt;
extern Class_Descriptor cd_S79C41;
static Base_Class bases_S79C40[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S79C12_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_S79C41,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S79C40 = {  "S79C40", // class name
  bases_S79C40, 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  S79C39_nt  : S79C40 {
};
//SIG(-1 S79C39_nt) C1{ BC2{ BC3{ BC4{ m Fp Fi[2]}}}}



//skip512 S79C39_nt

#else // __cplusplus

extern Class_Descriptor cd_S79C12_nt;
extern Class_Descriptor cd_S79C41;
extern Class_Descriptor cd_S79C40;
static Base_Class bases_S79C39_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S79C12_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_S79C41,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S79C40,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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  S79C36_nt  {
  ::S79C37_nt s79c36f0;
  char s79c36f1;
  ::S79C39_nt s79c36f2;
  int s79c36f3;
  ::S79C8_nt s79c36f4;
  ::S79C8_nt s79c36f5;
  void *s79c36f6;
  void  mf79c36(); // _ZN9S79C36_nt7mf79c36Ev
};
//SIG(-1 S79C36_nt) C1{ m FC2{ BC3{ m Fp[2]}} Fc FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} Fi FC8{ m Fi[2]} FC8 Fp}


void  S79C36_nt ::mf79c36(){}

//skip512 S79C36_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S79C45  : S79C12_nt {
};
//SIG(-1 S79C45) C1{ BC2{ m Fp Fi[2]}}



static void Test_S79C45()
{
  extern Class_Descriptor cd_S79C45;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S79C45, buf);
    S79C45 &lv = *(new (buf) S79C45());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S79C45)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S79C45)");
    check_base_class_offset(lv, (S79C12_nt*), 0, "S79C45");
    test_class_info(&lv, &cd_S79C45);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS79C45(Test_S79C45, "S79C45", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S79C12_nt;
static Base_Class bases_S79C45[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S79C12_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_S79C45 = {  "S79C45", // class name
  bases_S79C45, 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  S79C44  : S79C45 {
};
//SIG(-1 S79C44) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S79C44()
{
  extern Class_Descriptor cd_S79C44;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S79C44, buf);
    S79C44 &lv = *(new (buf) S79C44());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S79C44)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S79C44)");
    check_base_class_offset(lv, (S79C12_nt*)(S79C45*), 0, "S79C44");
    check_base_class_offset(lv, (S79C45*), 0, "S79C44");
    test_class_info(&lv, &cd_S79C44);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS79C44(Test_S79C44, "S79C44", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S79C12_nt;
extern Class_Descriptor cd_S79C45;
static Base_Class bases_S79C44[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S79C12_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_S79C45,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S79C44 = {  "S79C44", // class name
  bases_S79C44, 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  S79C4_nt  : S79C5_nt {
  ::S79C22_nt s79c4f0;
  ::S79C8_nt s79c4f1;
  void *s79c4f2[2];
  ::S79C24_nt s79c4f3;
  ::S79C26_nt s79c4f4;
  int s79c4f5;
  ::S79C27_nt s79c4f6;
  int s79c4f7[4];
  ::S79C8_nt s79c4f8[4];
  ::S79C30_nt s79c4f9;
  ::S79C31_nt s79c4f10;
  int s79c4f11;
  ::S79C36_nt s79c4f12;
  ::S79C36_nt s79c4f13;
  void *s79c4f14;
  ::S79C31_nt s79c4f15;
  ::S79C19 s79c4f16;
  ::S79C44 s79c4f17;
  unsigned int s79c4f18:1;
  unsigned int s79c4f19:1;
  unsigned int s79c4f20:1;
  ::S79C32_nt s79c4f21;
  ::S79C21_nt s79c4f22;
  ::S79C21_nt s79c4f23;
  ::S79C21_nt s79c4f24;
  ::S79C21_nt s79c4f25;
  ::S79C21_nt s79c4f26;
  ::S79C21_nt s79c4f27;
  ::S79C21_nt s79c4f28;
  ::S79C21_nt s79c4f29;
  ::S79C21_nt s79c4f30;
  ::S79C21_nt s79c4f31;
  ::S79C21_nt s79c4f32;
  ::S79C21_nt s79c4f33;
  ::S79C21_nt s79c4f34;
  virtual  ~S79C4_nt(); // _ZN8S79C4_ntD1Ev
  virtual void  v146(); // _ZN8S79C4_nt4v146Ev
  virtual void  v147(); // _ZN8S79C4_nt4v147Ev
  virtual void  v148(); // _ZN8S79C4_nt4v148Ev
  virtual void  v149(); // _ZN8S79C4_nt4v149Ev
  virtual void  v150(); // _ZN8S79C4_nt4v150Ev
  virtual void  v151(); // _ZN8S79C4_nt4v151Ev
  virtual void  v152(); // _ZN8S79C4_nt4v152Ev
  virtual void  v153(); // _ZN8S79C4_nt4v153Ev
  virtual void  v154(); // _ZN8S79C4_nt4v154Ev
  virtual void  v155(); // _ZN8S79C4_nt4v155Ev
  virtual void  v156(); // _ZN8S79C4_nt4v156Ev
  virtual void  v157(); // _ZN8S79C4_nt4v157Ev
  virtual void  v158(); // _ZN8S79C4_nt4v158Ev
  virtual void  v159(); // _ZN8S79C4_nt4v159Ev
  virtual void  v160(); // _ZN8S79C4_nt4v160Ev
  virtual void  v161(); // _ZN8S79C4_nt4v161Ev
  virtual void  v162(); // _ZN8S79C4_nt4v162Ev
  virtual void  v163(); // _ZN8S79C4_nt4v163Ev
  virtual void  v164(); // _ZN8S79C4_nt4v164Ev
  virtual void  v165(); // _ZN8S79C4_nt4v165Ev
  virtual void  v166(); // _ZN8S79C4_nt4v166Ev
  virtual void  v167(); // _ZN8S79C4_nt4v167Ev
  virtual void  v168(); // _ZN8S79C4_nt4v168Ev
  virtual void  v169(); // _ZN8S79C4_nt4v169Ev
  virtual void  v170(); // _ZN8S79C4_nt4v170Ev
  virtual void  v171(); // _ZN8S79C4_nt4v171Ev
  virtual void  v172(); // _ZN8S79C4_nt4v172Ev
  virtual void  v173(); // _ZN8S79C4_nt4v173Ev
  virtual void  v174(); // _ZN8S79C4_nt4v174Ev
  virtual void  v175(); // _ZN8S79C4_nt4v175Ev
  virtual void  v176(); // _ZN8S79C4_nt4v176Ev
  virtual void  v177(); // _ZN8S79C4_nt4v177Ev
  virtual void  v178(); // _ZN8S79C4_nt4v178Ev
  virtual void  v179(); // _ZN8S79C4_nt4v179Ev
  virtual void  v180(); // _ZN8S79C4_nt4v180Ev
  virtual void  v181(); // _ZN8S79C4_nt4v181Ev
  virtual void  v182(); // _ZN8S79C4_nt4v182Ev
  virtual void  v183(); // _ZN8S79C4_nt4v183Ev
  virtual void  v184(); // _ZN8S79C4_nt4v184Ev
  virtual void  v185(); // _ZN8S79C4_nt4v185Ev
  virtual void  v186(); // _ZN8S79C4_nt4v186Ev
  virtual void  v187(); // _ZN8S79C4_nt4v187Ev
  virtual void  v188(); // _ZN8S79C4_nt4v188Ev
  virtual void  v189(); // _ZN8S79C4_nt4v189Ev
  virtual void  v190(); // _ZN8S79C4_nt4v190Ev
  virtual void  v191(); // _ZN8S79C4_nt4v191Ev
  virtual void  v192(); // _ZN8S79C4_nt4v192Ev
  virtual void  v193(); // _ZN8S79C4_nt4v193Ev
  virtual void  v194(); // _ZN8S79C4_nt4v194Ev
  virtual void  v195(); // _ZN8S79C4_nt4v195Ev
  virtual void  v196(); // _ZN8S79C4_nt4v196Ev
  virtual void  v197(); // _ZN8S79C4_nt4v197Ev
  virtual void  v198(); // _ZN8S79C4_nt4v198Ev
  virtual void  v199(); // _ZN8S79C4_nt4v199Ev
  virtual void  v200(); // _ZN8S79C4_nt4v200Ev
  virtual void  v201(); // _ZN8S79C4_nt4v201Ev
  virtual void  v202(); // _ZN8S79C4_nt4v202Ev
  virtual void  v203(); // _ZN8S79C4_nt4v203Ev
  virtual void  v204(); // _ZN8S79C4_nt4v204Ev
  virtual void  v205(); // _ZN8S79C4_nt4v205Ev
  virtual void  v206(); // _ZN8S79C4_nt4v206Ev
  virtual void  v207(); // _ZN8S79C4_nt4v207Ev
  virtual void  v208(); // _ZN8S79C4_nt4v208Ev
  virtual void  v209(); // _ZN8S79C4_nt4v209Ev
  virtual void  v210(); // _ZN8S79C4_nt4v210Ev
  virtual void  v211(); // _ZN8S79C4_nt4v211Ev
  virtual void  v212(); // _ZN8S79C4_nt4v212Ev
  virtual void  v213(); // _ZN8S79C4_nt4v213Ev
  virtual void  v214(); // _ZN8S79C4_nt4v214Ev
  S79C4_nt(); // tgen
};
//SIG(-1 S79C4_nt) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v134 v135} vd v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 v176 v177 v178 v179 v180 v181 v182 v183 v184 v185 v186 v187 v188 v189 v190 v191 v192 v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 v208 v209 v210 v211 FC6{ m Fi[4] Fc[9]} Fi Fi:1 Fi:1 Fi:1 Fi:1 FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC7 Fp FC10{ BC11{ BC9}} FC10 FC10 FC12{ BC13{ BC9}} Fc Fi Fp FC5 FC5 FC5 FC5 FC5 FC5 FC14{ m Fp FC5} FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14} 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 FC15{ BC16{ m Fi[4]}} FC5 Fp[2] FC17{ m FC5 Fp FC15 Fp} FC18{ m Fp[8] Fc[4]} Fi FC19{ m Fp[5] FC20{ m Fi[4] Fc[4]} Fi:1 Fi:1 Fi Fc[8]} Fi[4] FC5[4] FC21{ m FC22{ m Fi[3]} FC23{ m} FC24{ BC25{ m Fi[2] Fc[2]} Fi} Fc} FC22 Fi FC26{ m FC27{ BC28{ m Fp[2]}} Fc FC29{ BC30{ BC31{ BC9}}} Fi FC5 FC5 Fp} FC26 Fp FC22 FC12 FC32{ BC33{ BC9}} Fi:1 Fi:1 Fi:1 FC23 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14}


 S79C4_nt ::~S79C4_nt(){ note_dtor("S79C4_nt", this);}
void  S79C4_nt ::v146(){vfunc_called(this, "_ZN8S79C4_nt4v146Ev");}
void  S79C4_nt ::v147(){vfunc_called(this, "_ZN8S79C4_nt4v147Ev");}
void  S79C4_nt ::v148(){vfunc_called(this, "_ZN8S79C4_nt4v148Ev");}
void  S79C4_nt ::v149(){vfunc_called(this, "_ZN8S79C4_nt4v149Ev");}
void  S79C4_nt ::v150(){vfunc_called(this, "_ZN8S79C4_nt4v150Ev");}
void  S79C4_nt ::v151(){vfunc_called(this, "_ZN8S79C4_nt4v151Ev");}
void  S79C4_nt ::v152(){vfunc_called(this, "_ZN8S79C4_nt4v152Ev");}
void  S79C4_nt ::v153(){vfunc_called(this, "_ZN8S79C4_nt4v153Ev");}
void  S79C4_nt ::v154(){vfunc_called(this, "_ZN8S79C4_nt4v154Ev");}
void  S79C4_nt ::v155(){vfunc_called(this, "_ZN8S79C4_nt4v155Ev");}
void  S79C4_nt ::v156(){vfunc_called(this, "_ZN8S79C4_nt4v156Ev");}
void  S79C4_nt ::v157(){vfunc_called(this, "_ZN8S79C4_nt4v157Ev");}
void  S79C4_nt ::v158(){vfunc_called(this, "_ZN8S79C4_nt4v158Ev");}
void  S79C4_nt ::v159(){vfunc_called(this, "_ZN8S79C4_nt4v159Ev");}
void  S79C4_nt ::v160(){vfunc_called(this, "_ZN8S79C4_nt4v160Ev");}
void  S79C4_nt ::v161(){vfunc_called(this, "_ZN8S79C4_nt4v161Ev");}
void  S79C4_nt ::v162(){vfunc_called(this, "_ZN8S79C4_nt4v162Ev");}
void  S79C4_nt ::v163(){vfunc_called(this, "_ZN8S79C4_nt4v163Ev");}
void  S79C4_nt ::v164(){vfunc_called(this, "_ZN8S79C4_nt4v164Ev");}
void  S79C4_nt ::v165(){vfunc_called(this, "_ZN8S79C4_nt4v165Ev");}
void  S79C4_nt ::v166(){vfunc_called(this, "_ZN8S79C4_nt4v166Ev");}
void  S79C4_nt ::v167(){vfunc_called(this, "_ZN8S79C4_nt4v167Ev");}
void  S79C4_nt ::v168(){vfunc_called(this, "_ZN8S79C4_nt4v168Ev");}
void  S79C4_nt ::v169(){vfunc_called(this, "_ZN8S79C4_nt4v169Ev");}
void  S79C4_nt ::v170(){vfunc_called(this, "_ZN8S79C4_nt4v170Ev");}
void  S79C4_nt ::v171(){vfunc_called(this, "_ZN8S79C4_nt4v171Ev");}
void  S79C4_nt ::v172(){vfunc_called(this, "_ZN8S79C4_nt4v172Ev");}
void  S79C4_nt ::v173(){vfunc_called(this, "_ZN8S79C4_nt4v173Ev");}
void  S79C4_nt ::v174(){vfunc_called(this, "_ZN8S79C4_nt4v174Ev");}
void  S79C4_nt ::v175(){vfunc_called(this, "_ZN8S79C4_nt4v175Ev");}
void  S79C4_nt ::v176(){vfunc_called(this, "_ZN8S79C4_nt4v176Ev");}
void  S79C4_nt ::v177(){vfunc_called(this, "_ZN8S79C4_nt4v177Ev");}
void  S79C4_nt ::v178(){vfunc_called(this, "_ZN8S79C4_nt4v178Ev");}
void  S79C4_nt ::v179(){vfunc_called(this, "_ZN8S79C4_nt4v179Ev");}
void  S79C4_nt ::v180(){vfunc_called(this, "_ZN8S79C4_nt4v180Ev");}
void  S79C4_nt ::v181(){vfunc_called(this, "_ZN8S79C4_nt4v181Ev");}
void  S79C4_nt ::v182(){vfunc_called(this, "_ZN8S79C4_nt4v182Ev");}
void  S79C4_nt ::v183(){vfunc_called(this, "_ZN8S79C4_nt4v183Ev");}
void  S79C4_nt ::v184(){vfunc_called(this, "_ZN8S79C4_nt4v184Ev");}
void  S79C4_nt ::v185(){vfunc_called(this, "_ZN8S79C4_nt4v185Ev");}
void  S79C4_nt ::v186(){vfunc_called(this, "_ZN8S79C4_nt4v186Ev");}
void  S79C4_nt ::v187(){vfunc_called(this, "_ZN8S79C4_nt4v187Ev");}
void  S79C4_nt ::v188(){vfunc_called(this, "_ZN8S79C4_nt4v188Ev");}
void  S79C4_nt ::v189(){vfunc_called(this, "_ZN8S79C4_nt4v189Ev");}
void  S79C4_nt ::v190(){vfunc_called(this, "_ZN8S79C4_nt4v190Ev");}
void  S79C4_nt ::v191(){vfunc_called(this, "_ZN8S79C4_nt4v191Ev");}
void  S79C4_nt ::v192(){vfunc_called(this, "_ZN8S79C4_nt4v192Ev");}
void  S79C4_nt ::v193(){vfunc_called(this, "_ZN8S79C4_nt4v193Ev");}
void  S79C4_nt ::v194(){vfunc_called(this, "_ZN8S79C4_nt4v194Ev");}
void  S79C4_nt ::v195(){vfunc_called(this, "_ZN8S79C4_nt4v195Ev");}
void  S79C4_nt ::v196(){vfunc_called(this, "_ZN8S79C4_nt4v196Ev");}
void  S79C4_nt ::v197(){vfunc_called(this, "_ZN8S79C4_nt4v197Ev");}
void  S79C4_nt ::v198(){vfunc_called(this, "_ZN8S79C4_nt4v198Ev");}
void  S79C4_nt ::v199(){vfunc_called(this, "_ZN8S79C4_nt4v199Ev");}
void  S79C4_nt ::v200(){vfunc_called(this, "_ZN8S79C4_nt4v200Ev");}
void  S79C4_nt ::v201(){vfunc_called(this, "_ZN8S79C4_nt4v201Ev");}
void  S79C4_nt ::v202(){vfunc_called(this, "_ZN8S79C4_nt4v202Ev");}
void  S79C4_nt ::v203(){vfunc_called(this, "_ZN8S79C4_nt4v203Ev");}
void  S79C4_nt ::v204(){vfunc_called(this, "_ZN8S79C4_nt4v204Ev");}
void  S79C4_nt ::v205(){vfunc_called(this, "_ZN8S79C4_nt4v205Ev");}
void  S79C4_nt ::v206(){vfunc_called(this, "_ZN8S79C4_nt4v206Ev");}
void  S79C4_nt ::v207(){vfunc_called(this, "_ZN8S79C4_nt4v207Ev");}
void  S79C4_nt ::v208(){vfunc_called(this, "_ZN8S79C4_nt4v208Ev");}
void  S79C4_nt ::v209(){vfunc_called(this, "_ZN8S79C4_nt4v209Ev");}
void  S79C4_nt ::v210(){vfunc_called(this, "_ZN8S79C4_nt4v210Ev");}
void  S79C4_nt ::v211(){vfunc_called(this, "_ZN8S79C4_nt4v211Ev");}
void  S79C4_nt ::v212(){vfunc_called(this, "_ZN8S79C4_nt4v212Ev");}
void  S79C4_nt ::v213(){vfunc_called(this, "_ZN8S79C4_nt4v213Ev");}
void  S79C4_nt ::v214(){vfunc_called(this, "_ZN8S79C4_nt4v214Ev");}
S79C4_nt ::S79C4_nt(){ note_ctor("S79C4_nt", this);} // tgen

//skip512 S79C4_nt

#else // __cplusplus

extern void _ZN8S79C4_ntC1Ev();
extern void _ZN8S79C4_ntD1Ev();
Name_Map name_map_S79C4_nt[] = {
  NSPAIR(_ZN8S79C4_ntC1Ev),
  NSPAIR(_ZN8S79C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S79C7_nt;
extern VTBL_ENTRY _ZTI8S79C7_nt[];
extern  VTBL_ENTRY _ZTV8S79C7_nt[];
extern Class_Descriptor cd_S79C6_nt;
extern VTBL_ENTRY _ZTI8S79C6_nt[];
extern  VTBL_ENTRY _ZTV8S79C6_nt[];
extern Class_Descriptor cd_S79C5_nt;
extern VTBL_ENTRY _ZTI8S79C5_nt[];
extern  VTBL_ENTRY _ZTV8S79C5_nt[];
static Base_Class bases_S79C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S79C7_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_S79C6_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_S79C5_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 _ZTI8S79C4_nt[];
extern void _ZN8S79C4_ntD1Ev();
extern void _ZN8S79C4_ntD0Ev();
extern void _ZN8S79C7_nt2v4Ev();
extern void _ZN8S79C7_nt2v5Ev();
extern void _ZN8S79C7_nt2v6Ev();
extern void _ZN8S79C7_nt2v7Ev();
extern void _ZN8S79C7_nt2v8Ev();
extern void _ZN8S79C7_nt2v9Ev();
extern void _ZN8S79C7_nt3v10Ev();
extern void _ZN8S79C7_nt3v11Ev();
extern void _ZN8S79C7_nt3v12Ev();
extern void _ZN8S79C7_nt3v13Ev();
extern void _ZN8S79C7_nt3v14Ev();
extern void _ZN8S79C7_nt3v15Ev();
extern void _ZN8S79C7_nt3v16Ev();
extern void _ZN8S79C7_nt3v17Ev();
extern void _ZN8S79C7_nt3v18Ev();
extern void _ZN8S79C7_nt3v19Ev();
extern void _ZN8S79C7_nt3v20Ev();
extern void _ZN8S79C7_nt3v21Ev();
extern void _ZN8S79C7_nt3v22Ev();
extern void _ZN8S79C7_nt3v23Ev();
extern void _ZN8S79C7_nt3v24Ev();
extern void _ZN8S79C7_nt3v25Ev();
extern void _ZN8S79C7_nt3v26Ev();
extern void _ZN8S79C7_nt3v27Ev();
extern void _ZN8S79C7_nt3v28Ev();
extern void _ZN8S79C7_nt3v29Ev();
extern void _ZN8S79C7_nt3v30Ev();
extern void _ZN8S79C7_nt3v31Ev();
extern void _ZN8S79C7_nt3v32Ev();
extern void _ZN8S79C7_nt3v33Ev();
extern void _ZN8S79C7_nt3v34Ev();
extern void _ZN8S79C7_nt3v35Ev();
extern void _ZN8S79C7_nt3v36Ev();
extern void _ZN8S79C7_nt3v37Ev();
extern void _ZN8S79C7_nt3v38Ev();
extern void _ZN8S79C7_nt3v39Ev();
extern void _ZN8S79C7_nt3v40Ev();
extern void _ZN8S79C7_nt3v41Ev();
extern void _ZN8S79C7_nt3v42Ev();
extern void _ZN8S79C7_nt3v43Ev();
extern void _ZN8S79C7_nt3v44Ev();
extern void _ZN8S79C7_nt3v45Ev();
extern void _ZN8S79C7_nt3v46Ev();
extern void _ZN8S79C7_nt3v47Ev();
extern void _ZN8S79C7_nt3v48Ev();
extern void _ZN8S79C7_nt3v49Ev();
extern void _ZN8S79C7_nt3v50Ev();
extern void _ZN8S79C7_nt3v51Ev();
extern void _ZN8S79C7_nt3v52Ev();
extern void _ZN8S79C7_nt3v53Ev();
extern void _ZN8S79C7_nt3v54Ev();
extern void _ZN8S79C7_nt3v55Ev();
extern void _ZN8S79C7_nt3v56Ev();
extern void _ZN8S79C7_nt3v57Ev();
extern void _ZN8S79C7_nt3v58Ev();
extern void _ZN8S79C7_nt3v59Ev();
extern void _ZN8S79C7_nt3v60Ev();
extern void _ZN8S79C7_nt3v61Ev();
extern void _ZN8S79C7_nt3v62Ev();
extern void _ZN8S79C7_nt3v63Ev();
extern void _ZN8S79C7_nt3v64Ev();
extern void _ZN8S79C7_nt3v65Ev();
extern void _ZN8S79C7_nt3v66Ev();
extern void _ZN8S79C7_nt3v67Ev();
extern void _ZN8S79C6_nt3v68Ev();
extern void _ZN8S79C6_nt3v69Ev();
extern void _ZN8S79C5_nt3v70Ev();
extern void _ZN8S79C5_nt3v71Ev();
extern void _ZN8S79C5_nt3v72Ev();
extern void _ZN8S79C5_nt3v73Ev();
extern void _ZN8S79C5_nt3v74Ev();
extern void _ZN8S79C5_nt3v75Ev();
extern void _ZN8S79C5_nt3v76Ev();
extern void _ZN8S79C5_nt3v77Ev();
extern void _ZN8S79C5_nt3v78Ev();
extern void _ZN8S79C5_nt3v79Ev();
extern void _ZN8S79C5_nt3v80Ev();
extern void _ZN8S79C5_nt3v81Ev();
extern void _ZN8S79C5_nt3v82Ev();
extern void _ZN8S79C5_nt3v83Ev();
extern void _ZN8S79C5_nt3v84Ev();
extern void _ZN8S79C5_nt3v85Ev();
extern void _ZN8S79C5_nt3v86Ev();
extern void _ZN8S79C5_nt3v87Ev();
extern void _ZN8S79C5_nt3v88Ev();
extern void _ZN8S79C5_nt3v89Ev();
extern void _ZN8S79C5_nt3v90Ev();
extern void _ZN8S79C5_nt3v91Ev();
extern void _ZN8S79C5_nt3v92Ev();
extern void _ZN8S79C5_nt3v93Ev();
extern void _ZN8S79C5_nt3v94Ev();
extern void _ZN8S79C5_nt3v95Ev();
extern void _ZN8S79C5_nt3v96Ev();
extern void _ZN8S79C5_nt3v97Ev();
extern void _ZN8S79C5_nt3v98Ev();
extern void _ZN8S79C5_nt3v99Ev();
extern void _ZN8S79C5_nt4v100Ev();
extern void _ZN8S79C5_nt4v101Ev();
extern void _ZN8S79C5_nt4v102Ev();
extern void _ZN8S79C5_nt4v103Ev();
extern void _ZN8S79C5_nt4v104Ev();
extern void _ZN8S79C5_nt4v105Ev();
extern void _ZN8S79C5_nt4v106Ev();
extern void _ZN8S79C5_nt4v107Ev();
extern void _ZN8S79C5_nt4v108Ev();
extern void _ZN8S79C5_nt4v109Ev();
extern void _ZN8S79C5_nt4v110Ev();
extern void _ZN8S79C5_nt4v111Ev();
extern void _ZN8S79C5_nt4v112Ev();
extern void _ZN8S79C5_nt4v113Ev();
extern void _ZN8S79C5_nt4v114Ev();
extern void _ZN8S79C5_nt4v115Ev();
extern void _ZN8S79C5_nt4v116Ev();
extern void _ZN8S79C5_nt4v117Ev();
extern void _ZN8S79C5_nt4v118Ev();
extern void _ZN8S79C5_nt4v119Ev();
extern void _ZN8S79C5_nt4v120Ev();
extern void _ZN8S79C5_nt4v121Ev();
extern void _ZN8S79C5_nt4v122Ev();
extern void _ZN8S79C5_nt4v123Ev();
extern void _ZN8S79C5_nt4v124Ev();
extern void _ZN8S79C5_nt4v125Ev();
extern void _ZN8S79C5_nt4v126Ev();
extern void _ZN8S79C5_nt4v127Ev();
extern void _ZN8S79C5_nt4v128Ev();
extern void _ZN8S79C5_nt4v129Ev();
extern void _ZN8S79C5_nt4v130Ev();
extern void _ZN8S79C5_nt4v131Ev();
extern void _ZN8S79C5_nt4v132Ev();
extern void _ZN8S79C5_nt4v133Ev();
extern void _ZN8S79C5_nt4v134Ev();
extern void _ZN8S79C5_nt4v135Ev();
extern void _ZN8S79C5_nt4v136Ev();
extern void _ZN8S79C5_nt4v137Ev();
extern void _ZN8S79C5_nt4v138Ev();
extern void _ZN8S79C5_nt4v139Ev();
extern void _ZN8S79C5_nt4v140Ev();
extern void _ZN8S79C5_nt4v141Ev();
extern void _ZN8S79C5_nt4v142Ev();
extern void _ZN8S79C5_nt4v143Ev();
extern void _ZN8S79C5_nt4v144Ev();
extern void _ZN8S79C5_nt4v145Ev();
extern void _ZN8S79C4_nt4v146Ev();
extern void _ZN8S79C4_nt4v147Ev();
extern void _ZN8S79C4_nt4v148Ev();
extern void _ZN8S79C4_nt4v149Ev();
extern void _ZN8S79C4_nt4v150Ev();
extern void _ZN8S79C4_nt4v151Ev();
extern void _ZN8S79C4_nt4v152Ev();
extern void _ZN8S79C4_nt4v153Ev();
extern void _ZN8S79C4_nt4v154Ev();
extern void _ZN8S79C4_nt4v155Ev();
extern void _ZN8S79C4_nt4v156Ev();
extern void _ZN8S79C4_nt4v157Ev();
extern void _ZN8S79C4_nt4v158Ev();
extern void _ZN8S79C4_nt4v159Ev();
extern void _ZN8S79C4_nt4v160Ev();
extern void _ZN8S79C4_nt4v161Ev();
extern void _ZN8S79C4_nt4v162Ev();
extern void _ZN8S79C4_nt4v163Ev();
extern void _ZN8S79C4_nt4v164Ev();
extern void _ZN8S79C4_nt4v165Ev();
extern void _ZN8S79C4_nt4v166Ev();
extern void _ZN8S79C4_nt4v167Ev();
extern void _ZN8S79C4_nt4v168Ev();
extern void _ZN8S79C4_nt4v169Ev();
extern void _ZN8S79C4_nt4v170Ev();
extern void _ZN8S79C4_nt4v171Ev();
extern void _ZN8S79C4_nt4v172Ev();
extern void _ZN8S79C4_nt4v173Ev();
extern void _ZN8S79C4_nt4v174Ev();
extern void _ZN8S79C4_nt4v175Ev();
extern void _ZN8S79C4_nt4v176Ev();
extern void _ZN8S79C4_nt4v177Ev();
extern void _ZN8S79C4_nt4v178Ev();
extern void _ZN8S79C4_nt4v179Ev();
extern void _ZN8S79C4_nt4v180Ev();
extern void _ZN8S79C4_nt4v181Ev();
extern void _ZN8S79C4_nt4v182Ev();
extern void _ZN8S79C4_nt4v183Ev();
extern void _ZN8S79C4_nt4v184Ev();
extern void _ZN8S79C4_nt4v185Ev();
extern void _ZN8S79C4_nt4v186Ev();
extern void _ZN8S79C4_nt4v187Ev();
extern void _ZN8S79C4_nt4v188Ev();
extern void _ZN8S79C4_nt4v189Ev();
extern void _ZN8S79C4_nt4v190Ev();
extern void _ZN8S79C4_nt4v191Ev();
extern void _ZN8S79C4_nt4v192Ev();
extern void _ZN8S79C4_nt4v193Ev();
extern void _ZN8S79C4_nt4v194Ev();
extern void _ZN8S79C4_nt4v195Ev();
extern void _ZN8S79C4_nt4v196Ev();
extern void _ZN8S79C4_nt4v197Ev();
extern void _ZN8S79C4_nt4v198Ev();
extern void _ZN8S79C4_nt4v199Ev();
extern void _ZN8S79C4_nt4v200Ev();
extern void _ZN8S79C4_nt4v201Ev();
extern void _ZN8S79C4_nt4v202Ev();
extern void _ZN8S79C4_nt4v203Ev();
extern void _ZN8S79C4_nt4v204Ev();
extern void _ZN8S79C4_nt4v205Ev();
extern void _ZN8S79C4_nt4v206Ev();
extern void _ZN8S79C4_nt4v207Ev();
extern void _ZN8S79C4_nt4v208Ev();
extern void _ZN8S79C4_nt4v209Ev();
extern void _ZN8S79C4_nt4v210Ev();
extern void _ZN8S79C4_nt4v211Ev();
extern void _ZN8S79C4_nt4v212Ev();
extern void _ZN8S79C4_nt4v213Ev();
extern void _ZN8S79C4_nt4v214Ev();
static  VTBL_ENTRY vtc_S79C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S79C4_nt[0]),
  (VTBL_ENTRY)&_ZN8S79C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN8S79C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v4Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v6Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v7Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v9Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v13Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v14Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v16Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v17Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v19Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v20Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v21Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v22Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v23Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v24Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v25Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v26Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v27Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v28Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v29Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v30Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v31Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v32Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v33Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v34Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v35Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v36Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v37Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v38Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v39Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v40Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v41Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v42Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v43Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v44Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v45Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v46Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v47Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v48Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v49Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v50Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v51Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v52Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v53Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v54Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v55Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v56Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v57Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v58Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v59Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v60Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v61Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v62Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v63Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v64Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v65Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v66Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v67Ev,
  (VTBL_ENTRY)&_ZN8S79C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN8S79C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v91Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v92Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v93Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v94Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v95Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v96Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v97Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v98Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v99Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v100Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v101Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v102Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v103Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v104Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v105Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v106Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v107Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v108Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v109Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v110Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v111Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v112Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v113Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v114Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v115Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v116Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v117Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v118Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v119Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v120Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v121Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v122Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v123Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v124Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v125Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v126Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v127Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v128Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v129Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v130Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v131Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v132Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v133Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v134Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v135Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v136Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v137Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v138Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v139Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v140Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v141Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v142Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v143Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v144Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v145Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v146Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v147Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v148Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v149Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v150Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v151Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v152Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v153Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v154Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v155Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v156Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v157Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v158Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v159Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v160Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v161Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v162Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v163Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v164Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v165Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v166Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v167Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v168Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v169Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v170Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v171Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v172Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v173Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v174Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v175Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v176Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v177Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v178Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v179Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v180Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v181Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v182Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v183Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v184Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v185Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v186Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v187Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v188Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v189Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v190Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v191Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v192Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v193Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v194Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v195Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v196Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v197Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v198Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v199Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v200Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v201Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v202Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v203Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v204Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v205Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v206Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v207Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v208Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v209Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v210Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v211Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v212Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v213Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v214Ev,
};
extern VTBL_ENTRY _ZTI8S79C4_nt[];
VTBL_ENTRY *P__ZTI8S79C4_nt = _ZTI8S79C4_nt; 
extern  VTBL_ENTRY _ZTV8S79C4_nt[];
Class_Descriptor cd_S79C4_nt = {  "S79C4_nt", // class name
  bases_S79C4_nt, 3,
  &(vtc_S79C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1224,908), // object size
  NSPAIRA(_ZTI8S79C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S79C4_nt),215, //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  S79C3_nt  : S79C4_nt {
  unsigned int s79c3f0:1;
  void *s79c3f1;
  virtual  ~S79C3_nt(); // _ZN8S79C3_ntD1Ev
  virtual void  v215(); // _ZN8S79C3_nt4v215Ev
  virtual void  v216(); // _ZN8S79C3_nt4v216Ev
  virtual void  v217(); // _ZN8S79C3_nt4v217Ev
  virtual void  v218(); // _ZN8S79C3_nt4v218Ev
  virtual void  v219(); // _ZN8S79C3_nt4v219Ev
  virtual void  v220(); // _ZN8S79C3_nt4v220Ev
  S79C3_nt(); // tgen
};
//SIG(-1 S79C3_nt) C1{ BC2{ BC3{ BC4{ BC5{ vd 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 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v71 v72} vd 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 v141 v142 v143 v144 v145 v146 v147 v148 FC7{ m Fi[4] Fc[9]} Fi Fi:1 Fi:1 Fi:1 Fi:1 FC8{ BC9{ BC10{ m Fp Fi[2]}}} FC8 Fp FC11{ BC12{ BC10}} FC11 FC11 FC13{ BC14{ BC10}} Fc Fi Fp FC6 FC6 FC6 FC6 FC6 FC6 FC15{ m Fp FC6} FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15} vd v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 v176 v177 v178 v179 v180 v181 v182 v183 v184 v185 v186 v187 v188 v189 v190 v191 v192 v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 v208 v209 v210 v211 v212 v213 v214 v215 v216 v217 FC16{ BC17{ m Fi[4]}} FC6 Fp[2] FC18{ m FC6 Fp FC16 Fp} FC19{ m Fp[8] Fc[4]} Fi FC20{ m Fp[5] FC21{ m Fi[4] Fc[4]} Fi:1 Fi:1 Fi Fc[8]} Fi[4] FC6[4] FC22{ m FC23{ m Fi[3]} FC24{ m} FC25{ BC26{ m Fi[2] Fc[2]} Fi} Fc} FC23 Fi FC27{ m FC28{ BC29{ m Fp[2]}} Fc FC30{ BC31{ BC32{ BC10}}} Fi FC6 FC6 Fp} FC27 Fp FC23 FC13 FC33{ BC34{ BC10}} Fi:1 Fi:1 Fi:1 FC24 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15} vd v1 v2 v3 v4 v5 v6 Fi:1 Fp}


 S79C3_nt ::~S79C3_nt(){ note_dtor("S79C3_nt", this);}
void  S79C3_nt ::v215(){vfunc_called(this, "_ZN8S79C3_nt4v215Ev");}
void  S79C3_nt ::v216(){vfunc_called(this, "_ZN8S79C3_nt4v216Ev");}
void  S79C3_nt ::v217(){vfunc_called(this, "_ZN8S79C3_nt4v217Ev");}
void  S79C3_nt ::v218(){vfunc_called(this, "_ZN8S79C3_nt4v218Ev");}
void  S79C3_nt ::v219(){vfunc_called(this, "_ZN8S79C3_nt4v219Ev");}
void  S79C3_nt ::v220(){vfunc_called(this, "_ZN8S79C3_nt4v220Ev");}
S79C3_nt ::S79C3_nt(){ note_ctor("S79C3_nt", this);} // tgen

//skip512 S79C3_nt

#else // __cplusplus

extern void _ZN8S79C3_ntC1Ev();
extern void _ZN8S79C3_ntD1Ev();
Name_Map name_map_S79C3_nt[] = {
  NSPAIR(_ZN8S79C3_ntC1Ev),
  NSPAIR(_ZN8S79C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S79C7_nt;
extern VTBL_ENTRY _ZTI8S79C7_nt[];
extern  VTBL_ENTRY _ZTV8S79C7_nt[];
extern Class_Descriptor cd_S79C6_nt;
extern VTBL_ENTRY _ZTI8S79C6_nt[];
extern  VTBL_ENTRY _ZTV8S79C6_nt[];
extern Class_Descriptor cd_S79C5_nt;
extern VTBL_ENTRY _ZTI8S79C5_nt[];
extern  VTBL_ENTRY _ZTV8S79C5_nt[];
extern Class_Descriptor cd_S79C4_nt;
extern VTBL_ENTRY _ZTI8S79C4_nt[];
extern  VTBL_ENTRY _ZTV8S79C4_nt[];
static Base_Class bases_S79C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S79C7_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_S79C6_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_S79C5_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
    3, //immediately_derived
  0, 0},
  {&cd_S79C4_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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S79C3_nt[];
extern void _ZN8S79C3_ntD1Ev();
extern void _ZN8S79C3_ntD0Ev();
extern void _ZN8S79C7_nt2v4Ev();
extern void _ZN8S79C7_nt2v5Ev();
extern void _ZN8S79C7_nt2v6Ev();
extern void _ZN8S79C7_nt2v7Ev();
extern void _ZN8S79C7_nt2v8Ev();
extern void _ZN8S79C7_nt2v9Ev();
extern void _ZN8S79C7_nt3v10Ev();
extern void _ZN8S79C7_nt3v11Ev();
extern void _ZN8S79C7_nt3v12Ev();
extern void _ZN8S79C7_nt3v13Ev();
extern void _ZN8S79C7_nt3v14Ev();
extern void _ZN8S79C7_nt3v15Ev();
extern void _ZN8S79C7_nt3v16Ev();
extern void _ZN8S79C7_nt3v17Ev();
extern void _ZN8S79C7_nt3v18Ev();
extern void _ZN8S79C7_nt3v19Ev();
extern void _ZN8S79C7_nt3v20Ev();
extern void _ZN8S79C7_nt3v21Ev();
extern void _ZN8S79C7_nt3v22Ev();
extern void _ZN8S79C7_nt3v23Ev();
extern void _ZN8S79C7_nt3v24Ev();
extern void _ZN8S79C7_nt3v25Ev();
extern void _ZN8S79C7_nt3v26Ev();
extern void _ZN8S79C7_nt3v27Ev();
extern void _ZN8S79C7_nt3v28Ev();
extern void _ZN8S79C7_nt3v29Ev();
extern void _ZN8S79C7_nt3v30Ev();
extern void _ZN8S79C7_nt3v31Ev();
extern void _ZN8S79C7_nt3v32Ev();
extern void _ZN8S79C7_nt3v33Ev();
extern void _ZN8S79C7_nt3v34Ev();
extern void _ZN8S79C7_nt3v35Ev();
extern void _ZN8S79C7_nt3v36Ev();
extern void _ZN8S79C7_nt3v37Ev();
extern void _ZN8S79C7_nt3v38Ev();
extern void _ZN8S79C7_nt3v39Ev();
extern void _ZN8S79C7_nt3v40Ev();
extern void _ZN8S79C7_nt3v41Ev();
extern void _ZN8S79C7_nt3v42Ev();
extern void _ZN8S79C7_nt3v43Ev();
extern void _ZN8S79C7_nt3v44Ev();
extern void _ZN8S79C7_nt3v45Ev();
extern void _ZN8S79C7_nt3v46Ev();
extern void _ZN8S79C7_nt3v47Ev();
extern void _ZN8S79C7_nt3v48Ev();
extern void _ZN8S79C7_nt3v49Ev();
extern void _ZN8S79C7_nt3v50Ev();
extern void _ZN8S79C7_nt3v51Ev();
extern void _ZN8S79C7_nt3v52Ev();
extern void _ZN8S79C7_nt3v53Ev();
extern void _ZN8S79C7_nt3v54Ev();
extern void _ZN8S79C7_nt3v55Ev();
extern void _ZN8S79C7_nt3v56Ev();
extern void _ZN8S79C7_nt3v57Ev();
extern void _ZN8S79C7_nt3v58Ev();
extern void _ZN8S79C7_nt3v59Ev();
extern void _ZN8S79C7_nt3v60Ev();
extern void _ZN8S79C7_nt3v61Ev();
extern void _ZN8S79C7_nt3v62Ev();
extern void _ZN8S79C7_nt3v63Ev();
extern void _ZN8S79C7_nt3v64Ev();
extern void _ZN8S79C7_nt3v65Ev();
extern void _ZN8S79C7_nt3v66Ev();
extern void _ZN8S79C7_nt3v67Ev();
extern void _ZN8S79C6_nt3v68Ev();
extern void _ZN8S79C6_nt3v69Ev();
extern void _ZN8S79C5_nt3v70Ev();
extern void _ZN8S79C5_nt3v71Ev();
extern void _ZN8S79C5_nt3v72Ev();
extern void _ZN8S79C5_nt3v73Ev();
extern void _ZN8S79C5_nt3v74Ev();
extern void _ZN8S79C5_nt3v75Ev();
extern void _ZN8S79C5_nt3v76Ev();
extern void _ZN8S79C5_nt3v77Ev();
extern void _ZN8S79C5_nt3v78Ev();
extern void _ZN8S79C5_nt3v79Ev();
extern void _ZN8S79C5_nt3v80Ev();
extern void _ZN8S79C5_nt3v81Ev();
extern void _ZN8S79C5_nt3v82Ev();
extern void _ZN8S79C5_nt3v83Ev();
extern void _ZN8S79C5_nt3v84Ev();
extern void _ZN8S79C5_nt3v85Ev();
extern void _ZN8S79C5_nt3v86Ev();
extern void _ZN8S79C5_nt3v87Ev();
extern void _ZN8S79C5_nt3v88Ev();
extern void _ZN8S79C5_nt3v89Ev();
extern void _ZN8S79C5_nt3v90Ev();
extern void _ZN8S79C5_nt3v91Ev();
extern void _ZN8S79C5_nt3v92Ev();
extern void _ZN8S79C5_nt3v93Ev();
extern void _ZN8S79C5_nt3v94Ev();
extern void _ZN8S79C5_nt3v95Ev();
extern void _ZN8S79C5_nt3v96Ev();
extern void _ZN8S79C5_nt3v97Ev();
extern void _ZN8S79C5_nt3v98Ev();
extern void _ZN8S79C5_nt3v99Ev();
extern void _ZN8S79C5_nt4v100Ev();
extern void _ZN8S79C5_nt4v101Ev();
extern void _ZN8S79C5_nt4v102Ev();
extern void _ZN8S79C5_nt4v103Ev();
extern void _ZN8S79C5_nt4v104Ev();
extern void _ZN8S79C5_nt4v105Ev();
extern void _ZN8S79C5_nt4v106Ev();
extern void _ZN8S79C5_nt4v107Ev();
extern void _ZN8S79C5_nt4v108Ev();
extern void _ZN8S79C5_nt4v109Ev();
extern void _ZN8S79C5_nt4v110Ev();
extern void _ZN8S79C5_nt4v111Ev();
extern void _ZN8S79C5_nt4v112Ev();
extern void _ZN8S79C5_nt4v113Ev();
extern void _ZN8S79C5_nt4v114Ev();
extern void _ZN8S79C5_nt4v115Ev();
extern void _ZN8S79C5_nt4v116Ev();
extern void _ZN8S79C5_nt4v117Ev();
extern void _ZN8S79C5_nt4v118Ev();
extern void _ZN8S79C5_nt4v119Ev();
extern void _ZN8S79C5_nt4v120Ev();
extern void _ZN8S79C5_nt4v121Ev();
extern void _ZN8S79C5_nt4v122Ev();
extern void _ZN8S79C5_nt4v123Ev();
extern void _ZN8S79C5_nt4v124Ev();
extern void _ZN8S79C5_nt4v125Ev();
extern void _ZN8S79C5_nt4v126Ev();
extern void _ZN8S79C5_nt4v127Ev();
extern void _ZN8S79C5_nt4v128Ev();
extern void _ZN8S79C5_nt4v129Ev();
extern void _ZN8S79C5_nt4v130Ev();
extern void _ZN8S79C5_nt4v131Ev();
extern void _ZN8S79C5_nt4v132Ev();
extern void _ZN8S79C5_nt4v133Ev();
extern void _ZN8S79C5_nt4v134Ev();
extern void _ZN8S79C5_nt4v135Ev();
extern void _ZN8S79C5_nt4v136Ev();
extern void _ZN8S79C5_nt4v137Ev();
extern void _ZN8S79C5_nt4v138Ev();
extern void _ZN8S79C5_nt4v139Ev();
extern void _ZN8S79C5_nt4v140Ev();
extern void _ZN8S79C5_nt4v141Ev();
extern void _ZN8S79C5_nt4v142Ev();
extern void _ZN8S79C5_nt4v143Ev();
extern void _ZN8S79C5_nt4v144Ev();
extern void _ZN8S79C5_nt4v145Ev();
extern void _ZN8S79C4_nt4v146Ev();
extern void _ZN8S79C4_nt4v147Ev();
extern void _ZN8S79C4_nt4v148Ev();
extern void _ZN8S79C4_nt4v149Ev();
extern void _ZN8S79C4_nt4v150Ev();
extern void _ZN8S79C4_nt4v151Ev();
extern void _ZN8S79C4_nt4v152Ev();
extern void _ZN8S79C4_nt4v153Ev();
extern void _ZN8S79C4_nt4v154Ev();
extern void _ZN8S79C4_nt4v155Ev();
extern void _ZN8S79C4_nt4v156Ev();
extern void _ZN8S79C4_nt4v157Ev();
extern void _ZN8S79C4_nt4v158Ev();
extern void _ZN8S79C4_nt4v159Ev();
extern void _ZN8S79C4_nt4v160Ev();
extern void _ZN8S79C4_nt4v161Ev();
extern void _ZN8S79C4_nt4v162Ev();
extern void _ZN8S79C4_nt4v163Ev();
extern void _ZN8S79C4_nt4v164Ev();
extern void _ZN8S79C4_nt4v165Ev();
extern void _ZN8S79C4_nt4v166Ev();
extern void _ZN8S79C4_nt4v167Ev();
extern void _ZN8S79C4_nt4v168Ev();
extern void _ZN8S79C4_nt4v169Ev();
extern void _ZN8S79C4_nt4v170Ev();
extern void _ZN8S79C4_nt4v171Ev();
extern void _ZN8S79C4_nt4v172Ev();
extern void _ZN8S79C4_nt4v173Ev();
extern void _ZN8S79C4_nt4v174Ev();
extern void _ZN8S79C4_nt4v175Ev();
extern void _ZN8S79C4_nt4v176Ev();
extern void _ZN8S79C4_nt4v177Ev();
extern void _ZN8S79C4_nt4v178Ev();
extern void _ZN8S79C4_nt4v179Ev();
extern void _ZN8S79C4_nt4v180Ev();
extern void _ZN8S79C4_nt4v181Ev();
extern void _ZN8S79C4_nt4v182Ev();
extern void _ZN8S79C4_nt4v183Ev();
extern void _ZN8S79C4_nt4v184Ev();
extern void _ZN8S79C4_nt4v185Ev();
extern void _ZN8S79C4_nt4v186Ev();
extern void _ZN8S79C4_nt4v187Ev();
extern void _ZN8S79C4_nt4v188Ev();
extern void _ZN8S79C4_nt4v189Ev();
extern void _ZN8S79C4_nt4v190Ev();
extern void _ZN8S79C4_nt4v191Ev();
extern void _ZN8S79C4_nt4v192Ev();
extern void _ZN8S79C4_nt4v193Ev();
extern void _ZN8S79C4_nt4v194Ev();
extern void _ZN8S79C4_nt4v195Ev();
extern void _ZN8S79C4_nt4v196Ev();
extern void _ZN8S79C4_nt4v197Ev();
extern void _ZN8S79C4_nt4v198Ev();
extern void _ZN8S79C4_nt4v199Ev();
extern void _ZN8S79C4_nt4v200Ev();
extern void _ZN8S79C4_nt4v201Ev();
extern void _ZN8S79C4_nt4v202Ev();
extern void _ZN8S79C4_nt4v203Ev();
extern void _ZN8S79C4_nt4v204Ev();
extern void _ZN8S79C4_nt4v205Ev();
extern void _ZN8S79C4_nt4v206Ev();
extern void _ZN8S79C4_nt4v207Ev();
extern void _ZN8S79C4_nt4v208Ev();
extern void _ZN8S79C4_nt4v209Ev();
extern void _ZN8S79C4_nt4v210Ev();
extern void _ZN8S79C4_nt4v211Ev();
extern void _ZN8S79C4_nt4v212Ev();
extern void _ZN8S79C4_nt4v213Ev();
extern void _ZN8S79C4_nt4v214Ev();
extern void _ZN8S79C3_nt4v215Ev();
extern void _ZN8S79C3_nt4v216Ev();
extern void _ZN8S79C3_nt4v217Ev();
extern void _ZN8S79C3_nt4v218Ev();
extern void _ZN8S79C3_nt4v219Ev();
extern void _ZN8S79C3_nt4v220Ev();
static  VTBL_ENTRY vtc_S79C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S79C3_nt[0]),
  (VTBL_ENTRY)&_ZN8S79C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN8S79C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v4Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v6Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v7Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v9Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v13Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v14Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v16Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v17Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v19Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v20Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v21Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v22Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v23Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v24Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v25Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v26Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v27Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v28Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v29Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v30Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v31Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v32Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v33Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v34Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v35Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v36Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v37Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v38Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v39Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v40Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v41Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v42Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v43Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v44Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v45Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v46Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v47Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v48Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v49Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v50Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v51Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v52Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v53Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v54Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v55Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v56Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v57Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v58Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v59Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v60Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v61Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v62Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v63Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v64Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v65Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v66Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v67Ev,
  (VTBL_ENTRY)&_ZN8S79C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN8S79C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v91Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v92Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v93Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v94Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v95Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v96Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v97Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v98Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v99Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v100Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v101Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v102Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v103Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v104Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v105Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v106Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v107Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v108Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v109Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v110Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v111Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v112Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v113Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v114Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v115Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v116Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v117Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v118Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v119Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v120Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v121Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v122Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v123Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v124Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v125Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v126Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v127Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v128Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v129Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v130Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v131Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v132Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v133Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v134Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v135Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v136Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v137Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v138Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v139Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v140Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v141Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v142Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v143Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v144Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v145Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v146Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v147Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v148Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v149Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v150Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v151Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v152Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v153Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v154Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v155Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v156Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v157Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v158Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v159Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v160Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v161Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v162Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v163Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v164Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v165Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v166Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v167Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v168Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v169Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v170Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v171Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v172Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v173Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v174Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v175Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v176Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v177Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v178Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v179Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v180Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v181Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v182Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v183Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v184Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v185Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v186Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v187Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v188Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v189Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v190Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v191Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v192Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v193Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v194Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v195Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v196Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v197Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v198Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v199Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v200Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v201Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v202Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v203Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v204Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v205Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v206Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v207Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v208Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v209Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v210Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v211Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v212Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v213Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v214Ev,
  (VTBL_ENTRY)&_ZN8S79C3_nt4v215Ev,
  (VTBL_ENTRY)&_ZN8S79C3_nt4v216Ev,
  (VTBL_ENTRY)&_ZN8S79C3_nt4v217Ev,
  (VTBL_ENTRY)&_ZN8S79C3_nt4v218Ev,
  (VTBL_ENTRY)&_ZN8S79C3_nt4v219Ev,
  (VTBL_ENTRY)&_ZN8S79C3_nt4v220Ev,
};
extern VTBL_ENTRY _ZTI8S79C3_nt[];
VTBL_ENTRY *P__ZTI8S79C3_nt = _ZTI8S79C3_nt; 
extern  VTBL_ENTRY _ZTV8S79C3_nt[];
Class_Descriptor cd_S79C3_nt = {  "S79C3_nt", // class name
  bases_S79C3_nt, 4,
  &(vtc_S79C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1240,916), // object size
  NSPAIRA(_ZTI8S79C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S79C3_nt),221, //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  S79C2_nt  : S79C3_nt {
  unsigned int s79c2f0:1;
  void *s79c2f1;
  int s79c2f2[5];
  ::S79C21_nt s79c2f3;
  virtual  ~S79C2_nt(); // _ZN8S79C2_ntD1Ev
  virtual void  v221(); // _ZN8S79C2_nt4v221Ev
  virtual void  v222(); // _ZN8S79C2_nt4v222Ev
  virtual void  v223(); // _ZN8S79C2_nt4v223Ev
  S79C2_nt(); // tgen
};
//SIG(-1 S79C2_nt) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd 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 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v68 v69} vd 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 v141 v142 v143 v144 v145 FC8{ m Fi[4] Fc[9]} Fi Fi:1 Fi:1 Fi:1 Fi:1 FC9{ BC10{ BC11{ m Fp Fi[2]}}} FC9 Fp FC12{ BC13{ BC11}} FC12 FC12 FC14{ BC15{ BC11}} Fc Fi Fp FC7 FC7 FC7 FC7 FC7 FC7 FC16{ m Fp FC7} FC16 FC16 FC16 FC16 FC16 FC16 FC16 FC16 FC16} vd v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 v176 v177 v178 v179 v180 v181 v182 v183 v184 v185 v186 v187 v188 v189 v190 v191 v192 v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 v208 v209 v210 v211 v212 v213 v214 FC17{ BC18{ m Fi[4]}} FC7 Fp[2] FC19{ m FC7 Fp FC17 Fp} FC20{ m Fp[8] Fc[4]} Fi FC21{ m Fp[5] FC22{ m Fi[4] Fc[4]} Fi:1 Fi:1 Fi Fc[8]} Fi[4] FC7[4] FC23{ m FC24{ m Fi[3]} FC25{ m} FC26{ BC27{ m Fi[2] Fc[2]} Fi} Fc} FC24 Fi FC28{ m FC29{ BC30{ m Fp[2]}} Fc FC31{ BC32{ BC33{ BC11}}} Fi FC7 FC7 Fp} FC28 Fp FC24 FC14 FC34{ BC35{ BC11}} Fi:1 Fi:1 Fi:1 FC25 FC16 FC16 FC16 FC16 FC16 FC16 FC16 FC16 FC16 FC16 FC16 FC16 FC16} vd v215 v216 v217 v218 v219 v220 Fi:1 Fp} vd v1 v2 v3 Fi:1 Fp Fi[5] FC16}


 S79C2_nt ::~S79C2_nt(){ note_dtor("S79C2_nt", this);}
void  S79C2_nt ::v221(){vfunc_called(this, "_ZN8S79C2_nt4v221Ev");}
void  S79C2_nt ::v222(){vfunc_called(this, "_ZN8S79C2_nt4v222Ev");}
void  S79C2_nt ::v223(){vfunc_called(this, "_ZN8S79C2_nt4v223Ev");}
S79C2_nt ::S79C2_nt(){ note_ctor("S79C2_nt", this);} // tgen

//skip512 S79C2_nt

#else // __cplusplus

extern void _ZN8S79C2_ntC1Ev();
extern void _ZN8S79C2_ntD1Ev();
Name_Map name_map_S79C2_nt[] = {
  NSPAIR(_ZN8S79C2_ntC1Ev),
  NSPAIR(_ZN8S79C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S79C7_nt;
extern VTBL_ENTRY _ZTI8S79C7_nt[];
extern  VTBL_ENTRY _ZTV8S79C7_nt[];
extern Class_Descriptor cd_S79C6_nt;
extern VTBL_ENTRY _ZTI8S79C6_nt[];
extern  VTBL_ENTRY _ZTV8S79C6_nt[];
extern Class_Descriptor cd_S79C5_nt;
extern VTBL_ENTRY _ZTI8S79C5_nt[];
extern  VTBL_ENTRY _ZTV8S79C5_nt[];
extern Class_Descriptor cd_S79C4_nt;
extern VTBL_ENTRY _ZTI8S79C4_nt[];
extern  VTBL_ENTRY _ZTV8S79C4_nt[];
extern Class_Descriptor cd_S79C3_nt;
extern VTBL_ENTRY _ZTI8S79C3_nt[];
extern  VTBL_ENTRY _ZTV8S79C3_nt[];
static Base_Class bases_S79C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S79C7_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_S79C6_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_S79C5_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
    3, //immediately_derived
  0, 0},
  {&cd_S79C4_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
    4, //immediately_derived
  0, 0},
  {&cd_S79C3_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},
  {0}};
extern VTBL_ENTRY _ZTI8S79C2_nt[];
extern void _ZN8S79C2_ntD1Ev();
extern void _ZN8S79C2_ntD0Ev();
extern void _ZN8S79C7_nt2v4Ev();
extern void _ZN8S79C7_nt2v5Ev();
extern void _ZN8S79C7_nt2v6Ev();
extern void _ZN8S79C7_nt2v7Ev();
extern void _ZN8S79C7_nt2v8Ev();
extern void _ZN8S79C7_nt2v9Ev();
extern void _ZN8S79C7_nt3v10Ev();
extern void _ZN8S79C7_nt3v11Ev();
extern void _ZN8S79C7_nt3v12Ev();
extern void _ZN8S79C7_nt3v13Ev();
extern void _ZN8S79C7_nt3v14Ev();
extern void _ZN8S79C7_nt3v15Ev();
extern void _ZN8S79C7_nt3v16Ev();
extern void _ZN8S79C7_nt3v17Ev();
extern void _ZN8S79C7_nt3v18Ev();
extern void _ZN8S79C7_nt3v19Ev();
extern void _ZN8S79C7_nt3v20Ev();
extern void _ZN8S79C7_nt3v21Ev();
extern void _ZN8S79C7_nt3v22Ev();
extern void _ZN8S79C7_nt3v23Ev();
extern void _ZN8S79C7_nt3v24Ev();
extern void _ZN8S79C7_nt3v25Ev();
extern void _ZN8S79C7_nt3v26Ev();
extern void _ZN8S79C7_nt3v27Ev();
extern void _ZN8S79C7_nt3v28Ev();
extern void _ZN8S79C7_nt3v29Ev();
extern void _ZN8S79C7_nt3v30Ev();
extern void _ZN8S79C7_nt3v31Ev();
extern void _ZN8S79C7_nt3v32Ev();
extern void _ZN8S79C7_nt3v33Ev();
extern void _ZN8S79C7_nt3v34Ev();
extern void _ZN8S79C7_nt3v35Ev();
extern void _ZN8S79C7_nt3v36Ev();
extern void _ZN8S79C7_nt3v37Ev();
extern void _ZN8S79C7_nt3v38Ev();
extern void _ZN8S79C7_nt3v39Ev();
extern void _ZN8S79C7_nt3v40Ev();
extern void _ZN8S79C7_nt3v41Ev();
extern void _ZN8S79C7_nt3v42Ev();
extern void _ZN8S79C7_nt3v43Ev();
extern void _ZN8S79C7_nt3v44Ev();
extern void _ZN8S79C7_nt3v45Ev();
extern void _ZN8S79C7_nt3v46Ev();
extern void _ZN8S79C7_nt3v47Ev();
extern void _ZN8S79C7_nt3v48Ev();
extern void _ZN8S79C7_nt3v49Ev();
extern void _ZN8S79C7_nt3v50Ev();
extern void _ZN8S79C7_nt3v51Ev();
extern void _ZN8S79C7_nt3v52Ev();
extern void _ZN8S79C7_nt3v53Ev();
extern void _ZN8S79C7_nt3v54Ev();
extern void _ZN8S79C7_nt3v55Ev();
extern void _ZN8S79C7_nt3v56Ev();
extern void _ZN8S79C7_nt3v57Ev();
extern void _ZN8S79C7_nt3v58Ev();
extern void _ZN8S79C7_nt3v59Ev();
extern void _ZN8S79C7_nt3v60Ev();
extern void _ZN8S79C7_nt3v61Ev();
extern void _ZN8S79C7_nt3v62Ev();
extern void _ZN8S79C7_nt3v63Ev();
extern void _ZN8S79C7_nt3v64Ev();
extern void _ZN8S79C7_nt3v65Ev();
extern void _ZN8S79C7_nt3v66Ev();
extern void _ZN8S79C7_nt3v67Ev();
extern void _ZN8S79C6_nt3v68Ev();
extern void _ZN8S79C6_nt3v69Ev();
extern void _ZN8S79C5_nt3v70Ev();
extern void _ZN8S79C5_nt3v71Ev();
extern void _ZN8S79C5_nt3v72Ev();
extern void _ZN8S79C5_nt3v73Ev();
extern void _ZN8S79C5_nt3v74Ev();
extern void _ZN8S79C5_nt3v75Ev();
extern void _ZN8S79C5_nt3v76Ev();
extern void _ZN8S79C5_nt3v77Ev();
extern void _ZN8S79C5_nt3v78Ev();
extern void _ZN8S79C5_nt3v79Ev();
extern void _ZN8S79C5_nt3v80Ev();
extern void _ZN8S79C5_nt3v81Ev();
extern void _ZN8S79C5_nt3v82Ev();
extern void _ZN8S79C5_nt3v83Ev();
extern void _ZN8S79C5_nt3v84Ev();
extern void _ZN8S79C5_nt3v85Ev();
extern void _ZN8S79C5_nt3v86Ev();
extern void _ZN8S79C5_nt3v87Ev();
extern void _ZN8S79C5_nt3v88Ev();
extern void _ZN8S79C5_nt3v89Ev();
extern void _ZN8S79C5_nt3v90Ev();
extern void _ZN8S79C5_nt3v91Ev();
extern void _ZN8S79C5_nt3v92Ev();
extern void _ZN8S79C5_nt3v93Ev();
extern void _ZN8S79C5_nt3v94Ev();
extern void _ZN8S79C5_nt3v95Ev();
extern void _ZN8S79C5_nt3v96Ev();
extern void _ZN8S79C5_nt3v97Ev();
extern void _ZN8S79C5_nt3v98Ev();
extern void _ZN8S79C5_nt3v99Ev();
extern void _ZN8S79C5_nt4v100Ev();
extern void _ZN8S79C5_nt4v101Ev();
extern void _ZN8S79C5_nt4v102Ev();
extern void _ZN8S79C5_nt4v103Ev();
extern void _ZN8S79C5_nt4v104Ev();
extern void _ZN8S79C5_nt4v105Ev();
extern void _ZN8S79C5_nt4v106Ev();
extern void _ZN8S79C5_nt4v107Ev();
extern void _ZN8S79C5_nt4v108Ev();
extern void _ZN8S79C5_nt4v109Ev();
extern void _ZN8S79C5_nt4v110Ev();
extern void _ZN8S79C5_nt4v111Ev();
extern void _ZN8S79C5_nt4v112Ev();
extern void _ZN8S79C5_nt4v113Ev();
extern void _ZN8S79C5_nt4v114Ev();
extern void _ZN8S79C5_nt4v115Ev();
extern void _ZN8S79C5_nt4v116Ev();
extern void _ZN8S79C5_nt4v117Ev();
extern void _ZN8S79C5_nt4v118Ev();
extern void _ZN8S79C5_nt4v119Ev();
extern void _ZN8S79C5_nt4v120Ev();
extern void _ZN8S79C5_nt4v121Ev();
extern void _ZN8S79C5_nt4v122Ev();
extern void _ZN8S79C5_nt4v123Ev();
extern void _ZN8S79C5_nt4v124Ev();
extern void _ZN8S79C5_nt4v125Ev();
extern void _ZN8S79C5_nt4v126Ev();
extern void _ZN8S79C5_nt4v127Ev();
extern void _ZN8S79C5_nt4v128Ev();
extern void _ZN8S79C5_nt4v129Ev();
extern void _ZN8S79C5_nt4v130Ev();
extern void _ZN8S79C5_nt4v131Ev();
extern void _ZN8S79C5_nt4v132Ev();
extern void _ZN8S79C5_nt4v133Ev();
extern void _ZN8S79C5_nt4v134Ev();
extern void _ZN8S79C5_nt4v135Ev();
extern void _ZN8S79C5_nt4v136Ev();
extern void _ZN8S79C5_nt4v137Ev();
extern void _ZN8S79C5_nt4v138Ev();
extern void _ZN8S79C5_nt4v139Ev();
extern void _ZN8S79C5_nt4v140Ev();
extern void _ZN8S79C5_nt4v141Ev();
extern void _ZN8S79C5_nt4v142Ev();
extern void _ZN8S79C5_nt4v143Ev();
extern void _ZN8S79C5_nt4v144Ev();
extern void _ZN8S79C5_nt4v145Ev();
extern void _ZN8S79C4_nt4v146Ev();
extern void _ZN8S79C4_nt4v147Ev();
extern void _ZN8S79C4_nt4v148Ev();
extern void _ZN8S79C4_nt4v149Ev();
extern void _ZN8S79C4_nt4v150Ev();
extern void _ZN8S79C4_nt4v151Ev();
extern void _ZN8S79C4_nt4v152Ev();
extern void _ZN8S79C4_nt4v153Ev();
extern void _ZN8S79C4_nt4v154Ev();
extern void _ZN8S79C4_nt4v155Ev();
extern void _ZN8S79C4_nt4v156Ev();
extern void _ZN8S79C4_nt4v157Ev();
extern void _ZN8S79C4_nt4v158Ev();
extern void _ZN8S79C4_nt4v159Ev();
extern void _ZN8S79C4_nt4v160Ev();
extern void _ZN8S79C4_nt4v161Ev();
extern void _ZN8S79C4_nt4v162Ev();
extern void _ZN8S79C4_nt4v163Ev();
extern void _ZN8S79C4_nt4v164Ev();
extern void _ZN8S79C4_nt4v165Ev();
extern void _ZN8S79C4_nt4v166Ev();
extern void _ZN8S79C4_nt4v167Ev();
extern void _ZN8S79C4_nt4v168Ev();
extern void _ZN8S79C4_nt4v169Ev();
extern void _ZN8S79C4_nt4v170Ev();
extern void _ZN8S79C4_nt4v171Ev();
extern void _ZN8S79C4_nt4v172Ev();
extern void _ZN8S79C4_nt4v173Ev();
extern void _ZN8S79C4_nt4v174Ev();
extern void _ZN8S79C4_nt4v175Ev();
extern void _ZN8S79C4_nt4v176Ev();
extern void _ZN8S79C4_nt4v177Ev();
extern void _ZN8S79C4_nt4v178Ev();
extern void _ZN8S79C4_nt4v179Ev();
extern void _ZN8S79C4_nt4v180Ev();
extern void _ZN8S79C4_nt4v181Ev();
extern void _ZN8S79C4_nt4v182Ev();
extern void _ZN8S79C4_nt4v183Ev();
extern void _ZN8S79C4_nt4v184Ev();
extern void _ZN8S79C4_nt4v185Ev();
extern void _ZN8S79C4_nt4v186Ev();
extern void _ZN8S79C4_nt4v187Ev();
extern void _ZN8S79C4_nt4v188Ev();
extern void _ZN8S79C4_nt4v189Ev();
extern void _ZN8S79C4_nt4v190Ev();
extern void _ZN8S79C4_nt4v191Ev();
extern void _ZN8S79C4_nt4v192Ev();
extern void _ZN8S79C4_nt4v193Ev();
extern void _ZN8S79C4_nt4v194Ev();
extern void _ZN8S79C4_nt4v195Ev();
extern void _ZN8S79C4_nt4v196Ev();
extern void _ZN8S79C4_nt4v197Ev();
extern void _ZN8S79C4_nt4v198Ev();
extern void _ZN8S79C4_nt4v199Ev();
extern void _ZN8S79C4_nt4v200Ev();
extern void _ZN8S79C4_nt4v201Ev();
extern void _ZN8S79C4_nt4v202Ev();
extern void _ZN8S79C4_nt4v203Ev();
extern void _ZN8S79C4_nt4v204Ev();
extern void _ZN8S79C4_nt4v205Ev();
extern void _ZN8S79C4_nt4v206Ev();
extern void _ZN8S79C4_nt4v207Ev();
extern void _ZN8S79C4_nt4v208Ev();
extern void _ZN8S79C4_nt4v209Ev();
extern void _ZN8S79C4_nt4v210Ev();
extern void _ZN8S79C4_nt4v211Ev();
extern void _ZN8S79C4_nt4v212Ev();
extern void _ZN8S79C4_nt4v213Ev();
extern void _ZN8S79C4_nt4v214Ev();
extern void _ZN8S79C3_nt4v215Ev();
extern void _ZN8S79C3_nt4v216Ev();
extern void _ZN8S79C3_nt4v217Ev();
extern void _ZN8S79C3_nt4v218Ev();
extern void _ZN8S79C3_nt4v219Ev();
extern void _ZN8S79C3_nt4v220Ev();
extern void _ZN8S79C2_nt4v221Ev();
extern void _ZN8S79C2_nt4v222Ev();
extern void _ZN8S79C2_nt4v223Ev();
static  VTBL_ENTRY vtc_S79C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S79C2_nt[0]),
  (VTBL_ENTRY)&_ZN8S79C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN8S79C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v4Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v6Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v7Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v9Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v13Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v14Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v16Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v17Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v19Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v20Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v21Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v22Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v23Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v24Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v25Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v26Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v27Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v28Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v29Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v30Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v31Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v32Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v33Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v34Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v35Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v36Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v37Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v38Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v39Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v40Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v41Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v42Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v43Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v44Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v45Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v46Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v47Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v48Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v49Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v50Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v51Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v52Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v53Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v54Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v55Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v56Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v57Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v58Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v59Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v60Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v61Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v62Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v63Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v64Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v65Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v66Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v67Ev,
  (VTBL_ENTRY)&_ZN8S79C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN8S79C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v91Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v92Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v93Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v94Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v95Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v96Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v97Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v98Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v99Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v100Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v101Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v102Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v103Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v104Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v105Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v106Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v107Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v108Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v109Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v110Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v111Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v112Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v113Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v114Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v115Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v116Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v117Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v118Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v119Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v120Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v121Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v122Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v123Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v124Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v125Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v126Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v127Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v128Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v129Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v130Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v131Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v132Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v133Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v134Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v135Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v136Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v137Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v138Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v139Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v140Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v141Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v142Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v143Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v144Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v145Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v146Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v147Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v148Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v149Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v150Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v151Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v152Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v153Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v154Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v155Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v156Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v157Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v158Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v159Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v160Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v161Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v162Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v163Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v164Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v165Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v166Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v167Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v168Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v169Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v170Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v171Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v172Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v173Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v174Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v175Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v176Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v177Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v178Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v179Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v180Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v181Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v182Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v183Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v184Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v185Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v186Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v187Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v188Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v189Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v190Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v191Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v192Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v193Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v194Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v195Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v196Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v197Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v198Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v199Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v200Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v201Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v202Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v203Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v204Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v205Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v206Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v207Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v208Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v209Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v210Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v211Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v212Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v213Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v214Ev,
  (VTBL_ENTRY)&_ZN8S79C3_nt4v215Ev,
  (VTBL_ENTRY)&_ZN8S79C3_nt4v216Ev,
  (VTBL_ENTRY)&_ZN8S79C3_nt4v217Ev,
  (VTBL_ENTRY)&_ZN8S79C3_nt4v218Ev,
  (VTBL_ENTRY)&_ZN8S79C3_nt4v219Ev,
  (VTBL_ENTRY)&_ZN8S79C3_nt4v220Ev,
  (VTBL_ENTRY)&_ZN8S79C2_nt4v221Ev,
  (VTBL_ENTRY)&_ZN8S79C2_nt4v222Ev,
  (VTBL_ENTRY)&_ZN8S79C2_nt4v223Ev,
};
extern VTBL_ENTRY _ZTI8S79C2_nt[];
VTBL_ENTRY *P__ZTI8S79C2_nt = _ZTI8S79C2_nt; 
extern  VTBL_ENTRY _ZTV8S79C2_nt[];
Class_Descriptor cd_S79C2_nt = {  "S79C2_nt", // class name
  bases_S79C2_nt, 5,
  &(vtc_S79C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1296,956), // object size
  NSPAIRA(_ZTI8S79C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S79C2_nt),224, //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  S79C1  : S79C2_nt {
  void *s79c1f0[2];
  unsigned int s79c1f1:1;
  ::S79C32_nt s79c1f2[2];
  ::S79C32_nt s79c1f3[2];
  int s79c1f4;
  ::S79C39_nt s79c1f5[2];
  ::S79C39_nt s79c1f6;
  virtual  ~S79C1(); // _ZN5S79C1D1Ev
  virtual void  v1(); // _ZN5S79C12v1Ev
  virtual void  v2(); // _ZN5S79C12v2Ev
  virtual void  v3(); // _ZN5S79C12v3Ev
  S79C1(); // tgen
};
//SIG(1 S79C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd 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 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v68 v69} vd 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 v141 v142 v143 v144 v145 FC9{ m Fi[4] Fc[9]} Fi Fi:1 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC12{ m Fp Fi[2]}}} FC10 Fp FC13{ BC14{ BC12}} FC13 FC13 FC15{ BC16{ BC12}} Fc Fi Fp FC8 FC8 FC8 FC8 FC8 FC8 FC17{ m Fp FC8} FC17 FC17 FC17 FC17 FC17 FC17 FC17 FC17 FC17} vd v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 v176 v177 v178 v179 v180 v181 v182 v183 v184 v185 v186 v187 v188 v189 v190 v191 v192 v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 v208 v209 v210 v211 v212 v213 v214 FC18{ BC19{ m Fi[4]}} FC8 Fp[2] FC20{ m FC8 Fp FC18 Fp} FC21{ m Fp[8] Fc[4]} Fi FC22{ m Fp[5] FC23{ m Fi[4] Fc[4]} Fi:1 Fi:1 Fi Fc[8]} Fi[4] FC8[4] FC24{ m FC25{ m Fi[3]} FC26{ m} FC27{ BC28{ m Fi[2] Fc[2]} Fi} Fc} FC25 Fi FC29{ m FC30{ BC31{ m Fp[2]}} Fc FC32{ BC33{ BC34{ BC12}}} Fi FC8 FC8 Fp} FC29 Fp FC25 FC15 FC35{ BC36{ BC12}} Fi:1 Fi:1 Fi:1 FC26 FC17 FC17 FC17 FC17 FC17 FC17 FC17 FC17 FC17 FC17 FC17 FC17 FC17} vd v215 v216 v217 v218 v219 v220 Fi:1 Fp} vd v221 v222 v223 Fi:1 Fp Fi[5] FC17} vd v1 v2 v3 Fp[2] Fi:1 FC26[2] FC26[2] Fi FC32[2] FC32}


 S79C1 ::~S79C1(){ note_dtor("S79C1", this);}
void  S79C1 ::v1(){vfunc_called(this, "_ZN5S79C12v1Ev");}
void  S79C1 ::v2(){vfunc_called(this, "_ZN5S79C12v2Ev");}
void  S79C1 ::v3(){vfunc_called(this, "_ZN5S79C12v3Ev");}
S79C1 ::S79C1(){ note_ctor("S79C1", this);} // tgen

static void Test_S79C1()
{
  extern Class_Descriptor cd_S79C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(173,254)];
    init_test(&cd_S79C1, buf);
    S79C1 *dp, &lv = *(dp=new (buf) S79C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1376,1012), "sizeof(S79C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S79C1)");
    check_base_class_offset(lv, (S79C7_nt*)(S79C6_nt*)(S79C5_nt*)(S79C4_nt*)(S79C3_nt*)(S79C2_nt*), 0, "S79C1");
    check_base_class_offset(lv, (S79C6_nt*)(S79C5_nt*)(S79C4_nt*)(S79C3_nt*)(S79C2_nt*), 0, "S79C1");
    check_base_class_offset(lv, (S79C5_nt*)(S79C4_nt*)(S79C3_nt*)(S79C2_nt*), 0, "S79C1");
    check_base_class_offset(lv, (S79C4_nt*)(S79C3_nt*)(S79C2_nt*), 0, "S79C1");
    check_base_class_offset(lv, (S79C3_nt*)(S79C2_nt*), 0, "S79C1");
    check_base_class_offset(lv, (S79C2_nt*), 0, "S79C1");
    check_field_offset(lv, s79c1f0, ABISELECT(1296,956), "S79C1.s79c1f0");
    set_bf_and_test(lv, s79c1f1, ABISELECT(1312,964), 0, 1, 1, "S79C1");
    check_field_offset(lv, s79c1f2, ABISELECT(1313,965), "S79C1.s79c1f2");
    check_field_offset(lv, s79c1f3, ABISELECT(1315,967), "S79C1.s79c1f3");
    check_field_offset(lv, s79c1f4, ABISELECT(1320,972), "S79C1.s79c1f4");
    check_field_offset(lv, s79c1f5, ABISELECT(1328,976), "S79C1.s79c1f5");
    check_field_offset(lv, s79c1f6, ABISELECT(1360,1000), "S79C1.s79c1f6");
    test_class_info(&lv, &cd_S79C1);
    dp->~S79C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS79C1(Test_S79C1, "S79C1", ABISELECT(1376,1012));

#else // __cplusplus

extern void _ZN5S79C1C1Ev();
extern void _ZN5S79C1D1Ev();
Name_Map name_map_S79C1[] = {
  NSPAIR(_ZN5S79C1C1Ev),
  NSPAIR(_ZN5S79C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S79C7_nt;
extern VTBL_ENTRY _ZTI8S79C7_nt[];
extern  VTBL_ENTRY _ZTV8S79C7_nt[];
extern Class_Descriptor cd_S79C6_nt;
extern VTBL_ENTRY _ZTI8S79C6_nt[];
extern  VTBL_ENTRY _ZTV8S79C6_nt[];
extern Class_Descriptor cd_S79C5_nt;
extern VTBL_ENTRY _ZTI8S79C5_nt[];
extern  VTBL_ENTRY _ZTV8S79C5_nt[];
extern Class_Descriptor cd_S79C4_nt;
extern VTBL_ENTRY _ZTI8S79C4_nt[];
extern  VTBL_ENTRY _ZTV8S79C4_nt[];
extern Class_Descriptor cd_S79C3_nt;
extern VTBL_ENTRY _ZTI8S79C3_nt[];
extern  VTBL_ENTRY _ZTV8S79C3_nt[];
extern Class_Descriptor cd_S79C2_nt;
extern VTBL_ENTRY _ZTI8S79C2_nt[];
extern  VTBL_ENTRY _ZTV8S79C2_nt[];
static Base_Class bases_S79C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S79C7_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_S79C6_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_S79C5_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
    3, //immediately_derived
  0, 0},
  {&cd_S79C4_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
    4, //immediately_derived
  0, 0},
  {&cd_S79C3_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
    5, //immediately_derived
  0, 0},
  {&cd_S79C2_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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S79C1[];
extern void _ZN5S79C1D1Ev();
extern void _ZN5S79C1D0Ev();
extern void _ZN8S79C7_nt2v4Ev();
extern void _ZN8S79C7_nt2v5Ev();
extern void _ZN8S79C7_nt2v6Ev();
extern void _ZN8S79C7_nt2v7Ev();
extern void _ZN8S79C7_nt2v8Ev();
extern void _ZN8S79C7_nt2v9Ev();
extern void _ZN8S79C7_nt3v10Ev();
extern void _ZN8S79C7_nt3v11Ev();
extern void _ZN8S79C7_nt3v12Ev();
extern void _ZN8S79C7_nt3v13Ev();
extern void _ZN8S79C7_nt3v14Ev();
extern void _ZN8S79C7_nt3v15Ev();
extern void _ZN8S79C7_nt3v16Ev();
extern void _ZN8S79C7_nt3v17Ev();
extern void _ZN8S79C7_nt3v18Ev();
extern void _ZN8S79C7_nt3v19Ev();
extern void _ZN8S79C7_nt3v20Ev();
extern void _ZN8S79C7_nt3v21Ev();
extern void _ZN8S79C7_nt3v22Ev();
extern void _ZN8S79C7_nt3v23Ev();
extern void _ZN8S79C7_nt3v24Ev();
extern void _ZN8S79C7_nt3v25Ev();
extern void _ZN8S79C7_nt3v26Ev();
extern void _ZN8S79C7_nt3v27Ev();
extern void _ZN8S79C7_nt3v28Ev();
extern void _ZN8S79C7_nt3v29Ev();
extern void _ZN8S79C7_nt3v30Ev();
extern void _ZN8S79C7_nt3v31Ev();
extern void _ZN8S79C7_nt3v32Ev();
extern void _ZN8S79C7_nt3v33Ev();
extern void _ZN8S79C7_nt3v34Ev();
extern void _ZN8S79C7_nt3v35Ev();
extern void _ZN8S79C7_nt3v36Ev();
extern void _ZN8S79C7_nt3v37Ev();
extern void _ZN8S79C7_nt3v38Ev();
extern void _ZN8S79C7_nt3v39Ev();
extern void _ZN8S79C7_nt3v40Ev();
extern void _ZN8S79C7_nt3v41Ev();
extern void _ZN8S79C7_nt3v42Ev();
extern void _ZN8S79C7_nt3v43Ev();
extern void _ZN8S79C7_nt3v44Ev();
extern void _ZN8S79C7_nt3v45Ev();
extern void _ZN8S79C7_nt3v46Ev();
extern void _ZN8S79C7_nt3v47Ev();
extern void _ZN8S79C7_nt3v48Ev();
extern void _ZN8S79C7_nt3v49Ev();
extern void _ZN8S79C7_nt3v50Ev();
extern void _ZN8S79C7_nt3v51Ev();
extern void _ZN8S79C7_nt3v52Ev();
extern void _ZN8S79C7_nt3v53Ev();
extern void _ZN8S79C7_nt3v54Ev();
extern void _ZN8S79C7_nt3v55Ev();
extern void _ZN8S79C7_nt3v56Ev();
extern void _ZN8S79C7_nt3v57Ev();
extern void _ZN8S79C7_nt3v58Ev();
extern void _ZN8S79C7_nt3v59Ev();
extern void _ZN8S79C7_nt3v60Ev();
extern void _ZN8S79C7_nt3v61Ev();
extern void _ZN8S79C7_nt3v62Ev();
extern void _ZN8S79C7_nt3v63Ev();
extern void _ZN8S79C7_nt3v64Ev();
extern void _ZN8S79C7_nt3v65Ev();
extern void _ZN8S79C7_nt3v66Ev();
extern void _ZN8S79C7_nt3v67Ev();
extern void _ZN8S79C6_nt3v68Ev();
extern void _ZN8S79C6_nt3v69Ev();
extern void _ZN8S79C5_nt3v70Ev();
extern void _ZN8S79C5_nt3v71Ev();
extern void _ZN8S79C5_nt3v72Ev();
extern void _ZN8S79C5_nt3v73Ev();
extern void _ZN8S79C5_nt3v74Ev();
extern void _ZN8S79C5_nt3v75Ev();
extern void _ZN8S79C5_nt3v76Ev();
extern void _ZN8S79C5_nt3v77Ev();
extern void _ZN8S79C5_nt3v78Ev();
extern void _ZN8S79C5_nt3v79Ev();
extern void _ZN8S79C5_nt3v80Ev();
extern void _ZN8S79C5_nt3v81Ev();
extern void _ZN8S79C5_nt3v82Ev();
extern void _ZN8S79C5_nt3v83Ev();
extern void _ZN8S79C5_nt3v84Ev();
extern void _ZN8S79C5_nt3v85Ev();
extern void _ZN8S79C5_nt3v86Ev();
extern void _ZN8S79C5_nt3v87Ev();
extern void _ZN8S79C5_nt3v88Ev();
extern void _ZN8S79C5_nt3v89Ev();
extern void _ZN8S79C5_nt3v90Ev();
extern void _ZN8S79C5_nt3v91Ev();
extern void _ZN8S79C5_nt3v92Ev();
extern void _ZN8S79C5_nt3v93Ev();
extern void _ZN8S79C5_nt3v94Ev();
extern void _ZN8S79C5_nt3v95Ev();
extern void _ZN8S79C5_nt3v96Ev();
extern void _ZN8S79C5_nt3v97Ev();
extern void _ZN8S79C5_nt3v98Ev();
extern void _ZN8S79C5_nt3v99Ev();
extern void _ZN8S79C5_nt4v100Ev();
extern void _ZN8S79C5_nt4v101Ev();
extern void _ZN8S79C5_nt4v102Ev();
extern void _ZN8S79C5_nt4v103Ev();
extern void _ZN8S79C5_nt4v104Ev();
extern void _ZN8S79C5_nt4v105Ev();
extern void _ZN8S79C5_nt4v106Ev();
extern void _ZN8S79C5_nt4v107Ev();
extern void _ZN8S79C5_nt4v108Ev();
extern void _ZN8S79C5_nt4v109Ev();
extern void _ZN8S79C5_nt4v110Ev();
extern void _ZN8S79C5_nt4v111Ev();
extern void _ZN8S79C5_nt4v112Ev();
extern void _ZN8S79C5_nt4v113Ev();
extern void _ZN8S79C5_nt4v114Ev();
extern void _ZN8S79C5_nt4v115Ev();
extern void _ZN8S79C5_nt4v116Ev();
extern void _ZN8S79C5_nt4v117Ev();
extern void _ZN8S79C5_nt4v118Ev();
extern void _ZN8S79C5_nt4v119Ev();
extern void _ZN8S79C5_nt4v120Ev();
extern void _ZN8S79C5_nt4v121Ev();
extern void _ZN8S79C5_nt4v122Ev();
extern void _ZN8S79C5_nt4v123Ev();
extern void _ZN8S79C5_nt4v124Ev();
extern void _ZN8S79C5_nt4v125Ev();
extern void _ZN8S79C5_nt4v126Ev();
extern void _ZN8S79C5_nt4v127Ev();
extern void _ZN8S79C5_nt4v128Ev();
extern void _ZN8S79C5_nt4v129Ev();
extern void _ZN8S79C5_nt4v130Ev();
extern void _ZN8S79C5_nt4v131Ev();
extern void _ZN8S79C5_nt4v132Ev();
extern void _ZN8S79C5_nt4v133Ev();
extern void _ZN8S79C5_nt4v134Ev();
extern void _ZN8S79C5_nt4v135Ev();
extern void _ZN8S79C5_nt4v136Ev();
extern void _ZN8S79C5_nt4v137Ev();
extern void _ZN8S79C5_nt4v138Ev();
extern void _ZN8S79C5_nt4v139Ev();
extern void _ZN8S79C5_nt4v140Ev();
extern void _ZN8S79C5_nt4v141Ev();
extern void _ZN8S79C5_nt4v142Ev();
extern void _ZN8S79C5_nt4v143Ev();
extern void _ZN8S79C5_nt4v144Ev();
extern void _ZN8S79C5_nt4v145Ev();
extern void _ZN8S79C4_nt4v146Ev();
extern void _ZN8S79C4_nt4v147Ev();
extern void _ZN8S79C4_nt4v148Ev();
extern void _ZN8S79C4_nt4v149Ev();
extern void _ZN8S79C4_nt4v150Ev();
extern void _ZN8S79C4_nt4v151Ev();
extern void _ZN8S79C4_nt4v152Ev();
extern void _ZN8S79C4_nt4v153Ev();
extern void _ZN8S79C4_nt4v154Ev();
extern void _ZN8S79C4_nt4v155Ev();
extern void _ZN8S79C4_nt4v156Ev();
extern void _ZN8S79C4_nt4v157Ev();
extern void _ZN8S79C4_nt4v158Ev();
extern void _ZN8S79C4_nt4v159Ev();
extern void _ZN8S79C4_nt4v160Ev();
extern void _ZN8S79C4_nt4v161Ev();
extern void _ZN8S79C4_nt4v162Ev();
extern void _ZN8S79C4_nt4v163Ev();
extern void _ZN8S79C4_nt4v164Ev();
extern void _ZN8S79C4_nt4v165Ev();
extern void _ZN8S79C4_nt4v166Ev();
extern void _ZN8S79C4_nt4v167Ev();
extern void _ZN8S79C4_nt4v168Ev();
extern void _ZN8S79C4_nt4v169Ev();
extern void _ZN8S79C4_nt4v170Ev();
extern void _ZN8S79C4_nt4v171Ev();
extern void _ZN8S79C4_nt4v172Ev();
extern void _ZN8S79C4_nt4v173Ev();
extern void _ZN8S79C4_nt4v174Ev();
extern void _ZN8S79C4_nt4v175Ev();
extern void _ZN8S79C4_nt4v176Ev();
extern void _ZN8S79C4_nt4v177Ev();
extern void _ZN8S79C4_nt4v178Ev();
extern void _ZN8S79C4_nt4v179Ev();
extern void _ZN8S79C4_nt4v180Ev();
extern void _ZN8S79C4_nt4v181Ev();
extern void _ZN8S79C4_nt4v182Ev();
extern void _ZN8S79C4_nt4v183Ev();
extern void _ZN8S79C4_nt4v184Ev();
extern void _ZN8S79C4_nt4v185Ev();
extern void _ZN8S79C4_nt4v186Ev();
extern void _ZN8S79C4_nt4v187Ev();
extern void _ZN8S79C4_nt4v188Ev();
extern void _ZN8S79C4_nt4v189Ev();
extern void _ZN8S79C4_nt4v190Ev();
extern void _ZN8S79C4_nt4v191Ev();
extern void _ZN8S79C4_nt4v192Ev();
extern void _ZN8S79C4_nt4v193Ev();
extern void _ZN8S79C4_nt4v194Ev();
extern void _ZN8S79C4_nt4v195Ev();
extern void _ZN8S79C4_nt4v196Ev();
extern void _ZN8S79C4_nt4v197Ev();
extern void _ZN8S79C4_nt4v198Ev();
extern void _ZN8S79C4_nt4v199Ev();
extern void _ZN8S79C4_nt4v200Ev();
extern void _ZN8S79C4_nt4v201Ev();
extern void _ZN8S79C4_nt4v202Ev();
extern void _ZN8S79C4_nt4v203Ev();
extern void _ZN8S79C4_nt4v204Ev();
extern void _ZN8S79C4_nt4v205Ev();
extern void _ZN8S79C4_nt4v206Ev();
extern void _ZN8S79C4_nt4v207Ev();
extern void _ZN8S79C4_nt4v208Ev();
extern void _ZN8S79C4_nt4v209Ev();
extern void _ZN8S79C4_nt4v210Ev();
extern void _ZN8S79C4_nt4v211Ev();
extern void _ZN8S79C4_nt4v212Ev();
extern void _ZN8S79C4_nt4v213Ev();
extern void _ZN8S79C4_nt4v214Ev();
extern void _ZN8S79C3_nt4v215Ev();
extern void _ZN8S79C3_nt4v216Ev();
extern void _ZN8S79C3_nt4v217Ev();
extern void _ZN8S79C3_nt4v218Ev();
extern void _ZN8S79C3_nt4v219Ev();
extern void _ZN8S79C3_nt4v220Ev();
extern void _ZN8S79C2_nt4v221Ev();
extern void _ZN8S79C2_nt4v222Ev();
extern void _ZN8S79C2_nt4v223Ev();
extern void _ZN5S79C12v1Ev();
extern void _ZN5S79C12v2Ev();
extern void _ZN5S79C12v3Ev();
static  VTBL_ENTRY vtc_S79C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S79C1[0]),
  (VTBL_ENTRY)&_ZN5S79C1D1Ev,
  (VTBL_ENTRY)&_ZN5S79C1D0Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v4Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v6Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v7Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt2v9Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v13Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v14Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v16Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v17Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v19Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v20Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v21Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v22Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v23Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v24Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v25Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v26Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v27Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v28Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v29Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v30Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v31Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v32Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v33Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v34Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v35Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v36Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v37Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v38Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v39Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v40Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v41Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v42Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v43Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v44Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v45Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v46Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v47Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v48Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v49Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v50Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v51Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v52Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v53Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v54Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v55Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v56Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v57Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v58Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v59Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v60Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v61Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v62Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v63Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v64Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v65Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v66Ev,
  (VTBL_ENTRY)&_ZN8S79C7_nt3v67Ev,
  (VTBL_ENTRY)&_ZN8S79C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN8S79C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v91Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v92Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v93Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v94Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v95Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v96Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v97Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v98Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt3v99Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v100Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v101Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v102Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v103Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v104Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v105Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v106Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v107Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v108Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v109Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v110Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v111Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v112Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v113Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v114Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v115Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v116Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v117Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v118Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v119Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v120Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v121Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v122Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v123Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v124Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v125Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v126Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v127Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v128Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v129Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v130Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v131Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v132Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v133Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v134Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v135Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v136Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v137Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v138Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v139Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v140Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v141Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v142Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v143Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v144Ev,
  (VTBL_ENTRY)&_ZN8S79C5_nt4v145Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v146Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v147Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v148Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v149Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v150Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v151Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v152Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v153Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v154Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v155Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v156Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v157Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v158Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v159Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v160Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v161Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v162Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v163Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v164Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v165Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v166Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v167Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v168Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v169Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v170Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v171Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v172Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v173Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v174Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v175Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v176Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v177Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v178Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v179Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v180Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v181Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v182Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v183Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v184Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v185Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v186Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v187Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v188Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v189Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v190Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v191Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v192Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v193Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v194Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v195Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v196Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v197Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v198Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v199Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v200Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v201Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v202Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v203Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v204Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v205Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v206Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v207Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v208Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v209Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v210Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v211Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v212Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v213Ev,
  (VTBL_ENTRY)&_ZN8S79C4_nt4v214Ev,
  (VTBL_ENTRY)&_ZN8S79C3_nt4v215Ev,
  (VTBL_ENTRY)&_ZN8S79C3_nt4v216Ev,
  (VTBL_ENTRY)&_ZN8S79C3_nt4v217Ev,
  (VTBL_ENTRY)&_ZN8S79C3_nt4v218Ev,
  (VTBL_ENTRY)&_ZN8S79C3_nt4v219Ev,
  (VTBL_ENTRY)&_ZN8S79C3_nt4v220Ev,
  (VTBL_ENTRY)&_ZN8S79C2_nt4v221Ev,
  (VTBL_ENTRY)&_ZN8S79C2_nt4v222Ev,
  (VTBL_ENTRY)&_ZN8S79C2_nt4v223Ev,
  (VTBL_ENTRY)&_ZN5S79C12v1Ev,
  (VTBL_ENTRY)&_ZN5S79C12v2Ev,
  (VTBL_ENTRY)&_ZN5S79C12v3Ev,
};
extern VTBL_ENTRY _ZTI5S79C1[];
extern  VTBL_ENTRY _ZTV5S79C1[];
Class_Descriptor cd_S79C1 = {  "S79C1", // class name
  bases_S79C1, 6,
  &(vtc_S79C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1376,1012), // object size
  NSPAIRA(_ZTI5S79C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S79C1),227, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5266C7_nt  {
  void  mf5266c7(); // _ZN10S5266C7_nt8mf5266c7Ev
};
//SIG(-1 S5266C7_nt) C1{ m}


void  S5266C7_nt ::mf5266c7(){}

//skip512 S5266C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5266C5_nt  {
  void *s5266c5f0;
  int s5266c5f1;
  ::S79C32_nt s5266c5f2;
  ::S5266C7_nt s5266c5f3;
  void  mf5266c5(); // _ZN10S5266C5_nt8mf5266c5Ev
};
//SIG(-1 S5266C5_nt) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S5266C5_nt ::mf5266c5(){}

//skip512 S5266C5_nt

#else // __cplusplus

Class_Descriptor cd_S5266C5_nt = {  "S5266C5_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  S5266C4_nt  : S5266C5_nt {
};
//SIG(-1 S5266C4_nt) C1{ BC2{ m Fp Fi FC3{ m} FC4{ m}}}



//skip512 S5266C4_nt

#else // __cplusplus

extern Class_Descriptor cd_S5266C5_nt;
static Base_Class bases_S5266C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C5_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  S5266C3_nt  {
  void *s5266c3f0;
  int s5266c3f1;
  ::S5266C4_nt s5266c3f2;
  ::S5266C4_nt s5266c3f3;
  int s5266c3f4;
  virtual  ~S5266C3_nt(); // _ZN10S5266C3_ntD1Ev
  virtual void  v5(); // _ZN10S5266C3_nt2v5Ev
  virtual void  v6(); // _ZN10S5266C3_nt2v6Ev
  virtual void  v7(); // _ZN10S5266C3_nt2v7Ev
  virtual void  v8(); // _ZN10S5266C3_nt2v8Ev
  virtual void  v9(); // _ZN10S5266C3_nt2v9Ev
  virtual void  v10(); // _ZN10S5266C3_nt3v10Ev
  virtual void  v11(); // _ZN10S5266C3_nt3v11Ev
  virtual void  v12(); // _ZN10S5266C3_nt3v12Ev
  virtual void  v13(); // _ZN10S5266C3_nt3v13Ev
  virtual void  v14(); // _ZN10S5266C3_nt3v14Ev
  virtual void  v15(); // _ZN10S5266C3_nt3v15Ev
  virtual void  v16(); // _ZN10S5266C3_nt3v16Ev
  virtual void  v17(); // _ZN10S5266C3_nt3v17Ev
  virtual void  v18(); // _ZN10S5266C3_nt3v18Ev
  virtual void  v19(); // _ZN10S5266C3_nt3v19Ev
  virtual void  v20(); // _ZN10S5266C3_nt3v20Ev
  virtual void  v21(); // _ZN10S5266C3_nt3v21Ev
  virtual void  v22(); // _ZN10S5266C3_nt3v22Ev
  virtual void  v23(); // _ZN10S5266C3_nt3v23Ev
  virtual void  v24(); // _ZN10S5266C3_nt3v24Ev
  virtual void  v25(); // _ZN10S5266C3_nt3v25Ev
  virtual void  v26(); // _ZN10S5266C3_nt3v26Ev
  virtual void  v27(); // _ZN10S5266C3_nt3v27Ev
  S5266C3_nt(); // tgen
};
//SIG(-1 S5266C3_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} FC5{ m}}} FC2 Fi}


 S5266C3_nt ::~S5266C3_nt(){ note_dtor("S5266C3_nt", this);}
void  S5266C3_nt ::v5(){vfunc_called(this, "_ZN10S5266C3_nt2v5Ev");}
void  S5266C3_nt ::v6(){vfunc_called(this, "_ZN10S5266C3_nt2v6Ev");}
void  S5266C3_nt ::v7(){vfunc_called(this, "_ZN10S5266C3_nt2v7Ev");}
void  S5266C3_nt ::v8(){vfunc_called(this, "_ZN10S5266C3_nt2v8Ev");}
void  S5266C3_nt ::v9(){vfunc_called(this, "_ZN10S5266C3_nt2v9Ev");}
void  S5266C3_nt ::v10(){vfunc_called(this, "_ZN10S5266C3_nt3v10Ev");}
void  S5266C3_nt ::v11(){vfunc_called(this, "_ZN10S5266C3_nt3v11Ev");}
void  S5266C3_nt ::v12(){vfunc_called(this, "_ZN10S5266C3_nt3v12Ev");}
void  S5266C3_nt ::v13(){vfunc_called(this, "_ZN10S5266C3_nt3v13Ev");}
void  S5266C3_nt ::v14(){vfunc_called(this, "_ZN10S5266C3_nt3v14Ev");}
void  S5266C3_nt ::v15(){vfunc_called(this, "_ZN10S5266C3_nt3v15Ev");}
void  S5266C3_nt ::v16(){vfunc_called(this, "_ZN10S5266C3_nt3v16Ev");}
void  S5266C3_nt ::v17(){vfunc_called(this, "_ZN10S5266C3_nt3v17Ev");}
void  S5266C3_nt ::v18(){vfunc_called(this, "_ZN10S5266C3_nt3v18Ev");}
void  S5266C3_nt ::v19(){vfunc_called(this, "_ZN10S5266C3_nt3v19Ev");}
void  S5266C3_nt ::v20(){vfunc_called(this, "_ZN10S5266C3_nt3v20Ev");}
void  S5266C3_nt ::v21(){vfunc_called(this, "_ZN10S5266C3_nt3v21Ev");}
void  S5266C3_nt ::v22(){vfunc_called(this, "_ZN10S5266C3_nt3v22Ev");}
void  S5266C3_nt ::v23(){vfunc_called(this, "_ZN10S5266C3_nt3v23Ev");}
void  S5266C3_nt ::v24(){vfunc_called(this, "_ZN10S5266C3_nt3v24Ev");}
void  S5266C3_nt ::v25(){vfunc_called(this, "_ZN10S5266C3_nt3v25Ev");}
void  S5266C3_nt ::v26(){vfunc_called(this, "_ZN10S5266C3_nt3v26Ev");}
void  S5266C3_nt ::v27(){vfunc_called(this, "_ZN10S5266C3_nt3v27Ev");}
S5266C3_nt ::S5266C3_nt(){ note_ctor("S5266C3_nt", this);} // tgen

//skip512 S5266C3_nt

#else // __cplusplus

extern void _ZN10S5266C3_ntC1Ev();
extern void _ZN10S5266C3_ntD1Ev();
Name_Map name_map_S5266C3_nt[] = {
  NSPAIR(_ZN10S5266C3_ntC1Ev),
  NSPAIR(_ZN10S5266C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S5266C3_nt[];
extern void _ZN10S5266C3_ntD1Ev();
extern void _ZN10S5266C3_ntD0Ev();
extern void _ZN10S5266C3_nt2v5Ev();
extern void _ZN10S5266C3_nt2v6Ev();
extern void _ZN10S5266C3_nt2v7Ev();
extern void _ZN10S5266C3_nt2v8Ev();
extern void _ZN10S5266C3_nt2v9Ev();
extern void _ZN10S5266C3_nt3v10Ev();
extern void _ZN10S5266C3_nt3v11Ev();
extern void _ZN10S5266C3_nt3v12Ev();
extern void _ZN10S5266C3_nt3v13Ev();
extern void _ZN10S5266C3_nt3v14Ev();
extern void _ZN10S5266C3_nt3v15Ev();
extern void _ZN10S5266C3_nt3v16Ev();
extern void _ZN10S5266C3_nt3v17Ev();
extern void _ZN10S5266C3_nt3v18Ev();
extern void _ZN10S5266C3_nt3v19Ev();
extern void _ZN10S5266C3_nt3v20Ev();
extern void _ZN10S5266C3_nt3v21Ev();
extern void _ZN10S5266C3_nt3v22Ev();
extern void _ZN10S5266C3_nt3v23Ev();
extern void _ZN10S5266C3_nt3v24Ev();
extern void _ZN10S5266C3_nt3v25Ev();
extern void _ZN10S5266C3_nt3v26Ev();
extern void _ZN10S5266C3_nt3v27Ev();
static  VTBL_ENTRY vtc_S5266C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5266C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S5266C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v27Ev,
};
extern VTBL_ENTRY _ZTI10S5266C3_nt[];
VTBL_ENTRY *P__ZTI10S5266C3_nt = _ZTI10S5266C3_nt; 
extern  VTBL_ENTRY _ZTV10S5266C3_nt[];
Class_Descriptor cd_S5266C3_nt = {  "S5266C3_nt", // class name
  0,0,//no base classes
  &(vtc_S5266C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI10S5266C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S5266C3_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  S5266C13_nt  {
  __tsi64 s5266c13f0[2];
  void  mf5266c13(); // _ZN11S5266C13_nt9mf5266c13Ev
};
//SIG(-1 S5266C13_nt) C1{ m FL[2]}


void  S5266C13_nt ::mf5266c13(){}

//skip512 S5266C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5266C12_nt  {
  ::S5266C13_nt s5266c12f0;
  void  mf5266c12(); // _ZN11S5266C12_nt9mf5266c12Ev
};
//SIG(-1 S5266C12_nt) C1{ m FC2{ m FL[2]}}


void  S5266C12_nt ::mf5266c12(){}

//skip512 S5266C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5266C16_nt  {
  ::S5266C12_nt s5266c16f0;
  void  mf5266c16(); // _ZN11S5266C16_nt9mf5266c16Ev
};
//SIG(-1 S5266C16_nt) C1{ m FC2{ m FC3{ m FL[2]}}}


void  S5266C16_nt ::mf5266c16(){}

//skip512 S5266C16_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5266C17_nt  {
  ::S5266C12_nt s5266c17f0;
  ::S5266C12_nt s5266c17f1;
  ::S5266C12_nt s5266c17f2;
  ::S5266C12_nt s5266c17f3;
  void  mf5266c17(); // _ZN11S5266C17_nt9mf5266c17Ev
};
//SIG(-1 S5266C17_nt) C1{ m FC2{ m FC3{ m FL[2]}} FC2 FC2 FC2}


void  S5266C17_nt ::mf5266c17(){}

//skip512 S5266C17_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5266C19_nt  {
  void *s5266c19f0;
  int s5266c19f1;
  ::S5266C7_nt s5266c19f2;
  void  mf5266c19(); // _ZN11S5266C19_nt9mf5266c19Ev
};
//SIG(-1 S5266C19_nt) C1{ m Fp Fi FC2{ m}}


void  S5266C19_nt ::mf5266c19(){}

//skip512 S5266C19_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5266C18_nt  {
  ::S5266C19_nt s5266c18f0;
  int s5266c18f1;
  void  mf5266c18(); // _ZN11S5266C18_nt9mf5266c18Ev
};
//SIG(-1 S5266C18_nt) C1{ m FC2{ m Fp Fi FC3{ m}} Fi}


void  S5266C18_nt ::mf5266c18(){}

//skip512 S5266C18_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5266C22  {
  void  mf5266c22(); // _ZN8S5266C229mf5266c22Ev
};
//SIG(-1 S5266C22) C1{ m}


void  S5266C22 ::mf5266c22(){}

static void Test_S5266C22()
{
  {
    init_simple_test("S5266C22");
    S5266C22 lv;
    check2(sizeof(lv), 1, "sizeof(S5266C22)");
    check2(__alignof__(lv), 1, "__alignof__(S5266C22)");
  }
}
static Arrange_To_Call_Me vS5266C22(Test_S5266C22, "S5266C22", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S5266C22[];
VTBL_ENTRY *P__ZTI8S5266C22 = _ZTI8S5266C22; 
Class_Descriptor cd_S5266C22 = {  "S5266C22", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S5266C22),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  S5266C21  {
  void *s5266c21f0;
  int s5266c21f1;
  ::S5266C22 s5266c21f2;
  ::S5266C22 s5266c21f3;
  void  mf5266c21(); // _ZN8S5266C219mf5266c21Ev
};
//SIG(-1 S5266C21) C1{ m Fp Fi FC2{ m} FC2}


void  S5266C21 ::mf5266c21(){}

static void Test_S5266C21()
{
  {
    init_simple_test("S5266C21");
    S5266C21 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S5266C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5266C21)");
    check_field_offset(lv, s5266c21f0, 0, "S5266C21.s5266c21f0");
    check_field_offset(lv, s5266c21f1, ABISELECT(8,4), "S5266C21.s5266c21f1");
    check_field_offset(lv, s5266c21f2, ABISELECT(12,8), "S5266C21.s5266c21f2");
    check_field_offset(lv, s5266c21f3, ABISELECT(13,9), "S5266C21.s5266c21f3");
  }
}
static Arrange_To_Call_Me vS5266C21(Test_S5266C21, "S5266C21", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5266C26  {
  void  mf5266c26(); // _ZN8S5266C269mf5266c26Ev
};
//SIG(-1 S5266C26) C1{ m}


void  S5266C26 ::mf5266c26(){}

static void Test_S5266C26()
{
  {
    init_simple_test("S5266C26");
    S5266C26 lv;
    check2(sizeof(lv), 1, "sizeof(S5266C26)");
    check2(__alignof__(lv), 1, "__alignof__(S5266C26)");
  }
}
static Arrange_To_Call_Me vS5266C26(Test_S5266C26, "S5266C26", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S5266C26[];
VTBL_ENTRY *P__ZTI8S5266C26 = _ZTI8S5266C26; 
Class_Descriptor cd_S5266C26 = {  "S5266C26", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S5266C26),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  S5266C25  {
  void *s5266c25f0;
  int s5266c25f1;
  ::S5266C26 s5266c25f2;
  ::S5266C26 s5266c25f3;
  void  mf5266c25(); // _ZN8S5266C259mf5266c25Ev
};
//SIG(-1 S5266C25) C1{ m Fp Fi FC2{ m} FC2}


void  S5266C25 ::mf5266c25(){}

static void Test_S5266C25()
{
  {
    init_simple_test("S5266C25");
    S5266C25 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S5266C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5266C25)");
    check_field_offset(lv, s5266c25f0, 0, "S5266C25.s5266c25f0");
    check_field_offset(lv, s5266c25f1, ABISELECT(8,4), "S5266C25.s5266c25f1");
    check_field_offset(lv, s5266c25f2, ABISELECT(12,8), "S5266C25.s5266c25f2");
    check_field_offset(lv, s5266c25f3, ABISELECT(13,9), "S5266C25.s5266c25f3");
  }
}
static Arrange_To_Call_Me vS5266C25(Test_S5266C25, "S5266C25", ABISELECT(16,12));

#else // __cplusplus

Class_Descriptor cd_S5266C25 = {  "S5266C25", // 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  S5266C24  : S5266C25 {
};
//SIG(-1 S5266C24) C1{ BC2{ m Fp Fi FC3{ m} FC3}}



static void Test_S5266C24()
{
  extern Class_Descriptor cd_S5266C24;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S5266C24, buf);
    S5266C24 &lv = *(new (buf) S5266C24());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S5266C24)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5266C24)");
    check_base_class_offset(lv, (S5266C25*), 0, "S5266C24");
    test_class_info(&lv, &cd_S5266C24);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5266C24(Test_S5266C24, "S5266C24", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S5266C25;
static Base_Class bases_S5266C24[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C24 = {  "S5266C24", // class name
  bases_S5266C24, 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  S5266C29  {
  void  mf5266c29(); // _ZN8S5266C299mf5266c29Ev
};
//SIG(-1 S5266C29) C1{ m}


void  S5266C29 ::mf5266c29(){}

static void Test_S5266C29()
{
  {
    init_simple_test("S5266C29");
    S5266C29 lv;
    check2(sizeof(lv), 1, "sizeof(S5266C29)");
    check2(__alignof__(lv), 1, "__alignof__(S5266C29)");
  }
}
static Arrange_To_Call_Me vS5266C29(Test_S5266C29, "S5266C29", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S5266C29[];
VTBL_ENTRY *P__ZTI8S5266C29 = _ZTI8S5266C29; 
Class_Descriptor cd_S5266C29 = {  "S5266C29", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S5266C29),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  S5266C28_nt  {
  void *s5266c28f0;
  int s5266c28f1[2];
  ::S5266C29 s5266c28f2;
  void  mf5266c28(); // _ZN11S5266C28_nt9mf5266c28Ev
};
//SIG(-1 S5266C28_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S5266C28_nt ::mf5266c28(){}

//skip512 S5266C28_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5266C36  {
  void *s5266c36f0;
  int s5266c36f1[2];
  ::S5266C29 s5266c36f2;
  void  mf5266c36(); // _ZN8S5266C369mf5266c36Ev
};
//SIG(-1 S5266C36) C1{ m Fp Fi[2] FC2{ m}}


void  S5266C36 ::mf5266c36(){}

static void Test_S5266C36()
{
  {
    init_simple_test("S5266C36");
    S5266C36 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S5266C36)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5266C36)");
    check_field_offset(lv, s5266c36f0, 0, "S5266C36.s5266c36f0");
    check_field_offset(lv, s5266c36f1, ABISELECT(8,4), "S5266C36.s5266c36f1");
    check_field_offset(lv, s5266c36f2, ABISELECT(16,12), "S5266C36.s5266c36f2");
  }
}
static Arrange_To_Call_Me vS5266C36(Test_S5266C36, "S5266C36", ABISELECT(24,16));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S5266C36[];
VTBL_ENTRY *P__ZTI8S5266C36 = _ZTI8S5266C36; 
Class_Descriptor cd_S5266C36 = {  "S5266C36", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S5266C36),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5266C2_nt  : S5266C3_nt {
  ::S5266C12_nt s5266c2f0;
  ::S5266C12_nt s5266c2f1;
  ::S5266C12_nt s5266c2f2;
  ::S5266C12_nt s5266c2f3;
  ::S5266C16_nt s5266c2f4;
  ::S5266C17_nt s5266c2f5;
  ::S5266C17_nt s5266c2f6;
  ::S5266C12_nt s5266c2f7;
  ::S5266C12_nt s5266c2f8;
  ::S5266C12_nt s5266c2f9;
  void *s5266c2f10;
  ::S5266C16_nt s5266c2f11;
  ::S5266C18_nt s5266c2f12;
  int s5266c2f13;
  void *s5266c2f14[7];
  ::S5266C21 s5266c2f15;
  int s5266c2f16:8;
  int s5266c2f17:8;
  int s5266c2f18:16;
  int s5266c2f19:16;
  int s5266c2f20:8;
  int s5266c2f21:8;
  int s5266c2f22:8;
  int s5266c2f23:32;
  int s5266c2f24:8;
  int s5266c2f25:4;
  int s5266c2f26:4;
  int s5266c2f27:4;
  int s5266c2f28:4;
  int s5266c2f29:4;
  int s5266c2f30:4;
  int s5266c2f31:4;
  int s5266c2f32:4;
  int s5266c2f33:4;
  int s5266c2f34:4;
  unsigned char s5266c2f35:1;
  unsigned char s5266c2f36:1;
  unsigned char s5266c2f37:1;
  unsigned char s5266c2f38:1;
  unsigned char s5266c2f39:1;
  unsigned char s5266c2f40:1;
  unsigned char s5266c2f41:1;
  unsigned char s5266c2f42:1;
  unsigned char s5266c2f43:1;
  unsigned char s5266c2f44:1;
  unsigned char s5266c2f45:1;
  unsigned char s5266c2f46:1;
  unsigned char s5266c2f47:1;
  unsigned char s5266c2f48:1;
  unsigned char s5266c2f49:1;
  unsigned char s5266c2f50:1;
  unsigned char s5266c2f51:1;
  unsigned char s5266c2f52:1;
  unsigned char s5266c2f53:1;
  unsigned char s5266c2f54:1;
  unsigned char s5266c2f55:1;
  unsigned char s5266c2f56:1;
  unsigned char s5266c2f57:1;
  unsigned char s5266c2f58:1;
  unsigned char s5266c2f59:1;
  unsigned char s5266c2f60:1;
  unsigned char s5266c2f61:1;
  unsigned char s5266c2f62:1;
  unsigned char s5266c2f63:1;
  unsigned char s5266c2f64:1;
  unsigned char s5266c2f65:1;
  unsigned char s5266c2f66:1;
  unsigned char s5266c2f67:1;
  unsigned char s5266c2f68:1;
  unsigned char s5266c2f69:1;
  unsigned char s5266c2f70:1;
  unsigned char s5266c2f71:1;
  unsigned char s5266c2f72:1;
  unsigned char s5266c2f73:1;
  unsigned char s5266c2f74:1;
  unsigned char s5266c2f75:1;
  int s5266c2f76[7];
  void *s5266c2f77[6];
  int s5266c2f78:8;
  int s5266c2f79:8;
  int s5266c2f80:8;
  int s5266c2f81:8;
  int s5266c2f82:8;
  int s5266c2f83:8;
  ::S5266C24 s5266c2f84;
  void *s5266c2f85[4];
  int s5266c2f86:8;
  int s5266c2f87:8;
  int s5266c2f88:8;
  int s5266c2f89:8;
  int s5266c2f90:8;
  int s5266c2f91:16;
  int s5266c2f92:16;
  int s5266c2f93:16;
  int s5266c2f94:4;
  int s5266c2f95:4;
  int s5266c2f96:4;
  int s5266c2f97:4;
  int s5266c2f98:4;
  int s5266c2f99:4;
  int s5266c2f100:4;
  int s5266c2f101:4;
  int s5266c2f102:4;
  int s5266c2f103:4;
  int s5266c2f104:4;
  int s5266c2f105:4;
  int s5266c2f106:8;
  int s5266c2f107:8;
  int s5266c2f108:8;
  void *s5266c2f109[7];
  ::S5266C28_nt s5266c2f110;
  void *s5266c2f111[2];
  int s5266c2f112:16;
  int s5266c2f113:16;
  ::S5266C24 s5266c2f114;
  ::S5266C28_nt s5266c2f115;
  ::S5266C36 s5266c2f116;
  void *s5266c2f117[2];
  int s5266c2f118:24;
  int s5266c2f119:8;
  void *s5266c2f120;
  virtual  ~S5266C2_nt(); // _ZN10S5266C2_ntD1Ev
  virtual void  v28(); // _ZN10S5266C2_nt3v28Ev
  virtual void  v29(); // _ZN10S5266C2_nt3v29Ev
  virtual void  v30(); // _ZN10S5266C2_nt3v30Ev
  virtual void  v31(); // _ZN10S5266C2_nt3v31Ev
  virtual void  v32(); // _ZN10S5266C2_nt3v32Ev
  virtual void  v33(); // _ZN10S5266C2_nt3v33Ev
  virtual void  v34(); // _ZN10S5266C2_nt3v34Ev
  virtual void  v35(); // _ZN10S5266C2_nt3v35Ev
  virtual void  v36(); // _ZN10S5266C2_nt3v36Ev
  virtual void  v37(); // _ZN10S5266C2_nt3v37Ev
  virtual void  v38(); // _ZN10S5266C2_nt3v38Ev
  virtual void  v39(); // _ZN10S5266C2_nt3v39Ev
  virtual void  v40(); // _ZN10S5266C2_nt3v40Ev
  virtual void  v41(); // _ZN10S5266C2_nt3v41Ev
  virtual void  v42(); // _ZN10S5266C2_nt3v42Ev
  virtual void  v43(); // _ZN10S5266C2_nt3v43Ev
  virtual void  v44(); // _ZN10S5266C2_nt3v44Ev
  virtual void  v45(); // _ZN10S5266C2_nt3v45Ev
  virtual void  v46(); // _ZN10S5266C2_nt3v46Ev
  virtual void  v47(); // _ZN10S5266C2_nt3v47Ev
  virtual void  v48(); // _ZN10S5266C2_nt3v48Ev
  virtual void  v49(); // _ZN10S5266C2_nt3v49Ev
  virtual void  v50(); // _ZN10S5266C2_nt3v50Ev
  virtual void  v51(); // _ZN10S5266C2_nt3v51Ev
  virtual void  v52(); // _ZN10S5266C2_nt3v52Ev
  virtual void  v53(); // _ZN10S5266C2_nt3v53Ev
  virtual void  v54(); // _ZN10S5266C2_nt3v54Ev
  virtual void  v55(); // _ZN10S5266C2_nt3v55Ev
  virtual void  v56(); // _ZN10S5266C2_nt3v56Ev
  virtual void  v57(); // _ZN10S5266C2_nt3v57Ev
  virtual void  v58(); // _ZN10S5266C2_nt3v58Ev
  virtual void  v59(); // _ZN10S5266C2_nt3v59Ev
  virtual void  v60(); // _ZN10S5266C2_nt3v60Ev
  virtual void  v61(); // _ZN10S5266C2_nt3v61Ev
  virtual void  v62(); // _ZN10S5266C2_nt3v62Ev
  virtual void  v63(); // _ZN10S5266C2_nt3v63Ev
  virtual void  v64(); // _ZN10S5266C2_nt3v64Ev
  virtual void  v65(); // _ZN10S5266C2_nt3v65Ev
  virtual void  v66(); // _ZN10S5266C2_nt3v66Ev
  virtual void  v67(); // _ZN10S5266C2_nt3v67Ev
  virtual void  v68(); // _ZN10S5266C2_nt3v68Ev
  virtual void  v69(); // _ZN10S5266C2_nt3v69Ev
  virtual void  v70(); // _ZN10S5266C2_nt3v70Ev
  virtual void  v71(); // _ZN10S5266C2_nt3v71Ev
  virtual void  v72(); // _ZN10S5266C2_nt3v72Ev
  virtual void  v73(); // _ZN10S5266C2_nt3v73Ev
  virtual void  v74(); // _ZN10S5266C2_nt3v74Ev
  virtual void  v75(); // _ZN10S5266C2_nt3v75Ev
  virtual void  v76(); // _ZN10S5266C2_nt3v76Ev
  virtual void  v77(); // _ZN10S5266C2_nt3v77Ev
  virtual void  v78(); // _ZN10S5266C2_nt3v78Ev
  virtual void  v79(); // _ZN10S5266C2_nt3v79Ev
  virtual void  v80(); // _ZN10S5266C2_nt3v80Ev
  virtual void  v81(); // _ZN10S5266C2_nt3v81Ev
  virtual void  v82(); // _ZN10S5266C2_nt3v82Ev
  virtual void  v83(); // _ZN10S5266C2_nt3v83Ev
  virtual void  v84(); // _ZN10S5266C2_nt3v84Ev
  virtual void  v85(); // _ZN10S5266C2_nt3v85Ev
  virtual void  v86(); // _ZN10S5266C2_nt3v86Ev
  virtual void  v87(); // _ZN10S5266C2_nt3v87Ev
  virtual void  v88(); // _ZN10S5266C2_nt3v88Ev
  virtual void  v89(); // _ZN10S5266C2_nt3v89Ev
  virtual void  v90(); // _ZN10S5266C2_nt3v90Ev
  virtual void  v91(); // _ZN10S5266C2_nt3v91Ev
  virtual void  v92(); // _ZN10S5266C2_nt3v92Ev
  virtual void  v93(); // _ZN10S5266C2_nt3v93Ev
  virtual void  v94(); // _ZN10S5266C2_nt3v94Ev
  virtual void  v95(); // _ZN10S5266C2_nt3v95Ev
  virtual void  v96(); // _ZN10S5266C2_nt3v96Ev
  virtual void  v97(); // _ZN10S5266C2_nt3v97Ev
  virtual void  v98(); // _ZN10S5266C2_nt3v98Ev
  virtual void  v99(); // _ZN10S5266C2_nt3v99Ev
  virtual void  v100(); // _ZN10S5266C2_nt4v100Ev
  virtual void  v101(); // _ZN10S5266C2_nt4v101Ev
  virtual void  v102(); // _ZN10S5266C2_nt4v102Ev
  virtual void  v103(); // _ZN10S5266C2_nt4v103Ev
  virtual void  v104(); // _ZN10S5266C2_nt4v104Ev
  virtual void  v105(); // _ZN10S5266C2_nt4v105Ev
  S5266C2_nt(); // tgen
};
//SIG(-1 S5266C2_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} FC6{ m}}} 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 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 FC6} Fi} Fi Fp[7] FC13{ m Fp Fi FC14{ m} FC14} 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 FC17{ m} FC17}} 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] FC19{ m}} Fp[2] Fi:16 Fi:16 FC15 FC18 FC20{ m Fp Fi[2] FC19} Fp[2] Fi:24 Fi:8 Fp}


 S5266C2_nt ::~S5266C2_nt(){ note_dtor("S5266C2_nt", this);}
void  S5266C2_nt ::v28(){vfunc_called(this, "_ZN10S5266C2_nt3v28Ev");}
void  S5266C2_nt ::v29(){vfunc_called(this, "_ZN10S5266C2_nt3v29Ev");}
void  S5266C2_nt ::v30(){vfunc_called(this, "_ZN10S5266C2_nt3v30Ev");}
void  S5266C2_nt ::v31(){vfunc_called(this, "_ZN10S5266C2_nt3v31Ev");}
void  S5266C2_nt ::v32(){vfunc_called(this, "_ZN10S5266C2_nt3v32Ev");}
void  S5266C2_nt ::v33(){vfunc_called(this, "_ZN10S5266C2_nt3v33Ev");}
void  S5266C2_nt ::v34(){vfunc_called(this, "_ZN10S5266C2_nt3v34Ev");}
void  S5266C2_nt ::v35(){vfunc_called(this, "_ZN10S5266C2_nt3v35Ev");}
void  S5266C2_nt ::v36(){vfunc_called(this, "_ZN10S5266C2_nt3v36Ev");}
void  S5266C2_nt ::v37(){vfunc_called(this, "_ZN10S5266C2_nt3v37Ev");}
void  S5266C2_nt ::v38(){vfunc_called(this, "_ZN10S5266C2_nt3v38Ev");}
void  S5266C2_nt ::v39(){vfunc_called(this, "_ZN10S5266C2_nt3v39Ev");}
void  S5266C2_nt ::v40(){vfunc_called(this, "_ZN10S5266C2_nt3v40Ev");}
void  S5266C2_nt ::v41(){vfunc_called(this, "_ZN10S5266C2_nt3v41Ev");}
void  S5266C2_nt ::v42(){vfunc_called(this, "_ZN10S5266C2_nt3v42Ev");}
void  S5266C2_nt ::v43(){vfunc_called(this, "_ZN10S5266C2_nt3v43Ev");}
void  S5266C2_nt ::v44(){vfunc_called(this, "_ZN10S5266C2_nt3v44Ev");}
void  S5266C2_nt ::v45(){vfunc_called(this, "_ZN10S5266C2_nt3v45Ev");}
void  S5266C2_nt ::v46(){vfunc_called(this, "_ZN10S5266C2_nt3v46Ev");}
void  S5266C2_nt ::v47(){vfunc_called(this, "_ZN10S5266C2_nt3v47Ev");}
void  S5266C2_nt ::v48(){vfunc_called(this, "_ZN10S5266C2_nt3v48Ev");}
void  S5266C2_nt ::v49(){vfunc_called(this, "_ZN10S5266C2_nt3v49Ev");}
void  S5266C2_nt ::v50(){vfunc_called(this, "_ZN10S5266C2_nt3v50Ev");}
void  S5266C2_nt ::v51(){vfunc_called(this, "_ZN10S5266C2_nt3v51Ev");}
void  S5266C2_nt ::v52(){vfunc_called(this, "_ZN10S5266C2_nt3v52Ev");}
void  S5266C2_nt ::v53(){vfunc_called(this, "_ZN10S5266C2_nt3v53Ev");}
void  S5266C2_nt ::v54(){vfunc_called(this, "_ZN10S5266C2_nt3v54Ev");}
void  S5266C2_nt ::v55(){vfunc_called(this, "_ZN10S5266C2_nt3v55Ev");}
void  S5266C2_nt ::v56(){vfunc_called(this, "_ZN10S5266C2_nt3v56Ev");}
void  S5266C2_nt ::v57(){vfunc_called(this, "_ZN10S5266C2_nt3v57Ev");}
void  S5266C2_nt ::v58(){vfunc_called(this, "_ZN10S5266C2_nt3v58Ev");}
void  S5266C2_nt ::v59(){vfunc_called(this, "_ZN10S5266C2_nt3v59Ev");}
void  S5266C2_nt ::v60(){vfunc_called(this, "_ZN10S5266C2_nt3v60Ev");}
void  S5266C2_nt ::v61(){vfunc_called(this, "_ZN10S5266C2_nt3v61Ev");}
void  S5266C2_nt ::v62(){vfunc_called(this, "_ZN10S5266C2_nt3v62Ev");}
void  S5266C2_nt ::v63(){vfunc_called(this, "_ZN10S5266C2_nt3v63Ev");}
void  S5266C2_nt ::v64(){vfunc_called(this, "_ZN10S5266C2_nt3v64Ev");}
void  S5266C2_nt ::v65(){vfunc_called(this, "_ZN10S5266C2_nt3v65Ev");}
void  S5266C2_nt ::v66(){vfunc_called(this, "_ZN10S5266C2_nt3v66Ev");}
void  S5266C2_nt ::v67(){vfunc_called(this, "_ZN10S5266C2_nt3v67Ev");}
void  S5266C2_nt ::v68(){vfunc_called(this, "_ZN10S5266C2_nt3v68Ev");}
void  S5266C2_nt ::v69(){vfunc_called(this, "_ZN10S5266C2_nt3v69Ev");}
void  S5266C2_nt ::v70(){vfunc_called(this, "_ZN10S5266C2_nt3v70Ev");}
void  S5266C2_nt ::v71(){vfunc_called(this, "_ZN10S5266C2_nt3v71Ev");}
void  S5266C2_nt ::v72(){vfunc_called(this, "_ZN10S5266C2_nt3v72Ev");}
void  S5266C2_nt ::v73(){vfunc_called(this, "_ZN10S5266C2_nt3v73Ev");}
void  S5266C2_nt ::v74(){vfunc_called(this, "_ZN10S5266C2_nt3v74Ev");}
void  S5266C2_nt ::v75(){vfunc_called(this, "_ZN10S5266C2_nt3v75Ev");}
void  S5266C2_nt ::v76(){vfunc_called(this, "_ZN10S5266C2_nt3v76Ev");}
void  S5266C2_nt ::v77(){vfunc_called(this, "_ZN10S5266C2_nt3v77Ev");}
void  S5266C2_nt ::v78(){vfunc_called(this, "_ZN10S5266C2_nt3v78Ev");}
void  S5266C2_nt ::v79(){vfunc_called(this, "_ZN10S5266C2_nt3v79Ev");}
void  S5266C2_nt ::v80(){vfunc_called(this, "_ZN10S5266C2_nt3v80Ev");}
void  S5266C2_nt ::v81(){vfunc_called(this, "_ZN10S5266C2_nt3v81Ev");}
void  S5266C2_nt ::v82(){vfunc_called(this, "_ZN10S5266C2_nt3v82Ev");}
void  S5266C2_nt ::v83(){vfunc_called(this, "_ZN10S5266C2_nt3v83Ev");}
void  S5266C2_nt ::v84(){vfunc_called(this, "_ZN10S5266C2_nt3v84Ev");}
void  S5266C2_nt ::v85(){vfunc_called(this, "_ZN10S5266C2_nt3v85Ev");}
void  S5266C2_nt ::v86(){vfunc_called(this, "_ZN10S5266C2_nt3v86Ev");}
void  S5266C2_nt ::v87(){vfunc_called(this, "_ZN10S5266C2_nt3v87Ev");}
void  S5266C2_nt ::v88(){vfunc_called(this, "_ZN10S5266C2_nt3v88Ev");}
void  S5266C2_nt ::v89(){vfunc_called(this, "_ZN10S5266C2_nt3v89Ev");}
void  S5266C2_nt ::v90(){vfunc_called(this, "_ZN10S5266C2_nt3v90Ev");}
void  S5266C2_nt ::v91(){vfunc_called(this, "_ZN10S5266C2_nt3v91Ev");}
void  S5266C2_nt ::v92(){vfunc_called(this, "_ZN10S5266C2_nt3v92Ev");}
void  S5266C2_nt ::v93(){vfunc_called(this, "_ZN10S5266C2_nt3v93Ev");}
void  S5266C2_nt ::v94(){vfunc_called(this, "_ZN10S5266C2_nt3v94Ev");}
void  S5266C2_nt ::v95(){vfunc_called(this, "_ZN10S5266C2_nt3v95Ev");}
void  S5266C2_nt ::v96(){vfunc_called(this, "_ZN10S5266C2_nt3v96Ev");}
void  S5266C2_nt ::v97(){vfunc_called(this, "_ZN10S5266C2_nt3v97Ev");}
void  S5266C2_nt ::v98(){vfunc_called(this, "_ZN10S5266C2_nt3v98Ev");}
void  S5266C2_nt ::v99(){vfunc_called(this, "_ZN10S5266C2_nt3v99Ev");}
void  S5266C2_nt ::v100(){vfunc_called(this, "_ZN10S5266C2_nt4v100Ev");}
void  S5266C2_nt ::v101(){vfunc_called(this, "_ZN10S5266C2_nt4v101Ev");}
void  S5266C2_nt ::v102(){vfunc_called(this, "_ZN10S5266C2_nt4v102Ev");}
void  S5266C2_nt ::v103(){vfunc_called(this, "_ZN10S5266C2_nt4v103Ev");}
void  S5266C2_nt ::v104(){vfunc_called(this, "_ZN10S5266C2_nt4v104Ev");}
void  S5266C2_nt ::v105(){vfunc_called(this, "_ZN10S5266C2_nt4v105Ev");}
S5266C2_nt ::S5266C2_nt(){ note_ctor("S5266C2_nt", this);} // tgen

//skip512 S5266C2_nt

#else // __cplusplus

extern void _ZN10S5266C2_ntC1Ev();
extern void _ZN10S5266C2_ntD1Ev();
Name_Map name_map_S5266C2_nt[] = {
  NSPAIR(_ZN10S5266C2_ntC1Ev),
  NSPAIR(_ZN10S5266C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C3_nt;
extern VTBL_ENTRY _ZTI10S5266C3_nt[];
extern  VTBL_ENTRY _ZTV10S5266C3_nt[];
static Base_Class bases_S5266C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C3_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 _ZTI10S5266C2_nt[];
extern void _ZN10S5266C2_ntD1Ev();
extern void _ZN10S5266C2_ntD0Ev();
extern void _ZN10S5266C3_nt2v5Ev();
extern void _ZN10S5266C3_nt2v6Ev();
extern void _ZN10S5266C3_nt2v7Ev();
extern void _ZN10S5266C3_nt2v8Ev();
extern void _ZN10S5266C3_nt2v9Ev();
extern void _ZN10S5266C3_nt3v10Ev();
extern void _ZN10S5266C3_nt3v11Ev();
extern void _ZN10S5266C3_nt3v12Ev();
extern void _ZN10S5266C3_nt3v13Ev();
extern void _ZN10S5266C3_nt3v14Ev();
extern void _ZN10S5266C3_nt3v15Ev();
extern void _ZN10S5266C3_nt3v16Ev();
extern void _ZN10S5266C3_nt3v17Ev();
extern void _ZN10S5266C3_nt3v18Ev();
extern void _ZN10S5266C3_nt3v19Ev();
extern void _ZN10S5266C3_nt3v20Ev();
extern void _ZN10S5266C3_nt3v21Ev();
extern void _ZN10S5266C3_nt3v22Ev();
extern void _ZN10S5266C3_nt3v23Ev();
extern void _ZN10S5266C3_nt3v24Ev();
extern void _ZN10S5266C3_nt3v25Ev();
extern void _ZN10S5266C3_nt3v26Ev();
extern void _ZN10S5266C3_nt3v27Ev();
extern void _ZN10S5266C2_nt3v28Ev();
extern void _ZN10S5266C2_nt3v29Ev();
extern void _ZN10S5266C2_nt3v30Ev();
extern void _ZN10S5266C2_nt3v31Ev();
extern void _ZN10S5266C2_nt3v32Ev();
extern void _ZN10S5266C2_nt3v33Ev();
extern void _ZN10S5266C2_nt3v34Ev();
extern void _ZN10S5266C2_nt3v35Ev();
extern void _ZN10S5266C2_nt3v36Ev();
extern void _ZN10S5266C2_nt3v37Ev();
extern void _ZN10S5266C2_nt3v38Ev();
extern void _ZN10S5266C2_nt3v39Ev();
extern void _ZN10S5266C2_nt3v40Ev();
extern void _ZN10S5266C2_nt3v41Ev();
extern void _ZN10S5266C2_nt3v42Ev();
extern void _ZN10S5266C2_nt3v43Ev();
extern void _ZN10S5266C2_nt3v44Ev();
extern void _ZN10S5266C2_nt3v45Ev();
extern void _ZN10S5266C2_nt3v46Ev();
extern void _ZN10S5266C2_nt3v47Ev();
extern void _ZN10S5266C2_nt3v48Ev();
extern void _ZN10S5266C2_nt3v49Ev();
extern void _ZN10S5266C2_nt3v50Ev();
extern void _ZN10S5266C2_nt3v51Ev();
extern void _ZN10S5266C2_nt3v52Ev();
extern void _ZN10S5266C2_nt3v53Ev();
extern void _ZN10S5266C2_nt3v54Ev();
extern void _ZN10S5266C2_nt3v55Ev();
extern void _ZN10S5266C2_nt3v56Ev();
extern void _ZN10S5266C2_nt3v57Ev();
extern void _ZN10S5266C2_nt3v58Ev();
extern void _ZN10S5266C2_nt3v59Ev();
extern void _ZN10S5266C2_nt3v60Ev();
extern void _ZN10S5266C2_nt3v61Ev();
extern void _ZN10S5266C2_nt3v62Ev();
extern void _ZN10S5266C2_nt3v63Ev();
extern void _ZN10S5266C2_nt3v64Ev();
extern void _ZN10S5266C2_nt3v65Ev();
extern void _ZN10S5266C2_nt3v66Ev();
extern void _ZN10S5266C2_nt3v67Ev();
extern void _ZN10S5266C2_nt3v68Ev();
extern void _ZN10S5266C2_nt3v69Ev();
extern void _ZN10S5266C2_nt3v70Ev();
extern void _ZN10S5266C2_nt3v71Ev();
extern void _ZN10S5266C2_nt3v72Ev();
extern void _ZN10S5266C2_nt3v73Ev();
extern void _ZN10S5266C2_nt3v74Ev();
extern void _ZN10S5266C2_nt3v75Ev();
extern void _ZN10S5266C2_nt3v76Ev();
extern void _ZN10S5266C2_nt3v77Ev();
extern void _ZN10S5266C2_nt3v78Ev();
extern void _ZN10S5266C2_nt3v79Ev();
extern void _ZN10S5266C2_nt3v80Ev();
extern void _ZN10S5266C2_nt3v81Ev();
extern void _ZN10S5266C2_nt3v82Ev();
extern void _ZN10S5266C2_nt3v83Ev();
extern void _ZN10S5266C2_nt3v84Ev();
extern void _ZN10S5266C2_nt3v85Ev();
extern void _ZN10S5266C2_nt3v86Ev();
extern void _ZN10S5266C2_nt3v87Ev();
extern void _ZN10S5266C2_nt3v88Ev();
extern void _ZN10S5266C2_nt3v89Ev();
extern void _ZN10S5266C2_nt3v90Ev();
extern void _ZN10S5266C2_nt3v91Ev();
extern void _ZN10S5266C2_nt3v92Ev();
extern void _ZN10S5266C2_nt3v93Ev();
extern void _ZN10S5266C2_nt3v94Ev();
extern void _ZN10S5266C2_nt3v95Ev();
extern void _ZN10S5266C2_nt3v96Ev();
extern void _ZN10S5266C2_nt3v97Ev();
extern void _ZN10S5266C2_nt3v98Ev();
extern void _ZN10S5266C2_nt3v99Ev();
extern void _ZN10S5266C2_nt4v100Ev();
extern void _ZN10S5266C2_nt4v101Ev();
extern void _ZN10S5266C2_nt4v102Ev();
extern void _ZN10S5266C2_nt4v103Ev();
extern void _ZN10S5266C2_nt4v104Ev();
extern void _ZN10S5266C2_nt4v105Ev();
static  VTBL_ENTRY vtc_S5266C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5266C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S5266C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt4v105Ev,
};
extern VTBL_ENTRY _ZTI10S5266C2_nt[];
VTBL_ENTRY *P__ZTI10S5266C2_nt = _ZTI10S5266C2_nt; 
extern  VTBL_ENTRY _ZTV10S5266C2_nt[];
Class_Descriptor cd_S5266C2_nt = {  "S5266C2_nt", // class name
  bases_S5266C2_nt, 1,
  &(vtc_S5266C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(832,632), // object size
  NSPAIRA(_ZTI10S5266C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S5266C2_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  S5266C39_nt  {
  __tsi64 s5266c39f0;
  void  mf5266c39(); // _ZN11S5266C39_nt9mf5266c39Ev
};
//SIG(-1 S5266C39_nt) C1{ m FL}


void  S5266C39_nt ::mf5266c39(){}

//skip512 S5266C39_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5266C38_nt  {
  ::S5266C39_nt s5266c38f0;
  void  mf5266c38(); // _ZN11S5266C38_nt9mf5266c38Ev
};
//SIG(-1 S5266C38_nt) C1{ m FC2{ m FL}}


void  S5266C38_nt ::mf5266c38(){}

//skip512 S5266C38_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5266C1  : S5266C2_nt {
  void *s5266c1f0;
  ::S5266C38_nt s5266c1f1;
  ::S5266C38_nt s5266c1f2;
  void *s5266c1f3;
  ::S5266C38_nt s5266c1f4;
  ::S5266C38_nt s5266c1f5;
  ::S5266C12_nt s5266c1f6;
  int s5266c1f7;
  char s5266c1f8;
  virtual  ~S5266C1(); // _ZN7S5266C1D1Ev
  virtual void  v1(); // _ZN7S5266C12v1Ev
  virtual void  v2(); // _ZN7S5266C12v2Ev
  virtual void  v3(); // _ZN7S5266C12v3Ev
  virtual void  v4(); // _ZN7S5266C12v4Ev
  S5266C1(); // tgen
};
//SIG(1 S5266C1) C1{ BC2{ BC3{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 Fp Fi FC4{ BC5{ m Fp Fi FC6{ m} FC7{ m}}} FC4 Fi} vd 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 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 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 FC7} Fi} Fi Fp[7] FC14{ m Fp Fi FC15{ m} FC15} 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 FC18{ m} FC18}} 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] FC20{ m}} Fp[2] Fi:16 Fi:16 FC16 FC19 FC21{ m Fp Fi[2] FC20} Fp[2] Fi:24 Fi:8 Fp} vd v1 v2 v3 v4 Fp FC22{ m FC23{ m FL}} FC22 Fp FC22 FC22 FC8 Fi Fc}


 S5266C1 ::~S5266C1(){ note_dtor("S5266C1", this);}
void  S5266C1 ::v1(){vfunc_called(this, "_ZN7S5266C12v1Ev");}
void  S5266C1 ::v2(){vfunc_called(this, "_ZN7S5266C12v2Ev");}
void  S5266C1 ::v3(){vfunc_called(this, "_ZN7S5266C12v3Ev");}
void  S5266C1 ::v4(){vfunc_called(this, "_ZN7S5266C12v4Ev");}
S5266C1 ::S5266C1(){ note_ctor("S5266C1", this);} // tgen

static void Test_S5266C1()
{
  extern Class_Descriptor cd_S5266C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(114,175)];
    init_test(&cd_S5266C1, buf);
    S5266C1 *dp, &lv = *(dp=new (buf) S5266C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(904,696), "sizeof(S5266C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5266C1)");
    check_base_class_offset(lv, (S5266C3_nt*)(S5266C2_nt*), 0, "S5266C1");
    check_base_class_offset(lv, (S5266C2_nt*), 0, "S5266C1");
    check_field_offset(lv, s5266c1f0, ABISELECT(832,632), "S5266C1.s5266c1f0");
    check_field_offset(lv, s5266c1f1, ABISELECT(840,636), "S5266C1.s5266c1f1");
    check_field_offset(lv, s5266c1f2, ABISELECT(848,644), "S5266C1.s5266c1f2");
    check_field_offset(lv, s5266c1f3, ABISELECT(856,652), "S5266C1.s5266c1f3");
    check_field_offset(lv, s5266c1f4, ABISELECT(864,656), "S5266C1.s5266c1f4");
    check_field_offset(lv, s5266c1f5, ABISELECT(872,664), "S5266C1.s5266c1f5");
    check_field_offset(lv, s5266c1f6, ABISELECT(880,672), "S5266C1.s5266c1f6");
    check_field_offset(lv, s5266c1f7, ABISELECT(896,688), "S5266C1.s5266c1f7");
    check_field_offset(lv, s5266c1f8, ABISELECT(900,692), "S5266C1.s5266c1f8");
    test_class_info(&lv, &cd_S5266C1);
    dp->~S5266C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5266C1(Test_S5266C1, "S5266C1", ABISELECT(904,696));

#else // __cplusplus

extern void _ZN7S5266C1C1Ev();
extern void _ZN7S5266C1D1Ev();
Name_Map name_map_S5266C1[] = {
  NSPAIR(_ZN7S5266C1C1Ev),
  NSPAIR(_ZN7S5266C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C3_nt;
extern VTBL_ENTRY _ZTI10S5266C3_nt[];
extern  VTBL_ENTRY _ZTV10S5266C3_nt[];
extern Class_Descriptor cd_S5266C2_nt;
extern VTBL_ENTRY _ZTI10S5266C2_nt[];
extern  VTBL_ENTRY _ZTV10S5266C2_nt[];
static Base_Class bases_S5266C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C3_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_S5266C2_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 _ZTI7S5266C1[];
extern void _ZN7S5266C1D1Ev();
extern void _ZN7S5266C1D0Ev();
extern void _ZN10S5266C3_nt2v5Ev();
extern void _ZN10S5266C3_nt2v6Ev();
extern void _ZN10S5266C3_nt2v7Ev();
extern void _ZN10S5266C3_nt2v8Ev();
extern void _ZN10S5266C3_nt2v9Ev();
extern void _ZN10S5266C3_nt3v10Ev();
extern void _ZN10S5266C3_nt3v11Ev();
extern void _ZN10S5266C3_nt3v12Ev();
extern void _ZN10S5266C3_nt3v13Ev();
extern void _ZN10S5266C3_nt3v14Ev();
extern void _ZN10S5266C3_nt3v15Ev();
extern void _ZN10S5266C3_nt3v16Ev();
extern void _ZN10S5266C3_nt3v17Ev();
extern void _ZN10S5266C3_nt3v18Ev();
extern void _ZN10S5266C3_nt3v19Ev();
extern void _ZN10S5266C3_nt3v20Ev();
extern void _ZN10S5266C3_nt3v21Ev();
extern void _ZN10S5266C3_nt3v22Ev();
extern void _ZN10S5266C3_nt3v23Ev();
extern void _ZN10S5266C3_nt3v24Ev();
extern void _ZN10S5266C3_nt3v25Ev();
extern void _ZN10S5266C3_nt3v26Ev();
extern void _ZN10S5266C3_nt3v27Ev();
extern void _ZN10S5266C2_nt3v28Ev();
extern void _ZN10S5266C2_nt3v29Ev();
extern void _ZN10S5266C2_nt3v30Ev();
extern void _ZN10S5266C2_nt3v31Ev();
extern void _ZN10S5266C2_nt3v32Ev();
extern void _ZN10S5266C2_nt3v33Ev();
extern void _ZN10S5266C2_nt3v34Ev();
extern void _ZN10S5266C2_nt3v35Ev();
extern void _ZN10S5266C2_nt3v36Ev();
extern void _ZN10S5266C2_nt3v37Ev();
extern void _ZN10S5266C2_nt3v38Ev();
extern void _ZN10S5266C2_nt3v39Ev();
extern void _ZN10S5266C2_nt3v40Ev();
extern void _ZN10S5266C2_nt3v41Ev();
extern void _ZN10S5266C2_nt3v42Ev();
extern void _ZN10S5266C2_nt3v43Ev();
extern void _ZN10S5266C2_nt3v44Ev();
extern void _ZN10S5266C2_nt3v45Ev();
extern void _ZN10S5266C2_nt3v46Ev();
extern void _ZN10S5266C2_nt3v47Ev();
extern void _ZN10S5266C2_nt3v48Ev();
extern void _ZN10S5266C2_nt3v49Ev();
extern void _ZN10S5266C2_nt3v50Ev();
extern void _ZN10S5266C2_nt3v51Ev();
extern void _ZN10S5266C2_nt3v52Ev();
extern void _ZN10S5266C2_nt3v53Ev();
extern void _ZN10S5266C2_nt3v54Ev();
extern void _ZN10S5266C2_nt3v55Ev();
extern void _ZN10S5266C2_nt3v56Ev();
extern void _ZN10S5266C2_nt3v57Ev();
extern void _ZN10S5266C2_nt3v58Ev();
extern void _ZN10S5266C2_nt3v59Ev();
extern void _ZN10S5266C2_nt3v60Ev();
extern void _ZN10S5266C2_nt3v61Ev();
extern void _ZN10S5266C2_nt3v62Ev();
extern void _ZN10S5266C2_nt3v63Ev();
extern void _ZN10S5266C2_nt3v64Ev();
extern void _ZN10S5266C2_nt3v65Ev();
extern void _ZN10S5266C2_nt3v66Ev();
extern void _ZN10S5266C2_nt3v67Ev();
extern void _ZN10S5266C2_nt3v68Ev();
extern void _ZN10S5266C2_nt3v69Ev();
extern void _ZN10S5266C2_nt3v70Ev();
extern void _ZN10S5266C2_nt3v71Ev();
extern void _ZN10S5266C2_nt3v72Ev();
extern void _ZN10S5266C2_nt3v73Ev();
extern void _ZN10S5266C2_nt3v74Ev();
extern void _ZN10S5266C2_nt3v75Ev();
extern void _ZN10S5266C2_nt3v76Ev();
extern void _ZN10S5266C2_nt3v77Ev();
extern void _ZN10S5266C2_nt3v78Ev();
extern void _ZN10S5266C2_nt3v79Ev();
extern void _ZN10S5266C2_nt3v80Ev();
extern void _ZN10S5266C2_nt3v81Ev();
extern void _ZN10S5266C2_nt3v82Ev();
extern void _ZN10S5266C2_nt3v83Ev();
extern void _ZN10S5266C2_nt3v84Ev();
extern void _ZN10S5266C2_nt3v85Ev();
extern void _ZN10S5266C2_nt3v86Ev();
extern void _ZN10S5266C2_nt3v87Ev();
extern void _ZN10S5266C2_nt3v88Ev();
extern void _ZN10S5266C2_nt3v89Ev();
extern void _ZN10S5266C2_nt3v90Ev();
extern void _ZN10S5266C2_nt3v91Ev();
extern void _ZN10S5266C2_nt3v92Ev();
extern void _ZN10S5266C2_nt3v93Ev();
extern void _ZN10S5266C2_nt3v94Ev();
extern void _ZN10S5266C2_nt3v95Ev();
extern void _ZN10S5266C2_nt3v96Ev();
extern void _ZN10S5266C2_nt3v97Ev();
extern void _ZN10S5266C2_nt3v98Ev();
extern void _ZN10S5266C2_nt3v99Ev();
extern void _ZN10S5266C2_nt4v100Ev();
extern void _ZN10S5266C2_nt4v101Ev();
extern void _ZN10S5266C2_nt4v102Ev();
extern void _ZN10S5266C2_nt4v103Ev();
extern void _ZN10S5266C2_nt4v104Ev();
extern void _ZN10S5266C2_nt4v105Ev();
extern void _ZN7S5266C12v1Ev();
extern void _ZN7S5266C12v2Ev();
extern void _ZN7S5266C12v3Ev();
extern void _ZN7S5266C12v4Ev();
static  VTBL_ENTRY vtc_S5266C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5266C1[0]),
  (VTBL_ENTRY)&_ZN7S5266C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5266C1D0Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S5266C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S5266C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN7S5266C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5266C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5266C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5266C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S5266C1[];
extern  VTBL_ENTRY _ZTV7S5266C1[];
Class_Descriptor cd_S5266C1 = {  "S5266C1", // class name
  bases_S5266C1, 2,
  &(vtc_S5266C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(904,696), // object size
  NSPAIRA(_ZTI7S5266C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5266C1),109, //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  S3262C3  {
  int s3262c3f0;
  __tsi64 s3262c3f1;
  void *s3262c3f2[4];
  int s3262c3f3[2];
  void *s3262c3f4;
  ::S79C8_nt s3262c3f5;
  void *s3262c3f6[2];
  virtual  ~S3262C3(); // _ZN7S3262C3D1Ev
  virtual void  v44(); // _ZN7S3262C33v44Ev
  virtual void  v45(); // _ZN7S3262C33v45Ev
  virtual void  v46(); // _ZN7S3262C33v46Ev
  virtual void  v47(); // _ZN7S3262C33v47Ev
  virtual void  v48(); // _ZN7S3262C33v48Ev
  virtual void  v49(); // _ZN7S3262C33v49Ev
  virtual void  v50(); // _ZN7S3262C33v50Ev
  virtual void  v51(); // _ZN7S3262C33v51Ev
  virtual void  v52(); // _ZN7S3262C33v52Ev
  virtual void  v53(); // _ZN7S3262C33v53Ev
  virtual void  v54(); // _ZN7S3262C33v54Ev
  virtual void  v55(); // _ZN7S3262C33v55Ev
  virtual void  v56(); // _ZN7S3262C33v56Ev
  virtual void  v57(); // _ZN7S3262C33v57Ev
  virtual void  v58(); // _ZN7S3262C33v58Ev
  virtual void  v59(); // _ZN7S3262C33v59Ev
  virtual void  v60(); // _ZN7S3262C33v60Ev
  virtual void  v61(); // _ZN7S3262C33v61Ev
  virtual void  v62(); // _ZN7S3262C33v62Ev
  virtual void  v63(); // _ZN7S3262C33v63Ev
  virtual void  v64(); // _ZN7S3262C33v64Ev
  virtual void  v65(); // _ZN7S3262C33v65Ev
  virtual void  v66(); // _ZN7S3262C33v66Ev
  virtual void  v67(); // _ZN7S3262C33v67Ev
  virtual void  v68(); // _ZN7S3262C33v68Ev
  virtual void  v69(); // _ZN7S3262C33v69Ev
  virtual void  v70(); // _ZN7S3262C33v70Ev
  virtual void  v71(); // _ZN7S3262C33v71Ev
  virtual void  v72(); // _ZN7S3262C33v72Ev
  virtual void  v73(); // _ZN7S3262C33v73Ev
  virtual void  v74(); // _ZN7S3262C33v74Ev
  virtual void  v75(); // _ZN7S3262C33v75Ev
  virtual void  v76(); // _ZN7S3262C33v76Ev
  virtual void  v77(); // _ZN7S3262C33v77Ev
  virtual void  v78(); // _ZN7S3262C33v78Ev
  virtual void  v79(); // _ZN7S3262C33v79Ev
  virtual void  v80(); // _ZN7S3262C33v80Ev
  virtual void  v81(); // _ZN7S3262C33v81Ev
  virtual void  v82(); // _ZN7S3262C33v82Ev
  virtual void  v83(); // _ZN7S3262C33v83Ev
  virtual void  v84(); // _ZN7S3262C33v84Ev
  virtual void  v85(); // _ZN7S3262C33v85Ev
  virtual void  v86(); // _ZN7S3262C33v86Ev
  virtual void  v87(); // _ZN7S3262C33v87Ev
  virtual void  v88(); // _ZN7S3262C33v88Ev
  virtual void  v89(); // _ZN7S3262C33v89Ev
  virtual void  v90(); // _ZN7S3262C33v90Ev
  virtual void  v91(); // _ZN7S3262C33v91Ev
  virtual void  v92(); // _ZN7S3262C33v92Ev
  virtual void  v93(); // _ZN7S3262C33v93Ev
  virtual void  v94(); // _ZN7S3262C33v94Ev
  virtual void  v95(); // _ZN7S3262C33v95Ev
  virtual void  v96(); // _ZN7S3262C33v96Ev
  virtual void  v97(); // _ZN7S3262C33v97Ev
  virtual void  v98(); // _ZN7S3262C33v98Ev
  virtual void  v99(); // _ZN7S3262C33v99Ev
  virtual void  v100(); // _ZN7S3262C34v100Ev
  virtual void  v101(); // _ZN7S3262C34v101Ev
  virtual void  v102(); // _ZN7S3262C34v102Ev
  virtual void  v103(); // _ZN7S3262C34v103Ev
  virtual void  v104(); // _ZN7S3262C34v104Ev
  virtual void  v105(); // _ZN7S3262C34v105Ev
  virtual void  v106(); // _ZN7S3262C34v106Ev
  virtual void  v107(); // _ZN7S3262C34v107Ev
  S3262C3(); // tgen
};
//SIG(-1 S3262C3) 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]}


 S3262C3 ::~S3262C3(){ note_dtor("S3262C3", this);}
void  S3262C3 ::v44(){vfunc_called(this, "_ZN7S3262C33v44Ev");}
void  S3262C3 ::v45(){vfunc_called(this, "_ZN7S3262C33v45Ev");}
void  S3262C3 ::v46(){vfunc_called(this, "_ZN7S3262C33v46Ev");}
void  S3262C3 ::v47(){vfunc_called(this, "_ZN7S3262C33v47Ev");}
void  S3262C3 ::v48(){vfunc_called(this, "_ZN7S3262C33v48Ev");}
void  S3262C3 ::v49(){vfunc_called(this, "_ZN7S3262C33v49Ev");}
void  S3262C3 ::v50(){vfunc_called(this, "_ZN7S3262C33v50Ev");}
void  S3262C3 ::v51(){vfunc_called(this, "_ZN7S3262C33v51Ev");}
void  S3262C3 ::v52(){vfunc_called(this, "_ZN7S3262C33v52Ev");}
void  S3262C3 ::v53(){vfunc_called(this, "_ZN7S3262C33v53Ev");}
void  S3262C3 ::v54(){vfunc_called(this, "_ZN7S3262C33v54Ev");}
void  S3262C3 ::v55(){vfunc_called(this, "_ZN7S3262C33v55Ev");}
void  S3262C3 ::v56(){vfunc_called(this, "_ZN7S3262C33v56Ev");}
void  S3262C3 ::v57(){vfunc_called(this, "_ZN7S3262C33v57Ev");}
void  S3262C3 ::v58(){vfunc_called(this, "_ZN7S3262C33v58Ev");}
void  S3262C3 ::v59(){vfunc_called(this, "_ZN7S3262C33v59Ev");}
void  S3262C3 ::v60(){vfunc_called(this, "_ZN7S3262C33v60Ev");}
void  S3262C3 ::v61(){vfunc_called(this, "_ZN7S3262C33v61Ev");}
void  S3262C3 ::v62(){vfunc_called(this, "_ZN7S3262C33v62Ev");}
void  S3262C3 ::v63(){vfunc_called(this, "_ZN7S3262C33v63Ev");}
void  S3262C3 ::v64(){vfunc_called(this, "_ZN7S3262C33v64Ev");}
void  S3262C3 ::v65(){vfunc_called(this, "_ZN7S3262C33v65Ev");}
void  S3262C3 ::v66(){vfunc_called(this, "_ZN7S3262C33v66Ev");}
void  S3262C3 ::v67(){vfunc_called(this, "_ZN7S3262C33v67Ev");}
void  S3262C3 ::v68(){vfunc_called(this, "_ZN7S3262C33v68Ev");}
void  S3262C3 ::v69(){vfunc_called(this, "_ZN7S3262C33v69Ev");}
void  S3262C3 ::v70(){vfunc_called(this, "_ZN7S3262C33v70Ev");}
void  S3262C3 ::v71(){vfunc_called(this, "_ZN7S3262C33v71Ev");}
void  S3262C3 ::v72(){vfunc_called(this, "_ZN7S3262C33v72Ev");}
void  S3262C3 ::v73(){vfunc_called(this, "_ZN7S3262C33v73Ev");}
void  S3262C3 ::v74(){vfunc_called(this, "_ZN7S3262C33v74Ev");}
void  S3262C3 ::v75(){vfunc_called(this, "_ZN7S3262C33v75Ev");}
void  S3262C3 ::v76(){vfunc_called(this, "_ZN7S3262C33v76Ev");}
void  S3262C3 ::v77(){vfunc_called(this, "_ZN7S3262C33v77Ev");}
void  S3262C3 ::v78(){vfunc_called(this, "_ZN7S3262C33v78Ev");}
void  S3262C3 ::v79(){vfunc_called(this, "_ZN7S3262C33v79Ev");}
void  S3262C3 ::v80(){vfunc_called(this, "_ZN7S3262C33v80Ev");}
void  S3262C3 ::v81(){vfunc_called(this, "_ZN7S3262C33v81Ev");}
void  S3262C3 ::v82(){vfunc_called(this, "_ZN7S3262C33v82Ev");}
void  S3262C3 ::v83(){vfunc_called(this, "_ZN7S3262C33v83Ev");}
void  S3262C3 ::v84(){vfunc_called(this, "_ZN7S3262C33v84Ev");}
void  S3262C3 ::v85(){vfunc_called(this, "_ZN7S3262C33v85Ev");}
void  S3262C3 ::v86(){vfunc_called(this, "_ZN7S3262C33v86Ev");}
void  S3262C3 ::v87(){vfunc_called(this, "_ZN7S3262C33v87Ev");}
void  S3262C3 ::v88(){vfunc_called(this, "_ZN7S3262C33v88Ev");}
void  S3262C3 ::v89(){vfunc_called(this, "_ZN7S3262C33v89Ev");}
void  S3262C3 ::v90(){vfunc_called(this, "_ZN7S3262C33v90Ev");}
void  S3262C3 ::v91(){vfunc_called(this, "_ZN7S3262C33v91Ev");}
void  S3262C3 ::v92(){vfunc_called(this, "_ZN7S3262C33v92Ev");}
void  S3262C3 ::v93(){vfunc_called(this, "_ZN7S3262C33v93Ev");}
void  S3262C3 ::v94(){vfunc_called(this, "_ZN7S3262C33v94Ev");}
void  S3262C3 ::v95(){vfunc_called(this, "_ZN7S3262C33v95Ev");}
void  S3262C3 ::v96(){vfunc_called(this, "_ZN7S3262C33v96Ev");}
void  S3262C3 ::v97(){vfunc_called(this, "_ZN7S3262C33v97Ev");}
void  S3262C3 ::v98(){vfunc_called(this, "_ZN7S3262C33v98Ev");}
void  S3262C3 ::v99(){vfunc_called(this, "_ZN7S3262C33v99Ev");}
void  S3262C3 ::v100(){vfunc_called(this, "_ZN7S3262C34v100Ev");}
void  S3262C3 ::v101(){vfunc_called(this, "_ZN7S3262C34v101Ev");}
void  S3262C3 ::v102(){vfunc_called(this, "_ZN7S3262C34v102Ev");}
void  S3262C3 ::v103(){vfunc_called(this, "_ZN7S3262C34v103Ev");}
void  S3262C3 ::v104(){vfunc_called(this, "_ZN7S3262C34v104Ev");}
void  S3262C3 ::v105(){vfunc_called(this, "_ZN7S3262C34v105Ev");}
void  S3262C3 ::v106(){vfunc_called(this, "_ZN7S3262C34v106Ev");}
void  S3262C3 ::v107(){vfunc_called(this, "_ZN7S3262C34v107Ev");}
S3262C3 ::S3262C3(){ note_ctor("S3262C3", this);} // tgen

static void Test_S3262C3()
{
  extern Class_Descriptor cd_S3262C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3262C3, buf);
    S3262C3 *dp, &lv = *(dp=new (buf) S3262C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3262C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3262C3)");
    check_field_offset(lv, s3262c3f0, ABISELECT(8,4), "S3262C3.s3262c3f0");
    check_field_offset(lv, s3262c3f1, ABISELECT(16,8), "S3262C3.s3262c3f1");
    check_field_offset(lv, s3262c3f2, ABISELECT(24,16), "S3262C3.s3262c3f2");
    check_field_offset(lv, s3262c3f3, ABISELECT(56,32), "S3262C3.s3262c3f3");
    check_field_offset(lv, s3262c3f4, ABISELECT(64,40), "S3262C3.s3262c3f4");
    check_field_offset(lv, s3262c3f5, ABISELECT(72,44), "S3262C3.s3262c3f5");
    check_field_offset(lv, s3262c3f6, ABISELECT(80,52), "S3262C3.s3262c3f6");
    test_class_info(&lv, &cd_S3262C3);
    dp->~S3262C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3262C3(Test_S3262C3, "S3262C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3262C3C1Ev();
extern void _ZN7S3262C3D1Ev();
Name_Map name_map_S3262C3[] = {
  NSPAIR(_ZN7S3262C3C1Ev),
  NSPAIR(_ZN7S3262C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3262C3[];
extern void _ZN7S3262C3D1Ev();
extern void _ZN7S3262C3D0Ev();
extern void _ZN7S3262C33v44Ev();
extern void _ZN7S3262C33v45Ev();
extern void _ZN7S3262C33v46Ev();
extern void _ZN7S3262C33v47Ev();
extern void _ZN7S3262C33v48Ev();
extern void _ZN7S3262C33v49Ev();
extern void _ZN7S3262C33v50Ev();
extern void _ZN7S3262C33v51Ev();
extern void _ZN7S3262C33v52Ev();
extern void _ZN7S3262C33v53Ev();
extern void _ZN7S3262C33v54Ev();
extern void _ZN7S3262C33v55Ev();
extern void _ZN7S3262C33v56Ev();
extern void _ZN7S3262C33v57Ev();
extern void _ZN7S3262C33v58Ev();
extern void _ZN7S3262C33v59Ev();
extern void _ZN7S3262C33v60Ev();
extern void _ZN7S3262C33v61Ev();
extern void _ZN7S3262C33v62Ev();
extern void _ZN7S3262C33v63Ev();
extern void _ZN7S3262C33v64Ev();
extern void _ZN7S3262C33v65Ev();
extern void _ZN7S3262C33v66Ev();
extern void _ZN7S3262C33v67Ev();
extern void _ZN7S3262C33v68Ev();
extern void _ZN7S3262C33v69Ev();
extern void _ZN7S3262C33v70Ev();
extern void _ZN7S3262C33v71Ev();
extern void _ZN7S3262C33v72Ev();
extern void _ZN7S3262C33v73Ev();
extern void _ZN7S3262C33v74Ev();
extern void _ZN7S3262C33v75Ev();
extern void _ZN7S3262C33v76Ev();
extern void _ZN7S3262C33v77Ev();
extern void _ZN7S3262C33v78Ev();
extern void _ZN7S3262C33v79Ev();
extern void _ZN7S3262C33v80Ev();
extern void _ZN7S3262C33v81Ev();
extern void _ZN7S3262C33v82Ev();
extern void _ZN7S3262C33v83Ev();
extern void _ZN7S3262C33v84Ev();
extern void _ZN7S3262C33v85Ev();
extern void _ZN7S3262C33v86Ev();
extern void _ZN7S3262C33v87Ev();
extern void _ZN7S3262C33v88Ev();
extern void _ZN7S3262C33v89Ev();
extern void _ZN7S3262C33v90Ev();
extern void _ZN7S3262C33v91Ev();
extern void _ZN7S3262C33v92Ev();
extern void _ZN7S3262C33v93Ev();
extern void _ZN7S3262C33v94Ev();
extern void _ZN7S3262C33v95Ev();
extern void _ZN7S3262C33v96Ev();
extern void _ZN7S3262C33v97Ev();
extern void _ZN7S3262C33v98Ev();
extern void _ZN7S3262C33v99Ev();
extern void _ZN7S3262C34v100Ev();
extern void _ZN7S3262C34v101Ev();
extern void _ZN7S3262C34v102Ev();
extern void _ZN7S3262C34v103Ev();
extern void _ZN7S3262C34v104Ev();
extern void _ZN7S3262C34v105Ev();
extern void _ZN7S3262C34v106Ev();
extern void _ZN7S3262C34v107Ev();
static  VTBL_ENTRY vtc_S3262C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3262C3[0]),
  (VTBL_ENTRY)&_ZN7S3262C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3262C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v74Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v75Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v76Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v77Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v78Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v79Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v80Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v81Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v82Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v83Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v84Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v85Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v86Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v87Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v88Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v89Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v90Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v91Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v92Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v93Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v94Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v95Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v96Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v97Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v98Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v99Ev,
  (VTBL_ENTRY)&_ZN7S3262C34v100Ev,
  (VTBL_ENTRY)&_ZN7S3262C34v101Ev,
  (VTBL_ENTRY)&_ZN7S3262C34v102Ev,
  (VTBL_ENTRY)&_ZN7S3262C34v103Ev,
  (VTBL_ENTRY)&_ZN7S3262C34v104Ev,
  (VTBL_ENTRY)&_ZN7S3262C34v105Ev,
  (VTBL_ENTRY)&_ZN7S3262C34v106Ev,
  (VTBL_ENTRY)&_ZN7S3262C34v107Ev,
};
extern VTBL_ENTRY _ZTI7S3262C3[];
extern  VTBL_ENTRY _ZTV7S3262C3[];
Class_Descriptor cd_S3262C3 = {  "S3262C3", // class name
  0,0,//no base classes
  &(vtc_S3262C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3262C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3262C3),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  S3262C5  {
  virtual void  v108(); // _ZN7S3262C54v108Ev
  virtual void  v109(); // _ZN7S3262C54v109Ev
  virtual void  v110(); // _ZN7S3262C54v110Ev
  virtual void  v111(); // _ZN7S3262C54v111Ev
  virtual void  v112(); // _ZN7S3262C54v112Ev
  virtual void  v113(); // _ZN7S3262C54v113Ev
  virtual void  v114(); // _ZN7S3262C54v114Ev
  virtual void  v115(); // _ZN7S3262C54v115Ev
  virtual void  v116(); // _ZN7S3262C54v116Ev
  virtual void  v117(); // _ZN7S3262C54v117Ev
  virtual void  v118(); // _ZN7S3262C54v118Ev
  virtual void  v119(); // _ZN7S3262C54v119Ev
  virtual void  v120(); // _ZN7S3262C54v120Ev
  virtual void  v121(); // _ZN7S3262C54v121Ev
  virtual void  v122(); // _ZN7S3262C54v122Ev
  virtual void  v123(); // _ZN7S3262C54v123Ev
  ~S3262C5(); // tgen
  S3262C5(); // tgen
};
//SIG(-1 S3262C5) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16}


void  S3262C5 ::v108(){vfunc_called(this, "_ZN7S3262C54v108Ev");}
void  S3262C5 ::v109(){vfunc_called(this, "_ZN7S3262C54v109Ev");}
void  S3262C5 ::v110(){vfunc_called(this, "_ZN7S3262C54v110Ev");}
void  S3262C5 ::v111(){vfunc_called(this, "_ZN7S3262C54v111Ev");}
void  S3262C5 ::v112(){vfunc_called(this, "_ZN7S3262C54v112Ev");}
void  S3262C5 ::v113(){vfunc_called(this, "_ZN7S3262C54v113Ev");}
void  S3262C5 ::v114(){vfunc_called(this, "_ZN7S3262C54v114Ev");}
void  S3262C5 ::v115(){vfunc_called(this, "_ZN7S3262C54v115Ev");}
void  S3262C5 ::v116(){vfunc_called(this, "_ZN7S3262C54v116Ev");}
void  S3262C5 ::v117(){vfunc_called(this, "_ZN7S3262C54v117Ev");}
void  S3262C5 ::v118(){vfunc_called(this, "_ZN7S3262C54v118Ev");}
void  S3262C5 ::v119(){vfunc_called(this, "_ZN7S3262C54v119Ev");}
void  S3262C5 ::v120(){vfunc_called(this, "_ZN7S3262C54v120Ev");}
void  S3262C5 ::v121(){vfunc_called(this, "_ZN7S3262C54v121Ev");}
void  S3262C5 ::v122(){vfunc_called(this, "_ZN7S3262C54v122Ev");}
void  S3262C5 ::v123(){vfunc_called(this, "_ZN7S3262C54v123Ev");}
S3262C5 ::~S3262C5(){ note_dtor("S3262C5", this);} // tgen
S3262C5 ::S3262C5(){ note_ctor("S3262C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3262C5C1Ev();
extern void _ZN7S3262C5D1Ev();
Name_Map name_map_S3262C5[] = {
  NSPAIR(_ZN7S3262C5C1Ev),
  NSPAIR(_ZN7S3262C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3262C5[];
extern void _ZN7S3262C54v108Ev();
extern void _ZN7S3262C54v109Ev();
extern void _ZN7S3262C54v110Ev();
extern void _ZN7S3262C54v111Ev();
extern void _ZN7S3262C54v112Ev();
extern void _ZN7S3262C54v113Ev();
extern void _ZN7S3262C54v114Ev();
extern void _ZN7S3262C54v115Ev();
extern void _ZN7S3262C54v116Ev();
extern void _ZN7S3262C54v117Ev();
extern void _ZN7S3262C54v118Ev();
extern void _ZN7S3262C54v119Ev();
extern void _ZN7S3262C54v120Ev();
extern void _ZN7S3262C54v121Ev();
extern void _ZN7S3262C54v122Ev();
extern void _ZN7S3262C54v123Ev();
static  VTBL_ENTRY vtc_S3262C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3262C5[0]),
  (VTBL_ENTRY)&_ZN7S3262C54v108Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v109Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v110Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v111Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v112Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v113Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v114Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v115Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v116Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v117Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v118Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v119Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v120Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v121Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v122Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v123Ev,
};
extern VTBL_ENTRY _ZTI7S3262C5[];
extern  VTBL_ENTRY _ZTV7S3262C5[];
Class_Descriptor cd_S3262C5 = {  "S3262C5", // class name
  0,0,//no base classes
  &(vtc_S3262C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3262C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3262C5),18, //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  S3262C6  {
  virtual void  v124(); // _ZN7S3262C64v124Ev
  virtual void  v125(); // _ZN7S3262C64v125Ev
  virtual void  v126(); // _ZN7S3262C64v126Ev
  virtual void  v127(); // _ZN7S3262C64v127Ev
  virtual void  v128(); // _ZN7S3262C64v128Ev
  virtual void  v129(); // _ZN7S3262C64v129Ev
  virtual void  v130(); // _ZN7S3262C64v130Ev
  virtual void  v131(); // _ZN7S3262C64v131Ev
  virtual void  v132(); // _ZN7S3262C64v132Ev
  ~S3262C6(); // tgen
  S3262C6(); // tgen
};
//SIG(-1 S3262C6) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S3262C6 ::v124(){vfunc_called(this, "_ZN7S3262C64v124Ev");}
void  S3262C6 ::v125(){vfunc_called(this, "_ZN7S3262C64v125Ev");}
void  S3262C6 ::v126(){vfunc_called(this, "_ZN7S3262C64v126Ev");}
void  S3262C6 ::v127(){vfunc_called(this, "_ZN7S3262C64v127Ev");}
void  S3262C6 ::v128(){vfunc_called(this, "_ZN7S3262C64v128Ev");}
void  S3262C6 ::v129(){vfunc_called(this, "_ZN7S3262C64v129Ev");}
void  S3262C6 ::v130(){vfunc_called(this, "_ZN7S3262C64v130Ev");}
void  S3262C6 ::v131(){vfunc_called(this, "_ZN7S3262C64v131Ev");}
void  S3262C6 ::v132(){vfunc_called(this, "_ZN7S3262C64v132Ev");}
S3262C6 ::~S3262C6(){ note_dtor("S3262C6", this);} // tgen
S3262C6 ::S3262C6(){ note_ctor("S3262C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3262C6C1Ev();
extern void _ZN7S3262C6D1Ev();
Name_Map name_map_S3262C6[] = {
  NSPAIR(_ZN7S3262C6C1Ev),
  NSPAIR(_ZN7S3262C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3262C6[];
extern void _ZN7S3262C64v124Ev();
extern void _ZN7S3262C64v125Ev();
extern void _ZN7S3262C64v126Ev();
extern void _ZN7S3262C64v127Ev();
extern void _ZN7S3262C64v128Ev();
extern void _ZN7S3262C64v129Ev();
extern void _ZN7S3262C64v130Ev();
extern void _ZN7S3262C64v131Ev();
extern void _ZN7S3262C64v132Ev();
static  VTBL_ENTRY vtc_S3262C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3262C6[0]),
  (VTBL_ENTRY)&_ZN7S3262C64v124Ev,
  (VTBL_ENTRY)&_ZN7S3262C64v125Ev,
  (VTBL_ENTRY)&_ZN7S3262C64v126Ev,
  (VTBL_ENTRY)&_ZN7S3262C64v127Ev,
  (VTBL_ENTRY)&_ZN7S3262C64v128Ev,
  (VTBL_ENTRY)&_ZN7S3262C64v129Ev,
  (VTBL_ENTRY)&_ZN7S3262C64v130Ev,
  (VTBL_ENTRY)&_ZN7S3262C64v131Ev,
  (VTBL_ENTRY)&_ZN7S3262C64v132Ev,
};
extern VTBL_ENTRY _ZTI7S3262C6[];
extern  VTBL_ENTRY _ZTV7S3262C6[];
Class_Descriptor cd_S3262C6 = {  "S3262C6", // class name
  0,0,//no base classes
  &(vtc_S3262C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3262C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3262C6),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  S3262C2  : S3262C3 , S3262C5 , S3262C6 {
  void *s3262c2f0;
  ::S79C39_nt s3262c2f1;
  unsigned int s3262c2f2:1;
  unsigned int s3262c2f3:1;
  unsigned int s3262c2f4:1;
  unsigned int s3262c2f5:1;
  virtual  ~S3262C2(); // _ZN7S3262C2D1Ev
  virtual void  v133(); // _ZN7S3262C24v133Ev
  virtual void  v134(); // _ZN7S3262C24v134Ev
  virtual void  v135(); // _ZN7S3262C24v135Ev
  virtual void  v136(); // _ZN7S3262C24v136Ev
  virtual void  v137(); // _ZN7S3262C24v137Ev
  virtual void  v138(); // _ZN7S3262C24v138Ev
  virtual void  v139(); // _ZN7S3262C24v139Ev
  virtual void  v140(); // _ZN7S3262C24v140Ev
  virtual void  v141(); // _ZN7S3262C24v141Ev
  virtual void  v142(); // _ZN7S3262C24v142Ev
  virtual void  v143(); // _ZN7S3262C24v143Ev
  virtual void  v144(); // _ZN7S3262C24v144Ev
  virtual void  v145(); // _ZN7S3262C24v145Ev
  virtual void  v146(); // _ZN7S3262C24v146Ev
  virtual void  v147(); // _ZN7S3262C24v147Ev
  virtual void  v148(); // _ZN7S3262C24v148Ev
  virtual void  v149(); // _ZN7S3262C24v149Ev
  virtual void  v150(); // _ZN7S3262C24v150Ev
  virtual void  v151(); // _ZN7S3262C24v151Ev
  virtual void  v152(); // _ZN7S3262C24v152Ev
  virtual void  v153(); // _ZN7S3262C24v153Ev
  virtual void  v154(); // _ZN7S3262C24v154Ev
  virtual void  v155(); // _ZN7S3262C24v155Ev
  virtual void  v156(); // _ZN7S3262C24v156Ev
  S3262C2(); // tgen
};
//SIG(-1 S3262C2) C1{ BC2{ vd 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 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} BC4{ v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104} BC5{ v105 v106 v107 v108 v109 v110 v111 v112 v113} 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 Fp FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1}


 S3262C2 ::~S3262C2(){ note_dtor("S3262C2", this);}
void  S3262C2 ::v133(){vfunc_called(this, "_ZN7S3262C24v133Ev");}
void  S3262C2 ::v134(){vfunc_called(this, "_ZN7S3262C24v134Ev");}
void  S3262C2 ::v135(){vfunc_called(this, "_ZN7S3262C24v135Ev");}
void  S3262C2 ::v136(){vfunc_called(this, "_ZN7S3262C24v136Ev");}
void  S3262C2 ::v137(){vfunc_called(this, "_ZN7S3262C24v137Ev");}
void  S3262C2 ::v138(){vfunc_called(this, "_ZN7S3262C24v138Ev");}
void  S3262C2 ::v139(){vfunc_called(this, "_ZN7S3262C24v139Ev");}
void  S3262C2 ::v140(){vfunc_called(this, "_ZN7S3262C24v140Ev");}
void  S3262C2 ::v141(){vfunc_called(this, "_ZN7S3262C24v141Ev");}
void  S3262C2 ::v142(){vfunc_called(this, "_ZN7S3262C24v142Ev");}
void  S3262C2 ::v143(){vfunc_called(this, "_ZN7S3262C24v143Ev");}
void  S3262C2 ::v144(){vfunc_called(this, "_ZN7S3262C24v144Ev");}
void  S3262C2 ::v145(){vfunc_called(this, "_ZN7S3262C24v145Ev");}
void  S3262C2 ::v146(){vfunc_called(this, "_ZN7S3262C24v146Ev");}
void  S3262C2 ::v147(){vfunc_called(this, "_ZN7S3262C24v147Ev");}
void  S3262C2 ::v148(){vfunc_called(this, "_ZN7S3262C24v148Ev");}
void  S3262C2 ::v149(){vfunc_called(this, "_ZN7S3262C24v149Ev");}
void  S3262C2 ::v150(){vfunc_called(this, "_ZN7S3262C24v150Ev");}
void  S3262C2 ::v151(){vfunc_called(this, "_ZN7S3262C24v151Ev");}
void  S3262C2 ::v152(){vfunc_called(this, "_ZN7S3262C24v152Ev");}
void  S3262C2 ::v153(){vfunc_called(this, "_ZN7S3262C24v153Ev");}
void  S3262C2 ::v154(){vfunc_called(this, "_ZN7S3262C24v154Ev");}
void  S3262C2 ::v155(){vfunc_called(this, "_ZN7S3262C24v155Ev");}
void  S3262C2 ::v156(){vfunc_called(this, "_ZN7S3262C24v156Ev");}
S3262C2 ::S3262C2(){ note_ctor("S3262C2", this);} // tgen

static void Test_S3262C2()
{
  extern Class_Descriptor cd_S3262C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,23)];
    init_test(&cd_S3262C2, buf);
    S3262C2 *dp, &lv = *(dp=new (buf) S3262C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S3262C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3262C2)");
    check_base_class_offset(lv, (S3262C3*), 0, "S3262C2");
    check_base_class_offset(lv, (S3262C5*), ABISELECT(96,60), "S3262C2");
    check_base_class_offset(lv, (S3262C6*), ABISELECT(104,64), "S3262C2");
    check_field_offset(lv, s3262c2f0, ABISELECT(112,68), "S3262C2.s3262c2f0");
    check_field_offset(lv, s3262c2f1, ABISELECT(120,72), "S3262C2.s3262c2f1");
    set_bf_and_test(lv, s3262c2f2, ABISELECT(136,84), 0, 1, 1, "S3262C2");
    set_bf_and_test(lv, s3262c2f3, ABISELECT(136,84), 1, 1, 1, "S3262C2");
    set_bf_and_test(lv, s3262c2f4, ABISELECT(136,84), 2, 1, 1, "S3262C2");
    set_bf_and_test(lv, s3262c2f5, ABISELECT(136,84), 3, 1, 1, "S3262C2");
    test_class_info(&lv, &cd_S3262C2);
    dp->~S3262C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3262C2(Test_S3262C2, "S3262C2", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN7S3262C2C1Ev();
extern void _ZN7S3262C2D1Ev();
Name_Map name_map_S3262C2[] = {
  NSPAIR(_ZN7S3262C2C1Ev),
  NSPAIR(_ZN7S3262C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3262C3;
extern VTBL_ENTRY _ZTI7S3262C3[];
extern  VTBL_ENTRY _ZTV7S3262C3[];
extern Class_Descriptor cd_S3262C5;
extern VTBL_ENTRY _ZTI7S3262C5[];
extern  VTBL_ENTRY _ZTV7S3262C5[];
extern Class_Descriptor cd_S3262C6;
extern VTBL_ENTRY _ZTI7S3262C6[];
extern  VTBL_ENTRY _ZTV7S3262C6[];
static Base_Class bases_S3262C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3262C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3262C5,    ABISELECT(96,60), //bcp->offset
    92, //bcp->virtual_function_table_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_S3262C6,    ABISELECT(104,64), //bcp->offset
    110, //bcp->virtual_function_table_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 _ZTI7S3262C2[];
extern void _ZN7S3262C2D1Ev();
extern void _ZN7S3262C2D0Ev();
extern void _ZN7S3262C33v44Ev();
extern void _ZN7S3262C33v45Ev();
extern void _ZN7S3262C33v46Ev();
extern void _ZN7S3262C33v47Ev();
extern void _ZN7S3262C33v48Ev();
extern void _ZN7S3262C33v49Ev();
extern void _ZN7S3262C33v50Ev();
extern void _ZN7S3262C33v51Ev();
extern void _ZN7S3262C33v52Ev();
extern void _ZN7S3262C33v53Ev();
extern void _ZN7S3262C33v54Ev();
extern void _ZN7S3262C33v55Ev();
extern void _ZN7S3262C33v56Ev();
extern void _ZN7S3262C33v57Ev();
extern void _ZN7S3262C33v58Ev();
extern void _ZN7S3262C33v59Ev();
extern void _ZN7S3262C33v60Ev();
extern void _ZN7S3262C33v61Ev();
extern void _ZN7S3262C33v62Ev();
extern void _ZN7S3262C33v63Ev();
extern void _ZN7S3262C33v64Ev();
extern void _ZN7S3262C33v65Ev();
extern void _ZN7S3262C33v66Ev();
extern void _ZN7S3262C33v67Ev();
extern void _ZN7S3262C33v68Ev();
extern void _ZN7S3262C33v69Ev();
extern void _ZN7S3262C33v70Ev();
extern void _ZN7S3262C33v71Ev();
extern void _ZN7S3262C33v72Ev();
extern void _ZN7S3262C33v73Ev();
extern void _ZN7S3262C33v74Ev();
extern void _ZN7S3262C33v75Ev();
extern void _ZN7S3262C33v76Ev();
extern void _ZN7S3262C33v77Ev();
extern void _ZN7S3262C33v78Ev();
extern void _ZN7S3262C33v79Ev();
extern void _ZN7S3262C33v80Ev();
extern void _ZN7S3262C33v81Ev();
extern void _ZN7S3262C33v82Ev();
extern void _ZN7S3262C33v83Ev();
extern void _ZN7S3262C33v84Ev();
extern void _ZN7S3262C33v85Ev();
extern void _ZN7S3262C33v86Ev();
extern void _ZN7S3262C33v87Ev();
extern void _ZN7S3262C33v88Ev();
extern void _ZN7S3262C33v89Ev();
extern void _ZN7S3262C33v90Ev();
extern void _ZN7S3262C33v91Ev();
extern void _ZN7S3262C33v92Ev();
extern void _ZN7S3262C33v93Ev();
extern void _ZN7S3262C33v94Ev();
extern void _ZN7S3262C33v95Ev();
extern void _ZN7S3262C33v96Ev();
extern void _ZN7S3262C33v97Ev();
extern void _ZN7S3262C33v98Ev();
extern void _ZN7S3262C33v99Ev();
extern void _ZN7S3262C34v100Ev();
extern void _ZN7S3262C34v101Ev();
extern void _ZN7S3262C34v102Ev();
extern void _ZN7S3262C34v103Ev();
extern void _ZN7S3262C34v104Ev();
extern void _ZN7S3262C34v105Ev();
extern void _ZN7S3262C34v106Ev();
extern void _ZN7S3262C34v107Ev();
extern void _ZN7S3262C24v133Ev();
extern void _ZN7S3262C24v134Ev();
extern void _ZN7S3262C24v135Ev();
extern void _ZN7S3262C24v136Ev();
extern void _ZN7S3262C24v137Ev();
extern void _ZN7S3262C24v138Ev();
extern void _ZN7S3262C24v139Ev();
extern void _ZN7S3262C24v140Ev();
extern void _ZN7S3262C24v141Ev();
extern void _ZN7S3262C24v142Ev();
extern void _ZN7S3262C24v143Ev();
extern void _ZN7S3262C24v144Ev();
extern void _ZN7S3262C24v145Ev();
extern void _ZN7S3262C24v146Ev();
extern void _ZN7S3262C24v147Ev();
extern void _ZN7S3262C24v148Ev();
extern void _ZN7S3262C24v149Ev();
extern void _ZN7S3262C24v150Ev();
extern void _ZN7S3262C24v151Ev();
extern void _ZN7S3262C24v152Ev();
extern void _ZN7S3262C24v153Ev();
extern void _ZN7S3262C24v154Ev();
extern void _ZN7S3262C24v155Ev();
extern void _ZN7S3262C24v156Ev();
extern void _ZN7S3262C54v108Ev();
extern void _ZN7S3262C54v109Ev();
extern void _ZN7S3262C54v110Ev();
extern void _ZN7S3262C54v111Ev();
extern void _ZN7S3262C54v112Ev();
extern void _ZN7S3262C54v113Ev();
extern void _ZN7S3262C54v114Ev();
extern void _ZN7S3262C54v115Ev();
extern void _ZN7S3262C54v116Ev();
extern void _ZN7S3262C54v117Ev();
extern void _ZN7S3262C54v118Ev();
extern void _ZN7S3262C54v119Ev();
extern void _ZN7S3262C54v120Ev();
extern void _ZN7S3262C54v121Ev();
extern void _ZN7S3262C54v122Ev();
extern void _ZN7S3262C54v123Ev();
extern void _ZN7S3262C64v124Ev();
extern void _ZN7S3262C64v125Ev();
extern void _ZN7S3262C64v126Ev();
extern void _ZN7S3262C64v127Ev();
extern void _ZN7S3262C64v128Ev();
extern void _ZN7S3262C64v129Ev();
extern void _ZN7S3262C64v130Ev();
extern void _ZN7S3262C64v131Ev();
extern void _ZN7S3262C64v132Ev();
static  VTBL_ENTRY vtc_S3262C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3262C2[0]),
  (VTBL_ENTRY)&_ZN7S3262C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3262C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v74Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v75Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v76Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v77Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v78Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v79Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v80Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v81Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v82Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v83Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v84Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v85Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v86Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v87Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v88Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v89Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v90Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v91Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v92Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v93Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v94Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v95Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v96Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v97Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v98Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v99Ev,
  (VTBL_ENTRY)&_ZN7S3262C34v100Ev,
  (VTBL_ENTRY)&_ZN7S3262C34v101Ev,
  (VTBL_ENTRY)&_ZN7S3262C34v102Ev,
  (VTBL_ENTRY)&_ZN7S3262C34v103Ev,
  (VTBL_ENTRY)&_ZN7S3262C34v104Ev,
  (VTBL_ENTRY)&_ZN7S3262C34v105Ev,
  (VTBL_ENTRY)&_ZN7S3262C34v106Ev,
  (VTBL_ENTRY)&_ZN7S3262C34v107Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v133Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v134Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v135Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v136Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v137Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v138Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v139Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v140Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v141Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v142Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v143Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v144Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v145Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v146Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v147Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v148Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v149Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v150Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v151Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v152Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v153Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v154Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v155Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v156Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S3262C2[0]),
  (VTBL_ENTRY)&_ZN7S3262C54v108Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v109Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v110Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v111Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v112Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v113Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v114Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v115Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v116Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v117Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v118Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v119Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v120Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v121Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v122Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v123Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S3262C2[0]),
  (VTBL_ENTRY)&_ZN7S3262C64v124Ev,
  (VTBL_ENTRY)&_ZN7S3262C64v125Ev,
  (VTBL_ENTRY)&_ZN7S3262C64v126Ev,
  (VTBL_ENTRY)&_ZN7S3262C64v127Ev,
  (VTBL_ENTRY)&_ZN7S3262C64v128Ev,
  (VTBL_ENTRY)&_ZN7S3262C64v129Ev,
  (VTBL_ENTRY)&_ZN7S3262C64v130Ev,
  (VTBL_ENTRY)&_ZN7S3262C64v131Ev,
  (VTBL_ENTRY)&_ZN7S3262C64v132Ev,
};
extern VTBL_ENTRY _ZTI7S3262C2[];
extern  VTBL_ENTRY _ZTV7S3262C2[];
Class_Descriptor cd_S3262C2 = {  "S3262C2", // class name
  bases_S3262C2, 3,
  &(vtc_S3262C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI7S3262C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3262C2),121, //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  S3262C11_nt  {
  ::S79C44 s3262c11f0;
  char s3262c11f1;
  void  mf3262c11(); // _ZN11S3262C11_nt9mf3262c11Ev
};
//SIG(-1 S3262C11_nt) C1{ m FC2{ BC3{ BC4{ m Fp Fi[2]}}} Fc}


void  S3262C11_nt ::mf3262c11(){}

//skip512 S3262C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3262C14_nt  {
  ::S79C40 s3262c14f0;
  void  mf3262c14(); // _ZN11S3262C14_nt9mf3262c14Ev
};
//SIG(-1 S3262C14_nt) C1{ m FC2{ BC3{ BC4{ m Fp Fi[2]}}}}


void  S3262C14_nt ::mf3262c14(){}

//skip512 S3262C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3262C1  : S3262C2 {
  ::S3262C11_nt s3262c1f0;
  ::S3262C11_nt s3262c1f1;
  ::S3262C14_nt s3262c1f2;
  ::S79C8_nt s3262c1f3;
  int s3262c1f4[2];
  unsigned int s3262c1f5:1;
  unsigned int s3262c1f6:1;
  unsigned int s3262c1f7:1;
  unsigned int s3262c1f8:1;
  unsigned int s3262c1f9:1;
  unsigned int s3262c1f10:1;
  char s3262c1f11;
  char s3262c1f12;
  virtual  ~S3262C1(); // _ZN7S3262C1D1Ev
  virtual void  v1(); // _ZN7S3262C12v1Ev
  virtual void  v2(); // _ZN7S3262C12v2Ev
  virtual void  v3(); // _ZN7S3262C12v3Ev
  virtual void  v4(); // _ZN7S3262C12v4Ev
  virtual void  v5(); // _ZN7S3262C12v5Ev
  virtual void  v6(); // _ZN7S3262C12v6Ev
  virtual void  v7(); // _ZN7S3262C12v7Ev
  virtual void  v8(); // _ZN7S3262C12v8Ev
  virtual void  v9(); // _ZN7S3262C12v9Ev
  virtual void  v10(); // _ZN7S3262C13v10Ev
  virtual void  v11(); // _ZN7S3262C13v11Ev
  virtual void  v12(); // _ZN7S3262C13v12Ev
  virtual void  v13(); // _ZN7S3262C13v13Ev
  virtual void  v14(); // _ZN7S3262C13v14Ev
  virtual void  v15(); // _ZN7S3262C13v15Ev
  virtual void  v16(); // _ZN7S3262C13v16Ev
  virtual void  v17(); // _ZN7S3262C13v17Ev
  virtual void  v18(); // _ZN7S3262C13v18Ev
  virtual void  v19(); // _ZN7S3262C13v19Ev
  virtual void  v20(); // _ZN7S3262C13v20Ev
  virtual void  v21(); // _ZN7S3262C13v21Ev
  virtual void  v22(); // _ZN7S3262C13v22Ev
  virtual void  v23(); // _ZN7S3262C13v23Ev
  virtual void  v24(); // _ZN7S3262C13v24Ev
  virtual void  v25(); // _ZN7S3262C13v25Ev
  virtual void  v26(); // _ZN7S3262C13v26Ev
  virtual void  v27(); // _ZN7S3262C13v27Ev
  virtual void  v28(); // _ZN7S3262C13v28Ev
  virtual void  v29(); // _ZN7S3262C13v29Ev
  virtual void  v30(); // _ZN7S3262C13v30Ev
  virtual void  v31(); // _ZN7S3262C13v31Ev
  virtual void  v32(); // _ZN7S3262C13v32Ev
  virtual void  v33(); // _ZN7S3262C13v33Ev
  virtual void  v34(); // _ZN7S3262C13v34Ev
  virtual void  v35(); // _ZN7S3262C13v35Ev
  virtual void  v36(); // _ZN7S3262C13v36Ev
  virtual void  v37(); // _ZN7S3262C13v37Ev
  virtual void  v38(); // _ZN7S3262C13v38Ev
  virtual void  v39(); // _ZN7S3262C13v39Ev
  virtual void  v40(); // _ZN7S3262C13v40Ev
  virtual void  v41(); // _ZN7S3262C13v41Ev
  virtual void  v42(); // _ZN7S3262C13v42Ev
  virtual void  v43(); // _ZN7S3262C13v43Ev
  S3262C1(); // tgen
};
//SIG(1 S3262C1) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} BC5{ v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123} BC6{ v124 v125 v126 v127 v128 v129 v130 v131 v132} vd v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 Fp FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1} 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 FC11{ m FC12{ BC13{ BC10}} Fc} FC11 FC14{ m FC8} FC4 Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fc[2]}


 S3262C1 ::~S3262C1(){ note_dtor("S3262C1", this);}
void  S3262C1 ::v1(){vfunc_called(this, "_ZN7S3262C12v1Ev");}
void  S3262C1 ::v2(){vfunc_called(this, "_ZN7S3262C12v2Ev");}
void  S3262C1 ::v3(){vfunc_called(this, "_ZN7S3262C12v3Ev");}
void  S3262C1 ::v4(){vfunc_called(this, "_ZN7S3262C12v4Ev");}
void  S3262C1 ::v5(){vfunc_called(this, "_ZN7S3262C12v5Ev");}
void  S3262C1 ::v6(){vfunc_called(this, "_ZN7S3262C12v6Ev");}
void  S3262C1 ::v7(){vfunc_called(this, "_ZN7S3262C12v7Ev");}
void  S3262C1 ::v8(){vfunc_called(this, "_ZN7S3262C12v8Ev");}
void  S3262C1 ::v9(){vfunc_called(this, "_ZN7S3262C12v9Ev");}
void  S3262C1 ::v10(){vfunc_called(this, "_ZN7S3262C13v10Ev");}
void  S3262C1 ::v11(){vfunc_called(this, "_ZN7S3262C13v11Ev");}
void  S3262C1 ::v12(){vfunc_called(this, "_ZN7S3262C13v12Ev");}
void  S3262C1 ::v13(){vfunc_called(this, "_ZN7S3262C13v13Ev");}
void  S3262C1 ::v14(){vfunc_called(this, "_ZN7S3262C13v14Ev");}
void  S3262C1 ::v15(){vfunc_called(this, "_ZN7S3262C13v15Ev");}
void  S3262C1 ::v16(){vfunc_called(this, "_ZN7S3262C13v16Ev");}
void  S3262C1 ::v17(){vfunc_called(this, "_ZN7S3262C13v17Ev");}
void  S3262C1 ::v18(){vfunc_called(this, "_ZN7S3262C13v18Ev");}
void  S3262C1 ::v19(){vfunc_called(this, "_ZN7S3262C13v19Ev");}
void  S3262C1 ::v20(){vfunc_called(this, "_ZN7S3262C13v20Ev");}
void  S3262C1 ::v21(){vfunc_called(this, "_ZN7S3262C13v21Ev");}
void  S3262C1 ::v22(){vfunc_called(this, "_ZN7S3262C13v22Ev");}
void  S3262C1 ::v23(){vfunc_called(this, "_ZN7S3262C13v23Ev");}
void  S3262C1 ::v24(){vfunc_called(this, "_ZN7S3262C13v24Ev");}
void  S3262C1 ::v25(){vfunc_called(this, "_ZN7S3262C13v25Ev");}
void  S3262C1 ::v26(){vfunc_called(this, "_ZN7S3262C13v26Ev");}
void  S3262C1 ::v27(){vfunc_called(this, "_ZN7S3262C13v27Ev");}
void  S3262C1 ::v28(){vfunc_called(this, "_ZN7S3262C13v28Ev");}
void  S3262C1 ::v29(){vfunc_called(this, "_ZN7S3262C13v29Ev");}
void  S3262C1 ::v30(){vfunc_called(this, "_ZN7S3262C13v30Ev");}
void  S3262C1 ::v31(){vfunc_called(this, "_ZN7S3262C13v31Ev");}
void  S3262C1 ::v32(){vfunc_called(this, "_ZN7S3262C13v32Ev");}
void  S3262C1 ::v33(){vfunc_called(this, "_ZN7S3262C13v33Ev");}
void  S3262C1 ::v34(){vfunc_called(this, "_ZN7S3262C13v34Ev");}
void  S3262C1 ::v35(){vfunc_called(this, "_ZN7S3262C13v35Ev");}
void  S3262C1 ::v36(){vfunc_called(this, "_ZN7S3262C13v36Ev");}
void  S3262C1 ::v37(){vfunc_called(this, "_ZN7S3262C13v37Ev");}
void  S3262C1 ::v38(){vfunc_called(this, "_ZN7S3262C13v38Ev");}
void  S3262C1 ::v39(){vfunc_called(this, "_ZN7S3262C13v39Ev");}
void  S3262C1 ::v40(){vfunc_called(this, "_ZN7S3262C13v40Ev");}
void  S3262C1 ::v41(){vfunc_called(this, "_ZN7S3262C13v41Ev");}
void  S3262C1 ::v42(){vfunc_called(this, "_ZN7S3262C13v42Ev");}
void  S3262C1 ::v43(){vfunc_called(this, "_ZN7S3262C13v43Ev");}
S3262C1 ::S3262C1(){ note_ctor("S3262C1", this);} // tgen

static void Test_S3262C1()
{
  extern Class_Descriptor cd_S3262C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,39)];
    init_test(&cd_S3262C1, buf);
    S3262C1 *dp, &lv = *(dp=new (buf) S3262C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,152), "sizeof(S3262C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3262C1)");
    check_base_class_offset(lv, (S3262C3*)(S3262C2*), 0, "S3262C1");
    check_base_class_offset(lv, (S3262C5*)(S3262C2*), ABISELECT(96,60), "S3262C1");
    check_base_class_offset(lv, (S3262C6*)(S3262C2*), ABISELECT(104,64), "S3262C1");
    check_base_class_offset(lv, (S3262C2*), 0, "S3262C1");
    check_field_offset(lv, s3262c1f0, ABISELECT(144,88), "S3262C1.s3262c1f0");
    check_field_offset(lv, s3262c1f1, ABISELECT(168,104), "S3262C1.s3262c1f1");
    check_field_offset(lv, s3262c1f2, ABISELECT(192,120), "S3262C1.s3262c1f2");
    check_field_offset(lv, s3262c1f3, ABISELECT(208,132), "S3262C1.s3262c1f3");
    check_field_offset(lv, s3262c1f4, ABISELECT(216,140), "S3262C1.s3262c1f4");
    set_bf_and_test(lv, s3262c1f5, ABISELECT(224,148), 0, 1, 1, "S3262C1");
    set_bf_and_test(lv, s3262c1f6, ABISELECT(224,148), 1, 1, 1, "S3262C1");
    set_bf_and_test(lv, s3262c1f7, ABISELECT(224,148), 2, 1, 1, "S3262C1");
    set_bf_and_test(lv, s3262c1f8, ABISELECT(224,148), 3, 1, 1, "S3262C1");
    set_bf_and_test(lv, s3262c1f9, ABISELECT(224,148), 4, 1, 1, "S3262C1");
    set_bf_and_test(lv, s3262c1f10, ABISELECT(224,148), 5, 1, 1, "S3262C1");
    check_field_offset(lv, s3262c1f11, ABISELECT(225,149), "S3262C1.s3262c1f11");
    check_field_offset(lv, s3262c1f12, ABISELECT(226,150), "S3262C1.s3262c1f12");
    test_class_info(&lv, &cd_S3262C1);
    dp->~S3262C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3262C1(Test_S3262C1, "S3262C1", ABISELECT(232,152));

#else // __cplusplus

extern void _ZN7S3262C1C1Ev();
extern void _ZN7S3262C1D1Ev();
Name_Map name_map_S3262C1[] = {
  NSPAIR(_ZN7S3262C1C1Ev),
  NSPAIR(_ZN7S3262C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3262C3;
extern VTBL_ENTRY _ZTI7S3262C3[];
extern  VTBL_ENTRY _ZTV7S3262C3[];
extern Class_Descriptor cd_S3262C5;
extern VTBL_ENTRY _ZTI7S3262C5[];
extern  VTBL_ENTRY _ZTV7S3262C5[];
extern Class_Descriptor cd_S3262C6;
extern VTBL_ENTRY _ZTI7S3262C6[];
extern  VTBL_ENTRY _ZTV7S3262C6[];
extern Class_Descriptor cd_S3262C2;
extern VTBL_ENTRY _ZTI7S3262C2[];
extern  VTBL_ENTRY _ZTV7S3262C2[];
static Base_Class bases_S3262C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3262C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3262C5,    ABISELECT(96,60), //bcp->offset
    135, //bcp->virtual_function_table_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_S3262C6,    ABISELECT(104,64), //bcp->offset
    153, //bcp->virtual_function_table_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_S3262C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3262C1[];
extern void _ZN7S3262C1D1Ev();
extern void _ZN7S3262C1D0Ev();
extern void _ZN7S3262C33v44Ev();
extern void _ZN7S3262C33v45Ev();
extern void _ZN7S3262C33v46Ev();
extern void _ZN7S3262C33v47Ev();
extern void _ZN7S3262C33v48Ev();
extern void _ZN7S3262C33v49Ev();
extern void _ZN7S3262C33v50Ev();
extern void _ZN7S3262C33v51Ev();
extern void _ZN7S3262C33v52Ev();
extern void _ZN7S3262C33v53Ev();
extern void _ZN7S3262C33v54Ev();
extern void _ZN7S3262C33v55Ev();
extern void _ZN7S3262C33v56Ev();
extern void _ZN7S3262C33v57Ev();
extern void _ZN7S3262C33v58Ev();
extern void _ZN7S3262C33v59Ev();
extern void _ZN7S3262C33v60Ev();
extern void _ZN7S3262C33v61Ev();
extern void _ZN7S3262C33v62Ev();
extern void _ZN7S3262C33v63Ev();
extern void _ZN7S3262C33v64Ev();
extern void _ZN7S3262C33v65Ev();
extern void _ZN7S3262C33v66Ev();
extern void _ZN7S3262C33v67Ev();
extern void _ZN7S3262C33v68Ev();
extern void _ZN7S3262C33v69Ev();
extern void _ZN7S3262C33v70Ev();
extern void _ZN7S3262C33v71Ev();
extern void _ZN7S3262C33v72Ev();
extern void _ZN7S3262C33v73Ev();
extern void _ZN7S3262C33v74Ev();
extern void _ZN7S3262C33v75Ev();
extern void _ZN7S3262C33v76Ev();
extern void _ZN7S3262C33v77Ev();
extern void _ZN7S3262C33v78Ev();
extern void _ZN7S3262C33v79Ev();
extern void _ZN7S3262C33v80Ev();
extern void _ZN7S3262C33v81Ev();
extern void _ZN7S3262C33v82Ev();
extern void _ZN7S3262C33v83Ev();
extern void _ZN7S3262C33v84Ev();
extern void _ZN7S3262C33v85Ev();
extern void _ZN7S3262C33v86Ev();
extern void _ZN7S3262C33v87Ev();
extern void _ZN7S3262C33v88Ev();
extern void _ZN7S3262C33v89Ev();
extern void _ZN7S3262C33v90Ev();
extern void _ZN7S3262C33v91Ev();
extern void _ZN7S3262C33v92Ev();
extern void _ZN7S3262C33v93Ev();
extern void _ZN7S3262C33v94Ev();
extern void _ZN7S3262C33v95Ev();
extern void _ZN7S3262C33v96Ev();
extern void _ZN7S3262C33v97Ev();
extern void _ZN7S3262C33v98Ev();
extern void _ZN7S3262C33v99Ev();
extern void _ZN7S3262C34v100Ev();
extern void _ZN7S3262C34v101Ev();
extern void _ZN7S3262C34v102Ev();
extern void _ZN7S3262C34v103Ev();
extern void _ZN7S3262C34v104Ev();
extern void _ZN7S3262C34v105Ev();
extern void _ZN7S3262C34v106Ev();
extern void _ZN7S3262C34v107Ev();
extern void _ZN7S3262C24v133Ev();
extern void _ZN7S3262C24v134Ev();
extern void _ZN7S3262C24v135Ev();
extern void _ZN7S3262C24v136Ev();
extern void _ZN7S3262C24v137Ev();
extern void _ZN7S3262C24v138Ev();
extern void _ZN7S3262C24v139Ev();
extern void _ZN7S3262C24v140Ev();
extern void _ZN7S3262C24v141Ev();
extern void _ZN7S3262C24v142Ev();
extern void _ZN7S3262C24v143Ev();
extern void _ZN7S3262C24v144Ev();
extern void _ZN7S3262C24v145Ev();
extern void _ZN7S3262C24v146Ev();
extern void _ZN7S3262C24v147Ev();
extern void _ZN7S3262C24v148Ev();
extern void _ZN7S3262C24v149Ev();
extern void _ZN7S3262C24v150Ev();
extern void _ZN7S3262C24v151Ev();
extern void _ZN7S3262C24v152Ev();
extern void _ZN7S3262C24v153Ev();
extern void _ZN7S3262C24v154Ev();
extern void _ZN7S3262C24v155Ev();
extern void _ZN7S3262C24v156Ev();
extern void _ZN7S3262C12v1Ev();
extern void _ZN7S3262C12v2Ev();
extern void _ZN7S3262C12v3Ev();
extern void _ZN7S3262C12v4Ev();
extern void _ZN7S3262C12v5Ev();
extern void _ZN7S3262C12v6Ev();
extern void _ZN7S3262C12v7Ev();
extern void _ZN7S3262C12v8Ev();
extern void _ZN7S3262C12v9Ev();
extern void _ZN7S3262C13v10Ev();
extern void _ZN7S3262C13v11Ev();
extern void _ZN7S3262C13v12Ev();
extern void _ZN7S3262C13v13Ev();
extern void _ZN7S3262C13v14Ev();
extern void _ZN7S3262C13v15Ev();
extern void _ZN7S3262C13v16Ev();
extern void _ZN7S3262C13v17Ev();
extern void _ZN7S3262C13v18Ev();
extern void _ZN7S3262C13v19Ev();
extern void _ZN7S3262C13v20Ev();
extern void _ZN7S3262C13v21Ev();
extern void _ZN7S3262C13v22Ev();
extern void _ZN7S3262C13v23Ev();
extern void _ZN7S3262C13v24Ev();
extern void _ZN7S3262C13v25Ev();
extern void _ZN7S3262C13v26Ev();
extern void _ZN7S3262C13v27Ev();
extern void _ZN7S3262C13v28Ev();
extern void _ZN7S3262C13v29Ev();
extern void _ZN7S3262C13v30Ev();
extern void _ZN7S3262C13v31Ev();
extern void _ZN7S3262C13v32Ev();
extern void _ZN7S3262C13v33Ev();
extern void _ZN7S3262C13v34Ev();
extern void _ZN7S3262C13v35Ev();
extern void _ZN7S3262C13v36Ev();
extern void _ZN7S3262C13v37Ev();
extern void _ZN7S3262C13v38Ev();
extern void _ZN7S3262C13v39Ev();
extern void _ZN7S3262C13v40Ev();
extern void _ZN7S3262C13v41Ev();
extern void _ZN7S3262C13v42Ev();
extern void _ZN7S3262C13v43Ev();
extern void _ZN7S3262C54v108Ev();
extern void _ZN7S3262C54v109Ev();
extern void _ZN7S3262C54v110Ev();
extern void _ZN7S3262C54v111Ev();
extern void _ZN7S3262C54v112Ev();
extern void _ZN7S3262C54v113Ev();
extern void _ZN7S3262C54v114Ev();
extern void _ZN7S3262C54v115Ev();
extern void _ZN7S3262C54v116Ev();
extern void _ZN7S3262C54v117Ev();
extern void _ZN7S3262C54v118Ev();
extern void _ZN7S3262C54v119Ev();
extern void _ZN7S3262C54v120Ev();
extern void _ZN7S3262C54v121Ev();
extern void _ZN7S3262C54v122Ev();
extern void _ZN7S3262C54v123Ev();
extern void _ZN7S3262C64v124Ev();
extern void _ZN7S3262C64v125Ev();
extern void _ZN7S3262C64v126Ev();
extern void _ZN7S3262C64v127Ev();
extern void _ZN7S3262C64v128Ev();
extern void _ZN7S3262C64v129Ev();
extern void _ZN7S3262C64v130Ev();
extern void _ZN7S3262C64v131Ev();
extern void _ZN7S3262C64v132Ev();
static  VTBL_ENTRY vtc_S3262C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3262C1[0]),
  (VTBL_ENTRY)&_ZN7S3262C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3262C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v74Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v75Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v76Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v77Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v78Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v79Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v80Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v81Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v82Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v83Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v84Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v85Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v86Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v87Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v88Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v89Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v90Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v91Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v92Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v93Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v94Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v95Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v96Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v97Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v98Ev,
  (VTBL_ENTRY)&_ZN7S3262C33v99Ev,
  (VTBL_ENTRY)&_ZN7S3262C34v100Ev,
  (VTBL_ENTRY)&_ZN7S3262C34v101Ev,
  (VTBL_ENTRY)&_ZN7S3262C34v102Ev,
  (VTBL_ENTRY)&_ZN7S3262C34v103Ev,
  (VTBL_ENTRY)&_ZN7S3262C34v104Ev,
  (VTBL_ENTRY)&_ZN7S3262C34v105Ev,
  (VTBL_ENTRY)&_ZN7S3262C34v106Ev,
  (VTBL_ENTRY)&_ZN7S3262C34v107Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v133Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v134Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v135Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v136Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v137Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v138Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v139Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v140Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v141Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v142Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v143Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v144Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v145Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v146Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v147Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v148Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v149Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v150Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v151Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v152Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v153Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v154Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v155Ev,
  (VTBL_ENTRY)&_ZN7S3262C24v156Ev,
  (VTBL_ENTRY)&_ZN7S3262C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3262C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3262C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3262C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3262C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3262C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3262C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3262C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3262C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v13Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v14Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v15Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v16Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v17Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v18Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v19Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v20Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v21Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v22Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v23Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v24Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v25Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v26Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v27Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v28Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v29Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v30Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v31Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v32Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v33Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v34Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v35Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v36Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v37Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v38Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v39Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v40Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v41Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v42Ev,
  (VTBL_ENTRY)&_ZN7S3262C13v43Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S3262C1[0]),
  (VTBL_ENTRY)&_ZN7S3262C54v108Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v109Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v110Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v111Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v112Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v113Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v114Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v115Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v116Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v117Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v118Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v119Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v120Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v121Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v122Ev,
  (VTBL_ENTRY)&_ZN7S3262C54v123Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S3262C1[0]),
  (VTBL_ENTRY)&_ZN7S3262C64v124Ev,
  (VTBL_ENTRY)&_ZN7S3262C64v125Ev,
  (VTBL_ENTRY)&_ZN7S3262C64v126Ev,
  (VTBL_ENTRY)&_ZN7S3262C64v127Ev,
  (VTBL_ENTRY)&_ZN7S3262C64v128Ev,
  (VTBL_ENTRY)&_ZN7S3262C64v129Ev,
  (VTBL_ENTRY)&_ZN7S3262C64v130Ev,
  (VTBL_ENTRY)&_ZN7S3262C64v131Ev,
  (VTBL_ENTRY)&_ZN7S3262C64v132Ev,
};
extern VTBL_ENTRY _ZTI7S3262C1[];
extern  VTBL_ENTRY _ZTV7S3262C1[];
Class_Descriptor cd_S3262C1 = {  "S3262C1", // class name
  bases_S3262C1, 4,
  &(vtc_S3262C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,152), // object size
  NSPAIRA(_ZTI7S3262C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3262C1),164, //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  S1350C4  {
  int s1350c4f0;
  __tsi64 s1350c4f1;
  void *s1350c4f2[4];
  int s1350c4f3[2];
  void *s1350c4f4;
  ::S79C8_nt s1350c4f5;
  void *s1350c4f6[2];
  virtual  ~S1350C4(); // _ZN7S1350C4D1Ev
  virtual void  v22(); // _ZN7S1350C43v22Ev
  virtual void  v23(); // _ZN7S1350C43v23Ev
  virtual void  v24(); // _ZN7S1350C43v24Ev
  virtual void  v25(); // _ZN7S1350C43v25Ev
  virtual void  v26(); // _ZN7S1350C43v26Ev
  virtual void  v27(); // _ZN7S1350C43v27Ev
  virtual void  v28(); // _ZN7S1350C43v28Ev
  virtual void  v29(); // _ZN7S1350C43v29Ev
  virtual void  v30(); // _ZN7S1350C43v30Ev
  virtual void  v31(); // _ZN7S1350C43v31Ev
  virtual void  v32(); // _ZN7S1350C43v32Ev
  virtual void  v33(); // _ZN7S1350C43v33Ev
  virtual void  v34(); // _ZN7S1350C43v34Ev
  virtual void  v35(); // _ZN7S1350C43v35Ev
  virtual void  v36(); // _ZN7S1350C43v36Ev
  virtual void  v37(); // _ZN7S1350C43v37Ev
  virtual void  v38(); // _ZN7S1350C43v38Ev
  virtual void  v39(); // _ZN7S1350C43v39Ev
  virtual void  v40(); // _ZN7S1350C43v40Ev
  virtual void  v41(); // _ZN7S1350C43v41Ev
  virtual void  v42(); // _ZN7S1350C43v42Ev
  virtual void  v43(); // _ZN7S1350C43v43Ev
  virtual void  v44(); // _ZN7S1350C43v44Ev
  virtual void  v45(); // _ZN7S1350C43v45Ev
  virtual void  v46(); // _ZN7S1350C43v46Ev
  virtual void  v47(); // _ZN7S1350C43v47Ev
  virtual void  v48(); // _ZN7S1350C43v48Ev
  virtual void  v49(); // _ZN7S1350C43v49Ev
  virtual void  v50(); // _ZN7S1350C43v50Ev
  virtual void  v51(); // _ZN7S1350C43v51Ev
  virtual void  v52(); // _ZN7S1350C43v52Ev
  virtual void  v53(); // _ZN7S1350C43v53Ev
  virtual void  v54(); // _ZN7S1350C43v54Ev
  virtual void  v55(); // _ZN7S1350C43v55Ev
  virtual void  v56(); // _ZN7S1350C43v56Ev
  virtual void  v57(); // _ZN7S1350C43v57Ev
  virtual void  v58(); // _ZN7S1350C43v58Ev
  virtual void  v59(); // _ZN7S1350C43v59Ev
  virtual void  v60(); // _ZN7S1350C43v60Ev
  virtual void  v61(); // _ZN7S1350C43v61Ev
  virtual void  v62(); // _ZN7S1350C43v62Ev
  virtual void  v63(); // _ZN7S1350C43v63Ev
  virtual void  v64(); // _ZN7S1350C43v64Ev
  virtual void  v65(); // _ZN7S1350C43v65Ev
  virtual void  v66(); // _ZN7S1350C43v66Ev
  virtual void  v67(); // _ZN7S1350C43v67Ev
  virtual void  v68(); // _ZN7S1350C43v68Ev
  virtual void  v69(); // _ZN7S1350C43v69Ev
  virtual void  v70(); // _ZN7S1350C43v70Ev
  virtual void  v71(); // _ZN7S1350C43v71Ev
  virtual void  v72(); // _ZN7S1350C43v72Ev
  virtual void  v73(); // _ZN7S1350C43v73Ev
  virtual void  v74(); // _ZN7S1350C43v74Ev
  virtual void  v75(); // _ZN7S1350C43v75Ev
  virtual void  v76(); // _ZN7S1350C43v76Ev
  virtual void  v77(); // _ZN7S1350C43v77Ev
  virtual void  v78(); // _ZN7S1350C43v78Ev
  virtual void  v79(); // _ZN7S1350C43v79Ev
  virtual void  v80(); // _ZN7S1350C43v80Ev
  virtual void  v81(); // _ZN7S1350C43v81Ev
  virtual void  v82(); // _ZN7S1350C43v82Ev
  virtual void  v83(); // _ZN7S1350C43v83Ev
  virtual void  v84(); // _ZN7S1350C43v84Ev
  virtual void  v85(); // _ZN7S1350C43v85Ev
  S1350C4(); // tgen
};
//SIG(-1 S1350C4) 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]}


 S1350C4 ::~S1350C4(){ note_dtor("S1350C4", this);}
void  S1350C4 ::v22(){vfunc_called(this, "_ZN7S1350C43v22Ev");}
void  S1350C4 ::v23(){vfunc_called(this, "_ZN7S1350C43v23Ev");}
void  S1350C4 ::v24(){vfunc_called(this, "_ZN7S1350C43v24Ev");}
void  S1350C4 ::v25(){vfunc_called(this, "_ZN7S1350C43v25Ev");}
void  S1350C4 ::v26(){vfunc_called(this, "_ZN7S1350C43v26Ev");}
void  S1350C4 ::v27(){vfunc_called(this, "_ZN7S1350C43v27Ev");}
void  S1350C4 ::v28(){vfunc_called(this, "_ZN7S1350C43v28Ev");}
void  S1350C4 ::v29(){vfunc_called(this, "_ZN7S1350C43v29Ev");}
void  S1350C4 ::v30(){vfunc_called(this, "_ZN7S1350C43v30Ev");}
void  S1350C4 ::v31(){vfunc_called(this, "_ZN7S1350C43v31Ev");}
void  S1350C4 ::v32(){vfunc_called(this, "_ZN7S1350C43v32Ev");}
void  S1350C4 ::v33(){vfunc_called(this, "_ZN7S1350C43v33Ev");}
void  S1350C4 ::v34(){vfunc_called(this, "_ZN7S1350C43v34Ev");}
void  S1350C4 ::v35(){vfunc_called(this, "_ZN7S1350C43v35Ev");}
void  S1350C4 ::v36(){vfunc_called(this, "_ZN7S1350C43v36Ev");}
void  S1350C4 ::v37(){vfunc_called(this, "_ZN7S1350C43v37Ev");}
void  S1350C4 ::v38(){vfunc_called(this, "_ZN7S1350C43v38Ev");}
void  S1350C4 ::v39(){vfunc_called(this, "_ZN7S1350C43v39Ev");}
void  S1350C4 ::v40(){vfunc_called(this, "_ZN7S1350C43v40Ev");}
void  S1350C4 ::v41(){vfunc_called(this, "_ZN7S1350C43v41Ev");}
void  S1350C4 ::v42(){vfunc_called(this, "_ZN7S1350C43v42Ev");}
void  S1350C4 ::v43(){vfunc_called(this, "_ZN7S1350C43v43Ev");}
void  S1350C4 ::v44(){vfunc_called(this, "_ZN7S1350C43v44Ev");}
void  S1350C4 ::v45(){vfunc_called(this, "_ZN7S1350C43v45Ev");}
void  S1350C4 ::v46(){vfunc_called(this, "_ZN7S1350C43v46Ev");}
void  S1350C4 ::v47(){vfunc_called(this, "_ZN7S1350C43v47Ev");}
void  S1350C4 ::v48(){vfunc_called(this, "_ZN7S1350C43v48Ev");}
void  S1350C4 ::v49(){vfunc_called(this, "_ZN7S1350C43v49Ev");}
void  S1350C4 ::v50(){vfunc_called(this, "_ZN7S1350C43v50Ev");}
void  S1350C4 ::v51(){vfunc_called(this, "_ZN7S1350C43v51Ev");}
void  S1350C4 ::v52(){vfunc_called(this, "_ZN7S1350C43v52Ev");}
void  S1350C4 ::v53(){vfunc_called(this, "_ZN7S1350C43v53Ev");}
void  S1350C4 ::v54(){vfunc_called(this, "_ZN7S1350C43v54Ev");}
void  S1350C4 ::v55(){vfunc_called(this, "_ZN7S1350C43v55Ev");}
void  S1350C4 ::v56(){vfunc_called(this, "_ZN7S1350C43v56Ev");}
void  S1350C4 ::v57(){vfunc_called(this, "_ZN7S1350C43v57Ev");}
void  S1350C4 ::v58(){vfunc_called(this, "_ZN7S1350C43v58Ev");}
void  S1350C4 ::v59(){vfunc_called(this, "_ZN7S1350C43v59Ev");}
void  S1350C4 ::v60(){vfunc_called(this, "_ZN7S1350C43v60Ev");}
void  S1350C4 ::v61(){vfunc_called(this, "_ZN7S1350C43v61Ev");}
void  S1350C4 ::v62(){vfunc_called(this, "_ZN7S1350C43v62Ev");}
void  S1350C4 ::v63(){vfunc_called(this, "_ZN7S1350C43v63Ev");}
void  S1350C4 ::v64(){vfunc_called(this, "_ZN7S1350C43v64Ev");}
void  S1350C4 ::v65(){vfunc_called(this, "_ZN7S1350C43v65Ev");}
void  S1350C4 ::v66(){vfunc_called(this, "_ZN7S1350C43v66Ev");}
void  S1350C4 ::v67(){vfunc_called(this, "_ZN7S1350C43v67Ev");}
void  S1350C4 ::v68(){vfunc_called(this, "_ZN7S1350C43v68Ev");}
void  S1350C4 ::v69(){vfunc_called(this, "_ZN7S1350C43v69Ev");}
void  S1350C4 ::v70(){vfunc_called(this, "_ZN7S1350C43v70Ev");}
void  S1350C4 ::v71(){vfunc_called(this, "_ZN7S1350C43v71Ev");}
void  S1350C4 ::v72(){vfunc_called(this, "_ZN7S1350C43v72Ev");}
void  S1350C4 ::v73(){vfunc_called(this, "_ZN7S1350C43v73Ev");}
void  S1350C4 ::v74(){vfunc_called(this, "_ZN7S1350C43v74Ev");}
void  S1350C4 ::v75(){vfunc_called(this, "_ZN7S1350C43v75Ev");}
void  S1350C4 ::v76(){vfunc_called(this, "_ZN7S1350C43v76Ev");}
void  S1350C4 ::v77(){vfunc_called(this, "_ZN7S1350C43v77Ev");}
void  S1350C4 ::v78(){vfunc_called(this, "_ZN7S1350C43v78Ev");}
void  S1350C4 ::v79(){vfunc_called(this, "_ZN7S1350C43v79Ev");}
void  S1350C4 ::v80(){vfunc_called(this, "_ZN7S1350C43v80Ev");}
void  S1350C4 ::v81(){vfunc_called(this, "_ZN7S1350C43v81Ev");}
void  S1350C4 ::v82(){vfunc_called(this, "_ZN7S1350C43v82Ev");}
void  S1350C4 ::v83(){vfunc_called(this, "_ZN7S1350C43v83Ev");}
void  S1350C4 ::v84(){vfunc_called(this, "_ZN7S1350C43v84Ev");}
void  S1350C4 ::v85(){vfunc_called(this, "_ZN7S1350C43v85Ev");}
S1350C4 ::S1350C4(){ note_ctor("S1350C4", this);} // tgen

static void Test_S1350C4()
{
  extern Class_Descriptor cd_S1350C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1350C4, buf);
    S1350C4 *dp, &lv = *(dp=new (buf) S1350C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1350C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1350C4)");
    check_field_offset(lv, s1350c4f0, ABISELECT(8,4), "S1350C4.s1350c4f0");
    check_field_offset(lv, s1350c4f1, ABISELECT(16,8), "S1350C4.s1350c4f1");
    check_field_offset(lv, s1350c4f2, ABISELECT(24,16), "S1350C4.s1350c4f2");
    check_field_offset(lv, s1350c4f3, ABISELECT(56,32), "S1350C4.s1350c4f3");
    check_field_offset(lv, s1350c4f4, ABISELECT(64,40), "S1350C4.s1350c4f4");
    check_field_offset(lv, s1350c4f5, ABISELECT(72,44), "S1350C4.s1350c4f5");
    check_field_offset(lv, s1350c4f6, ABISELECT(80,52), "S1350C4.s1350c4f6");
    test_class_info(&lv, &cd_S1350C4);
    dp->~S1350C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1350C4(Test_S1350C4, "S1350C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1350C4C1Ev();
extern void _ZN7S1350C4D1Ev();
Name_Map name_map_S1350C4[] = {
  NSPAIR(_ZN7S1350C4C1Ev),
  NSPAIR(_ZN7S1350C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1350C4[];
extern void _ZN7S1350C4D1Ev();
extern void _ZN7S1350C4D0Ev();
extern void _ZN7S1350C43v22Ev();
extern void _ZN7S1350C43v23Ev();
extern void _ZN7S1350C43v24Ev();
extern void _ZN7S1350C43v25Ev();
extern void _ZN7S1350C43v26Ev();
extern void _ZN7S1350C43v27Ev();
extern void _ZN7S1350C43v28Ev();
extern void _ZN7S1350C43v29Ev();
extern void _ZN7S1350C43v30Ev();
extern void _ZN7S1350C43v31Ev();
extern void _ZN7S1350C43v32Ev();
extern void _ZN7S1350C43v33Ev();
extern void _ZN7S1350C43v34Ev();
extern void _ZN7S1350C43v35Ev();
extern void _ZN7S1350C43v36Ev();
extern void _ZN7S1350C43v37Ev();
extern void _ZN7S1350C43v38Ev();
extern void _ZN7S1350C43v39Ev();
extern void _ZN7S1350C43v40Ev();
extern void _ZN7S1350C43v41Ev();
extern void _ZN7S1350C43v42Ev();
extern void _ZN7S1350C43v43Ev();
extern void _ZN7S1350C43v44Ev();
extern void _ZN7S1350C43v45Ev();
extern void _ZN7S1350C43v46Ev();
extern void _ZN7S1350C43v47Ev();
extern void _ZN7S1350C43v48Ev();
extern void _ZN7S1350C43v49Ev();
extern void _ZN7S1350C43v50Ev();
extern void _ZN7S1350C43v51Ev();
extern void _ZN7S1350C43v52Ev();
extern void _ZN7S1350C43v53Ev();
extern void _ZN7S1350C43v54Ev();
extern void _ZN7S1350C43v55Ev();
extern void _ZN7S1350C43v56Ev();
extern void _ZN7S1350C43v57Ev();
extern void _ZN7S1350C43v58Ev();
extern void _ZN7S1350C43v59Ev();
extern void _ZN7S1350C43v60Ev();
extern void _ZN7S1350C43v61Ev();
extern void _ZN7S1350C43v62Ev();
extern void _ZN7S1350C43v63Ev();
extern void _ZN7S1350C43v64Ev();
extern void _ZN7S1350C43v65Ev();
extern void _ZN7S1350C43v66Ev();
extern void _ZN7S1350C43v67Ev();
extern void _ZN7S1350C43v68Ev();
extern void _ZN7S1350C43v69Ev();
extern void _ZN7S1350C43v70Ev();
extern void _ZN7S1350C43v71Ev();
extern void _ZN7S1350C43v72Ev();
extern void _ZN7S1350C43v73Ev();
extern void _ZN7S1350C43v74Ev();
extern void _ZN7S1350C43v75Ev();
extern void _ZN7S1350C43v76Ev();
extern void _ZN7S1350C43v77Ev();
extern void _ZN7S1350C43v78Ev();
extern void _ZN7S1350C43v79Ev();
extern void _ZN7S1350C43v80Ev();
extern void _ZN7S1350C43v81Ev();
extern void _ZN7S1350C43v82Ev();
extern void _ZN7S1350C43v83Ev();
extern void _ZN7S1350C43v84Ev();
extern void _ZN7S1350C43v85Ev();
static  VTBL_ENTRY vtc_S1350C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1350C4[0]),
  (VTBL_ENTRY)&_ZN7S1350C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1350C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v78Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v79Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v80Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v81Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v82Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v83Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v84Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v85Ev,
};
extern VTBL_ENTRY _ZTI7S1350C4[];
extern  VTBL_ENTRY _ZTV7S1350C4[];
Class_Descriptor cd_S1350C4 = {  "S1350C4", // class name
  0,0,//no base classes
  &(vtc_S1350C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1350C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1350C4),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  S1350C6  {
  virtual void  v86(); // _ZN7S1350C63v86Ev
  virtual void  v87(); // _ZN7S1350C63v87Ev
  virtual void  v88(); // _ZN7S1350C63v88Ev
  virtual void  v89(); // _ZN7S1350C63v89Ev
  virtual void  v90(); // _ZN7S1350C63v90Ev
  virtual void  v91(); // _ZN7S1350C63v91Ev
  virtual void  v92(); // _ZN7S1350C63v92Ev
  virtual void  v93(); // _ZN7S1350C63v93Ev
  virtual void  v94(); // _ZN7S1350C63v94Ev
  virtual void  v95(); // _ZN7S1350C63v95Ev
  virtual void  v96(); // _ZN7S1350C63v96Ev
  virtual void  v97(); // _ZN7S1350C63v97Ev
  virtual void  v98(); // _ZN7S1350C63v98Ev
  virtual void  v99(); // _ZN7S1350C63v99Ev
  virtual void  v100(); // _ZN7S1350C64v100Ev
  virtual void  v101(); // _ZN7S1350C64v101Ev
  ~S1350C6(); // tgen
  S1350C6(); // tgen
};
//SIG(-1 S1350C6) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16}


void  S1350C6 ::v86(){vfunc_called(this, "_ZN7S1350C63v86Ev");}
void  S1350C6 ::v87(){vfunc_called(this, "_ZN7S1350C63v87Ev");}
void  S1350C6 ::v88(){vfunc_called(this, "_ZN7S1350C63v88Ev");}
void  S1350C6 ::v89(){vfunc_called(this, "_ZN7S1350C63v89Ev");}
void  S1350C6 ::v90(){vfunc_called(this, "_ZN7S1350C63v90Ev");}
void  S1350C6 ::v91(){vfunc_called(this, "_ZN7S1350C63v91Ev");}
void  S1350C6 ::v92(){vfunc_called(this, "_ZN7S1350C63v92Ev");}
void  S1350C6 ::v93(){vfunc_called(this, "_ZN7S1350C63v93Ev");}
void  S1350C6 ::v94(){vfunc_called(this, "_ZN7S1350C63v94Ev");}
void  S1350C6 ::v95(){vfunc_called(this, "_ZN7S1350C63v95Ev");}
void  S1350C6 ::v96(){vfunc_called(this, "_ZN7S1350C63v96Ev");}
void  S1350C6 ::v97(){vfunc_called(this, "_ZN7S1350C63v97Ev");}
void  S1350C6 ::v98(){vfunc_called(this, "_ZN7S1350C63v98Ev");}
void  S1350C6 ::v99(){vfunc_called(this, "_ZN7S1350C63v99Ev");}
void  S1350C6 ::v100(){vfunc_called(this, "_ZN7S1350C64v100Ev");}
void  S1350C6 ::v101(){vfunc_called(this, "_ZN7S1350C64v101Ev");}
S1350C6 ::~S1350C6(){ note_dtor("S1350C6", this);} // tgen
S1350C6 ::S1350C6(){ note_ctor("S1350C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1350C6C1Ev();
extern void _ZN7S1350C6D1Ev();
Name_Map name_map_S1350C6[] = {
  NSPAIR(_ZN7S1350C6C1Ev),
  NSPAIR(_ZN7S1350C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1350C6[];
extern void _ZN7S1350C63v86Ev();
extern void _ZN7S1350C63v87Ev();
extern void _ZN7S1350C63v88Ev();
extern void _ZN7S1350C63v89Ev();
extern void _ZN7S1350C63v90Ev();
extern void _ZN7S1350C63v91Ev();
extern void _ZN7S1350C63v92Ev();
extern void _ZN7S1350C63v93Ev();
extern void _ZN7S1350C63v94Ev();
extern void _ZN7S1350C63v95Ev();
extern void _ZN7S1350C63v96Ev();
extern void _ZN7S1350C63v97Ev();
extern void _ZN7S1350C63v98Ev();
extern void _ZN7S1350C63v99Ev();
extern void _ZN7S1350C64v100Ev();
extern void _ZN7S1350C64v101Ev();
static  VTBL_ENTRY vtc_S1350C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1350C6[0]),
  (VTBL_ENTRY)&_ZN7S1350C63v86Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v87Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v88Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v89Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v90Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v91Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v92Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v93Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v94Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v95Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v96Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v97Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v98Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v99Ev,
  (VTBL_ENTRY)&_ZN7S1350C64v100Ev,
  (VTBL_ENTRY)&_ZN7S1350C64v101Ev,
};
extern VTBL_ENTRY _ZTI7S1350C6[];
extern  VTBL_ENTRY _ZTV7S1350C6[];
Class_Descriptor cd_S1350C6 = {  "S1350C6", // class name
  0,0,//no base classes
  &(vtc_S1350C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1350C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1350C6),18, //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  S1350C7  {
  virtual void  v102(); // _ZN7S1350C74v102Ev
  virtual void  v103(); // _ZN7S1350C74v103Ev
  virtual void  v104(); // _ZN7S1350C74v104Ev
  virtual void  v105(); // _ZN7S1350C74v105Ev
  virtual void  v106(); // _ZN7S1350C74v106Ev
  virtual void  v107(); // _ZN7S1350C74v107Ev
  virtual void  v108(); // _ZN7S1350C74v108Ev
  virtual void  v109(); // _ZN7S1350C74v109Ev
  virtual void  v110(); // _ZN7S1350C74v110Ev
  ~S1350C7(); // tgen
  S1350C7(); // tgen
};
//SIG(-1 S1350C7) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S1350C7 ::v102(){vfunc_called(this, "_ZN7S1350C74v102Ev");}
void  S1350C7 ::v103(){vfunc_called(this, "_ZN7S1350C74v103Ev");}
void  S1350C7 ::v104(){vfunc_called(this, "_ZN7S1350C74v104Ev");}
void  S1350C7 ::v105(){vfunc_called(this, "_ZN7S1350C74v105Ev");}
void  S1350C7 ::v106(){vfunc_called(this, "_ZN7S1350C74v106Ev");}
void  S1350C7 ::v107(){vfunc_called(this, "_ZN7S1350C74v107Ev");}
void  S1350C7 ::v108(){vfunc_called(this, "_ZN7S1350C74v108Ev");}
void  S1350C7 ::v109(){vfunc_called(this, "_ZN7S1350C74v109Ev");}
void  S1350C7 ::v110(){vfunc_called(this, "_ZN7S1350C74v110Ev");}
S1350C7 ::~S1350C7(){ note_dtor("S1350C7", this);} // tgen
S1350C7 ::S1350C7(){ note_ctor("S1350C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1350C7C1Ev();
extern void _ZN7S1350C7D1Ev();
Name_Map name_map_S1350C7[] = {
  NSPAIR(_ZN7S1350C7C1Ev),
  NSPAIR(_ZN7S1350C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1350C7[];
extern void _ZN7S1350C74v102Ev();
extern void _ZN7S1350C74v103Ev();
extern void _ZN7S1350C74v104Ev();
extern void _ZN7S1350C74v105Ev();
extern void _ZN7S1350C74v106Ev();
extern void _ZN7S1350C74v107Ev();
extern void _ZN7S1350C74v108Ev();
extern void _ZN7S1350C74v109Ev();
extern void _ZN7S1350C74v110Ev();
static  VTBL_ENTRY vtc_S1350C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1350C7[0]),
  (VTBL_ENTRY)&_ZN7S1350C74v102Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v103Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v104Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v105Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v106Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v107Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v108Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v109Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v110Ev,
};
extern VTBL_ENTRY _ZTI7S1350C7[];
extern  VTBL_ENTRY _ZTV7S1350C7[];
Class_Descriptor cd_S1350C7 = {  "S1350C7", // class name
  0,0,//no base classes
  &(vtc_S1350C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1350C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1350C7),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  S1350C3  : S1350C4 , S1350C6 , S1350C7 {
  void *s1350c3f0;
  ::S79C39_nt s1350c3f1;
  unsigned int s1350c3f2:1;
  unsigned int s1350c3f3:1;
  unsigned int s1350c3f4:1;
  unsigned int s1350c3f5:1;
  virtual  ~S1350C3(); // _ZN7S1350C3D1Ev
  virtual void  v111(); // _ZN7S1350C34v111Ev
  virtual void  v112(); // _ZN7S1350C34v112Ev
  virtual void  v113(); // _ZN7S1350C34v113Ev
  virtual void  v114(); // _ZN7S1350C34v114Ev
  virtual void  v115(); // _ZN7S1350C34v115Ev
  virtual void  v116(); // _ZN7S1350C34v116Ev
  virtual void  v117(); // _ZN7S1350C34v117Ev
  virtual void  v118(); // _ZN7S1350C34v118Ev
  virtual void  v119(); // _ZN7S1350C34v119Ev
  virtual void  v120(); // _ZN7S1350C34v120Ev
  virtual void  v121(); // _ZN7S1350C34v121Ev
  virtual void  v122(); // _ZN7S1350C34v122Ev
  virtual void  v123(); // _ZN7S1350C34v123Ev
  virtual void  v124(); // _ZN7S1350C34v124Ev
  virtual void  v125(); // _ZN7S1350C34v125Ev
  virtual void  v126(); // _ZN7S1350C34v126Ev
  virtual void  v127(); // _ZN7S1350C34v127Ev
  virtual void  v128(); // _ZN7S1350C34v128Ev
  virtual void  v129(); // _ZN7S1350C34v129Ev
  virtual void  v130(); // _ZN7S1350C34v130Ev
  virtual void  v131(); // _ZN7S1350C34v131Ev
  virtual void  v132(); // _ZN7S1350C34v132Ev
  virtual void  v133(); // _ZN7S1350C34v133Ev
  virtual void  v134(); // _ZN7S1350C34v134Ev
  S1350C3(); // tgen
};
//SIG(-1 S1350C3) C1{ BC2{ vd 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 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} BC4{ v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104} BC5{ v105 v106 v107 v108 v109 v110 v111 v112 v113} 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 Fp FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1}


 S1350C3 ::~S1350C3(){ note_dtor("S1350C3", this);}
void  S1350C3 ::v111(){vfunc_called(this, "_ZN7S1350C34v111Ev");}
void  S1350C3 ::v112(){vfunc_called(this, "_ZN7S1350C34v112Ev");}
void  S1350C3 ::v113(){vfunc_called(this, "_ZN7S1350C34v113Ev");}
void  S1350C3 ::v114(){vfunc_called(this, "_ZN7S1350C34v114Ev");}
void  S1350C3 ::v115(){vfunc_called(this, "_ZN7S1350C34v115Ev");}
void  S1350C3 ::v116(){vfunc_called(this, "_ZN7S1350C34v116Ev");}
void  S1350C3 ::v117(){vfunc_called(this, "_ZN7S1350C34v117Ev");}
void  S1350C3 ::v118(){vfunc_called(this, "_ZN7S1350C34v118Ev");}
void  S1350C3 ::v119(){vfunc_called(this, "_ZN7S1350C34v119Ev");}
void  S1350C3 ::v120(){vfunc_called(this, "_ZN7S1350C34v120Ev");}
void  S1350C3 ::v121(){vfunc_called(this, "_ZN7S1350C34v121Ev");}
void  S1350C3 ::v122(){vfunc_called(this, "_ZN7S1350C34v122Ev");}
void  S1350C3 ::v123(){vfunc_called(this, "_ZN7S1350C34v123Ev");}
void  S1350C3 ::v124(){vfunc_called(this, "_ZN7S1350C34v124Ev");}
void  S1350C3 ::v125(){vfunc_called(this, "_ZN7S1350C34v125Ev");}
void  S1350C3 ::v126(){vfunc_called(this, "_ZN7S1350C34v126Ev");}
void  S1350C3 ::v127(){vfunc_called(this, "_ZN7S1350C34v127Ev");}
void  S1350C3 ::v128(){vfunc_called(this, "_ZN7S1350C34v128Ev");}
void  S1350C3 ::v129(){vfunc_called(this, "_ZN7S1350C34v129Ev");}
void  S1350C3 ::v130(){vfunc_called(this, "_ZN7S1350C34v130Ev");}
void  S1350C3 ::v131(){vfunc_called(this, "_ZN7S1350C34v131Ev");}
void  S1350C3 ::v132(){vfunc_called(this, "_ZN7S1350C34v132Ev");}
void  S1350C3 ::v133(){vfunc_called(this, "_ZN7S1350C34v133Ev");}
void  S1350C3 ::v134(){vfunc_called(this, "_ZN7S1350C34v134Ev");}
S1350C3 ::S1350C3(){ note_ctor("S1350C3", this);} // tgen

static void Test_S1350C3()
{
  extern Class_Descriptor cd_S1350C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,23)];
    init_test(&cd_S1350C3, buf);
    S1350C3 *dp, &lv = *(dp=new (buf) S1350C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S1350C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1350C3)");
    check_base_class_offset(lv, (S1350C4*), 0, "S1350C3");
    check_base_class_offset(lv, (S1350C6*), ABISELECT(96,60), "S1350C3");
    check_base_class_offset(lv, (S1350C7*), ABISELECT(104,64), "S1350C3");
    check_field_offset(lv, s1350c3f0, ABISELECT(112,68), "S1350C3.s1350c3f0");
    check_field_offset(lv, s1350c3f1, ABISELECT(120,72), "S1350C3.s1350c3f1");
    set_bf_and_test(lv, s1350c3f2, ABISELECT(136,84), 0, 1, 1, "S1350C3");
    set_bf_and_test(lv, s1350c3f3, ABISELECT(136,84), 1, 1, 1, "S1350C3");
    set_bf_and_test(lv, s1350c3f4, ABISELECT(136,84), 2, 1, 1, "S1350C3");
    set_bf_and_test(lv, s1350c3f5, ABISELECT(136,84), 3, 1, 1, "S1350C3");
    test_class_info(&lv, &cd_S1350C3);
    dp->~S1350C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1350C3(Test_S1350C3, "S1350C3", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN7S1350C3C1Ev();
extern void _ZN7S1350C3D1Ev();
Name_Map name_map_S1350C3[] = {
  NSPAIR(_ZN7S1350C3C1Ev),
  NSPAIR(_ZN7S1350C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1350C4;
extern VTBL_ENTRY _ZTI7S1350C4[];
extern  VTBL_ENTRY _ZTV7S1350C4[];
extern Class_Descriptor cd_S1350C6;
extern VTBL_ENTRY _ZTI7S1350C6[];
extern  VTBL_ENTRY _ZTV7S1350C6[];
extern Class_Descriptor cd_S1350C7;
extern VTBL_ENTRY _ZTI7S1350C7[];
extern  VTBL_ENTRY _ZTV7S1350C7[];
static Base_Class bases_S1350C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1350C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1350C6,    ABISELECT(96,60), //bcp->offset
    92, //bcp->virtual_function_table_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_S1350C7,    ABISELECT(104,64), //bcp->offset
    110, //bcp->virtual_function_table_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 _ZTI7S1350C3[];
extern void _ZN7S1350C3D1Ev();
extern void _ZN7S1350C3D0Ev();
extern void _ZN7S1350C43v22Ev();
extern void _ZN7S1350C43v23Ev();
extern void _ZN7S1350C43v24Ev();
extern void _ZN7S1350C43v25Ev();
extern void _ZN7S1350C43v26Ev();
extern void _ZN7S1350C43v27Ev();
extern void _ZN7S1350C43v28Ev();
extern void _ZN7S1350C43v29Ev();
extern void _ZN7S1350C43v30Ev();
extern void _ZN7S1350C43v31Ev();
extern void _ZN7S1350C43v32Ev();
extern void _ZN7S1350C43v33Ev();
extern void _ZN7S1350C43v34Ev();
extern void _ZN7S1350C43v35Ev();
extern void _ZN7S1350C43v36Ev();
extern void _ZN7S1350C43v37Ev();
extern void _ZN7S1350C43v38Ev();
extern void _ZN7S1350C43v39Ev();
extern void _ZN7S1350C43v40Ev();
extern void _ZN7S1350C43v41Ev();
extern void _ZN7S1350C43v42Ev();
extern void _ZN7S1350C43v43Ev();
extern void _ZN7S1350C43v44Ev();
extern void _ZN7S1350C43v45Ev();
extern void _ZN7S1350C43v46Ev();
extern void _ZN7S1350C43v47Ev();
extern void _ZN7S1350C43v48Ev();
extern void _ZN7S1350C43v49Ev();
extern void _ZN7S1350C43v50Ev();
extern void _ZN7S1350C43v51Ev();
extern void _ZN7S1350C43v52Ev();
extern void _ZN7S1350C43v53Ev();
extern void _ZN7S1350C43v54Ev();
extern void _ZN7S1350C43v55Ev();
extern void _ZN7S1350C43v56Ev();
extern void _ZN7S1350C43v57Ev();
extern void _ZN7S1350C43v58Ev();
extern void _ZN7S1350C43v59Ev();
extern void _ZN7S1350C43v60Ev();
extern void _ZN7S1350C43v61Ev();
extern void _ZN7S1350C43v62Ev();
extern void _ZN7S1350C43v63Ev();
extern void _ZN7S1350C43v64Ev();
extern void _ZN7S1350C43v65Ev();
extern void _ZN7S1350C43v66Ev();
extern void _ZN7S1350C43v67Ev();
extern void _ZN7S1350C43v68Ev();
extern void _ZN7S1350C43v69Ev();
extern void _ZN7S1350C43v70Ev();
extern void _ZN7S1350C43v71Ev();
extern void _ZN7S1350C43v72Ev();
extern void _ZN7S1350C43v73Ev();
extern void _ZN7S1350C43v74Ev();
extern void _ZN7S1350C43v75Ev();
extern void _ZN7S1350C43v76Ev();
extern void _ZN7S1350C43v77Ev();
extern void _ZN7S1350C43v78Ev();
extern void _ZN7S1350C43v79Ev();
extern void _ZN7S1350C43v80Ev();
extern void _ZN7S1350C43v81Ev();
extern void _ZN7S1350C43v82Ev();
extern void _ZN7S1350C43v83Ev();
extern void _ZN7S1350C43v84Ev();
extern void _ZN7S1350C43v85Ev();
extern void _ZN7S1350C34v111Ev();
extern void _ZN7S1350C34v112Ev();
extern void _ZN7S1350C34v113Ev();
extern void _ZN7S1350C34v114Ev();
extern void _ZN7S1350C34v115Ev();
extern void _ZN7S1350C34v116Ev();
extern void _ZN7S1350C34v117Ev();
extern void _ZN7S1350C34v118Ev();
extern void _ZN7S1350C34v119Ev();
extern void _ZN7S1350C34v120Ev();
extern void _ZN7S1350C34v121Ev();
extern void _ZN7S1350C34v122Ev();
extern void _ZN7S1350C34v123Ev();
extern void _ZN7S1350C34v124Ev();
extern void _ZN7S1350C34v125Ev();
extern void _ZN7S1350C34v126Ev();
extern void _ZN7S1350C34v127Ev();
extern void _ZN7S1350C34v128Ev();
extern void _ZN7S1350C34v129Ev();
extern void _ZN7S1350C34v130Ev();
extern void _ZN7S1350C34v131Ev();
extern void _ZN7S1350C34v132Ev();
extern void _ZN7S1350C34v133Ev();
extern void _ZN7S1350C34v134Ev();
extern void _ZN7S1350C63v86Ev();
extern void _ZN7S1350C63v87Ev();
extern void _ZN7S1350C63v88Ev();
extern void _ZN7S1350C63v89Ev();
extern void _ZN7S1350C63v90Ev();
extern void _ZN7S1350C63v91Ev();
extern void _ZN7S1350C63v92Ev();
extern void _ZN7S1350C63v93Ev();
extern void _ZN7S1350C63v94Ev();
extern void _ZN7S1350C63v95Ev();
extern void _ZN7S1350C63v96Ev();
extern void _ZN7S1350C63v97Ev();
extern void _ZN7S1350C63v98Ev();
extern void _ZN7S1350C63v99Ev();
extern void _ZN7S1350C64v100Ev();
extern void _ZN7S1350C64v101Ev();
extern void _ZN7S1350C74v102Ev();
extern void _ZN7S1350C74v103Ev();
extern void _ZN7S1350C74v104Ev();
extern void _ZN7S1350C74v105Ev();
extern void _ZN7S1350C74v106Ev();
extern void _ZN7S1350C74v107Ev();
extern void _ZN7S1350C74v108Ev();
extern void _ZN7S1350C74v109Ev();
extern void _ZN7S1350C74v110Ev();
static  VTBL_ENTRY vtc_S1350C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1350C3[0]),
  (VTBL_ENTRY)&_ZN7S1350C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1350C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v78Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v79Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v80Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v81Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v82Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v83Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v84Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v85Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v125Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v126Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v127Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v128Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v129Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v130Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v131Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v132Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v133Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v134Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1350C3[0]),
  (VTBL_ENTRY)&_ZN7S1350C63v86Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v87Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v88Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v89Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v90Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v91Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v92Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v93Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v94Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v95Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v96Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v97Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v98Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v99Ev,
  (VTBL_ENTRY)&_ZN7S1350C64v100Ev,
  (VTBL_ENTRY)&_ZN7S1350C64v101Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1350C3[0]),
  (VTBL_ENTRY)&_ZN7S1350C74v102Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v103Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v104Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v105Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v106Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v107Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v108Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v109Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v110Ev,
};
extern VTBL_ENTRY _ZTI7S1350C3[];
extern  VTBL_ENTRY _ZTV7S1350C3[];
Class_Descriptor cd_S1350C3 = {  "S1350C3", // class name
  bases_S1350C3, 3,
  &(vtc_S1350C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI7S1350C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1350C3),121, //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  S1350C2  : S1350C3 {
  ::S3262C11_nt s1350c2f0;
  int s1350c2f1;
  virtual  ~S1350C2(); // _ZN7S1350C2D1Ev
  virtual void  v135(); // _ZN7S1350C24v135Ev
  virtual void  v136(); // _ZN7S1350C24v136Ev
  virtual void  v137(); // _ZN7S1350C24v137Ev
  virtual void  v138(); // _ZN7S1350C24v138Ev
  virtual void  v139(); // _ZN7S1350C24v139Ev
  virtual void  v140(); // _ZN7S1350C24v140Ev
  virtual void  v141(); // _ZN7S1350C24v141Ev
  virtual void  v142(); // _ZN7S1350C24v142Ev
  virtual void  v143(); // _ZN7S1350C24v143Ev
  virtual void  v144(); // _ZN7S1350C24v144Ev
  virtual void  v145(); // _ZN7S1350C24v145Ev
  virtual void  v146(); // _ZN7S1350C24v146Ev
  virtual void  v147(); // _ZN7S1350C24v147Ev
  virtual void  v148(); // _ZN7S1350C24v148Ev
  virtual void  v149(); // _ZN7S1350C24v149Ev
  virtual void  v150(); // _ZN7S1350C24v150Ev
  virtual void  v151(); // _ZN7S1350C24v151Ev
  virtual void  v152(); // _ZN7S1350C24v152Ev
  virtual void  v153(); // _ZN7S1350C24v153Ev
  virtual void  v154(); // _ZN7S1350C24v154Ev
  virtual void  v155(); // _ZN7S1350C24v155Ev
  virtual void  v156(); // _ZN7S1350C24v156Ev
  virtual void  v157(); // _ZN7S1350C24v157Ev
  virtual void  v158(); // _ZN7S1350C24v158Ev
  virtual void  v159(); // _ZN7S1350C24v159Ev
  virtual void  v160(); // _ZN7S1350C24v160Ev
  S1350C2(); // tgen
};
//SIG(-1 S1350C2) C1{ BC2{ BC3{ vd 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 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} BC5{ v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106} BC6{ v107 v108 v109 v110 v111 v112 v113 v114 v115} vd v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 Fp FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1} 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 FC11{ m FC12{ BC13{ BC10}} Fc} Fi}


 S1350C2 ::~S1350C2(){ note_dtor("S1350C2", this);}
void  S1350C2 ::v135(){vfunc_called(this, "_ZN7S1350C24v135Ev");}
void  S1350C2 ::v136(){vfunc_called(this, "_ZN7S1350C24v136Ev");}
void  S1350C2 ::v137(){vfunc_called(this, "_ZN7S1350C24v137Ev");}
void  S1350C2 ::v138(){vfunc_called(this, "_ZN7S1350C24v138Ev");}
void  S1350C2 ::v139(){vfunc_called(this, "_ZN7S1350C24v139Ev");}
void  S1350C2 ::v140(){vfunc_called(this, "_ZN7S1350C24v140Ev");}
void  S1350C2 ::v141(){vfunc_called(this, "_ZN7S1350C24v141Ev");}
void  S1350C2 ::v142(){vfunc_called(this, "_ZN7S1350C24v142Ev");}
void  S1350C2 ::v143(){vfunc_called(this, "_ZN7S1350C24v143Ev");}
void  S1350C2 ::v144(){vfunc_called(this, "_ZN7S1350C24v144Ev");}
void  S1350C2 ::v145(){vfunc_called(this, "_ZN7S1350C24v145Ev");}
void  S1350C2 ::v146(){vfunc_called(this, "_ZN7S1350C24v146Ev");}
void  S1350C2 ::v147(){vfunc_called(this, "_ZN7S1350C24v147Ev");}
void  S1350C2 ::v148(){vfunc_called(this, "_ZN7S1350C24v148Ev");}
void  S1350C2 ::v149(){vfunc_called(this, "_ZN7S1350C24v149Ev");}
void  S1350C2 ::v150(){vfunc_called(this, "_ZN7S1350C24v150Ev");}
void  S1350C2 ::v151(){vfunc_called(this, "_ZN7S1350C24v151Ev");}
void  S1350C2 ::v152(){vfunc_called(this, "_ZN7S1350C24v152Ev");}
void  S1350C2 ::v153(){vfunc_called(this, "_ZN7S1350C24v153Ev");}
void  S1350C2 ::v154(){vfunc_called(this, "_ZN7S1350C24v154Ev");}
void  S1350C2 ::v155(){vfunc_called(this, "_ZN7S1350C24v155Ev");}
void  S1350C2 ::v156(){vfunc_called(this, "_ZN7S1350C24v156Ev");}
void  S1350C2 ::v157(){vfunc_called(this, "_ZN7S1350C24v157Ev");}
void  S1350C2 ::v158(){vfunc_called(this, "_ZN7S1350C24v158Ev");}
void  S1350C2 ::v159(){vfunc_called(this, "_ZN7S1350C24v159Ev");}
void  S1350C2 ::v160(){vfunc_called(this, "_ZN7S1350C24v160Ev");}
S1350C2 ::S1350C2(){ note_ctor("S1350C2", this);} // tgen

static void Test_S1350C2()
{
  extern Class_Descriptor cd_S1350C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,28)];
    init_test(&cd_S1350C2, buf);
    S1350C2 *dp, &lv = *(dp=new (buf) S1350C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,108), "sizeof(S1350C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1350C2)");
    check_base_class_offset(lv, (S1350C4*)(S1350C3*), 0, "S1350C2");
    check_base_class_offset(lv, (S1350C6*)(S1350C3*), ABISELECT(96,60), "S1350C2");
    check_base_class_offset(lv, (S1350C7*)(S1350C3*), ABISELECT(104,64), "S1350C2");
    check_base_class_offset(lv, (S1350C3*), 0, "S1350C2");
    check_field_offset(lv, s1350c2f0, ABISELECT(144,88), "S1350C2.s1350c2f0");
    check_field_offset(lv, s1350c2f1, ABISELECT(168,104), "S1350C2.s1350c2f1");
    test_class_info(&lv, &cd_S1350C2);
    dp->~S1350C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1350C2(Test_S1350C2, "S1350C2", ABISELECT(176,108));

#else // __cplusplus

extern void _ZN7S1350C2C1Ev();
extern void _ZN7S1350C2D1Ev();
Name_Map name_map_S1350C2[] = {
  NSPAIR(_ZN7S1350C2C1Ev),
  NSPAIR(_ZN7S1350C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1350C4;
extern VTBL_ENTRY _ZTI7S1350C4[];
extern  VTBL_ENTRY _ZTV7S1350C4[];
extern Class_Descriptor cd_S1350C6;
extern VTBL_ENTRY _ZTI7S1350C6[];
extern  VTBL_ENTRY _ZTV7S1350C6[];
extern Class_Descriptor cd_S1350C7;
extern VTBL_ENTRY _ZTI7S1350C7[];
extern  VTBL_ENTRY _ZTV7S1350C7[];
extern Class_Descriptor cd_S1350C3;
extern VTBL_ENTRY _ZTI7S1350C3[];
extern  VTBL_ENTRY _ZTV7S1350C3[];
static Base_Class bases_S1350C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1350C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1350C6,    ABISELECT(96,60), //bcp->offset
    118, //bcp->virtual_function_table_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_S1350C7,    ABISELECT(104,64), //bcp->offset
    136, //bcp->virtual_function_table_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_S1350C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1350C2[];
extern void _ZN7S1350C2D1Ev();
extern void _ZN7S1350C2D0Ev();
extern void _ZN7S1350C43v22Ev();
extern void _ZN7S1350C43v23Ev();
extern void _ZN7S1350C43v24Ev();
extern void _ZN7S1350C43v25Ev();
extern void _ZN7S1350C43v26Ev();
extern void _ZN7S1350C43v27Ev();
extern void _ZN7S1350C43v28Ev();
extern void _ZN7S1350C43v29Ev();
extern void _ZN7S1350C43v30Ev();
extern void _ZN7S1350C43v31Ev();
extern void _ZN7S1350C43v32Ev();
extern void _ZN7S1350C43v33Ev();
extern void _ZN7S1350C43v34Ev();
extern void _ZN7S1350C43v35Ev();
extern void _ZN7S1350C43v36Ev();
extern void _ZN7S1350C43v37Ev();
extern void _ZN7S1350C43v38Ev();
extern void _ZN7S1350C43v39Ev();
extern void _ZN7S1350C43v40Ev();
extern void _ZN7S1350C43v41Ev();
extern void _ZN7S1350C43v42Ev();
extern void _ZN7S1350C43v43Ev();
extern void _ZN7S1350C43v44Ev();
extern void _ZN7S1350C43v45Ev();
extern void _ZN7S1350C43v46Ev();
extern void _ZN7S1350C43v47Ev();
extern void _ZN7S1350C43v48Ev();
extern void _ZN7S1350C43v49Ev();
extern void _ZN7S1350C43v50Ev();
extern void _ZN7S1350C43v51Ev();
extern void _ZN7S1350C43v52Ev();
extern void _ZN7S1350C43v53Ev();
extern void _ZN7S1350C43v54Ev();
extern void _ZN7S1350C43v55Ev();
extern void _ZN7S1350C43v56Ev();
extern void _ZN7S1350C43v57Ev();
extern void _ZN7S1350C43v58Ev();
extern void _ZN7S1350C43v59Ev();
extern void _ZN7S1350C43v60Ev();
extern void _ZN7S1350C43v61Ev();
extern void _ZN7S1350C43v62Ev();
extern void _ZN7S1350C43v63Ev();
extern void _ZN7S1350C43v64Ev();
extern void _ZN7S1350C43v65Ev();
extern void _ZN7S1350C43v66Ev();
extern void _ZN7S1350C43v67Ev();
extern void _ZN7S1350C43v68Ev();
extern void _ZN7S1350C43v69Ev();
extern void _ZN7S1350C43v70Ev();
extern void _ZN7S1350C43v71Ev();
extern void _ZN7S1350C43v72Ev();
extern void _ZN7S1350C43v73Ev();
extern void _ZN7S1350C43v74Ev();
extern void _ZN7S1350C43v75Ev();
extern void _ZN7S1350C43v76Ev();
extern void _ZN7S1350C43v77Ev();
extern void _ZN7S1350C43v78Ev();
extern void _ZN7S1350C43v79Ev();
extern void _ZN7S1350C43v80Ev();
extern void _ZN7S1350C43v81Ev();
extern void _ZN7S1350C43v82Ev();
extern void _ZN7S1350C43v83Ev();
extern void _ZN7S1350C43v84Ev();
extern void _ZN7S1350C43v85Ev();
extern void _ZN7S1350C34v111Ev();
extern void _ZN7S1350C34v112Ev();
extern void _ZN7S1350C34v113Ev();
extern void _ZN7S1350C34v114Ev();
extern void _ZN7S1350C34v115Ev();
extern void _ZN7S1350C34v116Ev();
extern void _ZN7S1350C34v117Ev();
extern void _ZN7S1350C34v118Ev();
extern void _ZN7S1350C34v119Ev();
extern void _ZN7S1350C34v120Ev();
extern void _ZN7S1350C34v121Ev();
extern void _ZN7S1350C34v122Ev();
extern void _ZN7S1350C34v123Ev();
extern void _ZN7S1350C34v124Ev();
extern void _ZN7S1350C34v125Ev();
extern void _ZN7S1350C34v126Ev();
extern void _ZN7S1350C34v127Ev();
extern void _ZN7S1350C34v128Ev();
extern void _ZN7S1350C34v129Ev();
extern void _ZN7S1350C34v130Ev();
extern void _ZN7S1350C34v131Ev();
extern void _ZN7S1350C34v132Ev();
extern void _ZN7S1350C34v133Ev();
extern void _ZN7S1350C34v134Ev();
extern void _ZN7S1350C24v135Ev();
extern void _ZN7S1350C24v136Ev();
extern void _ZN7S1350C24v137Ev();
extern void _ZN7S1350C24v138Ev();
extern void _ZN7S1350C24v139Ev();
extern void _ZN7S1350C24v140Ev();
extern void _ZN7S1350C24v141Ev();
extern void _ZN7S1350C24v142Ev();
extern void _ZN7S1350C24v143Ev();
extern void _ZN7S1350C24v144Ev();
extern void _ZN7S1350C24v145Ev();
extern void _ZN7S1350C24v146Ev();
extern void _ZN7S1350C24v147Ev();
extern void _ZN7S1350C24v148Ev();
extern void _ZN7S1350C24v149Ev();
extern void _ZN7S1350C24v150Ev();
extern void _ZN7S1350C24v151Ev();
extern void _ZN7S1350C24v152Ev();
extern void _ZN7S1350C24v153Ev();
extern void _ZN7S1350C24v154Ev();
extern void _ZN7S1350C24v155Ev();
extern void _ZN7S1350C24v156Ev();
extern void _ZN7S1350C24v157Ev();
extern void _ZN7S1350C24v158Ev();
extern void _ZN7S1350C24v159Ev();
extern void _ZN7S1350C24v160Ev();
extern void _ZN7S1350C63v86Ev();
extern void _ZN7S1350C63v87Ev();
extern void _ZN7S1350C63v88Ev();
extern void _ZN7S1350C63v89Ev();
extern void _ZN7S1350C63v90Ev();
extern void _ZN7S1350C63v91Ev();
extern void _ZN7S1350C63v92Ev();
extern void _ZN7S1350C63v93Ev();
extern void _ZN7S1350C63v94Ev();
extern void _ZN7S1350C63v95Ev();
extern void _ZN7S1350C63v96Ev();
extern void _ZN7S1350C63v97Ev();
extern void _ZN7S1350C63v98Ev();
extern void _ZN7S1350C63v99Ev();
extern void _ZN7S1350C64v100Ev();
extern void _ZN7S1350C64v101Ev();
extern void _ZN7S1350C74v102Ev();
extern void _ZN7S1350C74v103Ev();
extern void _ZN7S1350C74v104Ev();
extern void _ZN7S1350C74v105Ev();
extern void _ZN7S1350C74v106Ev();
extern void _ZN7S1350C74v107Ev();
extern void _ZN7S1350C74v108Ev();
extern void _ZN7S1350C74v109Ev();
extern void _ZN7S1350C74v110Ev();
static  VTBL_ENTRY vtc_S1350C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1350C2[0]),
  (VTBL_ENTRY)&_ZN7S1350C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1350C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v78Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v79Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v80Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v81Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v82Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v83Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v84Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v85Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v125Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v126Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v127Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v128Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v129Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v130Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v131Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v132Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v133Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v134Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v144Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v145Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v146Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v147Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v148Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v149Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v150Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v151Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v152Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v153Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v154Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v155Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v156Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v157Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v158Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v159Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v160Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1350C2[0]),
  (VTBL_ENTRY)&_ZN7S1350C63v86Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v87Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v88Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v89Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v90Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v91Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v92Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v93Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v94Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v95Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v96Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v97Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v98Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v99Ev,
  (VTBL_ENTRY)&_ZN7S1350C64v100Ev,
  (VTBL_ENTRY)&_ZN7S1350C64v101Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1350C2[0]),
  (VTBL_ENTRY)&_ZN7S1350C74v102Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v103Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v104Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v105Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v106Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v107Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v108Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v109Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v110Ev,
};
extern VTBL_ENTRY _ZTI7S1350C2[];
extern  VTBL_ENTRY _ZTV7S1350C2[];
Class_Descriptor cd_S1350C2 = {  "S1350C2", // class name
  bases_S1350C2, 4,
  &(vtc_S1350C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,108), // object size
  NSPAIRA(_ZTI7S1350C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1350C2),147, //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  S1350C1  : S1350C2 {
  ::S79C44 s1350c1f0;
  ::S79C8_nt s1350c1f1;
  ::S79C40 s1350c1f2;
  virtual  ~S1350C1(); // _ZN7S1350C1D1Ev
  virtual void  v1(); // _ZN7S1350C12v1Ev
  virtual void  v2(); // _ZN7S1350C12v2Ev
  virtual void  v3(); // _ZN7S1350C12v3Ev
  virtual void  v4(); // _ZN7S1350C12v4Ev
  virtual void  v5(); // _ZN7S1350C12v5Ev
  virtual void  v6(); // _ZN7S1350C12v6Ev
  virtual void  v7(); // _ZN7S1350C12v7Ev
  virtual void  v8(); // _ZN7S1350C12v8Ev
  virtual void  v9(); // _ZN7S1350C12v9Ev
  virtual void  v10(); // _ZN7S1350C13v10Ev
  virtual void  v11(); // _ZN7S1350C13v11Ev
  virtual void  v12(); // _ZN7S1350C13v12Ev
  virtual void  v13(); // _ZN7S1350C13v13Ev
  virtual void  v14(); // _ZN7S1350C13v14Ev
  virtual void  v15(); // _ZN7S1350C13v15Ev
  virtual void  v16(); // _ZN7S1350C13v16Ev
  virtual void  v17(); // _ZN7S1350C13v17Ev
  virtual void  v18(); // _ZN7S1350C13v18Ev
  virtual void  v19(); // _ZN7S1350C13v19Ev
  virtual void  v20(); // _ZN7S1350C13v20Ev
  virtual void  v21(); // _ZN7S1350C13v21Ev
  S1350C1(); // tgen
};
//SIG(1 S1350C1) C1{ BC2{ BC3{ BC4{ vd 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 v79 v80 v81 v82 v83 v84 v85 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} BC6{ v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101} BC7{ v102 v103 v104 v105 v106 v107 v108 v109 v110} vd v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 Fp FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1} vd v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 FC12{ m FC13{ BC14{ BC11}} Fc} Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 FC13 FC5 FC9}


 S1350C1 ::~S1350C1(){ note_dtor("S1350C1", this);}
void  S1350C1 ::v1(){vfunc_called(this, "_ZN7S1350C12v1Ev");}
void  S1350C1 ::v2(){vfunc_called(this, "_ZN7S1350C12v2Ev");}
void  S1350C1 ::v3(){vfunc_called(this, "_ZN7S1350C12v3Ev");}
void  S1350C1 ::v4(){vfunc_called(this, "_ZN7S1350C12v4Ev");}
void  S1350C1 ::v5(){vfunc_called(this, "_ZN7S1350C12v5Ev");}
void  S1350C1 ::v6(){vfunc_called(this, "_ZN7S1350C12v6Ev");}
void  S1350C1 ::v7(){vfunc_called(this, "_ZN7S1350C12v7Ev");}
void  S1350C1 ::v8(){vfunc_called(this, "_ZN7S1350C12v8Ev");}
void  S1350C1 ::v9(){vfunc_called(this, "_ZN7S1350C12v9Ev");}
void  S1350C1 ::v10(){vfunc_called(this, "_ZN7S1350C13v10Ev");}
void  S1350C1 ::v11(){vfunc_called(this, "_ZN7S1350C13v11Ev");}
void  S1350C1 ::v12(){vfunc_called(this, "_ZN7S1350C13v12Ev");}
void  S1350C1 ::v13(){vfunc_called(this, "_ZN7S1350C13v13Ev");}
void  S1350C1 ::v14(){vfunc_called(this, "_ZN7S1350C13v14Ev");}
void  S1350C1 ::v15(){vfunc_called(this, "_ZN7S1350C13v15Ev");}
void  S1350C1 ::v16(){vfunc_called(this, "_ZN7S1350C13v16Ev");}
void  S1350C1 ::v17(){vfunc_called(this, "_ZN7S1350C13v17Ev");}
void  S1350C1 ::v18(){vfunc_called(this, "_ZN7S1350C13v18Ev");}
void  S1350C1 ::v19(){vfunc_called(this, "_ZN7S1350C13v19Ev");}
void  S1350C1 ::v20(){vfunc_called(this, "_ZN7S1350C13v20Ev");}
void  S1350C1 ::v21(){vfunc_called(this, "_ZN7S1350C13v21Ev");}
S1350C1 ::S1350C1(){ note_ctor("S1350C1", this);} // tgen

static void Test_S1350C1()
{
  extern Class_Descriptor cd_S1350C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,36)];
    init_test(&cd_S1350C1, buf);
    S1350C1 *dp, &lv = *(dp=new (buf) S1350C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,140), "sizeof(S1350C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1350C1)");
    check_base_class_offset(lv, (S1350C4*)(S1350C3*)(S1350C2*), 0, "S1350C1");
    check_base_class_offset(lv, (S1350C6*)(S1350C3*)(S1350C2*), ABISELECT(96,60), "S1350C1");
    check_base_class_offset(lv, (S1350C7*)(S1350C3*)(S1350C2*), ABISELECT(104,64), "S1350C1");
    check_base_class_offset(lv, (S1350C3*)(S1350C2*), 0, "S1350C1");
    check_base_class_offset(lv, (S1350C2*), 0, "S1350C1");
    check_field_offset(lv, s1350c1f0, ABISELECT(176,108), "S1350C1.s1350c1f0");
    check_field_offset(lv, s1350c1f1, ABISELECT(192,120), "S1350C1.s1350c1f1");
    check_field_offset(lv, s1350c1f2, ABISELECT(200,128), "S1350C1.s1350c1f2");
    test_class_info(&lv, &cd_S1350C1);
    dp->~S1350C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1350C1(Test_S1350C1, "S1350C1", ABISELECT(216,140));

#else // __cplusplus

extern void _ZN7S1350C1C1Ev();
extern void _ZN7S1350C1D1Ev();
Name_Map name_map_S1350C1[] = {
  NSPAIR(_ZN7S1350C1C1Ev),
  NSPAIR(_ZN7S1350C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1350C4;
extern VTBL_ENTRY _ZTI7S1350C4[];
extern  VTBL_ENTRY _ZTV7S1350C4[];
extern Class_Descriptor cd_S1350C6;
extern VTBL_ENTRY _ZTI7S1350C6[];
extern  VTBL_ENTRY _ZTV7S1350C6[];
extern Class_Descriptor cd_S1350C7;
extern VTBL_ENTRY _ZTI7S1350C7[];
extern  VTBL_ENTRY _ZTV7S1350C7[];
extern Class_Descriptor cd_S1350C3;
extern VTBL_ENTRY _ZTI7S1350C3[];
extern  VTBL_ENTRY _ZTV7S1350C3[];
extern Class_Descriptor cd_S1350C2;
extern VTBL_ENTRY _ZTI7S1350C2[];
extern  VTBL_ENTRY _ZTV7S1350C2[];
static Base_Class bases_S1350C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1350C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1350C6,    ABISELECT(96,60), //bcp->offset
    139, //bcp->virtual_function_table_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_S1350C7,    ABISELECT(104,64), //bcp->offset
    157, //bcp->virtual_function_table_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_S1350C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1350C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1350C1[];
extern void _ZN7S1350C1D1Ev();
extern void _ZN7S1350C1D0Ev();
extern void _ZN7S1350C43v22Ev();
extern void _ZN7S1350C43v23Ev();
extern void _ZN7S1350C43v24Ev();
extern void _ZN7S1350C43v25Ev();
extern void _ZN7S1350C43v26Ev();
extern void _ZN7S1350C43v27Ev();
extern void _ZN7S1350C43v28Ev();
extern void _ZN7S1350C43v29Ev();
extern void _ZN7S1350C43v30Ev();
extern void _ZN7S1350C43v31Ev();
extern void _ZN7S1350C43v32Ev();
extern void _ZN7S1350C43v33Ev();
extern void _ZN7S1350C43v34Ev();
extern void _ZN7S1350C43v35Ev();
extern void _ZN7S1350C43v36Ev();
extern void _ZN7S1350C43v37Ev();
extern void _ZN7S1350C43v38Ev();
extern void _ZN7S1350C43v39Ev();
extern void _ZN7S1350C43v40Ev();
extern void _ZN7S1350C43v41Ev();
extern void _ZN7S1350C43v42Ev();
extern void _ZN7S1350C43v43Ev();
extern void _ZN7S1350C43v44Ev();
extern void _ZN7S1350C43v45Ev();
extern void _ZN7S1350C43v46Ev();
extern void _ZN7S1350C43v47Ev();
extern void _ZN7S1350C43v48Ev();
extern void _ZN7S1350C43v49Ev();
extern void _ZN7S1350C43v50Ev();
extern void _ZN7S1350C43v51Ev();
extern void _ZN7S1350C43v52Ev();
extern void _ZN7S1350C43v53Ev();
extern void _ZN7S1350C43v54Ev();
extern void _ZN7S1350C43v55Ev();
extern void _ZN7S1350C43v56Ev();
extern void _ZN7S1350C43v57Ev();
extern void _ZN7S1350C43v58Ev();
extern void _ZN7S1350C43v59Ev();
extern void _ZN7S1350C43v60Ev();
extern void _ZN7S1350C43v61Ev();
extern void _ZN7S1350C43v62Ev();
extern void _ZN7S1350C43v63Ev();
extern void _ZN7S1350C43v64Ev();
extern void _ZN7S1350C43v65Ev();
extern void _ZN7S1350C43v66Ev();
extern void _ZN7S1350C43v67Ev();
extern void _ZN7S1350C43v68Ev();
extern void _ZN7S1350C43v69Ev();
extern void _ZN7S1350C43v70Ev();
extern void _ZN7S1350C43v71Ev();
extern void _ZN7S1350C43v72Ev();
extern void _ZN7S1350C43v73Ev();
extern void _ZN7S1350C43v74Ev();
extern void _ZN7S1350C43v75Ev();
extern void _ZN7S1350C43v76Ev();
extern void _ZN7S1350C43v77Ev();
extern void _ZN7S1350C43v78Ev();
extern void _ZN7S1350C43v79Ev();
extern void _ZN7S1350C43v80Ev();
extern void _ZN7S1350C43v81Ev();
extern void _ZN7S1350C43v82Ev();
extern void _ZN7S1350C43v83Ev();
extern void _ZN7S1350C43v84Ev();
extern void _ZN7S1350C43v85Ev();
extern void _ZN7S1350C34v111Ev();
extern void _ZN7S1350C34v112Ev();
extern void _ZN7S1350C34v113Ev();
extern void _ZN7S1350C34v114Ev();
extern void _ZN7S1350C34v115Ev();
extern void _ZN7S1350C34v116Ev();
extern void _ZN7S1350C34v117Ev();
extern void _ZN7S1350C34v118Ev();
extern void _ZN7S1350C34v119Ev();
extern void _ZN7S1350C34v120Ev();
extern void _ZN7S1350C34v121Ev();
extern void _ZN7S1350C34v122Ev();
extern void _ZN7S1350C34v123Ev();
extern void _ZN7S1350C34v124Ev();
extern void _ZN7S1350C34v125Ev();
extern void _ZN7S1350C34v126Ev();
extern void _ZN7S1350C34v127Ev();
extern void _ZN7S1350C34v128Ev();
extern void _ZN7S1350C34v129Ev();
extern void _ZN7S1350C34v130Ev();
extern void _ZN7S1350C34v131Ev();
extern void _ZN7S1350C34v132Ev();
extern void _ZN7S1350C34v133Ev();
extern void _ZN7S1350C34v134Ev();
extern void _ZN7S1350C24v135Ev();
extern void _ZN7S1350C24v136Ev();
extern void _ZN7S1350C24v137Ev();
extern void _ZN7S1350C24v138Ev();
extern void _ZN7S1350C24v139Ev();
extern void _ZN7S1350C24v140Ev();
extern void _ZN7S1350C24v141Ev();
extern void _ZN7S1350C24v142Ev();
extern void _ZN7S1350C24v143Ev();
extern void _ZN7S1350C24v144Ev();
extern void _ZN7S1350C24v145Ev();
extern void _ZN7S1350C24v146Ev();
extern void _ZN7S1350C24v147Ev();
extern void _ZN7S1350C24v148Ev();
extern void _ZN7S1350C24v149Ev();
extern void _ZN7S1350C24v150Ev();
extern void _ZN7S1350C24v151Ev();
extern void _ZN7S1350C24v152Ev();
extern void _ZN7S1350C24v153Ev();
extern void _ZN7S1350C24v154Ev();
extern void _ZN7S1350C24v155Ev();
extern void _ZN7S1350C24v156Ev();
extern void _ZN7S1350C24v157Ev();
extern void _ZN7S1350C24v158Ev();
extern void _ZN7S1350C24v159Ev();
extern void _ZN7S1350C24v160Ev();
extern void _ZN7S1350C12v1Ev();
extern void _ZN7S1350C12v2Ev();
extern void _ZN7S1350C12v3Ev();
extern void _ZN7S1350C12v4Ev();
extern void _ZN7S1350C12v5Ev();
extern void _ZN7S1350C12v6Ev();
extern void _ZN7S1350C12v7Ev();
extern void _ZN7S1350C12v8Ev();
extern void _ZN7S1350C12v9Ev();
extern void _ZN7S1350C13v10Ev();
extern void _ZN7S1350C13v11Ev();
extern void _ZN7S1350C13v12Ev();
extern void _ZN7S1350C13v13Ev();
extern void _ZN7S1350C13v14Ev();
extern void _ZN7S1350C13v15Ev();
extern void _ZN7S1350C13v16Ev();
extern void _ZN7S1350C13v17Ev();
extern void _ZN7S1350C13v18Ev();
extern void _ZN7S1350C13v19Ev();
extern void _ZN7S1350C13v20Ev();
extern void _ZN7S1350C13v21Ev();
extern void _ZN7S1350C63v86Ev();
extern void _ZN7S1350C63v87Ev();
extern void _ZN7S1350C63v88Ev();
extern void _ZN7S1350C63v89Ev();
extern void _ZN7S1350C63v90Ev();
extern void _ZN7S1350C63v91Ev();
extern void _ZN7S1350C63v92Ev();
extern void _ZN7S1350C63v93Ev();
extern void _ZN7S1350C63v94Ev();
extern void _ZN7S1350C63v95Ev();
extern void _ZN7S1350C63v96Ev();
extern void _ZN7S1350C63v97Ev();
extern void _ZN7S1350C63v98Ev();
extern void _ZN7S1350C63v99Ev();
extern void _ZN7S1350C64v100Ev();
extern void _ZN7S1350C64v101Ev();
extern void _ZN7S1350C74v102Ev();
extern void _ZN7S1350C74v103Ev();
extern void _ZN7S1350C74v104Ev();
extern void _ZN7S1350C74v105Ev();
extern void _ZN7S1350C74v106Ev();
extern void _ZN7S1350C74v107Ev();
extern void _ZN7S1350C74v108Ev();
extern void _ZN7S1350C74v109Ev();
extern void _ZN7S1350C74v110Ev();
static  VTBL_ENTRY vtc_S1350C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1350C1[0]),
  (VTBL_ENTRY)&_ZN7S1350C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1350C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v78Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v79Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v80Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v81Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v82Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v83Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v84Ev,
  (VTBL_ENTRY)&_ZN7S1350C43v85Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v125Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v126Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v127Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v128Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v129Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v130Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v131Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v132Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v133Ev,
  (VTBL_ENTRY)&_ZN7S1350C34v134Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v144Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v145Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v146Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v147Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v148Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v149Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v150Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v151Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v152Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v153Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v154Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v155Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v156Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v157Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v158Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v159Ev,
  (VTBL_ENTRY)&_ZN7S1350C24v160Ev,
  (VTBL_ENTRY)&_ZN7S1350C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1350C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1350C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1350C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1350C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1350C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1350C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1350C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1350C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1350C13v10Ev,
  (VTBL_ENTRY)&_ZN7S1350C13v11Ev,
  (VTBL_ENTRY)&_ZN7S1350C13v12Ev,
  (VTBL_ENTRY)&_ZN7S1350C13v13Ev,
  (VTBL_ENTRY)&_ZN7S1350C13v14Ev,
  (VTBL_ENTRY)&_ZN7S1350C13v15Ev,
  (VTBL_ENTRY)&_ZN7S1350C13v16Ev,
  (VTBL_ENTRY)&_ZN7S1350C13v17Ev,
  (VTBL_ENTRY)&_ZN7S1350C13v18Ev,
  (VTBL_ENTRY)&_ZN7S1350C13v19Ev,
  (VTBL_ENTRY)&_ZN7S1350C13v20Ev,
  (VTBL_ENTRY)&_ZN7S1350C13v21Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1350C1[0]),
  (VTBL_ENTRY)&_ZN7S1350C63v86Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v87Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v88Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v89Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v90Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v91Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v92Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v93Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v94Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v95Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v96Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v97Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v98Ev,
  (VTBL_ENTRY)&_ZN7S1350C63v99Ev,
  (VTBL_ENTRY)&_ZN7S1350C64v100Ev,
  (VTBL_ENTRY)&_ZN7S1350C64v101Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1350C1[0]),
  (VTBL_ENTRY)&_ZN7S1350C74v102Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v103Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v104Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v105Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v106Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v107Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v108Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v109Ev,
  (VTBL_ENTRY)&_ZN7S1350C74v110Ev,
};
extern VTBL_ENTRY _ZTI7S1350C1[];
extern  VTBL_ENTRY _ZTV7S1350C1[];
Class_Descriptor cd_S1350C1 = {  "S1350C1", // class name
  bases_S1350C1, 5,
  &(vtc_S1350C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,140), // object size
  NSPAIRA(_ZTI7S1350C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1350C1),168, //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  S1346C4  {
  int s1346c4f0;
  __tsi64 s1346c4f1;
  void *s1346c4f2[4];
  int s1346c4f3[2];
  void *s1346c4f4;
  ::S79C8_nt s1346c4f5;
  void *s1346c4f6[2];
  virtual  ~S1346C4(); // _ZN7S1346C4D1Ev
  virtual void  v20(); // _ZN7S1346C43v20Ev
  virtual void  v21(); // _ZN7S1346C43v21Ev
  virtual void  v22(); // _ZN7S1346C43v22Ev
  virtual void  v23(); // _ZN7S1346C43v23Ev
  virtual void  v24(); // _ZN7S1346C43v24Ev
  virtual void  v25(); // _ZN7S1346C43v25Ev
  virtual void  v26(); // _ZN7S1346C43v26Ev
  virtual void  v27(); // _ZN7S1346C43v27Ev
  virtual void  v28(); // _ZN7S1346C43v28Ev
  virtual void  v29(); // _ZN7S1346C43v29Ev
  virtual void  v30(); // _ZN7S1346C43v30Ev
  virtual void  v31(); // _ZN7S1346C43v31Ev
  virtual void  v32(); // _ZN7S1346C43v32Ev
  virtual void  v33(); // _ZN7S1346C43v33Ev
  virtual void  v34(); // _ZN7S1346C43v34Ev
  virtual void  v35(); // _ZN7S1346C43v35Ev
  virtual void  v36(); // _ZN7S1346C43v36Ev
  virtual void  v37(); // _ZN7S1346C43v37Ev
  virtual void  v38(); // _ZN7S1346C43v38Ev
  virtual void  v39(); // _ZN7S1346C43v39Ev
  virtual void  v40(); // _ZN7S1346C43v40Ev
  virtual void  v41(); // _ZN7S1346C43v41Ev
  virtual void  v42(); // _ZN7S1346C43v42Ev
  virtual void  v43(); // _ZN7S1346C43v43Ev
  virtual void  v44(); // _ZN7S1346C43v44Ev
  virtual void  v45(); // _ZN7S1346C43v45Ev
  virtual void  v46(); // _ZN7S1346C43v46Ev
  virtual void  v47(); // _ZN7S1346C43v47Ev
  virtual void  v48(); // _ZN7S1346C43v48Ev
  virtual void  v49(); // _ZN7S1346C43v49Ev
  virtual void  v50(); // _ZN7S1346C43v50Ev
  virtual void  v51(); // _ZN7S1346C43v51Ev
  virtual void  v52(); // _ZN7S1346C43v52Ev
  virtual void  v53(); // _ZN7S1346C43v53Ev
  virtual void  v54(); // _ZN7S1346C43v54Ev
  virtual void  v55(); // _ZN7S1346C43v55Ev
  virtual void  v56(); // _ZN7S1346C43v56Ev
  virtual void  v57(); // _ZN7S1346C43v57Ev
  virtual void  v58(); // _ZN7S1346C43v58Ev
  virtual void  v59(); // _ZN7S1346C43v59Ev
  virtual void  v60(); // _ZN7S1346C43v60Ev
  virtual void  v61(); // _ZN7S1346C43v61Ev
  virtual void  v62(); // _ZN7S1346C43v62Ev
  virtual void  v63(); // _ZN7S1346C43v63Ev
  virtual void  v64(); // _ZN7S1346C43v64Ev
  virtual void  v65(); // _ZN7S1346C43v65Ev
  virtual void  v66(); // _ZN7S1346C43v66Ev
  virtual void  v67(); // _ZN7S1346C43v67Ev
  virtual void  v68(); // _ZN7S1346C43v68Ev
  virtual void  v69(); // _ZN7S1346C43v69Ev
  virtual void  v70(); // _ZN7S1346C43v70Ev
  virtual void  v71(); // _ZN7S1346C43v71Ev
  virtual void  v72(); // _ZN7S1346C43v72Ev
  virtual void  v73(); // _ZN7S1346C43v73Ev
  virtual void  v74(); // _ZN7S1346C43v74Ev
  virtual void  v75(); // _ZN7S1346C43v75Ev
  virtual void  v76(); // _ZN7S1346C43v76Ev
  virtual void  v77(); // _ZN7S1346C43v77Ev
  virtual void  v78(); // _ZN7S1346C43v78Ev
  virtual void  v79(); // _ZN7S1346C43v79Ev
  virtual void  v80(); // _ZN7S1346C43v80Ev
  virtual void  v81(); // _ZN7S1346C43v81Ev
  virtual void  v82(); // _ZN7S1346C43v82Ev
  virtual void  v83(); // _ZN7S1346C43v83Ev
  S1346C4(); // tgen
};
//SIG(-1 S1346C4) 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]}


 S1346C4 ::~S1346C4(){ note_dtor("S1346C4", this);}
void  S1346C4 ::v20(){vfunc_called(this, "_ZN7S1346C43v20Ev");}
void  S1346C4 ::v21(){vfunc_called(this, "_ZN7S1346C43v21Ev");}
void  S1346C4 ::v22(){vfunc_called(this, "_ZN7S1346C43v22Ev");}
void  S1346C4 ::v23(){vfunc_called(this, "_ZN7S1346C43v23Ev");}
void  S1346C4 ::v24(){vfunc_called(this, "_ZN7S1346C43v24Ev");}
void  S1346C4 ::v25(){vfunc_called(this, "_ZN7S1346C43v25Ev");}
void  S1346C4 ::v26(){vfunc_called(this, "_ZN7S1346C43v26Ev");}
void  S1346C4 ::v27(){vfunc_called(this, "_ZN7S1346C43v27Ev");}
void  S1346C4 ::v28(){vfunc_called(this, "_ZN7S1346C43v28Ev");}
void  S1346C4 ::v29(){vfunc_called(this, "_ZN7S1346C43v29Ev");}
void  S1346C4 ::v30(){vfunc_called(this, "_ZN7S1346C43v30Ev");}
void  S1346C4 ::v31(){vfunc_called(this, "_ZN7S1346C43v31Ev");}
void  S1346C4 ::v32(){vfunc_called(this, "_ZN7S1346C43v32Ev");}
void  S1346C4 ::v33(){vfunc_called(this, "_ZN7S1346C43v33Ev");}
void  S1346C4 ::v34(){vfunc_called(this, "_ZN7S1346C43v34Ev");}
void  S1346C4 ::v35(){vfunc_called(this, "_ZN7S1346C43v35Ev");}
void  S1346C4 ::v36(){vfunc_called(this, "_ZN7S1346C43v36Ev");}
void  S1346C4 ::v37(){vfunc_called(this, "_ZN7S1346C43v37Ev");}
void  S1346C4 ::v38(){vfunc_called(this, "_ZN7S1346C43v38Ev");}
void  S1346C4 ::v39(){vfunc_called(this, "_ZN7S1346C43v39Ev");}
void  S1346C4 ::v40(){vfunc_called(this, "_ZN7S1346C43v40Ev");}
void  S1346C4 ::v41(){vfunc_called(this, "_ZN7S1346C43v41Ev");}
void  S1346C4 ::v42(){vfunc_called(this, "_ZN7S1346C43v42Ev");}
void  S1346C4 ::v43(){vfunc_called(this, "_ZN7S1346C43v43Ev");}
void  S1346C4 ::v44(){vfunc_called(this, "_ZN7S1346C43v44Ev");}
void  S1346C4 ::v45(){vfunc_called(this, "_ZN7S1346C43v45Ev");}
void  S1346C4 ::v46(){vfunc_called(this, "_ZN7S1346C43v46Ev");}
void  S1346C4 ::v47(){vfunc_called(this, "_ZN7S1346C43v47Ev");}
void  S1346C4 ::v48(){vfunc_called(this, "_ZN7S1346C43v48Ev");}
void  S1346C4 ::v49(){vfunc_called(this, "_ZN7S1346C43v49Ev");}
void  S1346C4 ::v50(){vfunc_called(this, "_ZN7S1346C43v50Ev");}
void  S1346C4 ::v51(){vfunc_called(this, "_ZN7S1346C43v51Ev");}
void  S1346C4 ::v52(){vfunc_called(this, "_ZN7S1346C43v52Ev");}
void  S1346C4 ::v53(){vfunc_called(this, "_ZN7S1346C43v53Ev");}
void  S1346C4 ::v54(){vfunc_called(this, "_ZN7S1346C43v54Ev");}
void  S1346C4 ::v55(){vfunc_called(this, "_ZN7S1346C43v55Ev");}
void  S1346C4 ::v56(){vfunc_called(this, "_ZN7S1346C43v56Ev");}
void  S1346C4 ::v57(){vfunc_called(this, "_ZN7S1346C43v57Ev");}
void  S1346C4 ::v58(){vfunc_called(this, "_ZN7S1346C43v58Ev");}
void  S1346C4 ::v59(){vfunc_called(this, "_ZN7S1346C43v59Ev");}
void  S1346C4 ::v60(){vfunc_called(this, "_ZN7S1346C43v60Ev");}
void  S1346C4 ::v61(){vfunc_called(this, "_ZN7S1346C43v61Ev");}
void  S1346C4 ::v62(){vfunc_called(this, "_ZN7S1346C43v62Ev");}
void  S1346C4 ::v63(){vfunc_called(this, "_ZN7S1346C43v63Ev");}
void  S1346C4 ::v64(){vfunc_called(this, "_ZN7S1346C43v64Ev");}
void  S1346C4 ::v65(){vfunc_called(this, "_ZN7S1346C43v65Ev");}
void  S1346C4 ::v66(){vfunc_called(this, "_ZN7S1346C43v66Ev");}
void  S1346C4 ::v67(){vfunc_called(this, "_ZN7S1346C43v67Ev");}
void  S1346C4 ::v68(){vfunc_called(this, "_ZN7S1346C43v68Ev");}
void  S1346C4 ::v69(){vfunc_called(this, "_ZN7S1346C43v69Ev");}
void  S1346C4 ::v70(){vfunc_called(this, "_ZN7S1346C43v70Ev");}
void  S1346C4 ::v71(){vfunc_called(this, "_ZN7S1346C43v71Ev");}
void  S1346C4 ::v72(){vfunc_called(this, "_ZN7S1346C43v72Ev");}
void  S1346C4 ::v73(){vfunc_called(this, "_ZN7S1346C43v73Ev");}
void  S1346C4 ::v74(){vfunc_called(this, "_ZN7S1346C43v74Ev");}
void  S1346C4 ::v75(){vfunc_called(this, "_ZN7S1346C43v75Ev");}
void  S1346C4 ::v76(){vfunc_called(this, "_ZN7S1346C43v76Ev");}
void  S1346C4 ::v77(){vfunc_called(this, "_ZN7S1346C43v77Ev");}
void  S1346C4 ::v78(){vfunc_called(this, "_ZN7S1346C43v78Ev");}
void  S1346C4 ::v79(){vfunc_called(this, "_ZN7S1346C43v79Ev");}
void  S1346C4 ::v80(){vfunc_called(this, "_ZN7S1346C43v80Ev");}
void  S1346C4 ::v81(){vfunc_called(this, "_ZN7S1346C43v81Ev");}
void  S1346C4 ::v82(){vfunc_called(this, "_ZN7S1346C43v82Ev");}
void  S1346C4 ::v83(){vfunc_called(this, "_ZN7S1346C43v83Ev");}
S1346C4 ::S1346C4(){ note_ctor("S1346C4", this);} // tgen

static void Test_S1346C4()
{
  extern Class_Descriptor cd_S1346C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1346C4, buf);
    S1346C4 *dp, &lv = *(dp=new (buf) S1346C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1346C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1346C4)");
    check_field_offset(lv, s1346c4f0, ABISELECT(8,4), "S1346C4.s1346c4f0");
    check_field_offset(lv, s1346c4f1, ABISELECT(16,8), "S1346C4.s1346c4f1");
    check_field_offset(lv, s1346c4f2, ABISELECT(24,16), "S1346C4.s1346c4f2");
    check_field_offset(lv, s1346c4f3, ABISELECT(56,32), "S1346C4.s1346c4f3");
    check_field_offset(lv, s1346c4f4, ABISELECT(64,40), "S1346C4.s1346c4f4");
    check_field_offset(lv, s1346c4f5, ABISELECT(72,44), "S1346C4.s1346c4f5");
    check_field_offset(lv, s1346c4f6, ABISELECT(80,52), "S1346C4.s1346c4f6");
    test_class_info(&lv, &cd_S1346C4);
    dp->~S1346C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1346C4(Test_S1346C4, "S1346C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1346C4C1Ev();
extern void _ZN7S1346C4D1Ev();
Name_Map name_map_S1346C4[] = {
  NSPAIR(_ZN7S1346C4C1Ev),
  NSPAIR(_ZN7S1346C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1346C4[];
extern void _ZN7S1346C4D1Ev();
extern void _ZN7S1346C4D0Ev();
extern void _ZN7S1346C43v20Ev();
extern void _ZN7S1346C43v21Ev();
extern void _ZN7S1346C43v22Ev();
extern void _ZN7S1346C43v23Ev();
extern void _ZN7S1346C43v24Ev();
extern void _ZN7S1346C43v25Ev();
extern void _ZN7S1346C43v26Ev();
extern void _ZN7S1346C43v27Ev();
extern void _ZN7S1346C43v28Ev();
extern void _ZN7S1346C43v29Ev();
extern void _ZN7S1346C43v30Ev();
extern void _ZN7S1346C43v31Ev();
extern void _ZN7S1346C43v32Ev();
extern void _ZN7S1346C43v33Ev();
extern void _ZN7S1346C43v34Ev();
extern void _ZN7S1346C43v35Ev();
extern void _ZN7S1346C43v36Ev();
extern void _ZN7S1346C43v37Ev();
extern void _ZN7S1346C43v38Ev();
extern void _ZN7S1346C43v39Ev();
extern void _ZN7S1346C43v40Ev();
extern void _ZN7S1346C43v41Ev();
extern void _ZN7S1346C43v42Ev();
extern void _ZN7S1346C43v43Ev();
extern void _ZN7S1346C43v44Ev();
extern void _ZN7S1346C43v45Ev();
extern void _ZN7S1346C43v46Ev();
extern void _ZN7S1346C43v47Ev();
extern void _ZN7S1346C43v48Ev();
extern void _ZN7S1346C43v49Ev();
extern void _ZN7S1346C43v50Ev();
extern void _ZN7S1346C43v51Ev();
extern void _ZN7S1346C43v52Ev();
extern void _ZN7S1346C43v53Ev();
extern void _ZN7S1346C43v54Ev();
extern void _ZN7S1346C43v55Ev();
extern void _ZN7S1346C43v56Ev();
extern void _ZN7S1346C43v57Ev();
extern void _ZN7S1346C43v58Ev();
extern void _ZN7S1346C43v59Ev();
extern void _ZN7S1346C43v60Ev();
extern void _ZN7S1346C43v61Ev();
extern void _ZN7S1346C43v62Ev();
extern void _ZN7S1346C43v63Ev();
extern void _ZN7S1346C43v64Ev();
extern void _ZN7S1346C43v65Ev();
extern void _ZN7S1346C43v66Ev();
extern void _ZN7S1346C43v67Ev();
extern void _ZN7S1346C43v68Ev();
extern void _ZN7S1346C43v69Ev();
extern void _ZN7S1346C43v70Ev();
extern void _ZN7S1346C43v71Ev();
extern void _ZN7S1346C43v72Ev();
extern void _ZN7S1346C43v73Ev();
extern void _ZN7S1346C43v74Ev();
extern void _ZN7S1346C43v75Ev();
extern void _ZN7S1346C43v76Ev();
extern void _ZN7S1346C43v77Ev();
extern void _ZN7S1346C43v78Ev();
extern void _ZN7S1346C43v79Ev();
extern void _ZN7S1346C43v80Ev();
extern void _ZN7S1346C43v81Ev();
extern void _ZN7S1346C43v82Ev();
extern void _ZN7S1346C43v83Ev();
static  VTBL_ENTRY vtc_S1346C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1346C4[0]),
  (VTBL_ENTRY)&_ZN7S1346C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1346C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v78Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v79Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v80Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v81Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v82Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v83Ev,
};
extern VTBL_ENTRY _ZTI7S1346C4[];
extern  VTBL_ENTRY _ZTV7S1346C4[];
Class_Descriptor cd_S1346C4 = {  "S1346C4", // class name
  0,0,//no base classes
  &(vtc_S1346C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1346C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1346C4),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  S1346C6  {
  virtual void  v84(); // _ZN7S1346C63v84Ev
  virtual void  v85(); // _ZN7S1346C63v85Ev
  virtual void  v86(); // _ZN7S1346C63v86Ev
  virtual void  v87(); // _ZN7S1346C63v87Ev
  virtual void  v88(); // _ZN7S1346C63v88Ev
  virtual void  v89(); // _ZN7S1346C63v89Ev
  virtual void  v90(); // _ZN7S1346C63v90Ev
  virtual void  v91(); // _ZN7S1346C63v91Ev
  virtual void  v92(); // _ZN7S1346C63v92Ev
  virtual void  v93(); // _ZN7S1346C63v93Ev
  virtual void  v94(); // _ZN7S1346C63v94Ev
  virtual void  v95(); // _ZN7S1346C63v95Ev
  virtual void  v96(); // _ZN7S1346C63v96Ev
  virtual void  v97(); // _ZN7S1346C63v97Ev
  virtual void  v98(); // _ZN7S1346C63v98Ev
  virtual void  v99(); // _ZN7S1346C63v99Ev
  ~S1346C6(); // tgen
  S1346C6(); // tgen
};
//SIG(-1 S1346C6) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16}


void  S1346C6 ::v84(){vfunc_called(this, "_ZN7S1346C63v84Ev");}
void  S1346C6 ::v85(){vfunc_called(this, "_ZN7S1346C63v85Ev");}
void  S1346C6 ::v86(){vfunc_called(this, "_ZN7S1346C63v86Ev");}
void  S1346C6 ::v87(){vfunc_called(this, "_ZN7S1346C63v87Ev");}
void  S1346C6 ::v88(){vfunc_called(this, "_ZN7S1346C63v88Ev");}
void  S1346C6 ::v89(){vfunc_called(this, "_ZN7S1346C63v89Ev");}
void  S1346C6 ::v90(){vfunc_called(this, "_ZN7S1346C63v90Ev");}
void  S1346C6 ::v91(){vfunc_called(this, "_ZN7S1346C63v91Ev");}
void  S1346C6 ::v92(){vfunc_called(this, "_ZN7S1346C63v92Ev");}
void  S1346C6 ::v93(){vfunc_called(this, "_ZN7S1346C63v93Ev");}
void  S1346C6 ::v94(){vfunc_called(this, "_ZN7S1346C63v94Ev");}
void  S1346C6 ::v95(){vfunc_called(this, "_ZN7S1346C63v95Ev");}
void  S1346C6 ::v96(){vfunc_called(this, "_ZN7S1346C63v96Ev");}
void  S1346C6 ::v97(){vfunc_called(this, "_ZN7S1346C63v97Ev");}
void  S1346C6 ::v98(){vfunc_called(this, "_ZN7S1346C63v98Ev");}
void  S1346C6 ::v99(){vfunc_called(this, "_ZN7S1346C63v99Ev");}
S1346C6 ::~S1346C6(){ note_dtor("S1346C6", this);} // tgen
S1346C6 ::S1346C6(){ note_ctor("S1346C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1346C6C1Ev();
extern void _ZN7S1346C6D1Ev();
Name_Map name_map_S1346C6[] = {
  NSPAIR(_ZN7S1346C6C1Ev),
  NSPAIR(_ZN7S1346C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1346C6[];
extern void _ZN7S1346C63v84Ev();
extern void _ZN7S1346C63v85Ev();
extern void _ZN7S1346C63v86Ev();
extern void _ZN7S1346C63v87Ev();
extern void _ZN7S1346C63v88Ev();
extern void _ZN7S1346C63v89Ev();
extern void _ZN7S1346C63v90Ev();
extern void _ZN7S1346C63v91Ev();
extern void _ZN7S1346C63v92Ev();
extern void _ZN7S1346C63v93Ev();
extern void _ZN7S1346C63v94Ev();
extern void _ZN7S1346C63v95Ev();
extern void _ZN7S1346C63v96Ev();
extern void _ZN7S1346C63v97Ev();
extern void _ZN7S1346C63v98Ev();
extern void _ZN7S1346C63v99Ev();
static  VTBL_ENTRY vtc_S1346C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1346C6[0]),
  (VTBL_ENTRY)&_ZN7S1346C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v85Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v86Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v87Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v88Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v89Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v90Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v91Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v92Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v93Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v94Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v95Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v96Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v97Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v98Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v99Ev,
};
extern VTBL_ENTRY _ZTI7S1346C6[];
extern  VTBL_ENTRY _ZTV7S1346C6[];
Class_Descriptor cd_S1346C6 = {  "S1346C6", // class name
  0,0,//no base classes
  &(vtc_S1346C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1346C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1346C6),18, //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  S1346C7  {
  virtual void  v100(); // _ZN7S1346C74v100Ev
  virtual void  v101(); // _ZN7S1346C74v101Ev
  virtual void  v102(); // _ZN7S1346C74v102Ev
  virtual void  v103(); // _ZN7S1346C74v103Ev
  virtual void  v104(); // _ZN7S1346C74v104Ev
  virtual void  v105(); // _ZN7S1346C74v105Ev
  virtual void  v106(); // _ZN7S1346C74v106Ev
  virtual void  v107(); // _ZN7S1346C74v107Ev
  virtual void  v108(); // _ZN7S1346C74v108Ev
  ~S1346C7(); // tgen
  S1346C7(); // tgen
};
//SIG(-1 S1346C7) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S1346C7 ::v100(){vfunc_called(this, "_ZN7S1346C74v100Ev");}
void  S1346C7 ::v101(){vfunc_called(this, "_ZN7S1346C74v101Ev");}
void  S1346C7 ::v102(){vfunc_called(this, "_ZN7S1346C74v102Ev");}
void  S1346C7 ::v103(){vfunc_called(this, "_ZN7S1346C74v103Ev");}
void  S1346C7 ::v104(){vfunc_called(this, "_ZN7S1346C74v104Ev");}
void  S1346C7 ::v105(){vfunc_called(this, "_ZN7S1346C74v105Ev");}
void  S1346C7 ::v106(){vfunc_called(this, "_ZN7S1346C74v106Ev");}
void  S1346C7 ::v107(){vfunc_called(this, "_ZN7S1346C74v107Ev");}
void  S1346C7 ::v108(){vfunc_called(this, "_ZN7S1346C74v108Ev");}
S1346C7 ::~S1346C7(){ note_dtor("S1346C7", this);} // tgen
S1346C7 ::S1346C7(){ note_ctor("S1346C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1346C7C1Ev();
extern void _ZN7S1346C7D1Ev();
Name_Map name_map_S1346C7[] = {
  NSPAIR(_ZN7S1346C7C1Ev),
  NSPAIR(_ZN7S1346C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1346C7[];
extern void _ZN7S1346C74v100Ev();
extern void _ZN7S1346C74v101Ev();
extern void _ZN7S1346C74v102Ev();
extern void _ZN7S1346C74v103Ev();
extern void _ZN7S1346C74v104Ev();
extern void _ZN7S1346C74v105Ev();
extern void _ZN7S1346C74v106Ev();
extern void _ZN7S1346C74v107Ev();
extern void _ZN7S1346C74v108Ev();
static  VTBL_ENTRY vtc_S1346C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1346C7[0]),
  (VTBL_ENTRY)&_ZN7S1346C74v100Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v101Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v102Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v103Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v104Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v105Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v106Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v107Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v108Ev,
};
extern VTBL_ENTRY _ZTI7S1346C7[];
extern  VTBL_ENTRY _ZTV7S1346C7[];
Class_Descriptor cd_S1346C7 = {  "S1346C7", // class name
  0,0,//no base classes
  &(vtc_S1346C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1346C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1346C7),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  S1346C3  : S1346C4 , S1346C6 , S1346C7 {
  void *s1346c3f0;
  ::S79C39_nt s1346c3f1;
  unsigned int s1346c3f2:1;
  unsigned int s1346c3f3:1;
  unsigned int s1346c3f4:1;
  unsigned int s1346c3f5:1;
  virtual  ~S1346C3(); // _ZN7S1346C3D1Ev
  virtual void  v109(); // _ZN7S1346C34v109Ev
  virtual void  v110(); // _ZN7S1346C34v110Ev
  virtual void  v111(); // _ZN7S1346C34v111Ev
  virtual void  v112(); // _ZN7S1346C34v112Ev
  virtual void  v113(); // _ZN7S1346C34v113Ev
  virtual void  v114(); // _ZN7S1346C34v114Ev
  virtual void  v115(); // _ZN7S1346C34v115Ev
  virtual void  v116(); // _ZN7S1346C34v116Ev
  virtual void  v117(); // _ZN7S1346C34v117Ev
  virtual void  v118(); // _ZN7S1346C34v118Ev
  virtual void  v119(); // _ZN7S1346C34v119Ev
  virtual void  v120(); // _ZN7S1346C34v120Ev
  virtual void  v121(); // _ZN7S1346C34v121Ev
  virtual void  v122(); // _ZN7S1346C34v122Ev
  virtual void  v123(); // _ZN7S1346C34v123Ev
  virtual void  v124(); // _ZN7S1346C34v124Ev
  virtual void  v125(); // _ZN7S1346C34v125Ev
  virtual void  v126(); // _ZN7S1346C34v126Ev
  virtual void  v127(); // _ZN7S1346C34v127Ev
  virtual void  v128(); // _ZN7S1346C34v128Ev
  virtual void  v129(); // _ZN7S1346C34v129Ev
  virtual void  v130(); // _ZN7S1346C34v130Ev
  virtual void  v131(); // _ZN7S1346C34v131Ev
  virtual void  v132(); // _ZN7S1346C34v132Ev
  S1346C3(); // tgen
};
//SIG(-1 S1346C3) C1{ BC2{ vd 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 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} BC4{ v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104} BC5{ v105 v106 v107 v108 v109 v110 v111 v112 v113} 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 Fp FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1}


 S1346C3 ::~S1346C3(){ note_dtor("S1346C3", this);}
void  S1346C3 ::v109(){vfunc_called(this, "_ZN7S1346C34v109Ev");}
void  S1346C3 ::v110(){vfunc_called(this, "_ZN7S1346C34v110Ev");}
void  S1346C3 ::v111(){vfunc_called(this, "_ZN7S1346C34v111Ev");}
void  S1346C3 ::v112(){vfunc_called(this, "_ZN7S1346C34v112Ev");}
void  S1346C3 ::v113(){vfunc_called(this, "_ZN7S1346C34v113Ev");}
void  S1346C3 ::v114(){vfunc_called(this, "_ZN7S1346C34v114Ev");}
void  S1346C3 ::v115(){vfunc_called(this, "_ZN7S1346C34v115Ev");}
void  S1346C3 ::v116(){vfunc_called(this, "_ZN7S1346C34v116Ev");}
void  S1346C3 ::v117(){vfunc_called(this, "_ZN7S1346C34v117Ev");}
void  S1346C3 ::v118(){vfunc_called(this, "_ZN7S1346C34v118Ev");}
void  S1346C3 ::v119(){vfunc_called(this, "_ZN7S1346C34v119Ev");}
void  S1346C3 ::v120(){vfunc_called(this, "_ZN7S1346C34v120Ev");}
void  S1346C3 ::v121(){vfunc_called(this, "_ZN7S1346C34v121Ev");}
void  S1346C3 ::v122(){vfunc_called(this, "_ZN7S1346C34v122Ev");}
void  S1346C3 ::v123(){vfunc_called(this, "_ZN7S1346C34v123Ev");}
void  S1346C3 ::v124(){vfunc_called(this, "_ZN7S1346C34v124Ev");}
void  S1346C3 ::v125(){vfunc_called(this, "_ZN7S1346C34v125Ev");}
void  S1346C3 ::v126(){vfunc_called(this, "_ZN7S1346C34v126Ev");}
void  S1346C3 ::v127(){vfunc_called(this, "_ZN7S1346C34v127Ev");}
void  S1346C3 ::v128(){vfunc_called(this, "_ZN7S1346C34v128Ev");}
void  S1346C3 ::v129(){vfunc_called(this, "_ZN7S1346C34v129Ev");}
void  S1346C3 ::v130(){vfunc_called(this, "_ZN7S1346C34v130Ev");}
void  S1346C3 ::v131(){vfunc_called(this, "_ZN7S1346C34v131Ev");}
void  S1346C3 ::v132(){vfunc_called(this, "_ZN7S1346C34v132Ev");}
S1346C3 ::S1346C3(){ note_ctor("S1346C3", this);} // tgen

static void Test_S1346C3()
{
  extern Class_Descriptor cd_S1346C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,23)];
    init_test(&cd_S1346C3, buf);
    S1346C3 *dp, &lv = *(dp=new (buf) S1346C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S1346C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1346C3)");
    check_base_class_offset(lv, (S1346C4*), 0, "S1346C3");
    check_base_class_offset(lv, (S1346C6*), ABISELECT(96,60), "S1346C3");
    check_base_class_offset(lv, (S1346C7*), ABISELECT(104,64), "S1346C3");
    check_field_offset(lv, s1346c3f0, ABISELECT(112,68), "S1346C3.s1346c3f0");
    check_field_offset(lv, s1346c3f1, ABISELECT(120,72), "S1346C3.s1346c3f1");
    set_bf_and_test(lv, s1346c3f2, ABISELECT(136,84), 0, 1, 1, "S1346C3");
    set_bf_and_test(lv, s1346c3f3, ABISELECT(136,84), 1, 1, 1, "S1346C3");
    set_bf_and_test(lv, s1346c3f4, ABISELECT(136,84), 2, 1, 1, "S1346C3");
    set_bf_and_test(lv, s1346c3f5, ABISELECT(136,84), 3, 1, 1, "S1346C3");
    test_class_info(&lv, &cd_S1346C3);
    dp->~S1346C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1346C3(Test_S1346C3, "S1346C3", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN7S1346C3C1Ev();
extern void _ZN7S1346C3D1Ev();
Name_Map name_map_S1346C3[] = {
  NSPAIR(_ZN7S1346C3C1Ev),
  NSPAIR(_ZN7S1346C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1346C4;
extern VTBL_ENTRY _ZTI7S1346C4[];
extern  VTBL_ENTRY _ZTV7S1346C4[];
extern Class_Descriptor cd_S1346C6;
extern VTBL_ENTRY _ZTI7S1346C6[];
extern  VTBL_ENTRY _ZTV7S1346C6[];
extern Class_Descriptor cd_S1346C7;
extern VTBL_ENTRY _ZTI7S1346C7[];
extern  VTBL_ENTRY _ZTV7S1346C7[];
static Base_Class bases_S1346C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1346C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1346C6,    ABISELECT(96,60), //bcp->offset
    92, //bcp->virtual_function_table_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_S1346C7,    ABISELECT(104,64), //bcp->offset
    110, //bcp->virtual_function_table_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 _ZTI7S1346C3[];
extern void _ZN7S1346C3D1Ev();
extern void _ZN7S1346C3D0Ev();
extern void _ZN7S1346C43v20Ev();
extern void _ZN7S1346C43v21Ev();
extern void _ZN7S1346C43v22Ev();
extern void _ZN7S1346C43v23Ev();
extern void _ZN7S1346C43v24Ev();
extern void _ZN7S1346C43v25Ev();
extern void _ZN7S1346C43v26Ev();
extern void _ZN7S1346C43v27Ev();
extern void _ZN7S1346C43v28Ev();
extern void _ZN7S1346C43v29Ev();
extern void _ZN7S1346C43v30Ev();
extern void _ZN7S1346C43v31Ev();
extern void _ZN7S1346C43v32Ev();
extern void _ZN7S1346C43v33Ev();
extern void _ZN7S1346C43v34Ev();
extern void _ZN7S1346C43v35Ev();
extern void _ZN7S1346C43v36Ev();
extern void _ZN7S1346C43v37Ev();
extern void _ZN7S1346C43v38Ev();
extern void _ZN7S1346C43v39Ev();
extern void _ZN7S1346C43v40Ev();
extern void _ZN7S1346C43v41Ev();
extern void _ZN7S1346C43v42Ev();
extern void _ZN7S1346C43v43Ev();
extern void _ZN7S1346C43v44Ev();
extern void _ZN7S1346C43v45Ev();
extern void _ZN7S1346C43v46Ev();
extern void _ZN7S1346C43v47Ev();
extern void _ZN7S1346C43v48Ev();
extern void _ZN7S1346C43v49Ev();
extern void _ZN7S1346C43v50Ev();
extern void _ZN7S1346C43v51Ev();
extern void _ZN7S1346C43v52Ev();
extern void _ZN7S1346C43v53Ev();
extern void _ZN7S1346C43v54Ev();
extern void _ZN7S1346C43v55Ev();
extern void _ZN7S1346C43v56Ev();
extern void _ZN7S1346C43v57Ev();
extern void _ZN7S1346C43v58Ev();
extern void _ZN7S1346C43v59Ev();
extern void _ZN7S1346C43v60Ev();
extern void _ZN7S1346C43v61Ev();
extern void _ZN7S1346C43v62Ev();
extern void _ZN7S1346C43v63Ev();
extern void _ZN7S1346C43v64Ev();
extern void _ZN7S1346C43v65Ev();
extern void _ZN7S1346C43v66Ev();
extern void _ZN7S1346C43v67Ev();
extern void _ZN7S1346C43v68Ev();
extern void _ZN7S1346C43v69Ev();
extern void _ZN7S1346C43v70Ev();
extern void _ZN7S1346C43v71Ev();
extern void _ZN7S1346C43v72Ev();
extern void _ZN7S1346C43v73Ev();
extern void _ZN7S1346C43v74Ev();
extern void _ZN7S1346C43v75Ev();
extern void _ZN7S1346C43v76Ev();
extern void _ZN7S1346C43v77Ev();
extern void _ZN7S1346C43v78Ev();
extern void _ZN7S1346C43v79Ev();
extern void _ZN7S1346C43v80Ev();
extern void _ZN7S1346C43v81Ev();
extern void _ZN7S1346C43v82Ev();
extern void _ZN7S1346C43v83Ev();
extern void _ZN7S1346C34v109Ev();
extern void _ZN7S1346C34v110Ev();
extern void _ZN7S1346C34v111Ev();
extern void _ZN7S1346C34v112Ev();
extern void _ZN7S1346C34v113Ev();
extern void _ZN7S1346C34v114Ev();
extern void _ZN7S1346C34v115Ev();
extern void _ZN7S1346C34v116Ev();
extern void _ZN7S1346C34v117Ev();
extern void _ZN7S1346C34v118Ev();
extern void _ZN7S1346C34v119Ev();
extern void _ZN7S1346C34v120Ev();
extern void _ZN7S1346C34v121Ev();
extern void _ZN7S1346C34v122Ev();
extern void _ZN7S1346C34v123Ev();
extern void _ZN7S1346C34v124Ev();
extern void _ZN7S1346C34v125Ev();
extern void _ZN7S1346C34v126Ev();
extern void _ZN7S1346C34v127Ev();
extern void _ZN7S1346C34v128Ev();
extern void _ZN7S1346C34v129Ev();
extern void _ZN7S1346C34v130Ev();
extern void _ZN7S1346C34v131Ev();
extern void _ZN7S1346C34v132Ev();
extern void _ZN7S1346C63v84Ev();
extern void _ZN7S1346C63v85Ev();
extern void _ZN7S1346C63v86Ev();
extern void _ZN7S1346C63v87Ev();
extern void _ZN7S1346C63v88Ev();
extern void _ZN7S1346C63v89Ev();
extern void _ZN7S1346C63v90Ev();
extern void _ZN7S1346C63v91Ev();
extern void _ZN7S1346C63v92Ev();
extern void _ZN7S1346C63v93Ev();
extern void _ZN7S1346C63v94Ev();
extern void _ZN7S1346C63v95Ev();
extern void _ZN7S1346C63v96Ev();
extern void _ZN7S1346C63v97Ev();
extern void _ZN7S1346C63v98Ev();
extern void _ZN7S1346C63v99Ev();
extern void _ZN7S1346C74v100Ev();
extern void _ZN7S1346C74v101Ev();
extern void _ZN7S1346C74v102Ev();
extern void _ZN7S1346C74v103Ev();
extern void _ZN7S1346C74v104Ev();
extern void _ZN7S1346C74v105Ev();
extern void _ZN7S1346C74v106Ev();
extern void _ZN7S1346C74v107Ev();
extern void _ZN7S1346C74v108Ev();
static  VTBL_ENTRY vtc_S1346C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1346C3[0]),
  (VTBL_ENTRY)&_ZN7S1346C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1346C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v78Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v79Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v80Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v81Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v82Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v83Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v125Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v126Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v127Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v128Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v129Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v130Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v131Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v132Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1346C3[0]),
  (VTBL_ENTRY)&_ZN7S1346C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v85Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v86Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v87Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v88Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v89Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v90Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v91Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v92Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v93Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v94Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v95Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v96Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v97Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v98Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v99Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1346C3[0]),
  (VTBL_ENTRY)&_ZN7S1346C74v100Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v101Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v102Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v103Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v104Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v105Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v106Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v107Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v108Ev,
};
extern VTBL_ENTRY _ZTI7S1346C3[];
extern  VTBL_ENTRY _ZTV7S1346C3[];
Class_Descriptor cd_S1346C3 = {  "S1346C3", // class name
  bases_S1346C3, 3,
  &(vtc_S1346C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI7S1346C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1346C3),121, //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  S1346C2  : S1346C3 {
  ::S3262C11_nt s1346c2f0;
  int s1346c2f1;
  virtual  ~S1346C2(); // _ZN7S1346C2D1Ev
  virtual void  v133(); // _ZN7S1346C24v133Ev
  virtual void  v134(); // _ZN7S1346C24v134Ev
  virtual void  v135(); // _ZN7S1346C24v135Ev
  virtual void  v136(); // _ZN7S1346C24v136Ev
  virtual void  v137(); // _ZN7S1346C24v137Ev
  virtual void  v138(); // _ZN7S1346C24v138Ev
  virtual void  v139(); // _ZN7S1346C24v139Ev
  virtual void  v140(); // _ZN7S1346C24v140Ev
  virtual void  v141(); // _ZN7S1346C24v141Ev
  virtual void  v142(); // _ZN7S1346C24v142Ev
  virtual void  v143(); // _ZN7S1346C24v143Ev
  virtual void  v144(); // _ZN7S1346C24v144Ev
  virtual void  v145(); // _ZN7S1346C24v145Ev
  virtual void  v146(); // _ZN7S1346C24v146Ev
  virtual void  v147(); // _ZN7S1346C24v147Ev
  virtual void  v148(); // _ZN7S1346C24v148Ev
  virtual void  v149(); // _ZN7S1346C24v149Ev
  virtual void  v150(); // _ZN7S1346C24v150Ev
  virtual void  v151(); // _ZN7S1346C24v151Ev
  virtual void  v152(); // _ZN7S1346C24v152Ev
  virtual void  v153(); // _ZN7S1346C24v153Ev
  virtual void  v154(); // _ZN7S1346C24v154Ev
  virtual void  v155(); // _ZN7S1346C24v155Ev
  virtual void  v156(); // _ZN7S1346C24v156Ev
  virtual void  v157(); // _ZN7S1346C24v157Ev
  virtual void  v158(); // _ZN7S1346C24v158Ev
  virtual void  v159(); // _ZN7S1346C24v159Ev
  S1346C2(); // tgen
};
//SIG(-1 S1346C2) C1{ BC2{ BC3{ vd 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 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} BC5{ v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107} BC6{ v108 v109 v110 v111 v112 v113 v114 v115 v116} vd v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 Fp FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1} 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 FC11{ m FC12{ BC13{ BC10}} Fc} Fi}


 S1346C2 ::~S1346C2(){ note_dtor("S1346C2", this);}
void  S1346C2 ::v133(){vfunc_called(this, "_ZN7S1346C24v133Ev");}
void  S1346C2 ::v134(){vfunc_called(this, "_ZN7S1346C24v134Ev");}
void  S1346C2 ::v135(){vfunc_called(this, "_ZN7S1346C24v135Ev");}
void  S1346C2 ::v136(){vfunc_called(this, "_ZN7S1346C24v136Ev");}
void  S1346C2 ::v137(){vfunc_called(this, "_ZN7S1346C24v137Ev");}
void  S1346C2 ::v138(){vfunc_called(this, "_ZN7S1346C24v138Ev");}
void  S1346C2 ::v139(){vfunc_called(this, "_ZN7S1346C24v139Ev");}
void  S1346C2 ::v140(){vfunc_called(this, "_ZN7S1346C24v140Ev");}
void  S1346C2 ::v141(){vfunc_called(this, "_ZN7S1346C24v141Ev");}
void  S1346C2 ::v142(){vfunc_called(this, "_ZN7S1346C24v142Ev");}
void  S1346C2 ::v143(){vfunc_called(this, "_ZN7S1346C24v143Ev");}
void  S1346C2 ::v144(){vfunc_called(this, "_ZN7S1346C24v144Ev");}
void  S1346C2 ::v145(){vfunc_called(this, "_ZN7S1346C24v145Ev");}
void  S1346C2 ::v146(){vfunc_called(this, "_ZN7S1346C24v146Ev");}
void  S1346C2 ::v147(){vfunc_called(this, "_ZN7S1346C24v147Ev");}
void  S1346C2 ::v148(){vfunc_called(this, "_ZN7S1346C24v148Ev");}
void  S1346C2 ::v149(){vfunc_called(this, "_ZN7S1346C24v149Ev");}
void  S1346C2 ::v150(){vfunc_called(this, "_ZN7S1346C24v150Ev");}
void  S1346C2 ::v151(){vfunc_called(this, "_ZN7S1346C24v151Ev");}
void  S1346C2 ::v152(){vfunc_called(this, "_ZN7S1346C24v152Ev");}
void  S1346C2 ::v153(){vfunc_called(this, "_ZN7S1346C24v153Ev");}
void  S1346C2 ::v154(){vfunc_called(this, "_ZN7S1346C24v154Ev");}
void  S1346C2 ::v155(){vfunc_called(this, "_ZN7S1346C24v155Ev");}
void  S1346C2 ::v156(){vfunc_called(this, "_ZN7S1346C24v156Ev");}
void  S1346C2 ::v157(){vfunc_called(this, "_ZN7S1346C24v157Ev");}
void  S1346C2 ::v158(){vfunc_called(this, "_ZN7S1346C24v158Ev");}
void  S1346C2 ::v159(){vfunc_called(this, "_ZN7S1346C24v159Ev");}
S1346C2 ::S1346C2(){ note_ctor("S1346C2", this);} // tgen

static void Test_S1346C2()
{
  extern Class_Descriptor cd_S1346C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,28)];
    init_test(&cd_S1346C2, buf);
    S1346C2 *dp, &lv = *(dp=new (buf) S1346C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,108), "sizeof(S1346C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1346C2)");
    check_base_class_offset(lv, (S1346C4*)(S1346C3*), 0, "S1346C2");
    check_base_class_offset(lv, (S1346C6*)(S1346C3*), ABISELECT(96,60), "S1346C2");
    check_base_class_offset(lv, (S1346C7*)(S1346C3*), ABISELECT(104,64), "S1346C2");
    check_base_class_offset(lv, (S1346C3*), 0, "S1346C2");
    check_field_offset(lv, s1346c2f0, ABISELECT(144,88), "S1346C2.s1346c2f0");
    check_field_offset(lv, s1346c2f1, ABISELECT(168,104), "S1346C2.s1346c2f1");
    test_class_info(&lv, &cd_S1346C2);
    dp->~S1346C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1346C2(Test_S1346C2, "S1346C2", ABISELECT(176,108));

#else // __cplusplus

extern void _ZN7S1346C2C1Ev();
extern void _ZN7S1346C2D1Ev();
Name_Map name_map_S1346C2[] = {
  NSPAIR(_ZN7S1346C2C1Ev),
  NSPAIR(_ZN7S1346C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1346C4;
extern VTBL_ENTRY _ZTI7S1346C4[];
extern  VTBL_ENTRY _ZTV7S1346C4[];
extern Class_Descriptor cd_S1346C6;
extern VTBL_ENTRY _ZTI7S1346C6[];
extern  VTBL_ENTRY _ZTV7S1346C6[];
extern Class_Descriptor cd_S1346C7;
extern VTBL_ENTRY _ZTI7S1346C7[];
extern  VTBL_ENTRY _ZTV7S1346C7[];
extern Class_Descriptor cd_S1346C3;
extern VTBL_ENTRY _ZTI7S1346C3[];
extern  VTBL_ENTRY _ZTV7S1346C3[];
static Base_Class bases_S1346C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1346C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1346C6,    ABISELECT(96,60), //bcp->offset
    119, //bcp->virtual_function_table_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_S1346C7,    ABISELECT(104,64), //bcp->offset
    137, //bcp->virtual_function_table_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_S1346C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1346C2[];
extern void _ZN7S1346C2D1Ev();
extern void _ZN7S1346C2D0Ev();
extern void _ZN7S1346C43v20Ev();
extern void _ZN7S1346C43v21Ev();
extern void _ZN7S1346C43v22Ev();
extern void _ZN7S1346C43v23Ev();
extern void _ZN7S1346C43v24Ev();
extern void _ZN7S1346C43v25Ev();
extern void _ZN7S1346C43v26Ev();
extern void _ZN7S1346C43v27Ev();
extern void _ZN7S1346C43v28Ev();
extern void _ZN7S1346C43v29Ev();
extern void _ZN7S1346C43v30Ev();
extern void _ZN7S1346C43v31Ev();
extern void _ZN7S1346C43v32Ev();
extern void _ZN7S1346C43v33Ev();
extern void _ZN7S1346C43v34Ev();
extern void _ZN7S1346C43v35Ev();
extern void _ZN7S1346C43v36Ev();
extern void _ZN7S1346C43v37Ev();
extern void _ZN7S1346C43v38Ev();
extern void _ZN7S1346C43v39Ev();
extern void _ZN7S1346C43v40Ev();
extern void _ZN7S1346C43v41Ev();
extern void _ZN7S1346C43v42Ev();
extern void _ZN7S1346C43v43Ev();
extern void _ZN7S1346C43v44Ev();
extern void _ZN7S1346C43v45Ev();
extern void _ZN7S1346C43v46Ev();
extern void _ZN7S1346C43v47Ev();
extern void _ZN7S1346C43v48Ev();
extern void _ZN7S1346C43v49Ev();
extern void _ZN7S1346C43v50Ev();
extern void _ZN7S1346C43v51Ev();
extern void _ZN7S1346C43v52Ev();
extern void _ZN7S1346C43v53Ev();
extern void _ZN7S1346C43v54Ev();
extern void _ZN7S1346C43v55Ev();
extern void _ZN7S1346C43v56Ev();
extern void _ZN7S1346C43v57Ev();
extern void _ZN7S1346C43v58Ev();
extern void _ZN7S1346C43v59Ev();
extern void _ZN7S1346C43v60Ev();
extern void _ZN7S1346C43v61Ev();
extern void _ZN7S1346C43v62Ev();
extern void _ZN7S1346C43v63Ev();
extern void _ZN7S1346C43v64Ev();
extern void _ZN7S1346C43v65Ev();
extern void _ZN7S1346C43v66Ev();
extern void _ZN7S1346C43v67Ev();
extern void _ZN7S1346C43v68Ev();
extern void _ZN7S1346C43v69Ev();
extern void _ZN7S1346C43v70Ev();
extern void _ZN7S1346C43v71Ev();
extern void _ZN7S1346C43v72Ev();
extern void _ZN7S1346C43v73Ev();
extern void _ZN7S1346C43v74Ev();
extern void _ZN7S1346C43v75Ev();
extern void _ZN7S1346C43v76Ev();
extern void _ZN7S1346C43v77Ev();
extern void _ZN7S1346C43v78Ev();
extern void _ZN7S1346C43v79Ev();
extern void _ZN7S1346C43v80Ev();
extern void _ZN7S1346C43v81Ev();
extern void _ZN7S1346C43v82Ev();
extern void _ZN7S1346C43v83Ev();
extern void _ZN7S1346C34v109Ev();
extern void _ZN7S1346C34v110Ev();
extern void _ZN7S1346C34v111Ev();
extern void _ZN7S1346C34v112Ev();
extern void _ZN7S1346C34v113Ev();
extern void _ZN7S1346C34v114Ev();
extern void _ZN7S1346C34v115Ev();
extern void _ZN7S1346C34v116Ev();
extern void _ZN7S1346C34v117Ev();
extern void _ZN7S1346C34v118Ev();
extern void _ZN7S1346C34v119Ev();
extern void _ZN7S1346C34v120Ev();
extern void _ZN7S1346C34v121Ev();
extern void _ZN7S1346C34v122Ev();
extern void _ZN7S1346C34v123Ev();
extern void _ZN7S1346C34v124Ev();
extern void _ZN7S1346C34v125Ev();
extern void _ZN7S1346C34v126Ev();
extern void _ZN7S1346C34v127Ev();
extern void _ZN7S1346C34v128Ev();
extern void _ZN7S1346C34v129Ev();
extern void _ZN7S1346C34v130Ev();
extern void _ZN7S1346C34v131Ev();
extern void _ZN7S1346C34v132Ev();
extern void _ZN7S1346C24v133Ev();
extern void _ZN7S1346C24v134Ev();
extern void _ZN7S1346C24v135Ev();
extern void _ZN7S1346C24v136Ev();
extern void _ZN7S1346C24v137Ev();
extern void _ZN7S1346C24v138Ev();
extern void _ZN7S1346C24v139Ev();
extern void _ZN7S1346C24v140Ev();
extern void _ZN7S1346C24v141Ev();
extern void _ZN7S1346C24v142Ev();
extern void _ZN7S1346C24v143Ev();
extern void _ZN7S1346C24v144Ev();
extern void _ZN7S1346C24v145Ev();
extern void _ZN7S1346C24v146Ev();
extern void _ZN7S1346C24v147Ev();
extern void _ZN7S1346C24v148Ev();
extern void _ZN7S1346C24v149Ev();
extern void _ZN7S1346C24v150Ev();
extern void _ZN7S1346C24v151Ev();
extern void _ZN7S1346C24v152Ev();
extern void _ZN7S1346C24v153Ev();
extern void _ZN7S1346C24v154Ev();
extern void _ZN7S1346C24v155Ev();
extern void _ZN7S1346C24v156Ev();
extern void _ZN7S1346C24v157Ev();
extern void _ZN7S1346C24v158Ev();
extern void _ZN7S1346C24v159Ev();
extern void _ZN7S1346C63v84Ev();
extern void _ZN7S1346C63v85Ev();
extern void _ZN7S1346C63v86Ev();
extern void _ZN7S1346C63v87Ev();
extern void _ZN7S1346C63v88Ev();
extern void _ZN7S1346C63v89Ev();
extern void _ZN7S1346C63v90Ev();
extern void _ZN7S1346C63v91Ev();
extern void _ZN7S1346C63v92Ev();
extern void _ZN7S1346C63v93Ev();
extern void _ZN7S1346C63v94Ev();
extern void _ZN7S1346C63v95Ev();
extern void _ZN7S1346C63v96Ev();
extern void _ZN7S1346C63v97Ev();
extern void _ZN7S1346C63v98Ev();
extern void _ZN7S1346C63v99Ev();
extern void _ZN7S1346C74v100Ev();
extern void _ZN7S1346C74v101Ev();
extern void _ZN7S1346C74v102Ev();
extern void _ZN7S1346C74v103Ev();
extern void _ZN7S1346C74v104Ev();
extern void _ZN7S1346C74v105Ev();
extern void _ZN7S1346C74v106Ev();
extern void _ZN7S1346C74v107Ev();
extern void _ZN7S1346C74v108Ev();
static  VTBL_ENTRY vtc_S1346C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1346C2[0]),
  (VTBL_ENTRY)&_ZN7S1346C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1346C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v78Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v79Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v80Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v81Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v82Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v83Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v125Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v126Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v127Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v128Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v129Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v130Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v131Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v132Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v144Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v145Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v146Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v147Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v148Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v149Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v150Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v151Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v152Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v153Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v154Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v155Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v156Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v157Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v158Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v159Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1346C2[0]),
  (VTBL_ENTRY)&_ZN7S1346C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v85Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v86Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v87Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v88Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v89Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v90Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v91Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v92Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v93Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v94Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v95Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v96Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v97Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v98Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v99Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1346C2[0]),
  (VTBL_ENTRY)&_ZN7S1346C74v100Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v101Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v102Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v103Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v104Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v105Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v106Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v107Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v108Ev,
};
extern VTBL_ENTRY _ZTI7S1346C2[];
extern  VTBL_ENTRY _ZTV7S1346C2[];
Class_Descriptor cd_S1346C2 = {  "S1346C2", // class name
  bases_S1346C2, 4,
  &(vtc_S1346C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,108), // object size
  NSPAIRA(_ZTI7S1346C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1346C2),148, //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  S1346C1  : S1346C2 {
  ::S79C44 s1346c1f0;
  unsigned int s1346c1f1:1;
  unsigned int s1346c1f2:1;
  virtual  ~S1346C1(); // _ZN7S1346C1D1Ev
  virtual void  v1(); // _ZN7S1346C12v1Ev
  virtual void  v2(); // _ZN7S1346C12v2Ev
  virtual void  v3(); // _ZN7S1346C12v3Ev
  virtual void  v4(); // _ZN7S1346C12v4Ev
  virtual void  v5(); // _ZN7S1346C12v5Ev
  virtual void  v6(); // _ZN7S1346C12v6Ev
  virtual void  v7(); // _ZN7S1346C12v7Ev
  virtual void  v8(); // _ZN7S1346C12v8Ev
  virtual void  v9(); // _ZN7S1346C12v9Ev
  virtual void  v10(); // _ZN7S1346C13v10Ev
  virtual void  v11(); // _ZN7S1346C13v11Ev
  virtual void  v12(); // _ZN7S1346C13v12Ev
  virtual void  v13(); // _ZN7S1346C13v13Ev
  virtual void  v14(); // _ZN7S1346C13v14Ev
  virtual void  v15(); // _ZN7S1346C13v15Ev
  virtual void  v16(); // _ZN7S1346C13v16Ev
  virtual void  v17(); // _ZN7S1346C13v17Ev
  virtual void  v18(); // _ZN7S1346C13v18Ev
  virtual void  v19(); // _ZN7S1346C13v19Ev
  S1346C1(); // tgen
};
//SIG(1 S1346C1) C1{ BC2{ BC3{ BC4{ vd 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 v79 v80 v81 v82 v83 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} BC6{ v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99} BC7{ v100 v101 v102 v103 v104 v105 v106 v107 v108} vd v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 Fp FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1} vd v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 FC12{ m FC13{ BC14{ BC11}} Fc} Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC13 Fi:1 Fi:1}


 S1346C1 ::~S1346C1(){ note_dtor("S1346C1", this);}
void  S1346C1 ::v1(){vfunc_called(this, "_ZN7S1346C12v1Ev");}
void  S1346C1 ::v2(){vfunc_called(this, "_ZN7S1346C12v2Ev");}
void  S1346C1 ::v3(){vfunc_called(this, "_ZN7S1346C12v3Ev");}
void  S1346C1 ::v4(){vfunc_called(this, "_ZN7S1346C12v4Ev");}
void  S1346C1 ::v5(){vfunc_called(this, "_ZN7S1346C12v5Ev");}
void  S1346C1 ::v6(){vfunc_called(this, "_ZN7S1346C12v6Ev");}
void  S1346C1 ::v7(){vfunc_called(this, "_ZN7S1346C12v7Ev");}
void  S1346C1 ::v8(){vfunc_called(this, "_ZN7S1346C12v8Ev");}
void  S1346C1 ::v9(){vfunc_called(this, "_ZN7S1346C12v9Ev");}
void  S1346C1 ::v10(){vfunc_called(this, "_ZN7S1346C13v10Ev");}
void  S1346C1 ::v11(){vfunc_called(this, "_ZN7S1346C13v11Ev");}
void  S1346C1 ::v12(){vfunc_called(this, "_ZN7S1346C13v12Ev");}
void  S1346C1 ::v13(){vfunc_called(this, "_ZN7S1346C13v13Ev");}
void  S1346C1 ::v14(){vfunc_called(this, "_ZN7S1346C13v14Ev");}
void  S1346C1 ::v15(){vfunc_called(this, "_ZN7S1346C13v15Ev");}
void  S1346C1 ::v16(){vfunc_called(this, "_ZN7S1346C13v16Ev");}
void  S1346C1 ::v17(){vfunc_called(this, "_ZN7S1346C13v17Ev");}
void  S1346C1 ::v18(){vfunc_called(this, "_ZN7S1346C13v18Ev");}
void  S1346C1 ::v19(){vfunc_called(this, "_ZN7S1346C13v19Ev");}
S1346C1 ::S1346C1(){ note_ctor("S1346C1", this);} // tgen

static void Test_S1346C1()
{
  extern Class_Descriptor cd_S1346C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,32)];
    init_test(&cd_S1346C1, buf);
    S1346C1 *dp, &lv = *(dp=new (buf) S1346C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,124), "sizeof(S1346C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1346C1)");
    check_base_class_offset(lv, (S1346C4*)(S1346C3*)(S1346C2*), 0, "S1346C1");
    check_base_class_offset(lv, (S1346C6*)(S1346C3*)(S1346C2*), ABISELECT(96,60), "S1346C1");
    check_base_class_offset(lv, (S1346C7*)(S1346C3*)(S1346C2*), ABISELECT(104,64), "S1346C1");
    check_base_class_offset(lv, (S1346C3*)(S1346C2*), 0, "S1346C1");
    check_base_class_offset(lv, (S1346C2*), 0, "S1346C1");
    check_field_offset(lv, s1346c1f0, ABISELECT(176,108), "S1346C1.s1346c1f0");
    set_bf_and_test(lv, s1346c1f1, ABISELECT(192,120), 0, 1, 1, "S1346C1");
    set_bf_and_test(lv, s1346c1f2, ABISELECT(192,120), 1, 1, 1, "S1346C1");
    test_class_info(&lv, &cd_S1346C1);
    dp->~S1346C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1346C1(Test_S1346C1, "S1346C1", ABISELECT(200,124));

#else // __cplusplus

extern void _ZN7S1346C1C1Ev();
extern void _ZN7S1346C1D1Ev();
Name_Map name_map_S1346C1[] = {
  NSPAIR(_ZN7S1346C1C1Ev),
  NSPAIR(_ZN7S1346C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1346C4;
extern VTBL_ENTRY _ZTI7S1346C4[];
extern  VTBL_ENTRY _ZTV7S1346C4[];
extern Class_Descriptor cd_S1346C6;
extern VTBL_ENTRY _ZTI7S1346C6[];
extern  VTBL_ENTRY _ZTV7S1346C6[];
extern Class_Descriptor cd_S1346C7;
extern VTBL_ENTRY _ZTI7S1346C7[];
extern  VTBL_ENTRY _ZTV7S1346C7[];
extern Class_Descriptor cd_S1346C3;
extern VTBL_ENTRY _ZTI7S1346C3[];
extern  VTBL_ENTRY _ZTV7S1346C3[];
extern Class_Descriptor cd_S1346C2;
extern VTBL_ENTRY _ZTI7S1346C2[];
extern  VTBL_ENTRY _ZTV7S1346C2[];
static Base_Class bases_S1346C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1346C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1346C6,    ABISELECT(96,60), //bcp->offset
    138, //bcp->virtual_function_table_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_S1346C7,    ABISELECT(104,64), //bcp->offset
    156, //bcp->virtual_function_table_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_S1346C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1346C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1346C1[];
extern void _ZN7S1346C1D1Ev();
extern void _ZN7S1346C1D0Ev();
extern void _ZN7S1346C43v20Ev();
extern void _ZN7S1346C43v21Ev();
extern void _ZN7S1346C43v22Ev();
extern void _ZN7S1346C43v23Ev();
extern void _ZN7S1346C43v24Ev();
extern void _ZN7S1346C43v25Ev();
extern void _ZN7S1346C43v26Ev();
extern void _ZN7S1346C43v27Ev();
extern void _ZN7S1346C43v28Ev();
extern void _ZN7S1346C43v29Ev();
extern void _ZN7S1346C43v30Ev();
extern void _ZN7S1346C43v31Ev();
extern void _ZN7S1346C43v32Ev();
extern void _ZN7S1346C43v33Ev();
extern void _ZN7S1346C43v34Ev();
extern void _ZN7S1346C43v35Ev();
extern void _ZN7S1346C43v36Ev();
extern void _ZN7S1346C43v37Ev();
extern void _ZN7S1346C43v38Ev();
extern void _ZN7S1346C43v39Ev();
extern void _ZN7S1346C43v40Ev();
extern void _ZN7S1346C43v41Ev();
extern void _ZN7S1346C43v42Ev();
extern void _ZN7S1346C43v43Ev();
extern void _ZN7S1346C43v44Ev();
extern void _ZN7S1346C43v45Ev();
extern void _ZN7S1346C43v46Ev();
extern void _ZN7S1346C43v47Ev();
extern void _ZN7S1346C43v48Ev();
extern void _ZN7S1346C43v49Ev();
extern void _ZN7S1346C43v50Ev();
extern void _ZN7S1346C43v51Ev();
extern void _ZN7S1346C43v52Ev();
extern void _ZN7S1346C43v53Ev();
extern void _ZN7S1346C43v54Ev();
extern void _ZN7S1346C43v55Ev();
extern void _ZN7S1346C43v56Ev();
extern void _ZN7S1346C43v57Ev();
extern void _ZN7S1346C43v58Ev();
extern void _ZN7S1346C43v59Ev();
extern void _ZN7S1346C43v60Ev();
extern void _ZN7S1346C43v61Ev();
extern void _ZN7S1346C43v62Ev();
extern void _ZN7S1346C43v63Ev();
extern void _ZN7S1346C43v64Ev();
extern void _ZN7S1346C43v65Ev();
extern void _ZN7S1346C43v66Ev();
extern void _ZN7S1346C43v67Ev();
extern void _ZN7S1346C43v68Ev();
extern void _ZN7S1346C43v69Ev();
extern void _ZN7S1346C43v70Ev();
extern void _ZN7S1346C43v71Ev();
extern void _ZN7S1346C43v72Ev();
extern void _ZN7S1346C43v73Ev();
extern void _ZN7S1346C43v74Ev();
extern void _ZN7S1346C43v75Ev();
extern void _ZN7S1346C43v76Ev();
extern void _ZN7S1346C43v77Ev();
extern void _ZN7S1346C43v78Ev();
extern void _ZN7S1346C43v79Ev();
extern void _ZN7S1346C43v80Ev();
extern void _ZN7S1346C43v81Ev();
extern void _ZN7S1346C43v82Ev();
extern void _ZN7S1346C43v83Ev();
extern void _ZN7S1346C34v109Ev();
extern void _ZN7S1346C34v110Ev();
extern void _ZN7S1346C34v111Ev();
extern void _ZN7S1346C34v112Ev();
extern void _ZN7S1346C34v113Ev();
extern void _ZN7S1346C34v114Ev();
extern void _ZN7S1346C34v115Ev();
extern void _ZN7S1346C34v116Ev();
extern void _ZN7S1346C34v117Ev();
extern void _ZN7S1346C34v118Ev();
extern void _ZN7S1346C34v119Ev();
extern void _ZN7S1346C34v120Ev();
extern void _ZN7S1346C34v121Ev();
extern void _ZN7S1346C34v122Ev();
extern void _ZN7S1346C34v123Ev();
extern void _ZN7S1346C34v124Ev();
extern void _ZN7S1346C34v125Ev();
extern void _ZN7S1346C34v126Ev();
extern void _ZN7S1346C34v127Ev();
extern void _ZN7S1346C34v128Ev();
extern void _ZN7S1346C34v129Ev();
extern void _ZN7S1346C34v130Ev();
extern void _ZN7S1346C34v131Ev();
extern void _ZN7S1346C34v132Ev();
extern void _ZN7S1346C24v133Ev();
extern void _ZN7S1346C24v134Ev();
extern void _ZN7S1346C24v135Ev();
extern void _ZN7S1346C24v136Ev();
extern void _ZN7S1346C24v137Ev();
extern void _ZN7S1346C24v138Ev();
extern void _ZN7S1346C24v139Ev();
extern void _ZN7S1346C24v140Ev();
extern void _ZN7S1346C24v141Ev();
extern void _ZN7S1346C24v142Ev();
extern void _ZN7S1346C24v143Ev();
extern void _ZN7S1346C24v144Ev();
extern void _ZN7S1346C24v145Ev();
extern void _ZN7S1346C24v146Ev();
extern void _ZN7S1346C24v147Ev();
extern void _ZN7S1346C24v148Ev();
extern void _ZN7S1346C24v149Ev();
extern void _ZN7S1346C24v150Ev();
extern void _ZN7S1346C24v151Ev();
extern void _ZN7S1346C24v152Ev();
extern void _ZN7S1346C24v153Ev();
extern void _ZN7S1346C24v154Ev();
extern void _ZN7S1346C24v155Ev();
extern void _ZN7S1346C24v156Ev();
extern void _ZN7S1346C24v157Ev();
extern void _ZN7S1346C24v158Ev();
extern void _ZN7S1346C24v159Ev();
extern void _ZN7S1346C12v1Ev();
extern void _ZN7S1346C12v2Ev();
extern void _ZN7S1346C12v3Ev();
extern void _ZN7S1346C12v4Ev();
extern void _ZN7S1346C12v5Ev();
extern void _ZN7S1346C12v6Ev();
extern void _ZN7S1346C12v7Ev();
extern void _ZN7S1346C12v8Ev();
extern void _ZN7S1346C12v9Ev();
extern void _ZN7S1346C13v10Ev();
extern void _ZN7S1346C13v11Ev();
extern void _ZN7S1346C13v12Ev();
extern void _ZN7S1346C13v13Ev();
extern void _ZN7S1346C13v14Ev();
extern void _ZN7S1346C13v15Ev();
extern void _ZN7S1346C13v16Ev();
extern void _ZN7S1346C13v17Ev();
extern void _ZN7S1346C13v18Ev();
extern void _ZN7S1346C13v19Ev();
extern void _ZN7S1346C63v84Ev();
extern void _ZN7S1346C63v85Ev();
extern void _ZN7S1346C63v86Ev();
extern void _ZN7S1346C63v87Ev();
extern void _ZN7S1346C63v88Ev();
extern void _ZN7S1346C63v89Ev();
extern void _ZN7S1346C63v90Ev();
extern void _ZN7S1346C63v91Ev();
extern void _ZN7S1346C63v92Ev();
extern void _ZN7S1346C63v93Ev();
extern void _ZN7S1346C63v94Ev();
extern void _ZN7S1346C63v95Ev();
extern void _ZN7S1346C63v96Ev();
extern void _ZN7S1346C63v97Ev();
extern void _ZN7S1346C63v98Ev();
extern void _ZN7S1346C63v99Ev();
extern void _ZN7S1346C74v100Ev();
extern void _ZN7S1346C74v101Ev();
extern void _ZN7S1346C74v102Ev();
extern void _ZN7S1346C74v103Ev();
extern void _ZN7S1346C74v104Ev();
extern void _ZN7S1346C74v105Ev();
extern void _ZN7S1346C74v106Ev();
extern void _ZN7S1346C74v107Ev();
extern void _ZN7S1346C74v108Ev();
static  VTBL_ENTRY vtc_S1346C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1346C1[0]),
  (VTBL_ENTRY)&_ZN7S1346C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1346C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v78Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v79Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v80Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v81Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v82Ev,
  (VTBL_ENTRY)&_ZN7S1346C43v83Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v125Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v126Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v127Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v128Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v129Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v130Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v131Ev,
  (VTBL_ENTRY)&_ZN7S1346C34v132Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v144Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v145Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v146Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v147Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v148Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v149Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v150Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v151Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v152Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v153Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v154Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v155Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v156Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v157Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v158Ev,
  (VTBL_ENTRY)&_ZN7S1346C24v159Ev,
  (VTBL_ENTRY)&_ZN7S1346C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1346C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1346C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1346C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1346C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1346C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1346C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1346C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1346C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1346C13v10Ev,
  (VTBL_ENTRY)&_ZN7S1346C13v11Ev,
  (VTBL_ENTRY)&_ZN7S1346C13v12Ev,
  (VTBL_ENTRY)&_ZN7S1346C13v13Ev,
  (VTBL_ENTRY)&_ZN7S1346C13v14Ev,
  (VTBL_ENTRY)&_ZN7S1346C13v15Ev,
  (VTBL_ENTRY)&_ZN7S1346C13v16Ev,
  (VTBL_ENTRY)&_ZN7S1346C13v17Ev,
  (VTBL_ENTRY)&_ZN7S1346C13v18Ev,
  (VTBL_ENTRY)&_ZN7S1346C13v19Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1346C1[0]),
  (VTBL_ENTRY)&_ZN7S1346C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v85Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v86Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v87Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v88Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v89Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v90Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v91Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v92Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v93Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v94Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v95Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v96Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v97Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v98Ev,
  (VTBL_ENTRY)&_ZN7S1346C63v99Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1346C1[0]),
  (VTBL_ENTRY)&_ZN7S1346C74v100Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v101Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v102Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v103Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v104Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v105Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v106Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v107Ev,
  (VTBL_ENTRY)&_ZN7S1346C74v108Ev,
};
extern VTBL_ENTRY _ZTI7S1346C1[];
extern  VTBL_ENTRY _ZTV7S1346C1[];
Class_Descriptor cd_S1346C1 = {  "S1346C1", // class name
  bases_S1346C1, 5,
  &(vtc_S1346C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,124), // object size
  NSPAIRA(_ZTI7S1346C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1346C1),167, //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  S1590C4  {
  int s1590c4f0;
  __tsi64 s1590c4f1;
  void *s1590c4f2[4];
  int s1590c4f3[2];
  void *s1590c4f4;
  ::S79C8_nt s1590c4f5;
  void *s1590c4f6[2];
  virtual  ~S1590C4(); // _ZN7S1590C4D1Ev
  virtual void  v9(); // _ZN7S1590C42v9Ev
  virtual void  v10(); // _ZN7S1590C43v10Ev
  virtual void  v11(); // _ZN7S1590C43v11Ev
  virtual void  v12(); // _ZN7S1590C43v12Ev
  virtual void  v13(); // _ZN7S1590C43v13Ev
  virtual void  v14(); // _ZN7S1590C43v14Ev
  virtual void  v15(); // _ZN7S1590C43v15Ev
  virtual void  v16(); // _ZN7S1590C43v16Ev
  virtual void  v17(); // _ZN7S1590C43v17Ev
  virtual void  v18(); // _ZN7S1590C43v18Ev
  virtual void  v19(); // _ZN7S1590C43v19Ev
  virtual void  v20(); // _ZN7S1590C43v20Ev
  virtual void  v21(); // _ZN7S1590C43v21Ev
  virtual void  v22(); // _ZN7S1590C43v22Ev
  virtual void  v23(); // _ZN7S1590C43v23Ev
  virtual void  v24(); // _ZN7S1590C43v24Ev
  virtual void  v25(); // _ZN7S1590C43v25Ev
  virtual void  v26(); // _ZN7S1590C43v26Ev
  virtual void  v27(); // _ZN7S1590C43v27Ev
  virtual void  v28(); // _ZN7S1590C43v28Ev
  virtual void  v29(); // _ZN7S1590C43v29Ev
  virtual void  v30(); // _ZN7S1590C43v30Ev
  virtual void  v31(); // _ZN7S1590C43v31Ev
  virtual void  v32(); // _ZN7S1590C43v32Ev
  virtual void  v33(); // _ZN7S1590C43v33Ev
  virtual void  v34(); // _ZN7S1590C43v34Ev
  virtual void  v35(); // _ZN7S1590C43v35Ev
  virtual void  v36(); // _ZN7S1590C43v36Ev
  virtual void  v37(); // _ZN7S1590C43v37Ev
  virtual void  v38(); // _ZN7S1590C43v38Ev
  virtual void  v39(); // _ZN7S1590C43v39Ev
  virtual void  v40(); // _ZN7S1590C43v40Ev
  virtual void  v41(); // _ZN7S1590C43v41Ev
  virtual void  v42(); // _ZN7S1590C43v42Ev
  virtual void  v43(); // _ZN7S1590C43v43Ev
  virtual void  v44(); // _ZN7S1590C43v44Ev
  virtual void  v45(); // _ZN7S1590C43v45Ev
  virtual void  v46(); // _ZN7S1590C43v46Ev
  virtual void  v47(); // _ZN7S1590C43v47Ev
  virtual void  v48(); // _ZN7S1590C43v48Ev
  virtual void  v49(); // _ZN7S1590C43v49Ev
  virtual void  v50(); // _ZN7S1590C43v50Ev
  virtual void  v51(); // _ZN7S1590C43v51Ev
  virtual void  v52(); // _ZN7S1590C43v52Ev
  virtual void  v53(); // _ZN7S1590C43v53Ev
  virtual void  v54(); // _ZN7S1590C43v54Ev
  virtual void  v55(); // _ZN7S1590C43v55Ev
  virtual void  v56(); // _ZN7S1590C43v56Ev
  virtual void  v57(); // _ZN7S1590C43v57Ev
  virtual void  v58(); // _ZN7S1590C43v58Ev
  virtual void  v59(); // _ZN7S1590C43v59Ev
  virtual void  v60(); // _ZN7S1590C43v60Ev
  virtual void  v61(); // _ZN7S1590C43v61Ev
  virtual void  v62(); // _ZN7S1590C43v62Ev
  virtual void  v63(); // _ZN7S1590C43v63Ev
  virtual void  v64(); // _ZN7S1590C43v64Ev
  virtual void  v65(); // _ZN7S1590C43v65Ev
  virtual void  v66(); // _ZN7S1590C43v66Ev
  virtual void  v67(); // _ZN7S1590C43v67Ev
  virtual void  v68(); // _ZN7S1590C43v68Ev
  virtual void  v69(); // _ZN7S1590C43v69Ev
  virtual void  v70(); // _ZN7S1590C43v70Ev
  virtual void  v71(); // _ZN7S1590C43v71Ev
  virtual void  v72(); // _ZN7S1590C43v72Ev
  S1590C4(); // tgen
};
//SIG(-1 S1590C4) 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]}


 S1590C4 ::~S1590C4(){ note_dtor("S1590C4", this);}
void  S1590C4 ::v9(){vfunc_called(this, "_ZN7S1590C42v9Ev");}
void  S1590C4 ::v10(){vfunc_called(this, "_ZN7S1590C43v10Ev");}
void  S1590C4 ::v11(){vfunc_called(this, "_ZN7S1590C43v11Ev");}
void  S1590C4 ::v12(){vfunc_called(this, "_ZN7S1590C43v12Ev");}
void  S1590C4 ::v13(){vfunc_called(this, "_ZN7S1590C43v13Ev");}
void  S1590C4 ::v14(){vfunc_called(this, "_ZN7S1590C43v14Ev");}
void  S1590C4 ::v15(){vfunc_called(this, "_ZN7S1590C43v15Ev");}
void  S1590C4 ::v16(){vfunc_called(this, "_ZN7S1590C43v16Ev");}
void  S1590C4 ::v17(){vfunc_called(this, "_ZN7S1590C43v17Ev");}
void  S1590C4 ::v18(){vfunc_called(this, "_ZN7S1590C43v18Ev");}
void  S1590C4 ::v19(){vfunc_called(this, "_ZN7S1590C43v19Ev");}
void  S1590C4 ::v20(){vfunc_called(this, "_ZN7S1590C43v20Ev");}
void  S1590C4 ::v21(){vfunc_called(this, "_ZN7S1590C43v21Ev");}
void  S1590C4 ::v22(){vfunc_called(this, "_ZN7S1590C43v22Ev");}
void  S1590C4 ::v23(){vfunc_called(this, "_ZN7S1590C43v23Ev");}
void  S1590C4 ::v24(){vfunc_called(this, "_ZN7S1590C43v24Ev");}
void  S1590C4 ::v25(){vfunc_called(this, "_ZN7S1590C43v25Ev");}
void  S1590C4 ::v26(){vfunc_called(this, "_ZN7S1590C43v26Ev");}
void  S1590C4 ::v27(){vfunc_called(this, "_ZN7S1590C43v27Ev");}
void  S1590C4 ::v28(){vfunc_called(this, "_ZN7S1590C43v28Ev");}
void  S1590C4 ::v29(){vfunc_called(this, "_ZN7S1590C43v29Ev");}
void  S1590C4 ::v30(){vfunc_called(this, "_ZN7S1590C43v30Ev");}
void  S1590C4 ::v31(){vfunc_called(this, "_ZN7S1590C43v31Ev");}
void  S1590C4 ::v32(){vfunc_called(this, "_ZN7S1590C43v32Ev");}
void  S1590C4 ::v33(){vfunc_called(this, "_ZN7S1590C43v33Ev");}
void  S1590C4 ::v34(){vfunc_called(this, "_ZN7S1590C43v34Ev");}
void  S1590C4 ::v35(){vfunc_called(this, "_ZN7S1590C43v35Ev");}
void  S1590C4 ::v36(){vfunc_called(this, "_ZN7S1590C43v36Ev");}
void  S1590C4 ::v37(){vfunc_called(this, "_ZN7S1590C43v37Ev");}
void  S1590C4 ::v38(){vfunc_called(this, "_ZN7S1590C43v38Ev");}
void  S1590C4 ::v39(){vfunc_called(this, "_ZN7S1590C43v39Ev");}
void  S1590C4 ::v40(){vfunc_called(this, "_ZN7S1590C43v40Ev");}
void  S1590C4 ::v41(){vfunc_called(this, "_ZN7S1590C43v41Ev");}
void  S1590C4 ::v42(){vfunc_called(this, "_ZN7S1590C43v42Ev");}
void  S1590C4 ::v43(){vfunc_called(this, "_ZN7S1590C43v43Ev");}
void  S1590C4 ::v44(){vfunc_called(this, "_ZN7S1590C43v44Ev");}
void  S1590C4 ::v45(){vfunc_called(this, "_ZN7S1590C43v45Ev");}
void  S1590C4 ::v46(){vfunc_called(this, "_ZN7S1590C43v46Ev");}
void  S1590C4 ::v47(){vfunc_called(this, "_ZN7S1590C43v47Ev");}
void  S1590C4 ::v48(){vfunc_called(this, "_ZN7S1590C43v48Ev");}
void  S1590C4 ::v49(){vfunc_called(this, "_ZN7S1590C43v49Ev");}
void  S1590C4 ::v50(){vfunc_called(this, "_ZN7S1590C43v50Ev");}
void  S1590C4 ::v51(){vfunc_called(this, "_ZN7S1590C43v51Ev");}
void  S1590C4 ::v52(){vfunc_called(this, "_ZN7S1590C43v52Ev");}
void  S1590C4 ::v53(){vfunc_called(this, "_ZN7S1590C43v53Ev");}
void  S1590C4 ::v54(){vfunc_called(this, "_ZN7S1590C43v54Ev");}
void  S1590C4 ::v55(){vfunc_called(this, "_ZN7S1590C43v55Ev");}
void  S1590C4 ::v56(){vfunc_called(this, "_ZN7S1590C43v56Ev");}
void  S1590C4 ::v57(){vfunc_called(this, "_ZN7S1590C43v57Ev");}
void  S1590C4 ::v58(){vfunc_called(this, "_ZN7S1590C43v58Ev");}
void  S1590C4 ::v59(){vfunc_called(this, "_ZN7S1590C43v59Ev");}
void  S1590C4 ::v60(){vfunc_called(this, "_ZN7S1590C43v60Ev");}
void  S1590C4 ::v61(){vfunc_called(this, "_ZN7S1590C43v61Ev");}
void  S1590C4 ::v62(){vfunc_called(this, "_ZN7S1590C43v62Ev");}
void  S1590C4 ::v63(){vfunc_called(this, "_ZN7S1590C43v63Ev");}
void  S1590C4 ::v64(){vfunc_called(this, "_ZN7S1590C43v64Ev");}
void  S1590C4 ::v65(){vfunc_called(this, "_ZN7S1590C43v65Ev");}
void  S1590C4 ::v66(){vfunc_called(this, "_ZN7S1590C43v66Ev");}
void  S1590C4 ::v67(){vfunc_called(this, "_ZN7S1590C43v67Ev");}
void  S1590C4 ::v68(){vfunc_called(this, "_ZN7S1590C43v68Ev");}
void  S1590C4 ::v69(){vfunc_called(this, "_ZN7S1590C43v69Ev");}
void  S1590C4 ::v70(){vfunc_called(this, "_ZN7S1590C43v70Ev");}
void  S1590C4 ::v71(){vfunc_called(this, "_ZN7S1590C43v71Ev");}
void  S1590C4 ::v72(){vfunc_called(this, "_ZN7S1590C43v72Ev");}
S1590C4 ::S1590C4(){ note_ctor("S1590C4", this);} // tgen

static void Test_S1590C4()
{
  extern Class_Descriptor cd_S1590C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1590C4, buf);
    S1590C4 *dp, &lv = *(dp=new (buf) S1590C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1590C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1590C4)");
    check_field_offset(lv, s1590c4f0, ABISELECT(8,4), "S1590C4.s1590c4f0");
    check_field_offset(lv, s1590c4f1, ABISELECT(16,8), "S1590C4.s1590c4f1");
    check_field_offset(lv, s1590c4f2, ABISELECT(24,16), "S1590C4.s1590c4f2");
    check_field_offset(lv, s1590c4f3, ABISELECT(56,32), "S1590C4.s1590c4f3");
    check_field_offset(lv, s1590c4f4, ABISELECT(64,40), "S1590C4.s1590c4f4");
    check_field_offset(lv, s1590c4f5, ABISELECT(72,44), "S1590C4.s1590c4f5");
    check_field_offset(lv, s1590c4f6, ABISELECT(80,52), "S1590C4.s1590c4f6");
    test_class_info(&lv, &cd_S1590C4);
    dp->~S1590C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1590C4(Test_S1590C4, "S1590C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1590C4C1Ev();
extern void _ZN7S1590C4D1Ev();
Name_Map name_map_S1590C4[] = {
  NSPAIR(_ZN7S1590C4C1Ev),
  NSPAIR(_ZN7S1590C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1590C4[];
extern void _ZN7S1590C4D1Ev();
extern void _ZN7S1590C4D0Ev();
extern void _ZN7S1590C42v9Ev();
extern void _ZN7S1590C43v10Ev();
extern void _ZN7S1590C43v11Ev();
extern void _ZN7S1590C43v12Ev();
extern void _ZN7S1590C43v13Ev();
extern void _ZN7S1590C43v14Ev();
extern void _ZN7S1590C43v15Ev();
extern void _ZN7S1590C43v16Ev();
extern void _ZN7S1590C43v17Ev();
extern void _ZN7S1590C43v18Ev();
extern void _ZN7S1590C43v19Ev();
extern void _ZN7S1590C43v20Ev();
extern void _ZN7S1590C43v21Ev();
extern void _ZN7S1590C43v22Ev();
extern void _ZN7S1590C43v23Ev();
extern void _ZN7S1590C43v24Ev();
extern void _ZN7S1590C43v25Ev();
extern void _ZN7S1590C43v26Ev();
extern void _ZN7S1590C43v27Ev();
extern void _ZN7S1590C43v28Ev();
extern void _ZN7S1590C43v29Ev();
extern void _ZN7S1590C43v30Ev();
extern void _ZN7S1590C43v31Ev();
extern void _ZN7S1590C43v32Ev();
extern void _ZN7S1590C43v33Ev();
extern void _ZN7S1590C43v34Ev();
extern void _ZN7S1590C43v35Ev();
extern void _ZN7S1590C43v36Ev();
extern void _ZN7S1590C43v37Ev();
extern void _ZN7S1590C43v38Ev();
extern void _ZN7S1590C43v39Ev();
extern void _ZN7S1590C43v40Ev();
extern void _ZN7S1590C43v41Ev();
extern void _ZN7S1590C43v42Ev();
extern void _ZN7S1590C43v43Ev();
extern void _ZN7S1590C43v44Ev();
extern void _ZN7S1590C43v45Ev();
extern void _ZN7S1590C43v46Ev();
extern void _ZN7S1590C43v47Ev();
extern void _ZN7S1590C43v48Ev();
extern void _ZN7S1590C43v49Ev();
extern void _ZN7S1590C43v50Ev();
extern void _ZN7S1590C43v51Ev();
extern void _ZN7S1590C43v52Ev();
extern void _ZN7S1590C43v53Ev();
extern void _ZN7S1590C43v54Ev();
extern void _ZN7S1590C43v55Ev();
extern void _ZN7S1590C43v56Ev();
extern void _ZN7S1590C43v57Ev();
extern void _ZN7S1590C43v58Ev();
extern void _ZN7S1590C43v59Ev();
extern void _ZN7S1590C43v60Ev();
extern void _ZN7S1590C43v61Ev();
extern void _ZN7S1590C43v62Ev();
extern void _ZN7S1590C43v63Ev();
extern void _ZN7S1590C43v64Ev();
extern void _ZN7S1590C43v65Ev();
extern void _ZN7S1590C43v66Ev();
extern void _ZN7S1590C43v67Ev();
extern void _ZN7S1590C43v68Ev();
extern void _ZN7S1590C43v69Ev();
extern void _ZN7S1590C43v70Ev();
extern void _ZN7S1590C43v71Ev();
extern void _ZN7S1590C43v72Ev();
static  VTBL_ENTRY vtc_S1590C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1590C4[0]),
  (VTBL_ENTRY)&_ZN7S1590C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1590C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1590C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v72Ev,
};
extern VTBL_ENTRY _ZTI7S1590C4[];
extern  VTBL_ENTRY _ZTV7S1590C4[];
Class_Descriptor cd_S1590C4 = {  "S1590C4", // class name
  0,0,//no base classes
  &(vtc_S1590C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1590C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1590C4),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  S1590C6  {
  virtual void  v73(); // _ZN7S1590C63v73Ev
  virtual void  v74(); // _ZN7S1590C63v74Ev
  virtual void  v75(); // _ZN7S1590C63v75Ev
  virtual void  v76(); // _ZN7S1590C63v76Ev
  virtual void  v77(); // _ZN7S1590C63v77Ev
  virtual void  v78(); // _ZN7S1590C63v78Ev
  virtual void  v79(); // _ZN7S1590C63v79Ev
  virtual void  v80(); // _ZN7S1590C63v80Ev
  virtual void  v81(); // _ZN7S1590C63v81Ev
  virtual void  v82(); // _ZN7S1590C63v82Ev
  virtual void  v83(); // _ZN7S1590C63v83Ev
  virtual void  v84(); // _ZN7S1590C63v84Ev
  virtual void  v85(); // _ZN7S1590C63v85Ev
  virtual void  v86(); // _ZN7S1590C63v86Ev
  virtual void  v87(); // _ZN7S1590C63v87Ev
  virtual void  v88(); // _ZN7S1590C63v88Ev
  ~S1590C6(); // tgen
  S1590C6(); // tgen
};
//SIG(-1 S1590C6) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16}


void  S1590C6 ::v73(){vfunc_called(this, "_ZN7S1590C63v73Ev");}
void  S1590C6 ::v74(){vfunc_called(this, "_ZN7S1590C63v74Ev");}
void  S1590C6 ::v75(){vfunc_called(this, "_ZN7S1590C63v75Ev");}
void  S1590C6 ::v76(){vfunc_called(this, "_ZN7S1590C63v76Ev");}
void  S1590C6 ::v77(){vfunc_called(this, "_ZN7S1590C63v77Ev");}
void  S1590C6 ::v78(){vfunc_called(this, "_ZN7S1590C63v78Ev");}
void  S1590C6 ::v79(){vfunc_called(this, "_ZN7S1590C63v79Ev");}
void  S1590C6 ::v80(){vfunc_called(this, "_ZN7S1590C63v80Ev");}
void  S1590C6 ::v81(){vfunc_called(this, "_ZN7S1590C63v81Ev");}
void  S1590C6 ::v82(){vfunc_called(this, "_ZN7S1590C63v82Ev");}
void  S1590C6 ::v83(){vfunc_called(this, "_ZN7S1590C63v83Ev");}
void  S1590C6 ::v84(){vfunc_called(this, "_ZN7S1590C63v84Ev");}
void  S1590C6 ::v85(){vfunc_called(this, "_ZN7S1590C63v85Ev");}
void  S1590C6 ::v86(){vfunc_called(this, "_ZN7S1590C63v86Ev");}
void  S1590C6 ::v87(){vfunc_called(this, "_ZN7S1590C63v87Ev");}
void  S1590C6 ::v88(){vfunc_called(this, "_ZN7S1590C63v88Ev");}
S1590C6 ::~S1590C6(){ note_dtor("S1590C6", this);} // tgen
S1590C6 ::S1590C6(){ note_ctor("S1590C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1590C6C1Ev();
extern void _ZN7S1590C6D1Ev();
Name_Map name_map_S1590C6[] = {
  NSPAIR(_ZN7S1590C6C1Ev),
  NSPAIR(_ZN7S1590C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1590C6[];
extern void _ZN7S1590C63v73Ev();
extern void _ZN7S1590C63v74Ev();
extern void _ZN7S1590C63v75Ev();
extern void _ZN7S1590C63v76Ev();
extern void _ZN7S1590C63v77Ev();
extern void _ZN7S1590C63v78Ev();
extern void _ZN7S1590C63v79Ev();
extern void _ZN7S1590C63v80Ev();
extern void _ZN7S1590C63v81Ev();
extern void _ZN7S1590C63v82Ev();
extern void _ZN7S1590C63v83Ev();
extern void _ZN7S1590C63v84Ev();
extern void _ZN7S1590C63v85Ev();
extern void _ZN7S1590C63v86Ev();
extern void _ZN7S1590C63v87Ev();
extern void _ZN7S1590C63v88Ev();
static  VTBL_ENTRY vtc_S1590C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1590C6[0]),
  (VTBL_ENTRY)&_ZN7S1590C63v73Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v74Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v75Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v76Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v77Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v78Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v79Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v80Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v81Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v82Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v83Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v85Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v86Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v87Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v88Ev,
};
extern VTBL_ENTRY _ZTI7S1590C6[];
extern  VTBL_ENTRY _ZTV7S1590C6[];
Class_Descriptor cd_S1590C6 = {  "S1590C6", // class name
  0,0,//no base classes
  &(vtc_S1590C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1590C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1590C6),18, //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  S1590C7  {
  virtual void  v89(); // _ZN7S1590C73v89Ev
  virtual void  v90(); // _ZN7S1590C73v90Ev
  virtual void  v91(); // _ZN7S1590C73v91Ev
  virtual void  v92(); // _ZN7S1590C73v92Ev
  virtual void  v93(); // _ZN7S1590C73v93Ev
  virtual void  v94(); // _ZN7S1590C73v94Ev
  virtual void  v95(); // _ZN7S1590C73v95Ev
  virtual void  v96(); // _ZN7S1590C73v96Ev
  virtual void  v97(); // _ZN7S1590C73v97Ev
  ~S1590C7(); // tgen
  S1590C7(); // tgen
};
//SIG(-1 S1590C7) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S1590C7 ::v89(){vfunc_called(this, "_ZN7S1590C73v89Ev");}
void  S1590C7 ::v90(){vfunc_called(this, "_ZN7S1590C73v90Ev");}
void  S1590C7 ::v91(){vfunc_called(this, "_ZN7S1590C73v91Ev");}
void  S1590C7 ::v92(){vfunc_called(this, "_ZN7S1590C73v92Ev");}
void  S1590C7 ::v93(){vfunc_called(this, "_ZN7S1590C73v93Ev");}
void  S1590C7 ::v94(){vfunc_called(this, "_ZN7S1590C73v94Ev");}
void  S1590C7 ::v95(){vfunc_called(this, "_ZN7S1590C73v95Ev");}
void  S1590C7 ::v96(){vfunc_called(this, "_ZN7S1590C73v96Ev");}
void  S1590C7 ::v97(){vfunc_called(this, "_ZN7S1590C73v97Ev");}
S1590C7 ::~S1590C7(){ note_dtor("S1590C7", this);} // tgen
S1590C7 ::S1590C7(){ note_ctor("S1590C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1590C7C1Ev();
extern void _ZN7S1590C7D1Ev();
Name_Map name_map_S1590C7[] = {
  NSPAIR(_ZN7S1590C7C1Ev),
  NSPAIR(_ZN7S1590C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1590C7[];
extern void _ZN7S1590C73v89Ev();
extern void _ZN7S1590C73v90Ev();
extern void _ZN7S1590C73v91Ev();
extern void _ZN7S1590C73v92Ev();
extern void _ZN7S1590C73v93Ev();
extern void _ZN7S1590C73v94Ev();
extern void _ZN7S1590C73v95Ev();
extern void _ZN7S1590C73v96Ev();
extern void _ZN7S1590C73v97Ev();
static  VTBL_ENTRY vtc_S1590C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1590C7[0]),
  (VTBL_ENTRY)&_ZN7S1590C73v89Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v90Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v91Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v92Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v93Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v94Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v95Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v96Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v97Ev,
};
extern VTBL_ENTRY _ZTI7S1590C7[];
extern  VTBL_ENTRY _ZTV7S1590C7[];
Class_Descriptor cd_S1590C7 = {  "S1590C7", // class name
  0,0,//no base classes
  &(vtc_S1590C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1590C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1590C7),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  S1590C3  : S1590C4 , S1590C6 , S1590C7 {
  void *s1590c3f0;
  ::S79C39_nt s1590c3f1;
  unsigned int s1590c3f2:1;
  unsigned int s1590c3f3:1;
  unsigned int s1590c3f4:1;
  unsigned int s1590c3f5:1;
  virtual  ~S1590C3(); // _ZN7S1590C3D1Ev
  virtual void  v98(); // _ZN7S1590C33v98Ev
  virtual void  v99(); // _ZN7S1590C33v99Ev
  virtual void  v100(); // _ZN7S1590C34v100Ev
  virtual void  v101(); // _ZN7S1590C34v101Ev
  virtual void  v102(); // _ZN7S1590C34v102Ev
  virtual void  v103(); // _ZN7S1590C34v103Ev
  virtual void  v104(); // _ZN7S1590C34v104Ev
  virtual void  v105(); // _ZN7S1590C34v105Ev
  virtual void  v106(); // _ZN7S1590C34v106Ev
  virtual void  v107(); // _ZN7S1590C34v107Ev
  virtual void  v108(); // _ZN7S1590C34v108Ev
  virtual void  v109(); // _ZN7S1590C34v109Ev
  virtual void  v110(); // _ZN7S1590C34v110Ev
  virtual void  v111(); // _ZN7S1590C34v111Ev
  virtual void  v112(); // _ZN7S1590C34v112Ev
  virtual void  v113(); // _ZN7S1590C34v113Ev
  virtual void  v114(); // _ZN7S1590C34v114Ev
  virtual void  v115(); // _ZN7S1590C34v115Ev
  virtual void  v116(); // _ZN7S1590C34v116Ev
  virtual void  v117(); // _ZN7S1590C34v117Ev
  virtual void  v118(); // _ZN7S1590C34v118Ev
  virtual void  v119(); // _ZN7S1590C34v119Ev
  virtual void  v120(); // _ZN7S1590C34v120Ev
  virtual void  v121(); // _ZN7S1590C34v121Ev
  S1590C3(); // tgen
};
//SIG(-1 S1590C3) C1{ BC2{ vd 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 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} BC4{ v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104} BC5{ v105 v106 v107 v108 v109 v110 v111 v112 v113} 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 Fp FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1}


 S1590C3 ::~S1590C3(){ note_dtor("S1590C3", this);}
void  S1590C3 ::v98(){vfunc_called(this, "_ZN7S1590C33v98Ev");}
void  S1590C3 ::v99(){vfunc_called(this, "_ZN7S1590C33v99Ev");}
void  S1590C3 ::v100(){vfunc_called(this, "_ZN7S1590C34v100Ev");}
void  S1590C3 ::v101(){vfunc_called(this, "_ZN7S1590C34v101Ev");}
void  S1590C3 ::v102(){vfunc_called(this, "_ZN7S1590C34v102Ev");}
void  S1590C3 ::v103(){vfunc_called(this, "_ZN7S1590C34v103Ev");}
void  S1590C3 ::v104(){vfunc_called(this, "_ZN7S1590C34v104Ev");}
void  S1590C3 ::v105(){vfunc_called(this, "_ZN7S1590C34v105Ev");}
void  S1590C3 ::v106(){vfunc_called(this, "_ZN7S1590C34v106Ev");}
void  S1590C3 ::v107(){vfunc_called(this, "_ZN7S1590C34v107Ev");}
void  S1590C3 ::v108(){vfunc_called(this, "_ZN7S1590C34v108Ev");}
void  S1590C3 ::v109(){vfunc_called(this, "_ZN7S1590C34v109Ev");}
void  S1590C3 ::v110(){vfunc_called(this, "_ZN7S1590C34v110Ev");}
void  S1590C3 ::v111(){vfunc_called(this, "_ZN7S1590C34v111Ev");}
void  S1590C3 ::v112(){vfunc_called(this, "_ZN7S1590C34v112Ev");}
void  S1590C3 ::v113(){vfunc_called(this, "_ZN7S1590C34v113Ev");}
void  S1590C3 ::v114(){vfunc_called(this, "_ZN7S1590C34v114Ev");}
void  S1590C3 ::v115(){vfunc_called(this, "_ZN7S1590C34v115Ev");}
void  S1590C3 ::v116(){vfunc_called(this, "_ZN7S1590C34v116Ev");}
void  S1590C3 ::v117(){vfunc_called(this, "_ZN7S1590C34v117Ev");}
void  S1590C3 ::v118(){vfunc_called(this, "_ZN7S1590C34v118Ev");}
void  S1590C3 ::v119(){vfunc_called(this, "_ZN7S1590C34v119Ev");}
void  S1590C3 ::v120(){vfunc_called(this, "_ZN7S1590C34v120Ev");}
void  S1590C3 ::v121(){vfunc_called(this, "_ZN7S1590C34v121Ev");}
S1590C3 ::S1590C3(){ note_ctor("S1590C3", this);} // tgen

static void Test_S1590C3()
{
  extern Class_Descriptor cd_S1590C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,23)];
    init_test(&cd_S1590C3, buf);
    S1590C3 *dp, &lv = *(dp=new (buf) S1590C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S1590C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1590C3)");
    check_base_class_offset(lv, (S1590C4*), 0, "S1590C3");
    check_base_class_offset(lv, (S1590C6*), ABISELECT(96,60), "S1590C3");
    check_base_class_offset(lv, (S1590C7*), ABISELECT(104,64), "S1590C3");
    check_field_offset(lv, s1590c3f0, ABISELECT(112,68), "S1590C3.s1590c3f0");
    check_field_offset(lv, s1590c3f1, ABISELECT(120,72), "S1590C3.s1590c3f1");
    set_bf_and_test(lv, s1590c3f2, ABISELECT(136,84), 0, 1, 1, "S1590C3");
    set_bf_and_test(lv, s1590c3f3, ABISELECT(136,84), 1, 1, 1, "S1590C3");
    set_bf_and_test(lv, s1590c3f4, ABISELECT(136,84), 2, 1, 1, "S1590C3");
    set_bf_and_test(lv, s1590c3f5, ABISELECT(136,84), 3, 1, 1, "S1590C3");
    test_class_info(&lv, &cd_S1590C3);
    dp->~S1590C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1590C3(Test_S1590C3, "S1590C3", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN7S1590C3C1Ev();
extern void _ZN7S1590C3D1Ev();
Name_Map name_map_S1590C3[] = {
  NSPAIR(_ZN7S1590C3C1Ev),
  NSPAIR(_ZN7S1590C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1590C4;
extern VTBL_ENTRY _ZTI7S1590C4[];
extern  VTBL_ENTRY _ZTV7S1590C4[];
extern Class_Descriptor cd_S1590C6;
extern VTBL_ENTRY _ZTI7S1590C6[];
extern  VTBL_ENTRY _ZTV7S1590C6[];
extern Class_Descriptor cd_S1590C7;
extern VTBL_ENTRY _ZTI7S1590C7[];
extern  VTBL_ENTRY _ZTV7S1590C7[];
static Base_Class bases_S1590C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1590C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1590C6,    ABISELECT(96,60), //bcp->offset
    92, //bcp->virtual_function_table_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_S1590C7,    ABISELECT(104,64), //bcp->offset
    110, //bcp->virtual_function_table_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 _ZTI7S1590C3[];
extern void _ZN7S1590C3D1Ev();
extern void _ZN7S1590C3D0Ev();
extern void _ZN7S1590C42v9Ev();
extern void _ZN7S1590C43v10Ev();
extern void _ZN7S1590C43v11Ev();
extern void _ZN7S1590C43v12Ev();
extern void _ZN7S1590C43v13Ev();
extern void _ZN7S1590C43v14Ev();
extern void _ZN7S1590C43v15Ev();
extern void _ZN7S1590C43v16Ev();
extern void _ZN7S1590C43v17Ev();
extern void _ZN7S1590C43v18Ev();
extern void _ZN7S1590C43v19Ev();
extern void _ZN7S1590C43v20Ev();
extern void _ZN7S1590C43v21Ev();
extern void _ZN7S1590C43v22Ev();
extern void _ZN7S1590C43v23Ev();
extern void _ZN7S1590C43v24Ev();
extern void _ZN7S1590C43v25Ev();
extern void _ZN7S1590C43v26Ev();
extern void _ZN7S1590C43v27Ev();
extern void _ZN7S1590C43v28Ev();
extern void _ZN7S1590C43v29Ev();
extern void _ZN7S1590C43v30Ev();
extern void _ZN7S1590C43v31Ev();
extern void _ZN7S1590C43v32Ev();
extern void _ZN7S1590C43v33Ev();
extern void _ZN7S1590C43v34Ev();
extern void _ZN7S1590C43v35Ev();
extern void _ZN7S1590C43v36Ev();
extern void _ZN7S1590C43v37Ev();
extern void _ZN7S1590C43v38Ev();
extern void _ZN7S1590C43v39Ev();
extern void _ZN7S1590C43v40Ev();
extern void _ZN7S1590C43v41Ev();
extern void _ZN7S1590C43v42Ev();
extern void _ZN7S1590C43v43Ev();
extern void _ZN7S1590C43v44Ev();
extern void _ZN7S1590C43v45Ev();
extern void _ZN7S1590C43v46Ev();
extern void _ZN7S1590C43v47Ev();
extern void _ZN7S1590C43v48Ev();
extern void _ZN7S1590C43v49Ev();
extern void _ZN7S1590C43v50Ev();
extern void _ZN7S1590C43v51Ev();
extern void _ZN7S1590C43v52Ev();
extern void _ZN7S1590C43v53Ev();
extern void _ZN7S1590C43v54Ev();
extern void _ZN7S1590C43v55Ev();
extern void _ZN7S1590C43v56Ev();
extern void _ZN7S1590C43v57Ev();
extern void _ZN7S1590C43v58Ev();
extern void _ZN7S1590C43v59Ev();
extern void _ZN7S1590C43v60Ev();
extern void _ZN7S1590C43v61Ev();
extern void _ZN7S1590C43v62Ev();
extern void _ZN7S1590C43v63Ev();
extern void _ZN7S1590C43v64Ev();
extern void _ZN7S1590C43v65Ev();
extern void _ZN7S1590C43v66Ev();
extern void _ZN7S1590C43v67Ev();
extern void _ZN7S1590C43v68Ev();
extern void _ZN7S1590C43v69Ev();
extern void _ZN7S1590C43v70Ev();
extern void _ZN7S1590C43v71Ev();
extern void _ZN7S1590C43v72Ev();
extern void _ZN7S1590C33v98Ev();
extern void _ZN7S1590C33v99Ev();
extern void _ZN7S1590C34v100Ev();
extern void _ZN7S1590C34v101Ev();
extern void _ZN7S1590C34v102Ev();
extern void _ZN7S1590C34v103Ev();
extern void _ZN7S1590C34v104Ev();
extern void _ZN7S1590C34v105Ev();
extern void _ZN7S1590C34v106Ev();
extern void _ZN7S1590C34v107Ev();
extern void _ZN7S1590C34v108Ev();
extern void _ZN7S1590C34v109Ev();
extern void _ZN7S1590C34v110Ev();
extern void _ZN7S1590C34v111Ev();
extern void _ZN7S1590C34v112Ev();
extern void _ZN7S1590C34v113Ev();
extern void _ZN7S1590C34v114Ev();
extern void _ZN7S1590C34v115Ev();
extern void _ZN7S1590C34v116Ev();
extern void _ZN7S1590C34v117Ev();
extern void _ZN7S1590C34v118Ev();
extern void _ZN7S1590C34v119Ev();
extern void _ZN7S1590C34v120Ev();
extern void _ZN7S1590C34v121Ev();
extern void _ZN7S1590C63v73Ev();
extern void _ZN7S1590C63v74Ev();
extern void _ZN7S1590C63v75Ev();
extern void _ZN7S1590C63v76Ev();
extern void _ZN7S1590C63v77Ev();
extern void _ZN7S1590C63v78Ev();
extern void _ZN7S1590C63v79Ev();
extern void _ZN7S1590C63v80Ev();
extern void _ZN7S1590C63v81Ev();
extern void _ZN7S1590C63v82Ev();
extern void _ZN7S1590C63v83Ev();
extern void _ZN7S1590C63v84Ev();
extern void _ZN7S1590C63v85Ev();
extern void _ZN7S1590C63v86Ev();
extern void _ZN7S1590C63v87Ev();
extern void _ZN7S1590C63v88Ev();
extern void _ZN7S1590C73v89Ev();
extern void _ZN7S1590C73v90Ev();
extern void _ZN7S1590C73v91Ev();
extern void _ZN7S1590C73v92Ev();
extern void _ZN7S1590C73v93Ev();
extern void _ZN7S1590C73v94Ev();
extern void _ZN7S1590C73v95Ev();
extern void _ZN7S1590C73v96Ev();
extern void _ZN7S1590C73v97Ev();
static  VTBL_ENTRY vtc_S1590C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1590C3[0]),
  (VTBL_ENTRY)&_ZN7S1590C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1590C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1590C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1590C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1590C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v121Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1590C3[0]),
  (VTBL_ENTRY)&_ZN7S1590C63v73Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v74Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v75Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v76Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v77Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v78Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v79Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v80Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v81Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v82Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v83Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v85Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v86Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v87Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v88Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1590C3[0]),
  (VTBL_ENTRY)&_ZN7S1590C73v89Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v90Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v91Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v92Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v93Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v94Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v95Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v96Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v97Ev,
};
extern VTBL_ENTRY _ZTI7S1590C3[];
extern  VTBL_ENTRY _ZTV7S1590C3[];
Class_Descriptor cd_S1590C3 = {  "S1590C3", // class name
  bases_S1590C3, 3,
  &(vtc_S1590C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI7S1590C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1590C3),121, //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  S1590C2  : S1590C3 {
  ::S3262C11_nt s1590c2f0;
  int s1590c2f1;
  virtual  ~S1590C2(); // _ZN7S1590C2D1Ev
  virtual void  v122(); // _ZN7S1590C24v122Ev
  virtual void  v123(); // _ZN7S1590C24v123Ev
  virtual void  v124(); // _ZN7S1590C24v124Ev
  virtual void  v125(); // _ZN7S1590C24v125Ev
  virtual void  v126(); // _ZN7S1590C24v126Ev
  virtual void  v127(); // _ZN7S1590C24v127Ev
  virtual void  v128(); // _ZN7S1590C24v128Ev
  virtual void  v129(); // _ZN7S1590C24v129Ev
  virtual void  v130(); // _ZN7S1590C24v130Ev
  virtual void  v131(); // _ZN7S1590C24v131Ev
  virtual void  v132(); // _ZN7S1590C24v132Ev
  virtual void  v133(); // _ZN7S1590C24v133Ev
  virtual void  v134(); // _ZN7S1590C24v134Ev
  virtual void  v135(); // _ZN7S1590C24v135Ev
  virtual void  v136(); // _ZN7S1590C24v136Ev
  virtual void  v137(); // _ZN7S1590C24v137Ev
  virtual void  v138(); // _ZN7S1590C24v138Ev
  virtual void  v139(); // _ZN7S1590C24v139Ev
  virtual void  v140(); // _ZN7S1590C24v140Ev
  virtual void  v141(); // _ZN7S1590C24v141Ev
  virtual void  v142(); // _ZN7S1590C24v142Ev
  virtual void  v143(); // _ZN7S1590C24v143Ev
  virtual void  v144(); // _ZN7S1590C24v144Ev
  virtual void  v145(); // _ZN7S1590C24v145Ev
  virtual void  v146(); // _ZN7S1590C24v146Ev
  virtual void  v147(); // _ZN7S1590C24v147Ev
  virtual void  v148(); // _ZN7S1590C24v148Ev
  S1590C2(); // tgen
};
//SIG(-1 S1590C2) C1{ BC2{ BC3{ vd 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 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} BC5{ v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107} BC6{ v108 v109 v110 v111 v112 v113 v114 v115 v116} vd v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 Fp FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1} 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 FC11{ m FC12{ BC13{ BC10}} Fc} Fi}


 S1590C2 ::~S1590C2(){ note_dtor("S1590C2", this);}
void  S1590C2 ::v122(){vfunc_called(this, "_ZN7S1590C24v122Ev");}
void  S1590C2 ::v123(){vfunc_called(this, "_ZN7S1590C24v123Ev");}
void  S1590C2 ::v124(){vfunc_called(this, "_ZN7S1590C24v124Ev");}
void  S1590C2 ::v125(){vfunc_called(this, "_ZN7S1590C24v125Ev");}
void  S1590C2 ::v126(){vfunc_called(this, "_ZN7S1590C24v126Ev");}
void  S1590C2 ::v127(){vfunc_called(this, "_ZN7S1590C24v127Ev");}
void  S1590C2 ::v128(){vfunc_called(this, "_ZN7S1590C24v128Ev");}
void  S1590C2 ::v129(){vfunc_called(this, "_ZN7S1590C24v129Ev");}
void  S1590C2 ::v130(){vfunc_called(this, "_ZN7S1590C24v130Ev");}
void  S1590C2 ::v131(){vfunc_called(this, "_ZN7S1590C24v131Ev");}
void  S1590C2 ::v132(){vfunc_called(this, "_ZN7S1590C24v132Ev");}
void  S1590C2 ::v133(){vfunc_called(this, "_ZN7S1590C24v133Ev");}
void  S1590C2 ::v134(){vfunc_called(this, "_ZN7S1590C24v134Ev");}
void  S1590C2 ::v135(){vfunc_called(this, "_ZN7S1590C24v135Ev");}
void  S1590C2 ::v136(){vfunc_called(this, "_ZN7S1590C24v136Ev");}
void  S1590C2 ::v137(){vfunc_called(this, "_ZN7S1590C24v137Ev");}
void  S1590C2 ::v138(){vfunc_called(this, "_ZN7S1590C24v138Ev");}
void  S1590C2 ::v139(){vfunc_called(this, "_ZN7S1590C24v139Ev");}
void  S1590C2 ::v140(){vfunc_called(this, "_ZN7S1590C24v140Ev");}
void  S1590C2 ::v141(){vfunc_called(this, "_ZN7S1590C24v141Ev");}
void  S1590C2 ::v142(){vfunc_called(this, "_ZN7S1590C24v142Ev");}
void  S1590C2 ::v143(){vfunc_called(this, "_ZN7S1590C24v143Ev");}
void  S1590C2 ::v144(){vfunc_called(this, "_ZN7S1590C24v144Ev");}
void  S1590C2 ::v145(){vfunc_called(this, "_ZN7S1590C24v145Ev");}
void  S1590C2 ::v146(){vfunc_called(this, "_ZN7S1590C24v146Ev");}
void  S1590C2 ::v147(){vfunc_called(this, "_ZN7S1590C24v147Ev");}
void  S1590C2 ::v148(){vfunc_called(this, "_ZN7S1590C24v148Ev");}
S1590C2 ::S1590C2(){ note_ctor("S1590C2", this);} // tgen

static void Test_S1590C2()
{
  extern Class_Descriptor cd_S1590C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,28)];
    init_test(&cd_S1590C2, buf);
    S1590C2 *dp, &lv = *(dp=new (buf) S1590C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,108), "sizeof(S1590C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1590C2)");
    check_base_class_offset(lv, (S1590C4*)(S1590C3*), 0, "S1590C2");
    check_base_class_offset(lv, (S1590C6*)(S1590C3*), ABISELECT(96,60), "S1590C2");
    check_base_class_offset(lv, (S1590C7*)(S1590C3*), ABISELECT(104,64), "S1590C2");
    check_base_class_offset(lv, (S1590C3*), 0, "S1590C2");
    check_field_offset(lv, s1590c2f0, ABISELECT(144,88), "S1590C2.s1590c2f0");
    check_field_offset(lv, s1590c2f1, ABISELECT(168,104), "S1590C2.s1590c2f1");
    test_class_info(&lv, &cd_S1590C2);
    dp->~S1590C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1590C2(Test_S1590C2, "S1590C2", ABISELECT(176,108));

#else // __cplusplus

extern void _ZN7S1590C2C1Ev();
extern void _ZN7S1590C2D1Ev();
Name_Map name_map_S1590C2[] = {
  NSPAIR(_ZN7S1590C2C1Ev),
  NSPAIR(_ZN7S1590C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1590C4;
extern VTBL_ENTRY _ZTI7S1590C4[];
extern  VTBL_ENTRY _ZTV7S1590C4[];
extern Class_Descriptor cd_S1590C6;
extern VTBL_ENTRY _ZTI7S1590C6[];
extern  VTBL_ENTRY _ZTV7S1590C6[];
extern Class_Descriptor cd_S1590C7;
extern VTBL_ENTRY _ZTI7S1590C7[];
extern  VTBL_ENTRY _ZTV7S1590C7[];
extern Class_Descriptor cd_S1590C3;
extern VTBL_ENTRY _ZTI7S1590C3[];
extern  VTBL_ENTRY _ZTV7S1590C3[];
static Base_Class bases_S1590C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1590C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1590C6,    ABISELECT(96,60), //bcp->offset
    119, //bcp->virtual_function_table_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_S1590C7,    ABISELECT(104,64), //bcp->offset
    137, //bcp->virtual_function_table_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_S1590C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1590C2[];
extern void _ZN7S1590C2D1Ev();
extern void _ZN7S1590C2D0Ev();
extern void _ZN7S1590C42v9Ev();
extern void _ZN7S1590C43v10Ev();
extern void _ZN7S1590C43v11Ev();
extern void _ZN7S1590C43v12Ev();
extern void _ZN7S1590C43v13Ev();
extern void _ZN7S1590C43v14Ev();
extern void _ZN7S1590C43v15Ev();
extern void _ZN7S1590C43v16Ev();
extern void _ZN7S1590C43v17Ev();
extern void _ZN7S1590C43v18Ev();
extern void _ZN7S1590C43v19Ev();
extern void _ZN7S1590C43v20Ev();
extern void _ZN7S1590C43v21Ev();
extern void _ZN7S1590C43v22Ev();
extern void _ZN7S1590C43v23Ev();
extern void _ZN7S1590C43v24Ev();
extern void _ZN7S1590C43v25Ev();
extern void _ZN7S1590C43v26Ev();
extern void _ZN7S1590C43v27Ev();
extern void _ZN7S1590C43v28Ev();
extern void _ZN7S1590C43v29Ev();
extern void _ZN7S1590C43v30Ev();
extern void _ZN7S1590C43v31Ev();
extern void _ZN7S1590C43v32Ev();
extern void _ZN7S1590C43v33Ev();
extern void _ZN7S1590C43v34Ev();
extern void _ZN7S1590C43v35Ev();
extern void _ZN7S1590C43v36Ev();
extern void _ZN7S1590C43v37Ev();
extern void _ZN7S1590C43v38Ev();
extern void _ZN7S1590C43v39Ev();
extern void _ZN7S1590C43v40Ev();
extern void _ZN7S1590C43v41Ev();
extern void _ZN7S1590C43v42Ev();
extern void _ZN7S1590C43v43Ev();
extern void _ZN7S1590C43v44Ev();
extern void _ZN7S1590C43v45Ev();
extern void _ZN7S1590C43v46Ev();
extern void _ZN7S1590C43v47Ev();
extern void _ZN7S1590C43v48Ev();
extern void _ZN7S1590C43v49Ev();
extern void _ZN7S1590C43v50Ev();
extern void _ZN7S1590C43v51Ev();
extern void _ZN7S1590C43v52Ev();
extern void _ZN7S1590C43v53Ev();
extern void _ZN7S1590C43v54Ev();
extern void _ZN7S1590C43v55Ev();
extern void _ZN7S1590C43v56Ev();
extern void _ZN7S1590C43v57Ev();
extern void _ZN7S1590C43v58Ev();
extern void _ZN7S1590C43v59Ev();
extern void _ZN7S1590C43v60Ev();
extern void _ZN7S1590C43v61Ev();
extern void _ZN7S1590C43v62Ev();
extern void _ZN7S1590C43v63Ev();
extern void _ZN7S1590C43v64Ev();
extern void _ZN7S1590C43v65Ev();
extern void _ZN7S1590C43v66Ev();
extern void _ZN7S1590C43v67Ev();
extern void _ZN7S1590C43v68Ev();
extern void _ZN7S1590C43v69Ev();
extern void _ZN7S1590C43v70Ev();
extern void _ZN7S1590C43v71Ev();
extern void _ZN7S1590C43v72Ev();
extern void _ZN7S1590C33v98Ev();
extern void _ZN7S1590C33v99Ev();
extern void _ZN7S1590C34v100Ev();
extern void _ZN7S1590C34v101Ev();
extern void _ZN7S1590C34v102Ev();
extern void _ZN7S1590C34v103Ev();
extern void _ZN7S1590C34v104Ev();
extern void _ZN7S1590C34v105Ev();
extern void _ZN7S1590C34v106Ev();
extern void _ZN7S1590C34v107Ev();
extern void _ZN7S1590C34v108Ev();
extern void _ZN7S1590C34v109Ev();
extern void _ZN7S1590C34v110Ev();
extern void _ZN7S1590C34v111Ev();
extern void _ZN7S1590C34v112Ev();
extern void _ZN7S1590C34v113Ev();
extern void _ZN7S1590C34v114Ev();
extern void _ZN7S1590C34v115Ev();
extern void _ZN7S1590C34v116Ev();
extern void _ZN7S1590C34v117Ev();
extern void _ZN7S1590C34v118Ev();
extern void _ZN7S1590C34v119Ev();
extern void _ZN7S1590C34v120Ev();
extern void _ZN7S1590C34v121Ev();
extern void _ZN7S1590C24v122Ev();
extern void _ZN7S1590C24v123Ev();
extern void _ZN7S1590C24v124Ev();
extern void _ZN7S1590C24v125Ev();
extern void _ZN7S1590C24v126Ev();
extern void _ZN7S1590C24v127Ev();
extern void _ZN7S1590C24v128Ev();
extern void _ZN7S1590C24v129Ev();
extern void _ZN7S1590C24v130Ev();
extern void _ZN7S1590C24v131Ev();
extern void _ZN7S1590C24v132Ev();
extern void _ZN7S1590C24v133Ev();
extern void _ZN7S1590C24v134Ev();
extern void _ZN7S1590C24v135Ev();
extern void _ZN7S1590C24v136Ev();
extern void _ZN7S1590C24v137Ev();
extern void _ZN7S1590C24v138Ev();
extern void _ZN7S1590C24v139Ev();
extern void _ZN7S1590C24v140Ev();
extern void _ZN7S1590C24v141Ev();
extern void _ZN7S1590C24v142Ev();
extern void _ZN7S1590C24v143Ev();
extern void _ZN7S1590C24v144Ev();
extern void _ZN7S1590C24v145Ev();
extern void _ZN7S1590C24v146Ev();
extern void _ZN7S1590C24v147Ev();
extern void _ZN7S1590C24v148Ev();
extern void _ZN7S1590C63v73Ev();
extern void _ZN7S1590C63v74Ev();
extern void _ZN7S1590C63v75Ev();
extern void _ZN7S1590C63v76Ev();
extern void _ZN7S1590C63v77Ev();
extern void _ZN7S1590C63v78Ev();
extern void _ZN7S1590C63v79Ev();
extern void _ZN7S1590C63v80Ev();
extern void _ZN7S1590C63v81Ev();
extern void _ZN7S1590C63v82Ev();
extern void _ZN7S1590C63v83Ev();
extern void _ZN7S1590C63v84Ev();
extern void _ZN7S1590C63v85Ev();
extern void _ZN7S1590C63v86Ev();
extern void _ZN7S1590C63v87Ev();
extern void _ZN7S1590C63v88Ev();
extern void _ZN7S1590C73v89Ev();
extern void _ZN7S1590C73v90Ev();
extern void _ZN7S1590C73v91Ev();
extern void _ZN7S1590C73v92Ev();
extern void _ZN7S1590C73v93Ev();
extern void _ZN7S1590C73v94Ev();
extern void _ZN7S1590C73v95Ev();
extern void _ZN7S1590C73v96Ev();
extern void _ZN7S1590C73v97Ev();
static  VTBL_ENTRY vtc_S1590C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1590C2[0]),
  (VTBL_ENTRY)&_ZN7S1590C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1590C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1590C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1590C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1590C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v122Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v123Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v124Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v125Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v126Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v127Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v128Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v129Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v130Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v131Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v132Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v144Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v145Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v146Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v147Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v148Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1590C2[0]),
  (VTBL_ENTRY)&_ZN7S1590C63v73Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v74Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v75Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v76Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v77Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v78Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v79Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v80Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v81Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v82Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v83Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v85Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v86Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v87Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v88Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1590C2[0]),
  (VTBL_ENTRY)&_ZN7S1590C73v89Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v90Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v91Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v92Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v93Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v94Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v95Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v96Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v97Ev,
};
extern VTBL_ENTRY _ZTI7S1590C2[];
extern  VTBL_ENTRY _ZTV7S1590C2[];
Class_Descriptor cd_S1590C2 = {  "S1590C2", // class name
  bases_S1590C2, 4,
  &(vtc_S1590C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,108), // object size
  NSPAIRA(_ZTI7S1590C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1590C2),148, //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  S1590C1  : S1590C2 {
  ::S79C8_nt s1590c1f0;
  virtual  ~S1590C1(); // _ZN7S1590C1D1Ev
  virtual void  v1(); // _ZN7S1590C12v1Ev
  virtual void  v2(); // _ZN7S1590C12v2Ev
  virtual void  v3(); // _ZN7S1590C12v3Ev
  virtual void  v4(); // _ZN7S1590C12v4Ev
  virtual void  v5(); // _ZN7S1590C12v5Ev
  virtual void  v6(); // _ZN7S1590C12v6Ev
  virtual void  v7(); // _ZN7S1590C12v7Ev
  virtual void  v8(); // _ZN7S1590C12v8Ev
  S1590C1(); // tgen
};
//SIG(1 S1590C1) 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 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} BC6{ v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88} BC7{ v89 v90 v91 v92 v93 v94 v95 v96 v97} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 Fp FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1} vd 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 FC12{ m FC13{ BC14{ BC11}} Fc} Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 FC5}


 S1590C1 ::~S1590C1(){ note_dtor("S1590C1", this);}
void  S1590C1 ::v1(){vfunc_called(this, "_ZN7S1590C12v1Ev");}
void  S1590C1 ::v2(){vfunc_called(this, "_ZN7S1590C12v2Ev");}
void  S1590C1 ::v3(){vfunc_called(this, "_ZN7S1590C12v3Ev");}
void  S1590C1 ::v4(){vfunc_called(this, "_ZN7S1590C12v4Ev");}
void  S1590C1 ::v5(){vfunc_called(this, "_ZN7S1590C12v5Ev");}
void  S1590C1 ::v6(){vfunc_called(this, "_ZN7S1590C12v6Ev");}
void  S1590C1 ::v7(){vfunc_called(this, "_ZN7S1590C12v7Ev");}
void  S1590C1 ::v8(){vfunc_called(this, "_ZN7S1590C12v8Ev");}
S1590C1 ::S1590C1(){ note_ctor("S1590C1", this);} // tgen

static void Test_S1590C1()
{
  extern Class_Descriptor cd_S1590C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,30)];
    init_test(&cd_S1590C1, buf);
    S1590C1 *dp, &lv = *(dp=new (buf) S1590C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,116), "sizeof(S1590C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1590C1)");
    check_base_class_offset(lv, (S1590C4*)(S1590C3*)(S1590C2*), 0, "S1590C1");
    check_base_class_offset(lv, (S1590C6*)(S1590C3*)(S1590C2*), ABISELECT(96,60), "S1590C1");
    check_base_class_offset(lv, (S1590C7*)(S1590C3*)(S1590C2*), ABISELECT(104,64), "S1590C1");
    check_base_class_offset(lv, (S1590C3*)(S1590C2*), 0, "S1590C1");
    check_base_class_offset(lv, (S1590C2*), 0, "S1590C1");
    check_field_offset(lv, s1590c1f0, ABISELECT(172,108), "S1590C1.s1590c1f0");
    test_class_info(&lv, &cd_S1590C1);
    dp->~S1590C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1590C1(Test_S1590C1, "S1590C1", ABISELECT(184,116));

#else // __cplusplus

extern void _ZN7S1590C1C1Ev();
extern void _ZN7S1590C1D1Ev();
Name_Map name_map_S1590C1[] = {
  NSPAIR(_ZN7S1590C1C1Ev),
  NSPAIR(_ZN7S1590C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1590C4;
extern VTBL_ENTRY _ZTI7S1590C4[];
extern  VTBL_ENTRY _ZTV7S1590C4[];
extern Class_Descriptor cd_S1590C6;
extern VTBL_ENTRY _ZTI7S1590C6[];
extern  VTBL_ENTRY _ZTV7S1590C6[];
extern Class_Descriptor cd_S1590C7;
extern VTBL_ENTRY _ZTI7S1590C7[];
extern  VTBL_ENTRY _ZTV7S1590C7[];
extern Class_Descriptor cd_S1590C3;
extern VTBL_ENTRY _ZTI7S1590C3[];
extern  VTBL_ENTRY _ZTV7S1590C3[];
extern Class_Descriptor cd_S1590C2;
extern VTBL_ENTRY _ZTI7S1590C2[];
extern  VTBL_ENTRY _ZTV7S1590C2[];
static Base_Class bases_S1590C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1590C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1590C6,    ABISELECT(96,60), //bcp->offset
    127, //bcp->virtual_function_table_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_S1590C7,    ABISELECT(104,64), //bcp->offset
    145, //bcp->virtual_function_table_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_S1590C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1590C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1590C1[];
extern void _ZN7S1590C1D1Ev();
extern void _ZN7S1590C1D0Ev();
extern void _ZN7S1590C42v9Ev();
extern void _ZN7S1590C43v10Ev();
extern void _ZN7S1590C43v11Ev();
extern void _ZN7S1590C43v12Ev();
extern void _ZN7S1590C43v13Ev();
extern void _ZN7S1590C43v14Ev();
extern void _ZN7S1590C43v15Ev();
extern void _ZN7S1590C43v16Ev();
extern void _ZN7S1590C43v17Ev();
extern void _ZN7S1590C43v18Ev();
extern void _ZN7S1590C43v19Ev();
extern void _ZN7S1590C43v20Ev();
extern void _ZN7S1590C43v21Ev();
extern void _ZN7S1590C43v22Ev();
extern void _ZN7S1590C43v23Ev();
extern void _ZN7S1590C43v24Ev();
extern void _ZN7S1590C43v25Ev();
extern void _ZN7S1590C43v26Ev();
extern void _ZN7S1590C43v27Ev();
extern void _ZN7S1590C43v28Ev();
extern void _ZN7S1590C43v29Ev();
extern void _ZN7S1590C43v30Ev();
extern void _ZN7S1590C43v31Ev();
extern void _ZN7S1590C43v32Ev();
extern void _ZN7S1590C43v33Ev();
extern void _ZN7S1590C43v34Ev();
extern void _ZN7S1590C43v35Ev();
extern void _ZN7S1590C43v36Ev();
extern void _ZN7S1590C43v37Ev();
extern void _ZN7S1590C43v38Ev();
extern void _ZN7S1590C43v39Ev();
extern void _ZN7S1590C43v40Ev();
extern void _ZN7S1590C43v41Ev();
extern void _ZN7S1590C43v42Ev();
extern void _ZN7S1590C43v43Ev();
extern void _ZN7S1590C43v44Ev();
extern void _ZN7S1590C43v45Ev();
extern void _ZN7S1590C43v46Ev();
extern void _ZN7S1590C43v47Ev();
extern void _ZN7S1590C43v48Ev();
extern void _ZN7S1590C43v49Ev();
extern void _ZN7S1590C43v50Ev();
extern void _ZN7S1590C43v51Ev();
extern void _ZN7S1590C43v52Ev();
extern void _ZN7S1590C43v53Ev();
extern void _ZN7S1590C43v54Ev();
extern void _ZN7S1590C43v55Ev();
extern void _ZN7S1590C43v56Ev();
extern void _ZN7S1590C43v57Ev();
extern void _ZN7S1590C43v58Ev();
extern void _ZN7S1590C43v59Ev();
extern void _ZN7S1590C43v60Ev();
extern void _ZN7S1590C43v61Ev();
extern void _ZN7S1590C43v62Ev();
extern void _ZN7S1590C43v63Ev();
extern void _ZN7S1590C43v64Ev();
extern void _ZN7S1590C43v65Ev();
extern void _ZN7S1590C43v66Ev();
extern void _ZN7S1590C43v67Ev();
extern void _ZN7S1590C43v68Ev();
extern void _ZN7S1590C43v69Ev();
extern void _ZN7S1590C43v70Ev();
extern void _ZN7S1590C43v71Ev();
extern void _ZN7S1590C43v72Ev();
extern void _ZN7S1590C33v98Ev();
extern void _ZN7S1590C33v99Ev();
extern void _ZN7S1590C34v100Ev();
extern void _ZN7S1590C34v101Ev();
extern void _ZN7S1590C34v102Ev();
extern void _ZN7S1590C34v103Ev();
extern void _ZN7S1590C34v104Ev();
extern void _ZN7S1590C34v105Ev();
extern void _ZN7S1590C34v106Ev();
extern void _ZN7S1590C34v107Ev();
extern void _ZN7S1590C34v108Ev();
extern void _ZN7S1590C34v109Ev();
extern void _ZN7S1590C34v110Ev();
extern void _ZN7S1590C34v111Ev();
extern void _ZN7S1590C34v112Ev();
extern void _ZN7S1590C34v113Ev();
extern void _ZN7S1590C34v114Ev();
extern void _ZN7S1590C34v115Ev();
extern void _ZN7S1590C34v116Ev();
extern void _ZN7S1590C34v117Ev();
extern void _ZN7S1590C34v118Ev();
extern void _ZN7S1590C34v119Ev();
extern void _ZN7S1590C34v120Ev();
extern void _ZN7S1590C34v121Ev();
extern void _ZN7S1590C24v122Ev();
extern void _ZN7S1590C24v123Ev();
extern void _ZN7S1590C24v124Ev();
extern void _ZN7S1590C24v125Ev();
extern void _ZN7S1590C24v126Ev();
extern void _ZN7S1590C24v127Ev();
extern void _ZN7S1590C24v128Ev();
extern void _ZN7S1590C24v129Ev();
extern void _ZN7S1590C24v130Ev();
extern void _ZN7S1590C24v131Ev();
extern void _ZN7S1590C24v132Ev();
extern void _ZN7S1590C24v133Ev();
extern void _ZN7S1590C24v134Ev();
extern void _ZN7S1590C24v135Ev();
extern void _ZN7S1590C24v136Ev();
extern void _ZN7S1590C24v137Ev();
extern void _ZN7S1590C24v138Ev();
extern void _ZN7S1590C24v139Ev();
extern void _ZN7S1590C24v140Ev();
extern void _ZN7S1590C24v141Ev();
extern void _ZN7S1590C24v142Ev();
extern void _ZN7S1590C24v143Ev();
extern void _ZN7S1590C24v144Ev();
extern void _ZN7S1590C24v145Ev();
extern void _ZN7S1590C24v146Ev();
extern void _ZN7S1590C24v147Ev();
extern void _ZN7S1590C24v148Ev();
extern void _ZN7S1590C12v1Ev();
extern void _ZN7S1590C12v2Ev();
extern void _ZN7S1590C12v3Ev();
extern void _ZN7S1590C12v4Ev();
extern void _ZN7S1590C12v5Ev();
extern void _ZN7S1590C12v6Ev();
extern void _ZN7S1590C12v7Ev();
extern void _ZN7S1590C12v8Ev();
extern void _ZN7S1590C63v73Ev();
extern void _ZN7S1590C63v74Ev();
extern void _ZN7S1590C63v75Ev();
extern void _ZN7S1590C63v76Ev();
extern void _ZN7S1590C63v77Ev();
extern void _ZN7S1590C63v78Ev();
extern void _ZN7S1590C63v79Ev();
extern void _ZN7S1590C63v80Ev();
extern void _ZN7S1590C63v81Ev();
extern void _ZN7S1590C63v82Ev();
extern void _ZN7S1590C63v83Ev();
extern void _ZN7S1590C63v84Ev();
extern void _ZN7S1590C63v85Ev();
extern void _ZN7S1590C63v86Ev();
extern void _ZN7S1590C63v87Ev();
extern void _ZN7S1590C63v88Ev();
extern void _ZN7S1590C73v89Ev();
extern void _ZN7S1590C73v90Ev();
extern void _ZN7S1590C73v91Ev();
extern void _ZN7S1590C73v92Ev();
extern void _ZN7S1590C73v93Ev();
extern void _ZN7S1590C73v94Ev();
extern void _ZN7S1590C73v95Ev();
extern void _ZN7S1590C73v96Ev();
extern void _ZN7S1590C73v97Ev();
static  VTBL_ENTRY vtc_S1590C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1590C1[0]),
  (VTBL_ENTRY)&_ZN7S1590C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1590C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1590C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1590C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1590C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1590C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1590C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v122Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v123Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v124Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v125Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v126Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v127Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v128Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v129Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v130Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v131Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v132Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v144Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v145Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v146Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v147Ev,
  (VTBL_ENTRY)&_ZN7S1590C24v148Ev,
  (VTBL_ENTRY)&_ZN7S1590C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1590C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1590C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1590C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1590C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1590C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1590C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1590C12v8Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1590C1[0]),
  (VTBL_ENTRY)&_ZN7S1590C63v73Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v74Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v75Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v76Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v77Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v78Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v79Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v80Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v81Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v82Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v83Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v85Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v86Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v87Ev,
  (VTBL_ENTRY)&_ZN7S1590C63v88Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1590C1[0]),
  (VTBL_ENTRY)&_ZN7S1590C73v89Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v90Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v91Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v92Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v93Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v94Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v95Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v96Ev,
  (VTBL_ENTRY)&_ZN7S1590C73v97Ev,
};
extern VTBL_ENTRY _ZTI7S1590C1[];
extern  VTBL_ENTRY _ZTV7S1590C1[];
Class_Descriptor cd_S1590C1 = {  "S1590C1", // class name
  bases_S1590C1, 5,
  &(vtc_S1590C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,116), // object size
  NSPAIRA(_ZTI7S1590C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1590C1),156, //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  S1591C4  {
  int s1591c4f0;
  __tsi64 s1591c4f1;
  void *s1591c4f2[4];
  int s1591c4f3[2];
  void *s1591c4f4;
  ::S79C8_nt s1591c4f5;
  void *s1591c4f6[2];
  virtual  ~S1591C4(); // _ZN7S1591C4D1Ev
  virtual void  v9(); // _ZN7S1591C42v9Ev
  virtual void  v10(); // _ZN7S1591C43v10Ev
  virtual void  v11(); // _ZN7S1591C43v11Ev
  virtual void  v12(); // _ZN7S1591C43v12Ev
  virtual void  v13(); // _ZN7S1591C43v13Ev
  virtual void  v14(); // _ZN7S1591C43v14Ev
  virtual void  v15(); // _ZN7S1591C43v15Ev
  virtual void  v16(); // _ZN7S1591C43v16Ev
  virtual void  v17(); // _ZN7S1591C43v17Ev
  virtual void  v18(); // _ZN7S1591C43v18Ev
  virtual void  v19(); // _ZN7S1591C43v19Ev
  virtual void  v20(); // _ZN7S1591C43v20Ev
  virtual void  v21(); // _ZN7S1591C43v21Ev
  virtual void  v22(); // _ZN7S1591C43v22Ev
  virtual void  v23(); // _ZN7S1591C43v23Ev
  virtual void  v24(); // _ZN7S1591C43v24Ev
  virtual void  v25(); // _ZN7S1591C43v25Ev
  virtual void  v26(); // _ZN7S1591C43v26Ev
  virtual void  v27(); // _ZN7S1591C43v27Ev
  virtual void  v28(); // _ZN7S1591C43v28Ev
  virtual void  v29(); // _ZN7S1591C43v29Ev
  virtual void  v30(); // _ZN7S1591C43v30Ev
  virtual void  v31(); // _ZN7S1591C43v31Ev
  virtual void  v32(); // _ZN7S1591C43v32Ev
  virtual void  v33(); // _ZN7S1591C43v33Ev
  virtual void  v34(); // _ZN7S1591C43v34Ev
  virtual void  v35(); // _ZN7S1591C43v35Ev
  virtual void  v36(); // _ZN7S1591C43v36Ev
  virtual void  v37(); // _ZN7S1591C43v37Ev
  virtual void  v38(); // _ZN7S1591C43v38Ev
  virtual void  v39(); // _ZN7S1591C43v39Ev
  virtual void  v40(); // _ZN7S1591C43v40Ev
  virtual void  v41(); // _ZN7S1591C43v41Ev
  virtual void  v42(); // _ZN7S1591C43v42Ev
  virtual void  v43(); // _ZN7S1591C43v43Ev
  virtual void  v44(); // _ZN7S1591C43v44Ev
  virtual void  v45(); // _ZN7S1591C43v45Ev
  virtual void  v46(); // _ZN7S1591C43v46Ev
  virtual void  v47(); // _ZN7S1591C43v47Ev
  virtual void  v48(); // _ZN7S1591C43v48Ev
  virtual void  v49(); // _ZN7S1591C43v49Ev
  virtual void  v50(); // _ZN7S1591C43v50Ev
  virtual void  v51(); // _ZN7S1591C43v51Ev
  virtual void  v52(); // _ZN7S1591C43v52Ev
  virtual void  v53(); // _ZN7S1591C43v53Ev
  virtual void  v54(); // _ZN7S1591C43v54Ev
  virtual void  v55(); // _ZN7S1591C43v55Ev
  virtual void  v56(); // _ZN7S1591C43v56Ev
  virtual void  v57(); // _ZN7S1591C43v57Ev
  virtual void  v58(); // _ZN7S1591C43v58Ev
  virtual void  v59(); // _ZN7S1591C43v59Ev
  virtual void  v60(); // _ZN7S1591C43v60Ev
  virtual void  v61(); // _ZN7S1591C43v61Ev
  virtual void  v62(); // _ZN7S1591C43v62Ev
  virtual void  v63(); // _ZN7S1591C43v63Ev
  virtual void  v64(); // _ZN7S1591C43v64Ev
  virtual void  v65(); // _ZN7S1591C43v65Ev
  virtual void  v66(); // _ZN7S1591C43v66Ev
  virtual void  v67(); // _ZN7S1591C43v67Ev
  virtual void  v68(); // _ZN7S1591C43v68Ev
  virtual void  v69(); // _ZN7S1591C43v69Ev
  virtual void  v70(); // _ZN7S1591C43v70Ev
  virtual void  v71(); // _ZN7S1591C43v71Ev
  virtual void  v72(); // _ZN7S1591C43v72Ev
  S1591C4(); // tgen
};
//SIG(-1 S1591C4) 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]}


 S1591C4 ::~S1591C4(){ note_dtor("S1591C4", this);}
void  S1591C4 ::v9(){vfunc_called(this, "_ZN7S1591C42v9Ev");}
void  S1591C4 ::v10(){vfunc_called(this, "_ZN7S1591C43v10Ev");}
void  S1591C4 ::v11(){vfunc_called(this, "_ZN7S1591C43v11Ev");}
void  S1591C4 ::v12(){vfunc_called(this, "_ZN7S1591C43v12Ev");}
void  S1591C4 ::v13(){vfunc_called(this, "_ZN7S1591C43v13Ev");}
void  S1591C4 ::v14(){vfunc_called(this, "_ZN7S1591C43v14Ev");}
void  S1591C4 ::v15(){vfunc_called(this, "_ZN7S1591C43v15Ev");}
void  S1591C4 ::v16(){vfunc_called(this, "_ZN7S1591C43v16Ev");}
void  S1591C4 ::v17(){vfunc_called(this, "_ZN7S1591C43v17Ev");}
void  S1591C4 ::v18(){vfunc_called(this, "_ZN7S1591C43v18Ev");}
void  S1591C4 ::v19(){vfunc_called(this, "_ZN7S1591C43v19Ev");}
void  S1591C4 ::v20(){vfunc_called(this, "_ZN7S1591C43v20Ev");}
void  S1591C4 ::v21(){vfunc_called(this, "_ZN7S1591C43v21Ev");}
void  S1591C4 ::v22(){vfunc_called(this, "_ZN7S1591C43v22Ev");}
void  S1591C4 ::v23(){vfunc_called(this, "_ZN7S1591C43v23Ev");}
void  S1591C4 ::v24(){vfunc_called(this, "_ZN7S1591C43v24Ev");}
void  S1591C4 ::v25(){vfunc_called(this, "_ZN7S1591C43v25Ev");}
void  S1591C4 ::v26(){vfunc_called(this, "_ZN7S1591C43v26Ev");}
void  S1591C4 ::v27(){vfunc_called(this, "_ZN7S1591C43v27Ev");}
void  S1591C4 ::v28(){vfunc_called(this, "_ZN7S1591C43v28Ev");}
void  S1591C4 ::v29(){vfunc_called(this, "_ZN7S1591C43v29Ev");}
void  S1591C4 ::v30(){vfunc_called(this, "_ZN7S1591C43v30Ev");}
void  S1591C4 ::v31(){vfunc_called(this, "_ZN7S1591C43v31Ev");}
void  S1591C4 ::v32(){vfunc_called(this, "_ZN7S1591C43v32Ev");}
void  S1591C4 ::v33(){vfunc_called(this, "_ZN7S1591C43v33Ev");}
void  S1591C4 ::v34(){vfunc_called(this, "_ZN7S1591C43v34Ev");}
void  S1591C4 ::v35(){vfunc_called(this, "_ZN7S1591C43v35Ev");}
void  S1591C4 ::v36(){vfunc_called(this, "_ZN7S1591C43v36Ev");}
void  S1591C4 ::v37(){vfunc_called(this, "_ZN7S1591C43v37Ev");}
void  S1591C4 ::v38(){vfunc_called(this, "_ZN7S1591C43v38Ev");}
void  S1591C4 ::v39(){vfunc_called(this, "_ZN7S1591C43v39Ev");}
void  S1591C4 ::v40(){vfunc_called(this, "_ZN7S1591C43v40Ev");}
void  S1591C4 ::v41(){vfunc_called(this, "_ZN7S1591C43v41Ev");}
void  S1591C4 ::v42(){vfunc_called(this, "_ZN7S1591C43v42Ev");}
void  S1591C4 ::v43(){vfunc_called(this, "_ZN7S1591C43v43Ev");}
void  S1591C4 ::v44(){vfunc_called(this, "_ZN7S1591C43v44Ev");}
void  S1591C4 ::v45(){vfunc_called(this, "_ZN7S1591C43v45Ev");}
void  S1591C4 ::v46(){vfunc_called(this, "_ZN7S1591C43v46Ev");}
void  S1591C4 ::v47(){vfunc_called(this, "_ZN7S1591C43v47Ev");}
void  S1591C4 ::v48(){vfunc_called(this, "_ZN7S1591C43v48Ev");}
void  S1591C4 ::v49(){vfunc_called(this, "_ZN7S1591C43v49Ev");}
void  S1591C4 ::v50(){vfunc_called(this, "_ZN7S1591C43v50Ev");}
void  S1591C4 ::v51(){vfunc_called(this, "_ZN7S1591C43v51Ev");}
void  S1591C4 ::v52(){vfunc_called(this, "_ZN7S1591C43v52Ev");}
void  S1591C4 ::v53(){vfunc_called(this, "_ZN7S1591C43v53Ev");}
void  S1591C4 ::v54(){vfunc_called(this, "_ZN7S1591C43v54Ev");}
void  S1591C4 ::v55(){vfunc_called(this, "_ZN7S1591C43v55Ev");}
void  S1591C4 ::v56(){vfunc_called(this, "_ZN7S1591C43v56Ev");}
void  S1591C4 ::v57(){vfunc_called(this, "_ZN7S1591C43v57Ev");}
void  S1591C4 ::v58(){vfunc_called(this, "_ZN7S1591C43v58Ev");}
void  S1591C4 ::v59(){vfunc_called(this, "_ZN7S1591C43v59Ev");}
void  S1591C4 ::v60(){vfunc_called(this, "_ZN7S1591C43v60Ev");}
void  S1591C4 ::v61(){vfunc_called(this, "_ZN7S1591C43v61Ev");}
void  S1591C4 ::v62(){vfunc_called(this, "_ZN7S1591C43v62Ev");}
void  S1591C4 ::v63(){vfunc_called(this, "_ZN7S1591C43v63Ev");}
void  S1591C4 ::v64(){vfunc_called(this, "_ZN7S1591C43v64Ev");}
void  S1591C4 ::v65(){vfunc_called(this, "_ZN7S1591C43v65Ev");}
void  S1591C4 ::v66(){vfunc_called(this, "_ZN7S1591C43v66Ev");}
void  S1591C4 ::v67(){vfunc_called(this, "_ZN7S1591C43v67Ev");}
void  S1591C4 ::v68(){vfunc_called(this, "_ZN7S1591C43v68Ev");}
void  S1591C4 ::v69(){vfunc_called(this, "_ZN7S1591C43v69Ev");}
void  S1591C4 ::v70(){vfunc_called(this, "_ZN7S1591C43v70Ev");}
void  S1591C4 ::v71(){vfunc_called(this, "_ZN7S1591C43v71Ev");}
void  S1591C4 ::v72(){vfunc_called(this, "_ZN7S1591C43v72Ev");}
S1591C4 ::S1591C4(){ note_ctor("S1591C4", this);} // tgen

static void Test_S1591C4()
{
  extern Class_Descriptor cd_S1591C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1591C4, buf);
    S1591C4 *dp, &lv = *(dp=new (buf) S1591C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1591C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1591C4)");
    check_field_offset(lv, s1591c4f0, ABISELECT(8,4), "S1591C4.s1591c4f0");
    check_field_offset(lv, s1591c4f1, ABISELECT(16,8), "S1591C4.s1591c4f1");
    check_field_offset(lv, s1591c4f2, ABISELECT(24,16), "S1591C4.s1591c4f2");
    check_field_offset(lv, s1591c4f3, ABISELECT(56,32), "S1591C4.s1591c4f3");
    check_field_offset(lv, s1591c4f4, ABISELECT(64,40), "S1591C4.s1591c4f4");
    check_field_offset(lv, s1591c4f5, ABISELECT(72,44), "S1591C4.s1591c4f5");
    check_field_offset(lv, s1591c4f6, ABISELECT(80,52), "S1591C4.s1591c4f6");
    test_class_info(&lv, &cd_S1591C4);
    dp->~S1591C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1591C4(Test_S1591C4, "S1591C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1591C4C1Ev();
extern void _ZN7S1591C4D1Ev();
Name_Map name_map_S1591C4[] = {
  NSPAIR(_ZN7S1591C4C1Ev),
  NSPAIR(_ZN7S1591C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1591C4[];
extern void _ZN7S1591C4D1Ev();
extern void _ZN7S1591C4D0Ev();
extern void _ZN7S1591C42v9Ev();
extern void _ZN7S1591C43v10Ev();
extern void _ZN7S1591C43v11Ev();
extern void _ZN7S1591C43v12Ev();
extern void _ZN7S1591C43v13Ev();
extern void _ZN7S1591C43v14Ev();
extern void _ZN7S1591C43v15Ev();
extern void _ZN7S1591C43v16Ev();
extern void _ZN7S1591C43v17Ev();
extern void _ZN7S1591C43v18Ev();
extern void _ZN7S1591C43v19Ev();
extern void _ZN7S1591C43v20Ev();
extern void _ZN7S1591C43v21Ev();
extern void _ZN7S1591C43v22Ev();
extern void _ZN7S1591C43v23Ev();
extern void _ZN7S1591C43v24Ev();
extern void _ZN7S1591C43v25Ev();
extern void _ZN7S1591C43v26Ev();
extern void _ZN7S1591C43v27Ev();
extern void _ZN7S1591C43v28Ev();
extern void _ZN7S1591C43v29Ev();
extern void _ZN7S1591C43v30Ev();
extern void _ZN7S1591C43v31Ev();
extern void _ZN7S1591C43v32Ev();
extern void _ZN7S1591C43v33Ev();
extern void _ZN7S1591C43v34Ev();
extern void _ZN7S1591C43v35Ev();
extern void _ZN7S1591C43v36Ev();
extern void _ZN7S1591C43v37Ev();
extern void _ZN7S1591C43v38Ev();
extern void _ZN7S1591C43v39Ev();
extern void _ZN7S1591C43v40Ev();
extern void _ZN7S1591C43v41Ev();
extern void _ZN7S1591C43v42Ev();
extern void _ZN7S1591C43v43Ev();
extern void _ZN7S1591C43v44Ev();
extern void _ZN7S1591C43v45Ev();
extern void _ZN7S1591C43v46Ev();
extern void _ZN7S1591C43v47Ev();
extern void _ZN7S1591C43v48Ev();
extern void _ZN7S1591C43v49Ev();
extern void _ZN7S1591C43v50Ev();
extern void _ZN7S1591C43v51Ev();
extern void _ZN7S1591C43v52Ev();
extern void _ZN7S1591C43v53Ev();
extern void _ZN7S1591C43v54Ev();
extern void _ZN7S1591C43v55Ev();
extern void _ZN7S1591C43v56Ev();
extern void _ZN7S1591C43v57Ev();
extern void _ZN7S1591C43v58Ev();
extern void _ZN7S1591C43v59Ev();
extern void _ZN7S1591C43v60Ev();
extern void _ZN7S1591C43v61Ev();
extern void _ZN7S1591C43v62Ev();
extern void _ZN7S1591C43v63Ev();
extern void _ZN7S1591C43v64Ev();
extern void _ZN7S1591C43v65Ev();
extern void _ZN7S1591C43v66Ev();
extern void _ZN7S1591C43v67Ev();
extern void _ZN7S1591C43v68Ev();
extern void _ZN7S1591C43v69Ev();
extern void _ZN7S1591C43v70Ev();
extern void _ZN7S1591C43v71Ev();
extern void _ZN7S1591C43v72Ev();
static  VTBL_ENTRY vtc_S1591C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1591C4[0]),
  (VTBL_ENTRY)&_ZN7S1591C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1591C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1591C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v72Ev,
};
extern VTBL_ENTRY _ZTI7S1591C4[];
extern  VTBL_ENTRY _ZTV7S1591C4[];
Class_Descriptor cd_S1591C4 = {  "S1591C4", // class name
  0,0,//no base classes
  &(vtc_S1591C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1591C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1591C4),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  S1591C6  {
  virtual void  v73(); // _ZN7S1591C63v73Ev
  virtual void  v74(); // _ZN7S1591C63v74Ev
  virtual void  v75(); // _ZN7S1591C63v75Ev
  virtual void  v76(); // _ZN7S1591C63v76Ev
  virtual void  v77(); // _ZN7S1591C63v77Ev
  virtual void  v78(); // _ZN7S1591C63v78Ev
  virtual void  v79(); // _ZN7S1591C63v79Ev
  virtual void  v80(); // _ZN7S1591C63v80Ev
  virtual void  v81(); // _ZN7S1591C63v81Ev
  virtual void  v82(); // _ZN7S1591C63v82Ev
  virtual void  v83(); // _ZN7S1591C63v83Ev
  virtual void  v84(); // _ZN7S1591C63v84Ev
  virtual void  v85(); // _ZN7S1591C63v85Ev
  virtual void  v86(); // _ZN7S1591C63v86Ev
  virtual void  v87(); // _ZN7S1591C63v87Ev
  virtual void  v88(); // _ZN7S1591C63v88Ev
  ~S1591C6(); // tgen
  S1591C6(); // tgen
};
//SIG(-1 S1591C6) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16}


void  S1591C6 ::v73(){vfunc_called(this, "_ZN7S1591C63v73Ev");}
void  S1591C6 ::v74(){vfunc_called(this, "_ZN7S1591C63v74Ev");}
void  S1591C6 ::v75(){vfunc_called(this, "_ZN7S1591C63v75Ev");}
void  S1591C6 ::v76(){vfunc_called(this, "_ZN7S1591C63v76Ev");}
void  S1591C6 ::v77(){vfunc_called(this, "_ZN7S1591C63v77Ev");}
void  S1591C6 ::v78(){vfunc_called(this, "_ZN7S1591C63v78Ev");}
void  S1591C6 ::v79(){vfunc_called(this, "_ZN7S1591C63v79Ev");}
void  S1591C6 ::v80(){vfunc_called(this, "_ZN7S1591C63v80Ev");}
void  S1591C6 ::v81(){vfunc_called(this, "_ZN7S1591C63v81Ev");}
void  S1591C6 ::v82(){vfunc_called(this, "_ZN7S1591C63v82Ev");}
void  S1591C6 ::v83(){vfunc_called(this, "_ZN7S1591C63v83Ev");}
void  S1591C6 ::v84(){vfunc_called(this, "_ZN7S1591C63v84Ev");}
void  S1591C6 ::v85(){vfunc_called(this, "_ZN7S1591C63v85Ev");}
void  S1591C6 ::v86(){vfunc_called(this, "_ZN7S1591C63v86Ev");}
void  S1591C6 ::v87(){vfunc_called(this, "_ZN7S1591C63v87Ev");}
void  S1591C6 ::v88(){vfunc_called(this, "_ZN7S1591C63v88Ev");}
S1591C6 ::~S1591C6(){ note_dtor("S1591C6", this);} // tgen
S1591C6 ::S1591C6(){ note_ctor("S1591C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1591C6C1Ev();
extern void _ZN7S1591C6D1Ev();
Name_Map name_map_S1591C6[] = {
  NSPAIR(_ZN7S1591C6C1Ev),
  NSPAIR(_ZN7S1591C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1591C6[];
extern void _ZN7S1591C63v73Ev();
extern void _ZN7S1591C63v74Ev();
extern void _ZN7S1591C63v75Ev();
extern void _ZN7S1591C63v76Ev();
extern void _ZN7S1591C63v77Ev();
extern void _ZN7S1591C63v78Ev();
extern void _ZN7S1591C63v79Ev();
extern void _ZN7S1591C63v80Ev();
extern void _ZN7S1591C63v81Ev();
extern void _ZN7S1591C63v82Ev();
extern void _ZN7S1591C63v83Ev();
extern void _ZN7S1591C63v84Ev();
extern void _ZN7S1591C63v85Ev();
extern void _ZN7S1591C63v86Ev();
extern void _ZN7S1591C63v87Ev();
extern void _ZN7S1591C63v88Ev();
static  VTBL_ENTRY vtc_S1591C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1591C6[0]),
  (VTBL_ENTRY)&_ZN7S1591C63v73Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v74Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v75Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v76Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v77Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v78Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v79Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v80Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v81Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v82Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v83Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v85Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v86Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v87Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v88Ev,
};
extern VTBL_ENTRY _ZTI7S1591C6[];
extern  VTBL_ENTRY _ZTV7S1591C6[];
Class_Descriptor cd_S1591C6 = {  "S1591C6", // class name
  0,0,//no base classes
  &(vtc_S1591C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1591C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1591C6),18, //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  S1591C7  {
  virtual void  v89(); // _ZN7S1591C73v89Ev
  virtual void  v90(); // _ZN7S1591C73v90Ev
  virtual void  v91(); // _ZN7S1591C73v91Ev
  virtual void  v92(); // _ZN7S1591C73v92Ev
  virtual void  v93(); // _ZN7S1591C73v93Ev
  virtual void  v94(); // _ZN7S1591C73v94Ev
  virtual void  v95(); // _ZN7S1591C73v95Ev
  virtual void  v96(); // _ZN7S1591C73v96Ev
  virtual void  v97(); // _ZN7S1591C73v97Ev
  ~S1591C7(); // tgen
  S1591C7(); // tgen
};
//SIG(-1 S1591C7) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S1591C7 ::v89(){vfunc_called(this, "_ZN7S1591C73v89Ev");}
void  S1591C7 ::v90(){vfunc_called(this, "_ZN7S1591C73v90Ev");}
void  S1591C7 ::v91(){vfunc_called(this, "_ZN7S1591C73v91Ev");}
void  S1591C7 ::v92(){vfunc_called(this, "_ZN7S1591C73v92Ev");}
void  S1591C7 ::v93(){vfunc_called(this, "_ZN7S1591C73v93Ev");}
void  S1591C7 ::v94(){vfunc_called(this, "_ZN7S1591C73v94Ev");}
void  S1591C7 ::v95(){vfunc_called(this, "_ZN7S1591C73v95Ev");}
void  S1591C7 ::v96(){vfunc_called(this, "_ZN7S1591C73v96Ev");}
void  S1591C7 ::v97(){vfunc_called(this, "_ZN7S1591C73v97Ev");}
S1591C7 ::~S1591C7(){ note_dtor("S1591C7", this);} // tgen
S1591C7 ::S1591C7(){ note_ctor("S1591C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1591C7C1Ev();
extern void _ZN7S1591C7D1Ev();
Name_Map name_map_S1591C7[] = {
  NSPAIR(_ZN7S1591C7C1Ev),
  NSPAIR(_ZN7S1591C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1591C7[];
extern void _ZN7S1591C73v89Ev();
extern void _ZN7S1591C73v90Ev();
extern void _ZN7S1591C73v91Ev();
extern void _ZN7S1591C73v92Ev();
extern void _ZN7S1591C73v93Ev();
extern void _ZN7S1591C73v94Ev();
extern void _ZN7S1591C73v95Ev();
extern void _ZN7S1591C73v96Ev();
extern void _ZN7S1591C73v97Ev();
static  VTBL_ENTRY vtc_S1591C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1591C7[0]),
  (VTBL_ENTRY)&_ZN7S1591C73v89Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v90Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v91Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v92Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v93Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v94Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v95Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v96Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v97Ev,
};
extern VTBL_ENTRY _ZTI7S1591C7[];
extern  VTBL_ENTRY _ZTV7S1591C7[];
Class_Descriptor cd_S1591C7 = {  "S1591C7", // class name
  0,0,//no base classes
  &(vtc_S1591C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1591C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1591C7),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  S1591C3  : S1591C4 , S1591C6 , S1591C7 {
  void *s1591c3f0;
  ::S79C39_nt s1591c3f1;
  unsigned int s1591c3f2:1;
  unsigned int s1591c3f3:1;
  unsigned int s1591c3f4:1;
  unsigned int s1591c3f5:1;
  virtual  ~S1591C3(); // _ZN7S1591C3D1Ev
  virtual void  v98(); // _ZN7S1591C33v98Ev
  virtual void  v99(); // _ZN7S1591C33v99Ev
  virtual void  v100(); // _ZN7S1591C34v100Ev
  virtual void  v101(); // _ZN7S1591C34v101Ev
  virtual void  v102(); // _ZN7S1591C34v102Ev
  virtual void  v103(); // _ZN7S1591C34v103Ev
  virtual void  v104(); // _ZN7S1591C34v104Ev
  virtual void  v105(); // _ZN7S1591C34v105Ev
  virtual void  v106(); // _ZN7S1591C34v106Ev
  virtual void  v107(); // _ZN7S1591C34v107Ev
  virtual void  v108(); // _ZN7S1591C34v108Ev
  virtual void  v109(); // _ZN7S1591C34v109Ev
  virtual void  v110(); // _ZN7S1591C34v110Ev
  virtual void  v111(); // _ZN7S1591C34v111Ev
  virtual void  v112(); // _ZN7S1591C34v112Ev
  virtual void  v113(); // _ZN7S1591C34v113Ev
  virtual void  v114(); // _ZN7S1591C34v114Ev
  virtual void  v115(); // _ZN7S1591C34v115Ev
  virtual void  v116(); // _ZN7S1591C34v116Ev
  virtual void  v117(); // _ZN7S1591C34v117Ev
  virtual void  v118(); // _ZN7S1591C34v118Ev
  virtual void  v119(); // _ZN7S1591C34v119Ev
  virtual void  v120(); // _ZN7S1591C34v120Ev
  virtual void  v121(); // _ZN7S1591C34v121Ev
  S1591C3(); // tgen
};
//SIG(-1 S1591C3) C1{ BC2{ vd 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 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} BC4{ v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104} BC5{ v105 v106 v107 v108 v109 v110 v111 v112 v113} 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 Fp FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1}


 S1591C3 ::~S1591C3(){ note_dtor("S1591C3", this);}
void  S1591C3 ::v98(){vfunc_called(this, "_ZN7S1591C33v98Ev");}
void  S1591C3 ::v99(){vfunc_called(this, "_ZN7S1591C33v99Ev");}
void  S1591C3 ::v100(){vfunc_called(this, "_ZN7S1591C34v100Ev");}
void  S1591C3 ::v101(){vfunc_called(this, "_ZN7S1591C34v101Ev");}
void  S1591C3 ::v102(){vfunc_called(this, "_ZN7S1591C34v102Ev");}
void  S1591C3 ::v103(){vfunc_called(this, "_ZN7S1591C34v103Ev");}
void  S1591C3 ::v104(){vfunc_called(this, "_ZN7S1591C34v104Ev");}
void  S1591C3 ::v105(){vfunc_called(this, "_ZN7S1591C34v105Ev");}
void  S1591C3 ::v106(){vfunc_called(this, "_ZN7S1591C34v106Ev");}
void  S1591C3 ::v107(){vfunc_called(this, "_ZN7S1591C34v107Ev");}
void  S1591C3 ::v108(){vfunc_called(this, "_ZN7S1591C34v108Ev");}
void  S1591C3 ::v109(){vfunc_called(this, "_ZN7S1591C34v109Ev");}
void  S1591C3 ::v110(){vfunc_called(this, "_ZN7S1591C34v110Ev");}
void  S1591C3 ::v111(){vfunc_called(this, "_ZN7S1591C34v111Ev");}
void  S1591C3 ::v112(){vfunc_called(this, "_ZN7S1591C34v112Ev");}
void  S1591C3 ::v113(){vfunc_called(this, "_ZN7S1591C34v113Ev");}
void  S1591C3 ::v114(){vfunc_called(this, "_ZN7S1591C34v114Ev");}
void  S1591C3 ::v115(){vfunc_called(this, "_ZN7S1591C34v115Ev");}
void  S1591C3 ::v116(){vfunc_called(this, "_ZN7S1591C34v116Ev");}
void  S1591C3 ::v117(){vfunc_called(this, "_ZN7S1591C34v117Ev");}
void  S1591C3 ::v118(){vfunc_called(this, "_ZN7S1591C34v118Ev");}
void  S1591C3 ::v119(){vfunc_called(this, "_ZN7S1591C34v119Ev");}
void  S1591C3 ::v120(){vfunc_called(this, "_ZN7S1591C34v120Ev");}
void  S1591C3 ::v121(){vfunc_called(this, "_ZN7S1591C34v121Ev");}
S1591C3 ::S1591C3(){ note_ctor("S1591C3", this);} // tgen

static void Test_S1591C3()
{
  extern Class_Descriptor cd_S1591C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,23)];
    init_test(&cd_S1591C3, buf);
    S1591C3 *dp, &lv = *(dp=new (buf) S1591C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S1591C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1591C3)");
    check_base_class_offset(lv, (S1591C4*), 0, "S1591C3");
    check_base_class_offset(lv, (S1591C6*), ABISELECT(96,60), "S1591C3");
    check_base_class_offset(lv, (S1591C7*), ABISELECT(104,64), "S1591C3");
    check_field_offset(lv, s1591c3f0, ABISELECT(112,68), "S1591C3.s1591c3f0");
    check_field_offset(lv, s1591c3f1, ABISELECT(120,72), "S1591C3.s1591c3f1");
    set_bf_and_test(lv, s1591c3f2, ABISELECT(136,84), 0, 1, 1, "S1591C3");
    set_bf_and_test(lv, s1591c3f3, ABISELECT(136,84), 1, 1, 1, "S1591C3");
    set_bf_and_test(lv, s1591c3f4, ABISELECT(136,84), 2, 1, 1, "S1591C3");
    set_bf_and_test(lv, s1591c3f5, ABISELECT(136,84), 3, 1, 1, "S1591C3");
    test_class_info(&lv, &cd_S1591C3);
    dp->~S1591C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1591C3(Test_S1591C3, "S1591C3", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN7S1591C3C1Ev();
extern void _ZN7S1591C3D1Ev();
Name_Map name_map_S1591C3[] = {
  NSPAIR(_ZN7S1591C3C1Ev),
  NSPAIR(_ZN7S1591C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1591C4;
extern VTBL_ENTRY _ZTI7S1591C4[];
extern  VTBL_ENTRY _ZTV7S1591C4[];
extern Class_Descriptor cd_S1591C6;
extern VTBL_ENTRY _ZTI7S1591C6[];
extern  VTBL_ENTRY _ZTV7S1591C6[];
extern Class_Descriptor cd_S1591C7;
extern VTBL_ENTRY _ZTI7S1591C7[];
extern  VTBL_ENTRY _ZTV7S1591C7[];
static Base_Class bases_S1591C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1591C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1591C6,    ABISELECT(96,60), //bcp->offset
    92, //bcp->virtual_function_table_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_S1591C7,    ABISELECT(104,64), //bcp->offset
    110, //bcp->virtual_function_table_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 _ZTI7S1591C3[];
extern void _ZN7S1591C3D1Ev();
extern void _ZN7S1591C3D0Ev();
extern void _ZN7S1591C42v9Ev();
extern void _ZN7S1591C43v10Ev();
extern void _ZN7S1591C43v11Ev();
extern void _ZN7S1591C43v12Ev();
extern void _ZN7S1591C43v13Ev();
extern void _ZN7S1591C43v14Ev();
extern void _ZN7S1591C43v15Ev();
extern void _ZN7S1591C43v16Ev();
extern void _ZN7S1591C43v17Ev();
extern void _ZN7S1591C43v18Ev();
extern void _ZN7S1591C43v19Ev();
extern void _ZN7S1591C43v20Ev();
extern void _ZN7S1591C43v21Ev();
extern void _ZN7S1591C43v22Ev();
extern void _ZN7S1591C43v23Ev();
extern void _ZN7S1591C43v24Ev();
extern void _ZN7S1591C43v25Ev();
extern void _ZN7S1591C43v26Ev();
extern void _ZN7S1591C43v27Ev();
extern void _ZN7S1591C43v28Ev();
extern void _ZN7S1591C43v29Ev();
extern void _ZN7S1591C43v30Ev();
extern void _ZN7S1591C43v31Ev();
extern void _ZN7S1591C43v32Ev();
extern void _ZN7S1591C43v33Ev();
extern void _ZN7S1591C43v34Ev();
extern void _ZN7S1591C43v35Ev();
extern void _ZN7S1591C43v36Ev();
extern void _ZN7S1591C43v37Ev();
extern void _ZN7S1591C43v38Ev();
extern void _ZN7S1591C43v39Ev();
extern void _ZN7S1591C43v40Ev();
extern void _ZN7S1591C43v41Ev();
extern void _ZN7S1591C43v42Ev();
extern void _ZN7S1591C43v43Ev();
extern void _ZN7S1591C43v44Ev();
extern void _ZN7S1591C43v45Ev();
extern void _ZN7S1591C43v46Ev();
extern void _ZN7S1591C43v47Ev();
extern void _ZN7S1591C43v48Ev();
extern void _ZN7S1591C43v49Ev();
extern void _ZN7S1591C43v50Ev();
extern void _ZN7S1591C43v51Ev();
extern void _ZN7S1591C43v52Ev();
extern void _ZN7S1591C43v53Ev();
extern void _ZN7S1591C43v54Ev();
extern void _ZN7S1591C43v55Ev();
extern void _ZN7S1591C43v56Ev();
extern void _ZN7S1591C43v57Ev();
extern void _ZN7S1591C43v58Ev();
extern void _ZN7S1591C43v59Ev();
extern void _ZN7S1591C43v60Ev();
extern void _ZN7S1591C43v61Ev();
extern void _ZN7S1591C43v62Ev();
extern void _ZN7S1591C43v63Ev();
extern void _ZN7S1591C43v64Ev();
extern void _ZN7S1591C43v65Ev();
extern void _ZN7S1591C43v66Ev();
extern void _ZN7S1591C43v67Ev();
extern void _ZN7S1591C43v68Ev();
extern void _ZN7S1591C43v69Ev();
extern void _ZN7S1591C43v70Ev();
extern void _ZN7S1591C43v71Ev();
extern void _ZN7S1591C43v72Ev();
extern void _ZN7S1591C33v98Ev();
extern void _ZN7S1591C33v99Ev();
extern void _ZN7S1591C34v100Ev();
extern void _ZN7S1591C34v101Ev();
extern void _ZN7S1591C34v102Ev();
extern void _ZN7S1591C34v103Ev();
extern void _ZN7S1591C34v104Ev();
extern void _ZN7S1591C34v105Ev();
extern void _ZN7S1591C34v106Ev();
extern void _ZN7S1591C34v107Ev();
extern void _ZN7S1591C34v108Ev();
extern void _ZN7S1591C34v109Ev();
extern void _ZN7S1591C34v110Ev();
extern void _ZN7S1591C34v111Ev();
extern void _ZN7S1591C34v112Ev();
extern void _ZN7S1591C34v113Ev();
extern void _ZN7S1591C34v114Ev();
extern void _ZN7S1591C34v115Ev();
extern void _ZN7S1591C34v116Ev();
extern void _ZN7S1591C34v117Ev();
extern void _ZN7S1591C34v118Ev();
extern void _ZN7S1591C34v119Ev();
extern void _ZN7S1591C34v120Ev();
extern void _ZN7S1591C34v121Ev();
extern void _ZN7S1591C63v73Ev();
extern void _ZN7S1591C63v74Ev();
extern void _ZN7S1591C63v75Ev();
extern void _ZN7S1591C63v76Ev();
extern void _ZN7S1591C63v77Ev();
extern void _ZN7S1591C63v78Ev();
extern void _ZN7S1591C63v79Ev();
extern void _ZN7S1591C63v80Ev();
extern void _ZN7S1591C63v81Ev();
extern void _ZN7S1591C63v82Ev();
extern void _ZN7S1591C63v83Ev();
extern void _ZN7S1591C63v84Ev();
extern void _ZN7S1591C63v85Ev();
extern void _ZN7S1591C63v86Ev();
extern void _ZN7S1591C63v87Ev();
extern void _ZN7S1591C63v88Ev();
extern void _ZN7S1591C73v89Ev();
extern void _ZN7S1591C73v90Ev();
extern void _ZN7S1591C73v91Ev();
extern void _ZN7S1591C73v92Ev();
extern void _ZN7S1591C73v93Ev();
extern void _ZN7S1591C73v94Ev();
extern void _ZN7S1591C73v95Ev();
extern void _ZN7S1591C73v96Ev();
extern void _ZN7S1591C73v97Ev();
static  VTBL_ENTRY vtc_S1591C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1591C3[0]),
  (VTBL_ENTRY)&_ZN7S1591C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1591C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1591C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1591C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1591C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v121Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1591C3[0]),
  (VTBL_ENTRY)&_ZN7S1591C63v73Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v74Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v75Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v76Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v77Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v78Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v79Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v80Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v81Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v82Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v83Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v85Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v86Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v87Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v88Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1591C3[0]),
  (VTBL_ENTRY)&_ZN7S1591C73v89Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v90Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v91Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v92Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v93Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v94Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v95Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v96Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v97Ev,
};
extern VTBL_ENTRY _ZTI7S1591C3[];
extern  VTBL_ENTRY _ZTV7S1591C3[];
Class_Descriptor cd_S1591C3 = {  "S1591C3", // class name
  bases_S1591C3, 3,
  &(vtc_S1591C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI7S1591C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1591C3),121, //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  S1591C2  : S1591C3 {
  ::S3262C11_nt s1591c2f0;
  int s1591c2f1;
  virtual  ~S1591C2(); // _ZN7S1591C2D1Ev
  virtual void  v122(); // _ZN7S1591C24v122Ev
  virtual void  v123(); // _ZN7S1591C24v123Ev
  virtual void  v124(); // _ZN7S1591C24v124Ev
  virtual void  v125(); // _ZN7S1591C24v125Ev
  virtual void  v126(); // _ZN7S1591C24v126Ev
  virtual void  v127(); // _ZN7S1591C24v127Ev
  virtual void  v128(); // _ZN7S1591C24v128Ev
  virtual void  v129(); // _ZN7S1591C24v129Ev
  virtual void  v130(); // _ZN7S1591C24v130Ev
  virtual void  v131(); // _ZN7S1591C24v131Ev
  virtual void  v132(); // _ZN7S1591C24v132Ev
  virtual void  v133(); // _ZN7S1591C24v133Ev
  virtual void  v134(); // _ZN7S1591C24v134Ev
  virtual void  v135(); // _ZN7S1591C24v135Ev
  virtual void  v136(); // _ZN7S1591C24v136Ev
  virtual void  v137(); // _ZN7S1591C24v137Ev
  virtual void  v138(); // _ZN7S1591C24v138Ev
  virtual void  v139(); // _ZN7S1591C24v139Ev
  virtual void  v140(); // _ZN7S1591C24v140Ev
  virtual void  v141(); // _ZN7S1591C24v141Ev
  virtual void  v142(); // _ZN7S1591C24v142Ev
  virtual void  v143(); // _ZN7S1591C24v143Ev
  virtual void  v144(); // _ZN7S1591C24v144Ev
  virtual void  v145(); // _ZN7S1591C24v145Ev
  virtual void  v146(); // _ZN7S1591C24v146Ev
  virtual void  v147(); // _ZN7S1591C24v147Ev
  virtual void  v148(); // _ZN7S1591C24v148Ev
  S1591C2(); // tgen
};
//SIG(-1 S1591C2) C1{ BC2{ BC3{ vd 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 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} BC5{ v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107} BC6{ v108 v109 v110 v111 v112 v113 v114 v115 v116} vd v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 Fp FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1} 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 FC11{ m FC12{ BC13{ BC10}} Fc} Fi}


 S1591C2 ::~S1591C2(){ note_dtor("S1591C2", this);}
void  S1591C2 ::v122(){vfunc_called(this, "_ZN7S1591C24v122Ev");}
void  S1591C2 ::v123(){vfunc_called(this, "_ZN7S1591C24v123Ev");}
void  S1591C2 ::v124(){vfunc_called(this, "_ZN7S1591C24v124Ev");}
void  S1591C2 ::v125(){vfunc_called(this, "_ZN7S1591C24v125Ev");}
void  S1591C2 ::v126(){vfunc_called(this, "_ZN7S1591C24v126Ev");}
void  S1591C2 ::v127(){vfunc_called(this, "_ZN7S1591C24v127Ev");}
void  S1591C2 ::v128(){vfunc_called(this, "_ZN7S1591C24v128Ev");}
void  S1591C2 ::v129(){vfunc_called(this, "_ZN7S1591C24v129Ev");}
void  S1591C2 ::v130(){vfunc_called(this, "_ZN7S1591C24v130Ev");}
void  S1591C2 ::v131(){vfunc_called(this, "_ZN7S1591C24v131Ev");}
void  S1591C2 ::v132(){vfunc_called(this, "_ZN7S1591C24v132Ev");}
void  S1591C2 ::v133(){vfunc_called(this, "_ZN7S1591C24v133Ev");}
void  S1591C2 ::v134(){vfunc_called(this, "_ZN7S1591C24v134Ev");}
void  S1591C2 ::v135(){vfunc_called(this, "_ZN7S1591C24v135Ev");}
void  S1591C2 ::v136(){vfunc_called(this, "_ZN7S1591C24v136Ev");}
void  S1591C2 ::v137(){vfunc_called(this, "_ZN7S1591C24v137Ev");}
void  S1591C2 ::v138(){vfunc_called(this, "_ZN7S1591C24v138Ev");}
void  S1591C2 ::v139(){vfunc_called(this, "_ZN7S1591C24v139Ev");}
void  S1591C2 ::v140(){vfunc_called(this, "_ZN7S1591C24v140Ev");}
void  S1591C2 ::v141(){vfunc_called(this, "_ZN7S1591C24v141Ev");}
void  S1591C2 ::v142(){vfunc_called(this, "_ZN7S1591C24v142Ev");}
void  S1591C2 ::v143(){vfunc_called(this, "_ZN7S1591C24v143Ev");}
void  S1591C2 ::v144(){vfunc_called(this, "_ZN7S1591C24v144Ev");}
void  S1591C2 ::v145(){vfunc_called(this, "_ZN7S1591C24v145Ev");}
void  S1591C2 ::v146(){vfunc_called(this, "_ZN7S1591C24v146Ev");}
void  S1591C2 ::v147(){vfunc_called(this, "_ZN7S1591C24v147Ev");}
void  S1591C2 ::v148(){vfunc_called(this, "_ZN7S1591C24v148Ev");}
S1591C2 ::S1591C2(){ note_ctor("S1591C2", this);} // tgen

static void Test_S1591C2()
{
  extern Class_Descriptor cd_S1591C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,28)];
    init_test(&cd_S1591C2, buf);
    S1591C2 *dp, &lv = *(dp=new (buf) S1591C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,108), "sizeof(S1591C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1591C2)");
    check_base_class_offset(lv, (S1591C4*)(S1591C3*), 0, "S1591C2");
    check_base_class_offset(lv, (S1591C6*)(S1591C3*), ABISELECT(96,60), "S1591C2");
    check_base_class_offset(lv, (S1591C7*)(S1591C3*), ABISELECT(104,64), "S1591C2");
    check_base_class_offset(lv, (S1591C3*), 0, "S1591C2");
    check_field_offset(lv, s1591c2f0, ABISELECT(144,88), "S1591C2.s1591c2f0");
    check_field_offset(lv, s1591c2f1, ABISELECT(168,104), "S1591C2.s1591c2f1");
    test_class_info(&lv, &cd_S1591C2);
    dp->~S1591C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1591C2(Test_S1591C2, "S1591C2", ABISELECT(176,108));

#else // __cplusplus

extern void _ZN7S1591C2C1Ev();
extern void _ZN7S1591C2D1Ev();
Name_Map name_map_S1591C2[] = {
  NSPAIR(_ZN7S1591C2C1Ev),
  NSPAIR(_ZN7S1591C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1591C4;
extern VTBL_ENTRY _ZTI7S1591C4[];
extern  VTBL_ENTRY _ZTV7S1591C4[];
extern Class_Descriptor cd_S1591C6;
extern VTBL_ENTRY _ZTI7S1591C6[];
extern  VTBL_ENTRY _ZTV7S1591C6[];
extern Class_Descriptor cd_S1591C7;
extern VTBL_ENTRY _ZTI7S1591C7[];
extern  VTBL_ENTRY _ZTV7S1591C7[];
extern Class_Descriptor cd_S1591C3;
extern VTBL_ENTRY _ZTI7S1591C3[];
extern  VTBL_ENTRY _ZTV7S1591C3[];
static Base_Class bases_S1591C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1591C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1591C6,    ABISELECT(96,60), //bcp->offset
    119, //bcp->virtual_function_table_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_S1591C7,    ABISELECT(104,64), //bcp->offset
    137, //bcp->virtual_function_table_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_S1591C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1591C2[];
extern void _ZN7S1591C2D1Ev();
extern void _ZN7S1591C2D0Ev();
extern void _ZN7S1591C42v9Ev();
extern void _ZN7S1591C43v10Ev();
extern void _ZN7S1591C43v11Ev();
extern void _ZN7S1591C43v12Ev();
extern void _ZN7S1591C43v13Ev();
extern void _ZN7S1591C43v14Ev();
extern void _ZN7S1591C43v15Ev();
extern void _ZN7S1591C43v16Ev();
extern void _ZN7S1591C43v17Ev();
extern void _ZN7S1591C43v18Ev();
extern void _ZN7S1591C43v19Ev();
extern void _ZN7S1591C43v20Ev();
extern void _ZN7S1591C43v21Ev();
extern void _ZN7S1591C43v22Ev();
extern void _ZN7S1591C43v23Ev();
extern void _ZN7S1591C43v24Ev();
extern void _ZN7S1591C43v25Ev();
extern void _ZN7S1591C43v26Ev();
extern void _ZN7S1591C43v27Ev();
extern void _ZN7S1591C43v28Ev();
extern void _ZN7S1591C43v29Ev();
extern void _ZN7S1591C43v30Ev();
extern void _ZN7S1591C43v31Ev();
extern void _ZN7S1591C43v32Ev();
extern void _ZN7S1591C43v33Ev();
extern void _ZN7S1591C43v34Ev();
extern void _ZN7S1591C43v35Ev();
extern void _ZN7S1591C43v36Ev();
extern void _ZN7S1591C43v37Ev();
extern void _ZN7S1591C43v38Ev();
extern void _ZN7S1591C43v39Ev();
extern void _ZN7S1591C43v40Ev();
extern void _ZN7S1591C43v41Ev();
extern void _ZN7S1591C43v42Ev();
extern void _ZN7S1591C43v43Ev();
extern void _ZN7S1591C43v44Ev();
extern void _ZN7S1591C43v45Ev();
extern void _ZN7S1591C43v46Ev();
extern void _ZN7S1591C43v47Ev();
extern void _ZN7S1591C43v48Ev();
extern void _ZN7S1591C43v49Ev();
extern void _ZN7S1591C43v50Ev();
extern void _ZN7S1591C43v51Ev();
extern void _ZN7S1591C43v52Ev();
extern void _ZN7S1591C43v53Ev();
extern void _ZN7S1591C43v54Ev();
extern void _ZN7S1591C43v55Ev();
extern void _ZN7S1591C43v56Ev();
extern void _ZN7S1591C43v57Ev();
extern void _ZN7S1591C43v58Ev();
extern void _ZN7S1591C43v59Ev();
extern void _ZN7S1591C43v60Ev();
extern void _ZN7S1591C43v61Ev();
extern void _ZN7S1591C43v62Ev();
extern void _ZN7S1591C43v63Ev();
extern void _ZN7S1591C43v64Ev();
extern void _ZN7S1591C43v65Ev();
extern void _ZN7S1591C43v66Ev();
extern void _ZN7S1591C43v67Ev();
extern void _ZN7S1591C43v68Ev();
extern void _ZN7S1591C43v69Ev();
extern void _ZN7S1591C43v70Ev();
extern void _ZN7S1591C43v71Ev();
extern void _ZN7S1591C43v72Ev();
extern void _ZN7S1591C33v98Ev();
extern void _ZN7S1591C33v99Ev();
extern void _ZN7S1591C34v100Ev();
extern void _ZN7S1591C34v101Ev();
extern void _ZN7S1591C34v102Ev();
extern void _ZN7S1591C34v103Ev();
extern void _ZN7S1591C34v104Ev();
extern void _ZN7S1591C34v105Ev();
extern void _ZN7S1591C34v106Ev();
extern void _ZN7S1591C34v107Ev();
extern void _ZN7S1591C34v108Ev();
extern void _ZN7S1591C34v109Ev();
extern void _ZN7S1591C34v110Ev();
extern void _ZN7S1591C34v111Ev();
extern void _ZN7S1591C34v112Ev();
extern void _ZN7S1591C34v113Ev();
extern void _ZN7S1591C34v114Ev();
extern void _ZN7S1591C34v115Ev();
extern void _ZN7S1591C34v116Ev();
extern void _ZN7S1591C34v117Ev();
extern void _ZN7S1591C34v118Ev();
extern void _ZN7S1591C34v119Ev();
extern void _ZN7S1591C34v120Ev();
extern void _ZN7S1591C34v121Ev();
extern void _ZN7S1591C24v122Ev();
extern void _ZN7S1591C24v123Ev();
extern void _ZN7S1591C24v124Ev();
extern void _ZN7S1591C24v125Ev();
extern void _ZN7S1591C24v126Ev();
extern void _ZN7S1591C24v127Ev();
extern void _ZN7S1591C24v128Ev();
extern void _ZN7S1591C24v129Ev();
extern void _ZN7S1591C24v130Ev();
extern void _ZN7S1591C24v131Ev();
extern void _ZN7S1591C24v132Ev();
extern void _ZN7S1591C24v133Ev();
extern void _ZN7S1591C24v134Ev();
extern void _ZN7S1591C24v135Ev();
extern void _ZN7S1591C24v136Ev();
extern void _ZN7S1591C24v137Ev();
extern void _ZN7S1591C24v138Ev();
extern void _ZN7S1591C24v139Ev();
extern void _ZN7S1591C24v140Ev();
extern void _ZN7S1591C24v141Ev();
extern void _ZN7S1591C24v142Ev();
extern void _ZN7S1591C24v143Ev();
extern void _ZN7S1591C24v144Ev();
extern void _ZN7S1591C24v145Ev();
extern void _ZN7S1591C24v146Ev();
extern void _ZN7S1591C24v147Ev();
extern void _ZN7S1591C24v148Ev();
extern void _ZN7S1591C63v73Ev();
extern void _ZN7S1591C63v74Ev();
extern void _ZN7S1591C63v75Ev();
extern void _ZN7S1591C63v76Ev();
extern void _ZN7S1591C63v77Ev();
extern void _ZN7S1591C63v78Ev();
extern void _ZN7S1591C63v79Ev();
extern void _ZN7S1591C63v80Ev();
extern void _ZN7S1591C63v81Ev();
extern void _ZN7S1591C63v82Ev();
extern void _ZN7S1591C63v83Ev();
extern void _ZN7S1591C63v84Ev();
extern void _ZN7S1591C63v85Ev();
extern void _ZN7S1591C63v86Ev();
extern void _ZN7S1591C63v87Ev();
extern void _ZN7S1591C63v88Ev();
extern void _ZN7S1591C73v89Ev();
extern void _ZN7S1591C73v90Ev();
extern void _ZN7S1591C73v91Ev();
extern void _ZN7S1591C73v92Ev();
extern void _ZN7S1591C73v93Ev();
extern void _ZN7S1591C73v94Ev();
extern void _ZN7S1591C73v95Ev();
extern void _ZN7S1591C73v96Ev();
extern void _ZN7S1591C73v97Ev();
static  VTBL_ENTRY vtc_S1591C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1591C2[0]),
  (VTBL_ENTRY)&_ZN7S1591C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1591C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1591C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1591C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1591C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v122Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v123Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v124Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v125Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v126Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v127Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v128Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v129Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v130Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v131Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v132Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v144Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v145Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v146Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v147Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v148Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1591C2[0]),
  (VTBL_ENTRY)&_ZN7S1591C63v73Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v74Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v75Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v76Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v77Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v78Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v79Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v80Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v81Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v82Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v83Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v85Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v86Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v87Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v88Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1591C2[0]),
  (VTBL_ENTRY)&_ZN7S1591C73v89Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v90Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v91Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v92Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v93Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v94Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v95Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v96Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v97Ev,
};
extern VTBL_ENTRY _ZTI7S1591C2[];
extern  VTBL_ENTRY _ZTV7S1591C2[];
Class_Descriptor cd_S1591C2 = {  "S1591C2", // class name
  bases_S1591C2, 4,
  &(vtc_S1591C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,108), // object size
  NSPAIRA(_ZTI7S1591C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1591C2),148, //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  S1591C1  : S1591C2 {
  virtual  ~S1591C1(); // _ZN7S1591C1D1Ev
  virtual void  v1(); // _ZN7S1591C12v1Ev
  virtual void  v2(); // _ZN7S1591C12v2Ev
  virtual void  v3(); // _ZN7S1591C12v3Ev
  virtual void  v4(); // _ZN7S1591C12v4Ev
  virtual void  v5(); // _ZN7S1591C12v5Ev
  virtual void  v6(); // _ZN7S1591C12v6Ev
  virtual void  v7(); // _ZN7S1591C12v7Ev
  virtual void  v8(); // _ZN7S1591C12v8Ev
  S1591C1(); // tgen
};
//SIG(1 S1591C1) 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 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} BC6{ v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88} BC7{ v89 v90 v91 v92 v93 v94 v95 v96 v97} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 Fp FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1} vd 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 FC12{ m FC13{ BC14{ BC11}} Fc} Fi} vd v1 v2 v3 v4 v5 v6 v7 v8}


 S1591C1 ::~S1591C1(){ note_dtor("S1591C1", this);}
void  S1591C1 ::v1(){vfunc_called(this, "_ZN7S1591C12v1Ev");}
void  S1591C1 ::v2(){vfunc_called(this, "_ZN7S1591C12v2Ev");}
void  S1591C1 ::v3(){vfunc_called(this, "_ZN7S1591C12v3Ev");}
void  S1591C1 ::v4(){vfunc_called(this, "_ZN7S1591C12v4Ev");}
void  S1591C1 ::v5(){vfunc_called(this, "_ZN7S1591C12v5Ev");}
void  S1591C1 ::v6(){vfunc_called(this, "_ZN7S1591C12v6Ev");}
void  S1591C1 ::v7(){vfunc_called(this, "_ZN7S1591C12v7Ev");}
void  S1591C1 ::v8(){vfunc_called(this, "_ZN7S1591C12v8Ev");}
S1591C1 ::S1591C1(){ note_ctor("S1591C1", this);} // tgen

static void Test_S1591C1()
{
  extern Class_Descriptor cd_S1591C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,28)];
    init_test(&cd_S1591C1, buf);
    S1591C1 *dp, &lv = *(dp=new (buf) S1591C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,108), "sizeof(S1591C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1591C1)");
    check_base_class_offset(lv, (S1591C4*)(S1591C3*)(S1591C2*), 0, "S1591C1");
    check_base_class_offset(lv, (S1591C6*)(S1591C3*)(S1591C2*), ABISELECT(96,60), "S1591C1");
    check_base_class_offset(lv, (S1591C7*)(S1591C3*)(S1591C2*), ABISELECT(104,64), "S1591C1");
    check_base_class_offset(lv, (S1591C3*)(S1591C2*), 0, "S1591C1");
    check_base_class_offset(lv, (S1591C2*), 0, "S1591C1");
    test_class_info(&lv, &cd_S1591C1);
    dp->~S1591C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1591C1(Test_S1591C1, "S1591C1", ABISELECT(176,108));

#else // __cplusplus

extern void _ZN7S1591C1C1Ev();
extern void _ZN7S1591C1D1Ev();
Name_Map name_map_S1591C1[] = {
  NSPAIR(_ZN7S1591C1C1Ev),
  NSPAIR(_ZN7S1591C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1591C4;
extern VTBL_ENTRY _ZTI7S1591C4[];
extern  VTBL_ENTRY _ZTV7S1591C4[];
extern Class_Descriptor cd_S1591C6;
extern VTBL_ENTRY _ZTI7S1591C6[];
extern  VTBL_ENTRY _ZTV7S1591C6[];
extern Class_Descriptor cd_S1591C7;
extern VTBL_ENTRY _ZTI7S1591C7[];
extern  VTBL_ENTRY _ZTV7S1591C7[];
extern Class_Descriptor cd_S1591C3;
extern VTBL_ENTRY _ZTI7S1591C3[];
extern  VTBL_ENTRY _ZTV7S1591C3[];
extern Class_Descriptor cd_S1591C2;
extern VTBL_ENTRY _ZTI7S1591C2[];
extern  VTBL_ENTRY _ZTV7S1591C2[];
static Base_Class bases_S1591C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1591C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1591C6,    ABISELECT(96,60), //bcp->offset
    127, //bcp->virtual_function_table_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_S1591C7,    ABISELECT(104,64), //bcp->offset
    145, //bcp->virtual_function_table_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_S1591C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1591C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1591C1[];
extern void _ZN7S1591C1D1Ev();
extern void _ZN7S1591C1D0Ev();
extern void _ZN7S1591C42v9Ev();
extern void _ZN7S1591C43v10Ev();
extern void _ZN7S1591C43v11Ev();
extern void _ZN7S1591C43v12Ev();
extern void _ZN7S1591C43v13Ev();
extern void _ZN7S1591C43v14Ev();
extern void _ZN7S1591C43v15Ev();
extern void _ZN7S1591C43v16Ev();
extern void _ZN7S1591C43v17Ev();
extern void _ZN7S1591C43v18Ev();
extern void _ZN7S1591C43v19Ev();
extern void _ZN7S1591C43v20Ev();
extern void _ZN7S1591C43v21Ev();
extern void _ZN7S1591C43v22Ev();
extern void _ZN7S1591C43v23Ev();
extern void _ZN7S1591C43v24Ev();
extern void _ZN7S1591C43v25Ev();
extern void _ZN7S1591C43v26Ev();
extern void _ZN7S1591C43v27Ev();
extern void _ZN7S1591C43v28Ev();
extern void _ZN7S1591C43v29Ev();
extern void _ZN7S1591C43v30Ev();
extern void _ZN7S1591C43v31Ev();
extern void _ZN7S1591C43v32Ev();
extern void _ZN7S1591C43v33Ev();
extern void _ZN7S1591C43v34Ev();
extern void _ZN7S1591C43v35Ev();
extern void _ZN7S1591C43v36Ev();
extern void _ZN7S1591C43v37Ev();
extern void _ZN7S1591C43v38Ev();
extern void _ZN7S1591C43v39Ev();
extern void _ZN7S1591C43v40Ev();
extern void _ZN7S1591C43v41Ev();
extern void _ZN7S1591C43v42Ev();
extern void _ZN7S1591C43v43Ev();
extern void _ZN7S1591C43v44Ev();
extern void _ZN7S1591C43v45Ev();
extern void _ZN7S1591C43v46Ev();
extern void _ZN7S1591C43v47Ev();
extern void _ZN7S1591C43v48Ev();
extern void _ZN7S1591C43v49Ev();
extern void _ZN7S1591C43v50Ev();
extern void _ZN7S1591C43v51Ev();
extern void _ZN7S1591C43v52Ev();
extern void _ZN7S1591C43v53Ev();
extern void _ZN7S1591C43v54Ev();
extern void _ZN7S1591C43v55Ev();
extern void _ZN7S1591C43v56Ev();
extern void _ZN7S1591C43v57Ev();
extern void _ZN7S1591C43v58Ev();
extern void _ZN7S1591C43v59Ev();
extern void _ZN7S1591C43v60Ev();
extern void _ZN7S1591C43v61Ev();
extern void _ZN7S1591C43v62Ev();
extern void _ZN7S1591C43v63Ev();
extern void _ZN7S1591C43v64Ev();
extern void _ZN7S1591C43v65Ev();
extern void _ZN7S1591C43v66Ev();
extern void _ZN7S1591C43v67Ev();
extern void _ZN7S1591C43v68Ev();
extern void _ZN7S1591C43v69Ev();
extern void _ZN7S1591C43v70Ev();
extern void _ZN7S1591C43v71Ev();
extern void _ZN7S1591C43v72Ev();
extern void _ZN7S1591C33v98Ev();
extern void _ZN7S1591C33v99Ev();
extern void _ZN7S1591C34v100Ev();
extern void _ZN7S1591C34v101Ev();
extern void _ZN7S1591C34v102Ev();
extern void _ZN7S1591C34v103Ev();
extern void _ZN7S1591C34v104Ev();
extern void _ZN7S1591C34v105Ev();
extern void _ZN7S1591C34v106Ev();
extern void _ZN7S1591C34v107Ev();
extern void _ZN7S1591C34v108Ev();
extern void _ZN7S1591C34v109Ev();
extern void _ZN7S1591C34v110Ev();
extern void _ZN7S1591C34v111Ev();
extern void _ZN7S1591C34v112Ev();
extern void _ZN7S1591C34v113Ev();
extern void _ZN7S1591C34v114Ev();
extern void _ZN7S1591C34v115Ev();
extern void _ZN7S1591C34v116Ev();
extern void _ZN7S1591C34v117Ev();
extern void _ZN7S1591C34v118Ev();
extern void _ZN7S1591C34v119Ev();
extern void _ZN7S1591C34v120Ev();
extern void _ZN7S1591C34v121Ev();
extern void _ZN7S1591C24v122Ev();
extern void _ZN7S1591C24v123Ev();
extern void _ZN7S1591C24v124Ev();
extern void _ZN7S1591C24v125Ev();
extern void _ZN7S1591C24v126Ev();
extern void _ZN7S1591C24v127Ev();
extern void _ZN7S1591C24v128Ev();
extern void _ZN7S1591C24v129Ev();
extern void _ZN7S1591C24v130Ev();
extern void _ZN7S1591C24v131Ev();
extern void _ZN7S1591C24v132Ev();
extern void _ZN7S1591C24v133Ev();
extern void _ZN7S1591C24v134Ev();
extern void _ZN7S1591C24v135Ev();
extern void _ZN7S1591C24v136Ev();
extern void _ZN7S1591C24v137Ev();
extern void _ZN7S1591C24v138Ev();
extern void _ZN7S1591C24v139Ev();
extern void _ZN7S1591C24v140Ev();
extern void _ZN7S1591C24v141Ev();
extern void _ZN7S1591C24v142Ev();
extern void _ZN7S1591C24v143Ev();
extern void _ZN7S1591C24v144Ev();
extern void _ZN7S1591C24v145Ev();
extern void _ZN7S1591C24v146Ev();
extern void _ZN7S1591C24v147Ev();
extern void _ZN7S1591C24v148Ev();
extern void _ZN7S1591C12v1Ev();
extern void _ZN7S1591C12v2Ev();
extern void _ZN7S1591C12v3Ev();
extern void _ZN7S1591C12v4Ev();
extern void _ZN7S1591C12v5Ev();
extern void _ZN7S1591C12v6Ev();
extern void _ZN7S1591C12v7Ev();
extern void _ZN7S1591C12v8Ev();
extern void _ZN7S1591C63v73Ev();
extern void _ZN7S1591C63v74Ev();
extern void _ZN7S1591C63v75Ev();
extern void _ZN7S1591C63v76Ev();
extern void _ZN7S1591C63v77Ev();
extern void _ZN7S1591C63v78Ev();
extern void _ZN7S1591C63v79Ev();
extern void _ZN7S1591C63v80Ev();
extern void _ZN7S1591C63v81Ev();
extern void _ZN7S1591C63v82Ev();
extern void _ZN7S1591C63v83Ev();
extern void _ZN7S1591C63v84Ev();
extern void _ZN7S1591C63v85Ev();
extern void _ZN7S1591C63v86Ev();
extern void _ZN7S1591C63v87Ev();
extern void _ZN7S1591C63v88Ev();
extern void _ZN7S1591C73v89Ev();
extern void _ZN7S1591C73v90Ev();
extern void _ZN7S1591C73v91Ev();
extern void _ZN7S1591C73v92Ev();
extern void _ZN7S1591C73v93Ev();
extern void _ZN7S1591C73v94Ev();
extern void _ZN7S1591C73v95Ev();
extern void _ZN7S1591C73v96Ev();
extern void _ZN7S1591C73v97Ev();
static  VTBL_ENTRY vtc_S1591C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1591C1[0]),
  (VTBL_ENTRY)&_ZN7S1591C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1591C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1591C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1591C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1591C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1591C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1591C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v122Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v123Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v124Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v125Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v126Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v127Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v128Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v129Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v130Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v131Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v132Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v144Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v145Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v146Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v147Ev,
  (VTBL_ENTRY)&_ZN7S1591C24v148Ev,
  (VTBL_ENTRY)&_ZN7S1591C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1591C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1591C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1591C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1591C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1591C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1591C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1591C12v8Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1591C1[0]),
  (VTBL_ENTRY)&_ZN7S1591C63v73Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v74Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v75Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v76Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v77Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v78Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v79Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v80Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v81Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v82Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v83Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v85Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v86Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v87Ev,
  (VTBL_ENTRY)&_ZN7S1591C63v88Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1591C1[0]),
  (VTBL_ENTRY)&_ZN7S1591C73v89Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v90Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v91Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v92Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v93Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v94Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v95Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v96Ev,
  (VTBL_ENTRY)&_ZN7S1591C73v97Ev,
};
extern VTBL_ENTRY _ZTI7S1591C1[];
extern  VTBL_ENTRY _ZTV7S1591C1[];
Class_Descriptor cd_S1591C1 = {  "S1591C1", // class name
  bases_S1591C1, 5,
  &(vtc_S1591C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,108), // object size
  NSPAIRA(_ZTI7S1591C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1591C1),156, //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  S1588C4  {
  int s1588c4f0;
  __tsi64 s1588c4f1;
  void *s1588c4f2[4];
  int s1588c4f3[2];
  void *s1588c4f4;
  ::S79C8_nt s1588c4f5;
  void *s1588c4f6[2];
  virtual  ~S1588C4(); // _ZN7S1588C4D1Ev
  virtual void  v9(); // _ZN7S1588C42v9Ev
  virtual void  v10(); // _ZN7S1588C43v10Ev
  virtual void  v11(); // _ZN7S1588C43v11Ev
  virtual void  v12(); // _ZN7S1588C43v12Ev
  virtual void  v13(); // _ZN7S1588C43v13Ev
  virtual void  v14(); // _ZN7S1588C43v14Ev
  virtual void  v15(); // _ZN7S1588C43v15Ev
  virtual void  v16(); // _ZN7S1588C43v16Ev
  virtual void  v17(); // _ZN7S1588C43v17Ev
  virtual void  v18(); // _ZN7S1588C43v18Ev
  virtual void  v19(); // _ZN7S1588C43v19Ev
  virtual void  v20(); // _ZN7S1588C43v20Ev
  virtual void  v21(); // _ZN7S1588C43v21Ev
  virtual void  v22(); // _ZN7S1588C43v22Ev
  virtual void  v23(); // _ZN7S1588C43v23Ev
  virtual void  v24(); // _ZN7S1588C43v24Ev
  virtual void  v25(); // _ZN7S1588C43v25Ev
  virtual void  v26(); // _ZN7S1588C43v26Ev
  virtual void  v27(); // _ZN7S1588C43v27Ev
  virtual void  v28(); // _ZN7S1588C43v28Ev
  virtual void  v29(); // _ZN7S1588C43v29Ev
  virtual void  v30(); // _ZN7S1588C43v30Ev
  virtual void  v31(); // _ZN7S1588C43v31Ev
  virtual void  v32(); // _ZN7S1588C43v32Ev
  virtual void  v33(); // _ZN7S1588C43v33Ev
  virtual void  v34(); // _ZN7S1588C43v34Ev
  virtual void  v35(); // _ZN7S1588C43v35Ev
  virtual void  v36(); // _ZN7S1588C43v36Ev
  virtual void  v37(); // _ZN7S1588C43v37Ev
  virtual void  v38(); // _ZN7S1588C43v38Ev
  virtual void  v39(); // _ZN7S1588C43v39Ev
  virtual void  v40(); // _ZN7S1588C43v40Ev
  virtual void  v41(); // _ZN7S1588C43v41Ev
  virtual void  v42(); // _ZN7S1588C43v42Ev
  virtual void  v43(); // _ZN7S1588C43v43Ev
  virtual void  v44(); // _ZN7S1588C43v44Ev
  virtual void  v45(); // _ZN7S1588C43v45Ev
  virtual void  v46(); // _ZN7S1588C43v46Ev
  virtual void  v47(); // _ZN7S1588C43v47Ev
  virtual void  v48(); // _ZN7S1588C43v48Ev
  virtual void  v49(); // _ZN7S1588C43v49Ev
  virtual void  v50(); // _ZN7S1588C43v50Ev
  virtual void  v51(); // _ZN7S1588C43v51Ev
  virtual void  v52(); // _ZN7S1588C43v52Ev
  virtual void  v53(); // _ZN7S1588C43v53Ev
  virtual void  v54(); // _ZN7S1588C43v54Ev
  virtual void  v55(); // _ZN7S1588C43v55Ev
  virtual void  v56(); // _ZN7S1588C43v56Ev
  virtual void  v57(); // _ZN7S1588C43v57Ev
  virtual void  v58(); // _ZN7S1588C43v58Ev
  virtual void  v59(); // _ZN7S1588C43v59Ev
  virtual void  v60(); // _ZN7S1588C43v60Ev
  virtual void  v61(); // _ZN7S1588C43v61Ev
  virtual void  v62(); // _ZN7S1588C43v62Ev
  virtual void  v63(); // _ZN7S1588C43v63Ev
  virtual void  v64(); // _ZN7S1588C43v64Ev
  virtual void  v65(); // _ZN7S1588C43v65Ev
  virtual void  v66(); // _ZN7S1588C43v66Ev
  virtual void  v67(); // _ZN7S1588C43v67Ev
  virtual void  v68(); // _ZN7S1588C43v68Ev
  virtual void  v69(); // _ZN7S1588C43v69Ev
  virtual void  v70(); // _ZN7S1588C43v70Ev
  virtual void  v71(); // _ZN7S1588C43v71Ev
  virtual void  v72(); // _ZN7S1588C43v72Ev
  S1588C4(); // tgen
};
//SIG(-1 S1588C4) 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]}


 S1588C4 ::~S1588C4(){ note_dtor("S1588C4", this);}
void  S1588C4 ::v9(){vfunc_called(this, "_ZN7S1588C42v9Ev");}
void  S1588C4 ::v10(){vfunc_called(this, "_ZN7S1588C43v10Ev");}
void  S1588C4 ::v11(){vfunc_called(this, "_ZN7S1588C43v11Ev");}
void  S1588C4 ::v12(){vfunc_called(this, "_ZN7S1588C43v12Ev");}
void  S1588C4 ::v13(){vfunc_called(this, "_ZN7S1588C43v13Ev");}
void  S1588C4 ::v14(){vfunc_called(this, "_ZN7S1588C43v14Ev");}
void  S1588C4 ::v15(){vfunc_called(this, "_ZN7S1588C43v15Ev");}
void  S1588C4 ::v16(){vfunc_called(this, "_ZN7S1588C43v16Ev");}
void  S1588C4 ::v17(){vfunc_called(this, "_ZN7S1588C43v17Ev");}
void  S1588C4 ::v18(){vfunc_called(this, "_ZN7S1588C43v18Ev");}
void  S1588C4 ::v19(){vfunc_called(this, "_ZN7S1588C43v19Ev");}
void  S1588C4 ::v20(){vfunc_called(this, "_ZN7S1588C43v20Ev");}
void  S1588C4 ::v21(){vfunc_called(this, "_ZN7S1588C43v21Ev");}
void  S1588C4 ::v22(){vfunc_called(this, "_ZN7S1588C43v22Ev");}
void  S1588C4 ::v23(){vfunc_called(this, "_ZN7S1588C43v23Ev");}
void  S1588C4 ::v24(){vfunc_called(this, "_ZN7S1588C43v24Ev");}
void  S1588C4 ::v25(){vfunc_called(this, "_ZN7S1588C43v25Ev");}
void  S1588C4 ::v26(){vfunc_called(this, "_ZN7S1588C43v26Ev");}
void  S1588C4 ::v27(){vfunc_called(this, "_ZN7S1588C43v27Ev");}
void  S1588C4 ::v28(){vfunc_called(this, "_ZN7S1588C43v28Ev");}
void  S1588C4 ::v29(){vfunc_called(this, "_ZN7S1588C43v29Ev");}
void  S1588C4 ::v30(){vfunc_called(this, "_ZN7S1588C43v30Ev");}
void  S1588C4 ::v31(){vfunc_called(this, "_ZN7S1588C43v31Ev");}
void  S1588C4 ::v32(){vfunc_called(this, "_ZN7S1588C43v32Ev");}
void  S1588C4 ::v33(){vfunc_called(this, "_ZN7S1588C43v33Ev");}
void  S1588C4 ::v34(){vfunc_called(this, "_ZN7S1588C43v34Ev");}
void  S1588C4 ::v35(){vfunc_called(this, "_ZN7S1588C43v35Ev");}
void  S1588C4 ::v36(){vfunc_called(this, "_ZN7S1588C43v36Ev");}
void  S1588C4 ::v37(){vfunc_called(this, "_ZN7S1588C43v37Ev");}
void  S1588C4 ::v38(){vfunc_called(this, "_ZN7S1588C43v38Ev");}
void  S1588C4 ::v39(){vfunc_called(this, "_ZN7S1588C43v39Ev");}
void  S1588C4 ::v40(){vfunc_called(this, "_ZN7S1588C43v40Ev");}
void  S1588C4 ::v41(){vfunc_called(this, "_ZN7S1588C43v41Ev");}
void  S1588C4 ::v42(){vfunc_called(this, "_ZN7S1588C43v42Ev");}
void  S1588C4 ::v43(){vfunc_called(this, "_ZN7S1588C43v43Ev");}
void  S1588C4 ::v44(){vfunc_called(this, "_ZN7S1588C43v44Ev");}
void  S1588C4 ::v45(){vfunc_called(this, "_ZN7S1588C43v45Ev");}
void  S1588C4 ::v46(){vfunc_called(this, "_ZN7S1588C43v46Ev");}
void  S1588C4 ::v47(){vfunc_called(this, "_ZN7S1588C43v47Ev");}
void  S1588C4 ::v48(){vfunc_called(this, "_ZN7S1588C43v48Ev");}
void  S1588C4 ::v49(){vfunc_called(this, "_ZN7S1588C43v49Ev");}
void  S1588C4 ::v50(){vfunc_called(this, "_ZN7S1588C43v50Ev");}
void  S1588C4 ::v51(){vfunc_called(this, "_ZN7S1588C43v51Ev");}
void  S1588C4 ::v52(){vfunc_called(this, "_ZN7S1588C43v52Ev");}
void  S1588C4 ::v53(){vfunc_called(this, "_ZN7S1588C43v53Ev");}
void  S1588C4 ::v54(){vfunc_called(this, "_ZN7S1588C43v54Ev");}
void  S1588C4 ::v55(){vfunc_called(this, "_ZN7S1588C43v55Ev");}
void  S1588C4 ::v56(){vfunc_called(this, "_ZN7S1588C43v56Ev");}
void  S1588C4 ::v57(){vfunc_called(this, "_ZN7S1588C43v57Ev");}
void  S1588C4 ::v58(){vfunc_called(this, "_ZN7S1588C43v58Ev");}
void  S1588C4 ::v59(){vfunc_called(this, "_ZN7S1588C43v59Ev");}
void  S1588C4 ::v60(){vfunc_called(this, "_ZN7S1588C43v60Ev");}
void  S1588C4 ::v61(){vfunc_called(this, "_ZN7S1588C43v61Ev");}
void  S1588C4 ::v62(){vfunc_called(this, "_ZN7S1588C43v62Ev");}
void  S1588C4 ::v63(){vfunc_called(this, "_ZN7S1588C43v63Ev");}
void  S1588C4 ::v64(){vfunc_called(this, "_ZN7S1588C43v64Ev");}
void  S1588C4 ::v65(){vfunc_called(this, "_ZN7S1588C43v65Ev");}
void  S1588C4 ::v66(){vfunc_called(this, "_ZN7S1588C43v66Ev");}
void  S1588C4 ::v67(){vfunc_called(this, "_ZN7S1588C43v67Ev");}
void  S1588C4 ::v68(){vfunc_called(this, "_ZN7S1588C43v68Ev");}
void  S1588C4 ::v69(){vfunc_called(this, "_ZN7S1588C43v69Ev");}
void  S1588C4 ::v70(){vfunc_called(this, "_ZN7S1588C43v70Ev");}
void  S1588C4 ::v71(){vfunc_called(this, "_ZN7S1588C43v71Ev");}
void  S1588C4 ::v72(){vfunc_called(this, "_ZN7S1588C43v72Ev");}
S1588C4 ::S1588C4(){ note_ctor("S1588C4", this);} // tgen

static void Test_S1588C4()
{
  extern Class_Descriptor cd_S1588C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1588C4, buf);
    S1588C4 *dp, &lv = *(dp=new (buf) S1588C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1588C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1588C4)");
    check_field_offset(lv, s1588c4f0, ABISELECT(8,4), "S1588C4.s1588c4f0");
    check_field_offset(lv, s1588c4f1, ABISELECT(16,8), "S1588C4.s1588c4f1");
    check_field_offset(lv, s1588c4f2, ABISELECT(24,16), "S1588C4.s1588c4f2");
    check_field_offset(lv, s1588c4f3, ABISELECT(56,32), "S1588C4.s1588c4f3");
    check_field_offset(lv, s1588c4f4, ABISELECT(64,40), "S1588C4.s1588c4f4");
    check_field_offset(lv, s1588c4f5, ABISELECT(72,44), "S1588C4.s1588c4f5");
    check_field_offset(lv, s1588c4f6, ABISELECT(80,52), "S1588C4.s1588c4f6");
    test_class_info(&lv, &cd_S1588C4);
    dp->~S1588C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1588C4(Test_S1588C4, "S1588C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1588C4C1Ev();
extern void _ZN7S1588C4D1Ev();
Name_Map name_map_S1588C4[] = {
  NSPAIR(_ZN7S1588C4C1Ev),
  NSPAIR(_ZN7S1588C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1588C4[];
extern void _ZN7S1588C4D1Ev();
extern void _ZN7S1588C4D0Ev();
extern void _ZN7S1588C42v9Ev();
extern void _ZN7S1588C43v10Ev();
extern void _ZN7S1588C43v11Ev();
extern void _ZN7S1588C43v12Ev();
extern void _ZN7S1588C43v13Ev();
extern void _ZN7S1588C43v14Ev();
extern void _ZN7S1588C43v15Ev();
extern void _ZN7S1588C43v16Ev();
extern void _ZN7S1588C43v17Ev();
extern void _ZN7S1588C43v18Ev();
extern void _ZN7S1588C43v19Ev();
extern void _ZN7S1588C43v20Ev();
extern void _ZN7S1588C43v21Ev();
extern void _ZN7S1588C43v22Ev();
extern void _ZN7S1588C43v23Ev();
extern void _ZN7S1588C43v24Ev();
extern void _ZN7S1588C43v25Ev();
extern void _ZN7S1588C43v26Ev();
extern void _ZN7S1588C43v27Ev();
extern void _ZN7S1588C43v28Ev();
extern void _ZN7S1588C43v29Ev();
extern void _ZN7S1588C43v30Ev();
extern void _ZN7S1588C43v31Ev();
extern void _ZN7S1588C43v32Ev();
extern void _ZN7S1588C43v33Ev();
extern void _ZN7S1588C43v34Ev();
extern void _ZN7S1588C43v35Ev();
extern void _ZN7S1588C43v36Ev();
extern void _ZN7S1588C43v37Ev();
extern void _ZN7S1588C43v38Ev();
extern void _ZN7S1588C43v39Ev();
extern void _ZN7S1588C43v40Ev();
extern void _ZN7S1588C43v41Ev();
extern void _ZN7S1588C43v42Ev();
extern void _ZN7S1588C43v43Ev();
extern void _ZN7S1588C43v44Ev();
extern void _ZN7S1588C43v45Ev();
extern void _ZN7S1588C43v46Ev();
extern void _ZN7S1588C43v47Ev();
extern void _ZN7S1588C43v48Ev();
extern void _ZN7S1588C43v49Ev();
extern void _ZN7S1588C43v50Ev();
extern void _ZN7S1588C43v51Ev();
extern void _ZN7S1588C43v52Ev();
extern void _ZN7S1588C43v53Ev();
extern void _ZN7S1588C43v54Ev();
extern void _ZN7S1588C43v55Ev();
extern void _ZN7S1588C43v56Ev();
extern void _ZN7S1588C43v57Ev();
extern void _ZN7S1588C43v58Ev();
extern void _ZN7S1588C43v59Ev();
extern void _ZN7S1588C43v60Ev();
extern void _ZN7S1588C43v61Ev();
extern void _ZN7S1588C43v62Ev();
extern void _ZN7S1588C43v63Ev();
extern void _ZN7S1588C43v64Ev();
extern void _ZN7S1588C43v65Ev();
extern void _ZN7S1588C43v66Ev();
extern void _ZN7S1588C43v67Ev();
extern void _ZN7S1588C43v68Ev();
extern void _ZN7S1588C43v69Ev();
extern void _ZN7S1588C43v70Ev();
extern void _ZN7S1588C43v71Ev();
extern void _ZN7S1588C43v72Ev();
static  VTBL_ENTRY vtc_S1588C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1588C4[0]),
  (VTBL_ENTRY)&_ZN7S1588C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1588C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1588C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v72Ev,
};
extern VTBL_ENTRY _ZTI7S1588C4[];
extern  VTBL_ENTRY _ZTV7S1588C4[];
Class_Descriptor cd_S1588C4 = {  "S1588C4", // class name
  0,0,//no base classes
  &(vtc_S1588C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1588C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1588C4),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  S1588C6  {
  virtual void  v73(); // _ZN7S1588C63v73Ev
  virtual void  v74(); // _ZN7S1588C63v74Ev
  virtual void  v75(); // _ZN7S1588C63v75Ev
  virtual void  v76(); // _ZN7S1588C63v76Ev
  virtual void  v77(); // _ZN7S1588C63v77Ev
  virtual void  v78(); // _ZN7S1588C63v78Ev
  virtual void  v79(); // _ZN7S1588C63v79Ev
  virtual void  v80(); // _ZN7S1588C63v80Ev
  virtual void  v81(); // _ZN7S1588C63v81Ev
  virtual void  v82(); // _ZN7S1588C63v82Ev
  virtual void  v83(); // _ZN7S1588C63v83Ev
  virtual void  v84(); // _ZN7S1588C63v84Ev
  virtual void  v85(); // _ZN7S1588C63v85Ev
  virtual void  v86(); // _ZN7S1588C63v86Ev
  virtual void  v87(); // _ZN7S1588C63v87Ev
  virtual void  v88(); // _ZN7S1588C63v88Ev
  ~S1588C6(); // tgen
  S1588C6(); // tgen
};
//SIG(-1 S1588C6) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16}


void  S1588C6 ::v73(){vfunc_called(this, "_ZN7S1588C63v73Ev");}
void  S1588C6 ::v74(){vfunc_called(this, "_ZN7S1588C63v74Ev");}
void  S1588C6 ::v75(){vfunc_called(this, "_ZN7S1588C63v75Ev");}
void  S1588C6 ::v76(){vfunc_called(this, "_ZN7S1588C63v76Ev");}
void  S1588C6 ::v77(){vfunc_called(this, "_ZN7S1588C63v77Ev");}
void  S1588C6 ::v78(){vfunc_called(this, "_ZN7S1588C63v78Ev");}
void  S1588C6 ::v79(){vfunc_called(this, "_ZN7S1588C63v79Ev");}
void  S1588C6 ::v80(){vfunc_called(this, "_ZN7S1588C63v80Ev");}
void  S1588C6 ::v81(){vfunc_called(this, "_ZN7S1588C63v81Ev");}
void  S1588C6 ::v82(){vfunc_called(this, "_ZN7S1588C63v82Ev");}
void  S1588C6 ::v83(){vfunc_called(this, "_ZN7S1588C63v83Ev");}
void  S1588C6 ::v84(){vfunc_called(this, "_ZN7S1588C63v84Ev");}
void  S1588C6 ::v85(){vfunc_called(this, "_ZN7S1588C63v85Ev");}
void  S1588C6 ::v86(){vfunc_called(this, "_ZN7S1588C63v86Ev");}
void  S1588C6 ::v87(){vfunc_called(this, "_ZN7S1588C63v87Ev");}
void  S1588C6 ::v88(){vfunc_called(this, "_ZN7S1588C63v88Ev");}
S1588C6 ::~S1588C6(){ note_dtor("S1588C6", this);} // tgen
S1588C6 ::S1588C6(){ note_ctor("S1588C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1588C6C1Ev();
extern void _ZN7S1588C6D1Ev();
Name_Map name_map_S1588C6[] = {
  NSPAIR(_ZN7S1588C6C1Ev),
  NSPAIR(_ZN7S1588C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1588C6[];
extern void _ZN7S1588C63v73Ev();
extern void _ZN7S1588C63v74Ev();
extern void _ZN7S1588C63v75Ev();
extern void _ZN7S1588C63v76Ev();
extern void _ZN7S1588C63v77Ev();
extern void _ZN7S1588C63v78Ev();
extern void _ZN7S1588C63v79Ev();
extern void _ZN7S1588C63v80Ev();
extern void _ZN7S1588C63v81Ev();
extern void _ZN7S1588C63v82Ev();
extern void _ZN7S1588C63v83Ev();
extern void _ZN7S1588C63v84Ev();
extern void _ZN7S1588C63v85Ev();
extern void _ZN7S1588C63v86Ev();
extern void _ZN7S1588C63v87Ev();
extern void _ZN7S1588C63v88Ev();
static  VTBL_ENTRY vtc_S1588C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1588C6[0]),
  (VTBL_ENTRY)&_ZN7S1588C63v73Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v74Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v75Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v76Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v77Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v78Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v79Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v80Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v81Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v82Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v83Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v85Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v86Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v87Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v88Ev,
};
extern VTBL_ENTRY _ZTI7S1588C6[];
extern  VTBL_ENTRY _ZTV7S1588C6[];
Class_Descriptor cd_S1588C6 = {  "S1588C6", // class name
  0,0,//no base classes
  &(vtc_S1588C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1588C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1588C6),18, //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  S1588C7  {
  virtual void  v89(); // _ZN7S1588C73v89Ev
  virtual void  v90(); // _ZN7S1588C73v90Ev
  virtual void  v91(); // _ZN7S1588C73v91Ev
  virtual void  v92(); // _ZN7S1588C73v92Ev
  virtual void  v93(); // _ZN7S1588C73v93Ev
  virtual void  v94(); // _ZN7S1588C73v94Ev
  virtual void  v95(); // _ZN7S1588C73v95Ev
  virtual void  v96(); // _ZN7S1588C73v96Ev
  virtual void  v97(); // _ZN7S1588C73v97Ev
  ~S1588C7(); // tgen
  S1588C7(); // tgen
};
//SIG(-1 S1588C7) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S1588C7 ::v89(){vfunc_called(this, "_ZN7S1588C73v89Ev");}
void  S1588C7 ::v90(){vfunc_called(this, "_ZN7S1588C73v90Ev");}
void  S1588C7 ::v91(){vfunc_called(this, "_ZN7S1588C73v91Ev");}
void  S1588C7 ::v92(){vfunc_called(this, "_ZN7S1588C73v92Ev");}
void  S1588C7 ::v93(){vfunc_called(this, "_ZN7S1588C73v93Ev");}
void  S1588C7 ::v94(){vfunc_called(this, "_ZN7S1588C73v94Ev");}
void  S1588C7 ::v95(){vfunc_called(this, "_ZN7S1588C73v95Ev");}
void  S1588C7 ::v96(){vfunc_called(this, "_ZN7S1588C73v96Ev");}
void  S1588C7 ::v97(){vfunc_called(this, "_ZN7S1588C73v97Ev");}
S1588C7 ::~S1588C7(){ note_dtor("S1588C7", this);} // tgen
S1588C7 ::S1588C7(){ note_ctor("S1588C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1588C7C1Ev();
extern void _ZN7S1588C7D1Ev();
Name_Map name_map_S1588C7[] = {
  NSPAIR(_ZN7S1588C7C1Ev),
  NSPAIR(_ZN7S1588C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1588C7[];
extern void _ZN7S1588C73v89Ev();
extern void _ZN7S1588C73v90Ev();
extern void _ZN7S1588C73v91Ev();
extern void _ZN7S1588C73v92Ev();
extern void _ZN7S1588C73v93Ev();
extern void _ZN7S1588C73v94Ev();
extern void _ZN7S1588C73v95Ev();
extern void _ZN7S1588C73v96Ev();
extern void _ZN7S1588C73v97Ev();
static  VTBL_ENTRY vtc_S1588C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1588C7[0]),
  (VTBL_ENTRY)&_ZN7S1588C73v89Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v90Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v91Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v92Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v93Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v94Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v95Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v96Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v97Ev,
};
extern VTBL_ENTRY _ZTI7S1588C7[];
extern  VTBL_ENTRY _ZTV7S1588C7[];
Class_Descriptor cd_S1588C7 = {  "S1588C7", // class name
  0,0,//no base classes
  &(vtc_S1588C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1588C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1588C7),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  S1588C3  : S1588C4 , S1588C6 , S1588C7 {
  void *s1588c3f0;
  ::S79C39_nt s1588c3f1;
  unsigned int s1588c3f2:1;
  unsigned int s1588c3f3:1;
  unsigned int s1588c3f4:1;
  unsigned int s1588c3f5:1;
  virtual  ~S1588C3(); // _ZN7S1588C3D1Ev
  virtual void  v98(); // _ZN7S1588C33v98Ev
  virtual void  v99(); // _ZN7S1588C33v99Ev
  virtual void  v100(); // _ZN7S1588C34v100Ev
  virtual void  v101(); // _ZN7S1588C34v101Ev
  virtual void  v102(); // _ZN7S1588C34v102Ev
  virtual void  v103(); // _ZN7S1588C34v103Ev
  virtual void  v104(); // _ZN7S1588C34v104Ev
  virtual void  v105(); // _ZN7S1588C34v105Ev
  virtual void  v106(); // _ZN7S1588C34v106Ev
  virtual void  v107(); // _ZN7S1588C34v107Ev
  virtual void  v108(); // _ZN7S1588C34v108Ev
  virtual void  v109(); // _ZN7S1588C34v109Ev
  virtual void  v110(); // _ZN7S1588C34v110Ev
  virtual void  v111(); // _ZN7S1588C34v111Ev
  virtual void  v112(); // _ZN7S1588C34v112Ev
  virtual void  v113(); // _ZN7S1588C34v113Ev
  virtual void  v114(); // _ZN7S1588C34v114Ev
  virtual void  v115(); // _ZN7S1588C34v115Ev
  virtual void  v116(); // _ZN7S1588C34v116Ev
  virtual void  v117(); // _ZN7S1588C34v117Ev
  virtual void  v118(); // _ZN7S1588C34v118Ev
  virtual void  v119(); // _ZN7S1588C34v119Ev
  virtual void  v120(); // _ZN7S1588C34v120Ev
  virtual void  v121(); // _ZN7S1588C34v121Ev
  S1588C3(); // tgen
};
//SIG(-1 S1588C3) C1{ BC2{ vd 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 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} BC4{ v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104} BC5{ v105 v106 v107 v108 v109 v110 v111 v112 v113} 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 Fp FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1}


 S1588C3 ::~S1588C3(){ note_dtor("S1588C3", this);}
void  S1588C3 ::v98(){vfunc_called(this, "_ZN7S1588C33v98Ev");}
void  S1588C3 ::v99(){vfunc_called(this, "_ZN7S1588C33v99Ev");}
void  S1588C3 ::v100(){vfunc_called(this, "_ZN7S1588C34v100Ev");}
void  S1588C3 ::v101(){vfunc_called(this, "_ZN7S1588C34v101Ev");}
void  S1588C3 ::v102(){vfunc_called(this, "_ZN7S1588C34v102Ev");}
void  S1588C3 ::v103(){vfunc_called(this, "_ZN7S1588C34v103Ev");}
void  S1588C3 ::v104(){vfunc_called(this, "_ZN7S1588C34v104Ev");}
void  S1588C3 ::v105(){vfunc_called(this, "_ZN7S1588C34v105Ev");}
void  S1588C3 ::v106(){vfunc_called(this, "_ZN7S1588C34v106Ev");}
void  S1588C3 ::v107(){vfunc_called(this, "_ZN7S1588C34v107Ev");}
void  S1588C3 ::v108(){vfunc_called(this, "_ZN7S1588C34v108Ev");}
void  S1588C3 ::v109(){vfunc_called(this, "_ZN7S1588C34v109Ev");}
void  S1588C3 ::v110(){vfunc_called(this, "_ZN7S1588C34v110Ev");}
void  S1588C3 ::v111(){vfunc_called(this, "_ZN7S1588C34v111Ev");}
void  S1588C3 ::v112(){vfunc_called(this, "_ZN7S1588C34v112Ev");}
void  S1588C3 ::v113(){vfunc_called(this, "_ZN7S1588C34v113Ev");}
void  S1588C3 ::v114(){vfunc_called(this, "_ZN7S1588C34v114Ev");}
void  S1588C3 ::v115(){vfunc_called(this, "_ZN7S1588C34v115Ev");}
void  S1588C3 ::v116(){vfunc_called(this, "_ZN7S1588C34v116Ev");}
void  S1588C3 ::v117(){vfunc_called(this, "_ZN7S1588C34v117Ev");}
void  S1588C3 ::v118(){vfunc_called(this, "_ZN7S1588C34v118Ev");}
void  S1588C3 ::v119(){vfunc_called(this, "_ZN7S1588C34v119Ev");}
void  S1588C3 ::v120(){vfunc_called(this, "_ZN7S1588C34v120Ev");}
void  S1588C3 ::v121(){vfunc_called(this, "_ZN7S1588C34v121Ev");}
S1588C3 ::S1588C3(){ note_ctor("S1588C3", this);} // tgen

static void Test_S1588C3()
{
  extern Class_Descriptor cd_S1588C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,23)];
    init_test(&cd_S1588C3, buf);
    S1588C3 *dp, &lv = *(dp=new (buf) S1588C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S1588C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1588C3)");
    check_base_class_offset(lv, (S1588C4*), 0, "S1588C3");
    check_base_class_offset(lv, (S1588C6*), ABISELECT(96,60), "S1588C3");
    check_base_class_offset(lv, (S1588C7*), ABISELECT(104,64), "S1588C3");
    check_field_offset(lv, s1588c3f0, ABISELECT(112,68), "S1588C3.s1588c3f0");
    check_field_offset(lv, s1588c3f1, ABISELECT(120,72), "S1588C3.s1588c3f1");
    set_bf_and_test(lv, s1588c3f2, ABISELECT(136,84), 0, 1, 1, "S1588C3");
    set_bf_and_test(lv, s1588c3f3, ABISELECT(136,84), 1, 1, 1, "S1588C3");
    set_bf_and_test(lv, s1588c3f4, ABISELECT(136,84), 2, 1, 1, "S1588C3");
    set_bf_and_test(lv, s1588c3f5, ABISELECT(136,84), 3, 1, 1, "S1588C3");
    test_class_info(&lv, &cd_S1588C3);
    dp->~S1588C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1588C3(Test_S1588C3, "S1588C3", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN7S1588C3C1Ev();
extern void _ZN7S1588C3D1Ev();
Name_Map name_map_S1588C3[] = {
  NSPAIR(_ZN7S1588C3C1Ev),
  NSPAIR(_ZN7S1588C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1588C4;
extern VTBL_ENTRY _ZTI7S1588C4[];
extern  VTBL_ENTRY _ZTV7S1588C4[];
extern Class_Descriptor cd_S1588C6;
extern VTBL_ENTRY _ZTI7S1588C6[];
extern  VTBL_ENTRY _ZTV7S1588C6[];
extern Class_Descriptor cd_S1588C7;
extern VTBL_ENTRY _ZTI7S1588C7[];
extern  VTBL_ENTRY _ZTV7S1588C7[];
static Base_Class bases_S1588C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1588C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1588C6,    ABISELECT(96,60), //bcp->offset
    92, //bcp->virtual_function_table_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_S1588C7,    ABISELECT(104,64), //bcp->offset
    110, //bcp->virtual_function_table_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 _ZTI7S1588C3[];
extern void _ZN7S1588C3D1Ev();
extern void _ZN7S1588C3D0Ev();
extern void _ZN7S1588C42v9Ev();
extern void _ZN7S1588C43v10Ev();
extern void _ZN7S1588C43v11Ev();
extern void _ZN7S1588C43v12Ev();
extern void _ZN7S1588C43v13Ev();
extern void _ZN7S1588C43v14Ev();
extern void _ZN7S1588C43v15Ev();
extern void _ZN7S1588C43v16Ev();
extern void _ZN7S1588C43v17Ev();
extern void _ZN7S1588C43v18Ev();
extern void _ZN7S1588C43v19Ev();
extern void _ZN7S1588C43v20Ev();
extern void _ZN7S1588C43v21Ev();
extern void _ZN7S1588C43v22Ev();
extern void _ZN7S1588C43v23Ev();
extern void _ZN7S1588C43v24Ev();
extern void _ZN7S1588C43v25Ev();
extern void _ZN7S1588C43v26Ev();
extern void _ZN7S1588C43v27Ev();
extern void _ZN7S1588C43v28Ev();
extern void _ZN7S1588C43v29Ev();
extern void _ZN7S1588C43v30Ev();
extern void _ZN7S1588C43v31Ev();
extern void _ZN7S1588C43v32Ev();
extern void _ZN7S1588C43v33Ev();
extern void _ZN7S1588C43v34Ev();
extern void _ZN7S1588C43v35Ev();
extern void _ZN7S1588C43v36Ev();
extern void _ZN7S1588C43v37Ev();
extern void _ZN7S1588C43v38Ev();
extern void _ZN7S1588C43v39Ev();
extern void _ZN7S1588C43v40Ev();
extern void _ZN7S1588C43v41Ev();
extern void _ZN7S1588C43v42Ev();
extern void _ZN7S1588C43v43Ev();
extern void _ZN7S1588C43v44Ev();
extern void _ZN7S1588C43v45Ev();
extern void _ZN7S1588C43v46Ev();
extern void _ZN7S1588C43v47Ev();
extern void _ZN7S1588C43v48Ev();
extern void _ZN7S1588C43v49Ev();
extern void _ZN7S1588C43v50Ev();
extern void _ZN7S1588C43v51Ev();
extern void _ZN7S1588C43v52Ev();
extern void _ZN7S1588C43v53Ev();
extern void _ZN7S1588C43v54Ev();
extern void _ZN7S1588C43v55Ev();
extern void _ZN7S1588C43v56Ev();
extern void _ZN7S1588C43v57Ev();
extern void _ZN7S1588C43v58Ev();
extern void _ZN7S1588C43v59Ev();
extern void _ZN7S1588C43v60Ev();
extern void _ZN7S1588C43v61Ev();
extern void _ZN7S1588C43v62Ev();
extern void _ZN7S1588C43v63Ev();
extern void _ZN7S1588C43v64Ev();
extern void _ZN7S1588C43v65Ev();
extern void _ZN7S1588C43v66Ev();
extern void _ZN7S1588C43v67Ev();
extern void _ZN7S1588C43v68Ev();
extern void _ZN7S1588C43v69Ev();
extern void _ZN7S1588C43v70Ev();
extern void _ZN7S1588C43v71Ev();
extern void _ZN7S1588C43v72Ev();
extern void _ZN7S1588C33v98Ev();
extern void _ZN7S1588C33v99Ev();
extern void _ZN7S1588C34v100Ev();
extern void _ZN7S1588C34v101Ev();
extern void _ZN7S1588C34v102Ev();
extern void _ZN7S1588C34v103Ev();
extern void _ZN7S1588C34v104Ev();
extern void _ZN7S1588C34v105Ev();
extern void _ZN7S1588C34v106Ev();
extern void _ZN7S1588C34v107Ev();
extern void _ZN7S1588C34v108Ev();
extern void _ZN7S1588C34v109Ev();
extern void _ZN7S1588C34v110Ev();
extern void _ZN7S1588C34v111Ev();
extern void _ZN7S1588C34v112Ev();
extern void _ZN7S1588C34v113Ev();
extern void _ZN7S1588C34v114Ev();
extern void _ZN7S1588C34v115Ev();
extern void _ZN7S1588C34v116Ev();
extern void _ZN7S1588C34v117Ev();
extern void _ZN7S1588C34v118Ev();
extern void _ZN7S1588C34v119Ev();
extern void _ZN7S1588C34v120Ev();
extern void _ZN7S1588C34v121Ev();
extern void _ZN7S1588C63v73Ev();
extern void _ZN7S1588C63v74Ev();
extern void _ZN7S1588C63v75Ev();
extern void _ZN7S1588C63v76Ev();
extern void _ZN7S1588C63v77Ev();
extern void _ZN7S1588C63v78Ev();
extern void _ZN7S1588C63v79Ev();
extern void _ZN7S1588C63v80Ev();
extern void _ZN7S1588C63v81Ev();
extern void _ZN7S1588C63v82Ev();
extern void _ZN7S1588C63v83Ev();
extern void _ZN7S1588C63v84Ev();
extern void _ZN7S1588C63v85Ev();
extern void _ZN7S1588C63v86Ev();
extern void _ZN7S1588C63v87Ev();
extern void _ZN7S1588C63v88Ev();
extern void _ZN7S1588C73v89Ev();
extern void _ZN7S1588C73v90Ev();
extern void _ZN7S1588C73v91Ev();
extern void _ZN7S1588C73v92Ev();
extern void _ZN7S1588C73v93Ev();
extern void _ZN7S1588C73v94Ev();
extern void _ZN7S1588C73v95Ev();
extern void _ZN7S1588C73v96Ev();
extern void _ZN7S1588C73v97Ev();
static  VTBL_ENTRY vtc_S1588C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1588C3[0]),
  (VTBL_ENTRY)&_ZN7S1588C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1588C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1588C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1588C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1588C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v121Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1588C3[0]),
  (VTBL_ENTRY)&_ZN7S1588C63v73Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v74Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v75Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v76Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v77Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v78Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v79Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v80Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v81Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v82Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v83Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v85Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v86Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v87Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v88Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1588C3[0]),
  (VTBL_ENTRY)&_ZN7S1588C73v89Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v90Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v91Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v92Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v93Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v94Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v95Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v96Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v97Ev,
};
extern VTBL_ENTRY _ZTI7S1588C3[];
extern  VTBL_ENTRY _ZTV7S1588C3[];
Class_Descriptor cd_S1588C3 = {  "S1588C3", // class name
  bases_S1588C3, 3,
  &(vtc_S1588C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI7S1588C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1588C3),121, //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  S1588C2  : S1588C3 {
  ::S3262C11_nt s1588c2f0;
  int s1588c2f1;
  virtual  ~S1588C2(); // _ZN7S1588C2D1Ev
  virtual void  v122(); // _ZN7S1588C24v122Ev
  virtual void  v123(); // _ZN7S1588C24v123Ev
  virtual void  v124(); // _ZN7S1588C24v124Ev
  virtual void  v125(); // _ZN7S1588C24v125Ev
  virtual void  v126(); // _ZN7S1588C24v126Ev
  virtual void  v127(); // _ZN7S1588C24v127Ev
  virtual void  v128(); // _ZN7S1588C24v128Ev
  virtual void  v129(); // _ZN7S1588C24v129Ev
  virtual void  v130(); // _ZN7S1588C24v130Ev
  virtual void  v131(); // _ZN7S1588C24v131Ev
  virtual void  v132(); // _ZN7S1588C24v132Ev
  virtual void  v133(); // _ZN7S1588C24v133Ev
  virtual void  v134(); // _ZN7S1588C24v134Ev
  virtual void  v135(); // _ZN7S1588C24v135Ev
  virtual void  v136(); // _ZN7S1588C24v136Ev
  virtual void  v137(); // _ZN7S1588C24v137Ev
  virtual void  v138(); // _ZN7S1588C24v138Ev
  virtual void  v139(); // _ZN7S1588C24v139Ev
  virtual void  v140(); // _ZN7S1588C24v140Ev
  virtual void  v141(); // _ZN7S1588C24v141Ev
  virtual void  v142(); // _ZN7S1588C24v142Ev
  virtual void  v143(); // _ZN7S1588C24v143Ev
  virtual void  v144(); // _ZN7S1588C24v144Ev
  virtual void  v145(); // _ZN7S1588C24v145Ev
  virtual void  v146(); // _ZN7S1588C24v146Ev
  virtual void  v147(); // _ZN7S1588C24v147Ev
  S1588C2(); // tgen
};
//SIG(-1 S1588C2) C1{ BC2{ BC3{ vd 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 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} BC5{ v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106} BC6{ v107 v108 v109 v110 v111 v112 v113 v114 v115} vd v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 Fp FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1} 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 FC11{ m FC12{ BC13{ BC10}} Fc} Fi}


 S1588C2 ::~S1588C2(){ note_dtor("S1588C2", this);}
void  S1588C2 ::v122(){vfunc_called(this, "_ZN7S1588C24v122Ev");}
void  S1588C2 ::v123(){vfunc_called(this, "_ZN7S1588C24v123Ev");}
void  S1588C2 ::v124(){vfunc_called(this, "_ZN7S1588C24v124Ev");}
void  S1588C2 ::v125(){vfunc_called(this, "_ZN7S1588C24v125Ev");}
void  S1588C2 ::v126(){vfunc_called(this, "_ZN7S1588C24v126Ev");}
void  S1588C2 ::v127(){vfunc_called(this, "_ZN7S1588C24v127Ev");}
void  S1588C2 ::v128(){vfunc_called(this, "_ZN7S1588C24v128Ev");}
void  S1588C2 ::v129(){vfunc_called(this, "_ZN7S1588C24v129Ev");}
void  S1588C2 ::v130(){vfunc_called(this, "_ZN7S1588C24v130Ev");}
void  S1588C2 ::v131(){vfunc_called(this, "_ZN7S1588C24v131Ev");}
void  S1588C2 ::v132(){vfunc_called(this, "_ZN7S1588C24v132Ev");}
void  S1588C2 ::v133(){vfunc_called(this, "_ZN7S1588C24v133Ev");}
void  S1588C2 ::v134(){vfunc_called(this, "_ZN7S1588C24v134Ev");}
void  S1588C2 ::v135(){vfunc_called(this, "_ZN7S1588C24v135Ev");}
void  S1588C2 ::v136(){vfunc_called(this, "_ZN7S1588C24v136Ev");}
void  S1588C2 ::v137(){vfunc_called(this, "_ZN7S1588C24v137Ev");}
void  S1588C2 ::v138(){vfunc_called(this, "_ZN7S1588C24v138Ev");}
void  S1588C2 ::v139(){vfunc_called(this, "_ZN7S1588C24v139Ev");}
void  S1588C2 ::v140(){vfunc_called(this, "_ZN7S1588C24v140Ev");}
void  S1588C2 ::v141(){vfunc_called(this, "_ZN7S1588C24v141Ev");}
void  S1588C2 ::v142(){vfunc_called(this, "_ZN7S1588C24v142Ev");}
void  S1588C2 ::v143(){vfunc_called(this, "_ZN7S1588C24v143Ev");}
void  S1588C2 ::v144(){vfunc_called(this, "_ZN7S1588C24v144Ev");}
void  S1588C2 ::v145(){vfunc_called(this, "_ZN7S1588C24v145Ev");}
void  S1588C2 ::v146(){vfunc_called(this, "_ZN7S1588C24v146Ev");}
void  S1588C2 ::v147(){vfunc_called(this, "_ZN7S1588C24v147Ev");}
S1588C2 ::S1588C2(){ note_ctor("S1588C2", this);} // tgen

static void Test_S1588C2()
{
  extern Class_Descriptor cd_S1588C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,28)];
    init_test(&cd_S1588C2, buf);
    S1588C2 *dp, &lv = *(dp=new (buf) S1588C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,108), "sizeof(S1588C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1588C2)");
    check_base_class_offset(lv, (S1588C4*)(S1588C3*), 0, "S1588C2");
    check_base_class_offset(lv, (S1588C6*)(S1588C3*), ABISELECT(96,60), "S1588C2");
    check_base_class_offset(lv, (S1588C7*)(S1588C3*), ABISELECT(104,64), "S1588C2");
    check_base_class_offset(lv, (S1588C3*), 0, "S1588C2");
    check_field_offset(lv, s1588c2f0, ABISELECT(144,88), "S1588C2.s1588c2f0");
    check_field_offset(lv, s1588c2f1, ABISELECT(168,104), "S1588C2.s1588c2f1");
    test_class_info(&lv, &cd_S1588C2);
    dp->~S1588C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1588C2(Test_S1588C2, "S1588C2", ABISELECT(176,108));

#else // __cplusplus

extern void _ZN7S1588C2C1Ev();
extern void _ZN7S1588C2D1Ev();
Name_Map name_map_S1588C2[] = {
  NSPAIR(_ZN7S1588C2C1Ev),
  NSPAIR(_ZN7S1588C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1588C4;
extern VTBL_ENTRY _ZTI7S1588C4[];
extern  VTBL_ENTRY _ZTV7S1588C4[];
extern Class_Descriptor cd_S1588C6;
extern VTBL_ENTRY _ZTI7S1588C6[];
extern  VTBL_ENTRY _ZTV7S1588C6[];
extern Class_Descriptor cd_S1588C7;
extern VTBL_ENTRY _ZTI7S1588C7[];
extern  VTBL_ENTRY _ZTV7S1588C7[];
extern Class_Descriptor cd_S1588C3;
extern VTBL_ENTRY _ZTI7S1588C3[];
extern  VTBL_ENTRY _ZTV7S1588C3[];
static Base_Class bases_S1588C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1588C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1588C6,    ABISELECT(96,60), //bcp->offset
    118, //bcp->virtual_function_table_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_S1588C7,    ABISELECT(104,64), //bcp->offset
    136, //bcp->virtual_function_table_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_S1588C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1588C2[];
extern void _ZN7S1588C2D1Ev();
extern void _ZN7S1588C2D0Ev();
extern void _ZN7S1588C42v9Ev();
extern void _ZN7S1588C43v10Ev();
extern void _ZN7S1588C43v11Ev();
extern void _ZN7S1588C43v12Ev();
extern void _ZN7S1588C43v13Ev();
extern void _ZN7S1588C43v14Ev();
extern void _ZN7S1588C43v15Ev();
extern void _ZN7S1588C43v16Ev();
extern void _ZN7S1588C43v17Ev();
extern void _ZN7S1588C43v18Ev();
extern void _ZN7S1588C43v19Ev();
extern void _ZN7S1588C43v20Ev();
extern void _ZN7S1588C43v21Ev();
extern void _ZN7S1588C43v22Ev();
extern void _ZN7S1588C43v23Ev();
extern void _ZN7S1588C43v24Ev();
extern void _ZN7S1588C43v25Ev();
extern void _ZN7S1588C43v26Ev();
extern void _ZN7S1588C43v27Ev();
extern void _ZN7S1588C43v28Ev();
extern void _ZN7S1588C43v29Ev();
extern void _ZN7S1588C43v30Ev();
extern void _ZN7S1588C43v31Ev();
extern void _ZN7S1588C43v32Ev();
extern void _ZN7S1588C43v33Ev();
extern void _ZN7S1588C43v34Ev();
extern void _ZN7S1588C43v35Ev();
extern void _ZN7S1588C43v36Ev();
extern void _ZN7S1588C43v37Ev();
extern void _ZN7S1588C43v38Ev();
extern void _ZN7S1588C43v39Ev();
extern void _ZN7S1588C43v40Ev();
extern void _ZN7S1588C43v41Ev();
extern void _ZN7S1588C43v42Ev();
extern void _ZN7S1588C43v43Ev();
extern void _ZN7S1588C43v44Ev();
extern void _ZN7S1588C43v45Ev();
extern void _ZN7S1588C43v46Ev();
extern void _ZN7S1588C43v47Ev();
extern void _ZN7S1588C43v48Ev();
extern void _ZN7S1588C43v49Ev();
extern void _ZN7S1588C43v50Ev();
extern void _ZN7S1588C43v51Ev();
extern void _ZN7S1588C43v52Ev();
extern void _ZN7S1588C43v53Ev();
extern void _ZN7S1588C43v54Ev();
extern void _ZN7S1588C43v55Ev();
extern void _ZN7S1588C43v56Ev();
extern void _ZN7S1588C43v57Ev();
extern void _ZN7S1588C43v58Ev();
extern void _ZN7S1588C43v59Ev();
extern void _ZN7S1588C43v60Ev();
extern void _ZN7S1588C43v61Ev();
extern void _ZN7S1588C43v62Ev();
extern void _ZN7S1588C43v63Ev();
extern void _ZN7S1588C43v64Ev();
extern void _ZN7S1588C43v65Ev();
extern void _ZN7S1588C43v66Ev();
extern void _ZN7S1588C43v67Ev();
extern void _ZN7S1588C43v68Ev();
extern void _ZN7S1588C43v69Ev();
extern void _ZN7S1588C43v70Ev();
extern void _ZN7S1588C43v71Ev();
extern void _ZN7S1588C43v72Ev();
extern void _ZN7S1588C33v98Ev();
extern void _ZN7S1588C33v99Ev();
extern void _ZN7S1588C34v100Ev();
extern void _ZN7S1588C34v101Ev();
extern void _ZN7S1588C34v102Ev();
extern void _ZN7S1588C34v103Ev();
extern void _ZN7S1588C34v104Ev();
extern void _ZN7S1588C34v105Ev();
extern void _ZN7S1588C34v106Ev();
extern void _ZN7S1588C34v107Ev();
extern void _ZN7S1588C34v108Ev();
extern void _ZN7S1588C34v109Ev();
extern void _ZN7S1588C34v110Ev();
extern void _ZN7S1588C34v111Ev();
extern void _ZN7S1588C34v112Ev();
extern void _ZN7S1588C34v113Ev();
extern void _ZN7S1588C34v114Ev();
extern void _ZN7S1588C34v115Ev();
extern void _ZN7S1588C34v116Ev();
extern void _ZN7S1588C34v117Ev();
extern void _ZN7S1588C34v118Ev();
extern void _ZN7S1588C34v119Ev();
extern void _ZN7S1588C34v120Ev();
extern void _ZN7S1588C34v121Ev();
extern void _ZN7S1588C24v122Ev();
extern void _ZN7S1588C24v123Ev();
extern void _ZN7S1588C24v124Ev();
extern void _ZN7S1588C24v125Ev();
extern void _ZN7S1588C24v126Ev();
extern void _ZN7S1588C24v127Ev();
extern void _ZN7S1588C24v128Ev();
extern void _ZN7S1588C24v129Ev();
extern void _ZN7S1588C24v130Ev();
extern void _ZN7S1588C24v131Ev();
extern void _ZN7S1588C24v132Ev();
extern void _ZN7S1588C24v133Ev();
extern void _ZN7S1588C24v134Ev();
extern void _ZN7S1588C24v135Ev();
extern void _ZN7S1588C24v136Ev();
extern void _ZN7S1588C24v137Ev();
extern void _ZN7S1588C24v138Ev();
extern void _ZN7S1588C24v139Ev();
extern void _ZN7S1588C24v140Ev();
extern void _ZN7S1588C24v141Ev();
extern void _ZN7S1588C24v142Ev();
extern void _ZN7S1588C24v143Ev();
extern void _ZN7S1588C24v144Ev();
extern void _ZN7S1588C24v145Ev();
extern void _ZN7S1588C24v146Ev();
extern void _ZN7S1588C24v147Ev();
extern void _ZN7S1588C63v73Ev();
extern void _ZN7S1588C63v74Ev();
extern void _ZN7S1588C63v75Ev();
extern void _ZN7S1588C63v76Ev();
extern void _ZN7S1588C63v77Ev();
extern void _ZN7S1588C63v78Ev();
extern void _ZN7S1588C63v79Ev();
extern void _ZN7S1588C63v80Ev();
extern void _ZN7S1588C63v81Ev();
extern void _ZN7S1588C63v82Ev();
extern void _ZN7S1588C63v83Ev();
extern void _ZN7S1588C63v84Ev();
extern void _ZN7S1588C63v85Ev();
extern void _ZN7S1588C63v86Ev();
extern void _ZN7S1588C63v87Ev();
extern void _ZN7S1588C63v88Ev();
extern void _ZN7S1588C73v89Ev();
extern void _ZN7S1588C73v90Ev();
extern void _ZN7S1588C73v91Ev();
extern void _ZN7S1588C73v92Ev();
extern void _ZN7S1588C73v93Ev();
extern void _ZN7S1588C73v94Ev();
extern void _ZN7S1588C73v95Ev();
extern void _ZN7S1588C73v96Ev();
extern void _ZN7S1588C73v97Ev();
static  VTBL_ENTRY vtc_S1588C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1588C2[0]),
  (VTBL_ENTRY)&_ZN7S1588C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1588C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1588C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1588C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1588C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v122Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v123Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v124Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v125Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v126Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v127Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v128Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v129Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v130Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v131Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v132Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v144Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v145Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v146Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v147Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1588C2[0]),
  (VTBL_ENTRY)&_ZN7S1588C63v73Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v74Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v75Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v76Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v77Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v78Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v79Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v80Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v81Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v82Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v83Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v85Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v86Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v87Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v88Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1588C2[0]),
  (VTBL_ENTRY)&_ZN7S1588C73v89Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v90Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v91Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v92Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v93Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v94Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v95Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v96Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v97Ev,
};
extern VTBL_ENTRY _ZTI7S1588C2[];
extern  VTBL_ENTRY _ZTV7S1588C2[];
Class_Descriptor cd_S1588C2 = {  "S1588C2", // class name
  bases_S1588C2, 4,
  &(vtc_S1588C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,108), // object size
  NSPAIRA(_ZTI7S1588C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1588C2),147, //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  S1588C1  : S1588C2 {
  ::S79C8_nt s1588c1f0;
  virtual  ~S1588C1(); // _ZN7S1588C1D1Ev
  virtual void  v1(); // _ZN7S1588C12v1Ev
  virtual void  v2(); // _ZN7S1588C12v2Ev
  virtual void  v3(); // _ZN7S1588C12v3Ev
  virtual void  v4(); // _ZN7S1588C12v4Ev
  virtual void  v5(); // _ZN7S1588C12v5Ev
  virtual void  v6(); // _ZN7S1588C12v6Ev
  virtual void  v7(); // _ZN7S1588C12v7Ev
  virtual void  v8(); // _ZN7S1588C12v8Ev
  S1588C1(); // tgen
};
//SIG(1 S1588C1) 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 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} BC6{ v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88} BC7{ v89 v90 v91 v92 v93 v94 v95 v96 v97} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 Fp FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1} vd 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 FC12{ m FC13{ BC14{ BC11}} Fc} Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 FC5}


 S1588C1 ::~S1588C1(){ note_dtor("S1588C1", this);}
void  S1588C1 ::v1(){vfunc_called(this, "_ZN7S1588C12v1Ev");}
void  S1588C1 ::v2(){vfunc_called(this, "_ZN7S1588C12v2Ev");}
void  S1588C1 ::v3(){vfunc_called(this, "_ZN7S1588C12v3Ev");}
void  S1588C1 ::v4(){vfunc_called(this, "_ZN7S1588C12v4Ev");}
void  S1588C1 ::v5(){vfunc_called(this, "_ZN7S1588C12v5Ev");}
void  S1588C1 ::v6(){vfunc_called(this, "_ZN7S1588C12v6Ev");}
void  S1588C1 ::v7(){vfunc_called(this, "_ZN7S1588C12v7Ev");}
void  S1588C1 ::v8(){vfunc_called(this, "_ZN7S1588C12v8Ev");}
S1588C1 ::S1588C1(){ note_ctor("S1588C1", this);} // tgen

static void Test_S1588C1()
{
  extern Class_Descriptor cd_S1588C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,30)];
    init_test(&cd_S1588C1, buf);
    S1588C1 *dp, &lv = *(dp=new (buf) S1588C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,116), "sizeof(S1588C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1588C1)");
    check_base_class_offset(lv, (S1588C4*)(S1588C3*)(S1588C2*), 0, "S1588C1");
    check_base_class_offset(lv, (S1588C6*)(S1588C3*)(S1588C2*), ABISELECT(96,60), "S1588C1");
    check_base_class_offset(lv, (S1588C7*)(S1588C3*)(S1588C2*), ABISELECT(104,64), "S1588C1");
    check_base_class_offset(lv, (S1588C3*)(S1588C2*), 0, "S1588C1");
    check_base_class_offset(lv, (S1588C2*), 0, "S1588C1");
    check_field_offset(lv, s1588c1f0, ABISELECT(172,108), "S1588C1.s1588c1f0");
    test_class_info(&lv, &cd_S1588C1);
    dp->~S1588C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1588C1(Test_S1588C1, "S1588C1", ABISELECT(184,116));

#else // __cplusplus

extern void _ZN7S1588C1C1Ev();
extern void _ZN7S1588C1D1Ev();
Name_Map name_map_S1588C1[] = {
  NSPAIR(_ZN7S1588C1C1Ev),
  NSPAIR(_ZN7S1588C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1588C4;
extern VTBL_ENTRY _ZTI7S1588C4[];
extern  VTBL_ENTRY _ZTV7S1588C4[];
extern Class_Descriptor cd_S1588C6;
extern VTBL_ENTRY _ZTI7S1588C6[];
extern  VTBL_ENTRY _ZTV7S1588C6[];
extern Class_Descriptor cd_S1588C7;
extern VTBL_ENTRY _ZTI7S1588C7[];
extern  VTBL_ENTRY _ZTV7S1588C7[];
extern Class_Descriptor cd_S1588C3;
extern VTBL_ENTRY _ZTI7S1588C3[];
extern  VTBL_ENTRY _ZTV7S1588C3[];
extern Class_Descriptor cd_S1588C2;
extern VTBL_ENTRY _ZTI7S1588C2[];
extern  VTBL_ENTRY _ZTV7S1588C2[];
static Base_Class bases_S1588C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1588C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1588C6,    ABISELECT(96,60), //bcp->offset
    126, //bcp->virtual_function_table_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_S1588C7,    ABISELECT(104,64), //bcp->offset
    144, //bcp->virtual_function_table_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_S1588C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1588C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1588C1[];
extern void _ZN7S1588C1D1Ev();
extern void _ZN7S1588C1D0Ev();
extern void _ZN7S1588C42v9Ev();
extern void _ZN7S1588C43v10Ev();
extern void _ZN7S1588C43v11Ev();
extern void _ZN7S1588C43v12Ev();
extern void _ZN7S1588C43v13Ev();
extern void _ZN7S1588C43v14Ev();
extern void _ZN7S1588C43v15Ev();
extern void _ZN7S1588C43v16Ev();
extern void _ZN7S1588C43v17Ev();
extern void _ZN7S1588C43v18Ev();
extern void _ZN7S1588C43v19Ev();
extern void _ZN7S1588C43v20Ev();
extern void _ZN7S1588C43v21Ev();
extern void _ZN7S1588C43v22Ev();
extern void _ZN7S1588C43v23Ev();
extern void _ZN7S1588C43v24Ev();
extern void _ZN7S1588C43v25Ev();
extern void _ZN7S1588C43v26Ev();
extern void _ZN7S1588C43v27Ev();
extern void _ZN7S1588C43v28Ev();
extern void _ZN7S1588C43v29Ev();
extern void _ZN7S1588C43v30Ev();
extern void _ZN7S1588C43v31Ev();
extern void _ZN7S1588C43v32Ev();
extern void _ZN7S1588C43v33Ev();
extern void _ZN7S1588C43v34Ev();
extern void _ZN7S1588C43v35Ev();
extern void _ZN7S1588C43v36Ev();
extern void _ZN7S1588C43v37Ev();
extern void _ZN7S1588C43v38Ev();
extern void _ZN7S1588C43v39Ev();
extern void _ZN7S1588C43v40Ev();
extern void _ZN7S1588C43v41Ev();
extern void _ZN7S1588C43v42Ev();
extern void _ZN7S1588C43v43Ev();
extern void _ZN7S1588C43v44Ev();
extern void _ZN7S1588C43v45Ev();
extern void _ZN7S1588C43v46Ev();
extern void _ZN7S1588C43v47Ev();
extern void _ZN7S1588C43v48Ev();
extern void _ZN7S1588C43v49Ev();
extern void _ZN7S1588C43v50Ev();
extern void _ZN7S1588C43v51Ev();
extern void _ZN7S1588C43v52Ev();
extern void _ZN7S1588C43v53Ev();
extern void _ZN7S1588C43v54Ev();
extern void _ZN7S1588C43v55Ev();
extern void _ZN7S1588C43v56Ev();
extern void _ZN7S1588C43v57Ev();
extern void _ZN7S1588C43v58Ev();
extern void _ZN7S1588C43v59Ev();
extern void _ZN7S1588C43v60Ev();
extern void _ZN7S1588C43v61Ev();
extern void _ZN7S1588C43v62Ev();
extern void _ZN7S1588C43v63Ev();
extern void _ZN7S1588C43v64Ev();
extern void _ZN7S1588C43v65Ev();
extern void _ZN7S1588C43v66Ev();
extern void _ZN7S1588C43v67Ev();
extern void _ZN7S1588C43v68Ev();
extern void _ZN7S1588C43v69Ev();
extern void _ZN7S1588C43v70Ev();
extern void _ZN7S1588C43v71Ev();
extern void _ZN7S1588C43v72Ev();
extern void _ZN7S1588C33v98Ev();
extern void _ZN7S1588C33v99Ev();
extern void _ZN7S1588C34v100Ev();
extern void _ZN7S1588C34v101Ev();
extern void _ZN7S1588C34v102Ev();
extern void _ZN7S1588C34v103Ev();
extern void _ZN7S1588C34v104Ev();
extern void _ZN7S1588C34v105Ev();
extern void _ZN7S1588C34v106Ev();
extern void _ZN7S1588C34v107Ev();
extern void _ZN7S1588C34v108Ev();
extern void _ZN7S1588C34v109Ev();
extern void _ZN7S1588C34v110Ev();
extern void _ZN7S1588C34v111Ev();
extern void _ZN7S1588C34v112Ev();
extern void _ZN7S1588C34v113Ev();
extern void _ZN7S1588C34v114Ev();
extern void _ZN7S1588C34v115Ev();
extern void _ZN7S1588C34v116Ev();
extern void _ZN7S1588C34v117Ev();
extern void _ZN7S1588C34v118Ev();
extern void _ZN7S1588C34v119Ev();
extern void _ZN7S1588C34v120Ev();
extern void _ZN7S1588C34v121Ev();
extern void _ZN7S1588C24v122Ev();
extern void _ZN7S1588C24v123Ev();
extern void _ZN7S1588C24v124Ev();
extern void _ZN7S1588C24v125Ev();
extern void _ZN7S1588C24v126Ev();
extern void _ZN7S1588C24v127Ev();
extern void _ZN7S1588C24v128Ev();
extern void _ZN7S1588C24v129Ev();
extern void _ZN7S1588C24v130Ev();
extern void _ZN7S1588C24v131Ev();
extern void _ZN7S1588C24v132Ev();
extern void _ZN7S1588C24v133Ev();
extern void _ZN7S1588C24v134Ev();
extern void _ZN7S1588C24v135Ev();
extern void _ZN7S1588C24v136Ev();
extern void _ZN7S1588C24v137Ev();
extern void _ZN7S1588C24v138Ev();
extern void _ZN7S1588C24v139Ev();
extern void _ZN7S1588C24v140Ev();
extern void _ZN7S1588C24v141Ev();
extern void _ZN7S1588C24v142Ev();
extern void _ZN7S1588C24v143Ev();
extern void _ZN7S1588C24v144Ev();
extern void _ZN7S1588C24v145Ev();
extern void _ZN7S1588C24v146Ev();
extern void _ZN7S1588C24v147Ev();
extern void _ZN7S1588C12v1Ev();
extern void _ZN7S1588C12v2Ev();
extern void _ZN7S1588C12v3Ev();
extern void _ZN7S1588C12v4Ev();
extern void _ZN7S1588C12v5Ev();
extern void _ZN7S1588C12v6Ev();
extern void _ZN7S1588C12v7Ev();
extern void _ZN7S1588C12v8Ev();
extern void _ZN7S1588C63v73Ev();
extern void _ZN7S1588C63v74Ev();
extern void _ZN7S1588C63v75Ev();
extern void _ZN7S1588C63v76Ev();
extern void _ZN7S1588C63v77Ev();
extern void _ZN7S1588C63v78Ev();
extern void _ZN7S1588C63v79Ev();
extern void _ZN7S1588C63v80Ev();
extern void _ZN7S1588C63v81Ev();
extern void _ZN7S1588C63v82Ev();
extern void _ZN7S1588C63v83Ev();
extern void _ZN7S1588C63v84Ev();
extern void _ZN7S1588C63v85Ev();
extern void _ZN7S1588C63v86Ev();
extern void _ZN7S1588C63v87Ev();
extern void _ZN7S1588C63v88Ev();
extern void _ZN7S1588C73v89Ev();
extern void _ZN7S1588C73v90Ev();
extern void _ZN7S1588C73v91Ev();
extern void _ZN7S1588C73v92Ev();
extern void _ZN7S1588C73v93Ev();
extern void _ZN7S1588C73v94Ev();
extern void _ZN7S1588C73v95Ev();
extern void _ZN7S1588C73v96Ev();
extern void _ZN7S1588C73v97Ev();
static  VTBL_ENTRY vtc_S1588C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1588C1[0]),
  (VTBL_ENTRY)&_ZN7S1588C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1588C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1588C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1588C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1588C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1588C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1588C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v122Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v123Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v124Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v125Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v126Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v127Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v128Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v129Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v130Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v131Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v132Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v144Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v145Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v146Ev,
  (VTBL_ENTRY)&_ZN7S1588C24v147Ev,
  (VTBL_ENTRY)&_ZN7S1588C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1588C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1588C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1588C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1588C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1588C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1588C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1588C12v8Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1588C1[0]),
  (VTBL_ENTRY)&_ZN7S1588C63v73Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v74Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v75Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v76Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v77Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v78Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v79Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v80Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v81Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v82Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v83Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v85Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v86Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v87Ev,
  (VTBL_ENTRY)&_ZN7S1588C63v88Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1588C1[0]),
  (VTBL_ENTRY)&_ZN7S1588C73v89Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v90Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v91Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v92Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v93Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v94Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v95Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v96Ev,
  (VTBL_ENTRY)&_ZN7S1588C73v97Ev,
};
extern VTBL_ENTRY _ZTI7S1588C1[];
extern  VTBL_ENTRY _ZTV7S1588C1[];
Class_Descriptor cd_S1588C1 = {  "S1588C1", // class name
  bases_S1588C1, 5,
  &(vtc_S1588C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,116), // object size
  NSPAIRA(_ZTI7S1588C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1588C1),155, //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  S1589C4  {
  int s1589c4f0;
  __tsi64 s1589c4f1;
  void *s1589c4f2[4];
  int s1589c4f3[2];
  void *s1589c4f4;
  ::S79C8_nt s1589c4f5;
  void *s1589c4f6[2];
  virtual  ~S1589C4(); // _ZN7S1589C4D1Ev
  virtual void  v9(); // _ZN7S1589C42v9Ev
  virtual void  v10(); // _ZN7S1589C43v10Ev
  virtual void  v11(); // _ZN7S1589C43v11Ev
  virtual void  v12(); // _ZN7S1589C43v12Ev
  virtual void  v13(); // _ZN7S1589C43v13Ev
  virtual void  v14(); // _ZN7S1589C43v14Ev
  virtual void  v15(); // _ZN7S1589C43v15Ev
  virtual void  v16(); // _ZN7S1589C43v16Ev
  virtual void  v17(); // _ZN7S1589C43v17Ev
  virtual void  v18(); // _ZN7S1589C43v18Ev
  virtual void  v19(); // _ZN7S1589C43v19Ev
  virtual void  v20(); // _ZN7S1589C43v20Ev
  virtual void  v21(); // _ZN7S1589C43v21Ev
  virtual void  v22(); // _ZN7S1589C43v22Ev
  virtual void  v23(); // _ZN7S1589C43v23Ev
  virtual void  v24(); // _ZN7S1589C43v24Ev
  virtual void  v25(); // _ZN7S1589C43v25Ev
  virtual void  v26(); // _ZN7S1589C43v26Ev
  virtual void  v27(); // _ZN7S1589C43v27Ev
  virtual void  v28(); // _ZN7S1589C43v28Ev
  virtual void  v29(); // _ZN7S1589C43v29Ev
  virtual void  v30(); // _ZN7S1589C43v30Ev
  virtual void  v31(); // _ZN7S1589C43v31Ev
  virtual void  v32(); // _ZN7S1589C43v32Ev
  virtual void  v33(); // _ZN7S1589C43v33Ev
  virtual void  v34(); // _ZN7S1589C43v34Ev
  virtual void  v35(); // _ZN7S1589C43v35Ev
  virtual void  v36(); // _ZN7S1589C43v36Ev
  virtual void  v37(); // _ZN7S1589C43v37Ev
  virtual void  v38(); // _ZN7S1589C43v38Ev
  virtual void  v39(); // _ZN7S1589C43v39Ev
  virtual void  v40(); // _ZN7S1589C43v40Ev
  virtual void  v41(); // _ZN7S1589C43v41Ev
  virtual void  v42(); // _ZN7S1589C43v42Ev
  virtual void  v43(); // _ZN7S1589C43v43Ev
  virtual void  v44(); // _ZN7S1589C43v44Ev
  virtual void  v45(); // _ZN7S1589C43v45Ev
  virtual void  v46(); // _ZN7S1589C43v46Ev
  virtual void  v47(); // _ZN7S1589C43v47Ev
  virtual void  v48(); // _ZN7S1589C43v48Ev
  virtual void  v49(); // _ZN7S1589C43v49Ev
  virtual void  v50(); // _ZN7S1589C43v50Ev
  virtual void  v51(); // _ZN7S1589C43v51Ev
  virtual void  v52(); // _ZN7S1589C43v52Ev
  virtual void  v53(); // _ZN7S1589C43v53Ev
  virtual void  v54(); // _ZN7S1589C43v54Ev
  virtual void  v55(); // _ZN7S1589C43v55Ev
  virtual void  v56(); // _ZN7S1589C43v56Ev
  virtual void  v57(); // _ZN7S1589C43v57Ev
  virtual void  v58(); // _ZN7S1589C43v58Ev
  virtual void  v59(); // _ZN7S1589C43v59Ev
  virtual void  v60(); // _ZN7S1589C43v60Ev
  virtual void  v61(); // _ZN7S1589C43v61Ev
  virtual void  v62(); // _ZN7S1589C43v62Ev
  virtual void  v63(); // _ZN7S1589C43v63Ev
  virtual void  v64(); // _ZN7S1589C43v64Ev
  virtual void  v65(); // _ZN7S1589C43v65Ev
  virtual void  v66(); // _ZN7S1589C43v66Ev
  virtual void  v67(); // _ZN7S1589C43v67Ev
  virtual void  v68(); // _ZN7S1589C43v68Ev
  virtual void  v69(); // _ZN7S1589C43v69Ev
  virtual void  v70(); // _ZN7S1589C43v70Ev
  virtual void  v71(); // _ZN7S1589C43v71Ev
  virtual void  v72(); // _ZN7S1589C43v72Ev
  S1589C4(); // tgen
};
//SIG(-1 S1589C4) 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]}


 S1589C4 ::~S1589C4(){ note_dtor("S1589C4", this);}
void  S1589C4 ::v9(){vfunc_called(this, "_ZN7S1589C42v9Ev");}
void  S1589C4 ::v10(){vfunc_called(this, "_ZN7S1589C43v10Ev");}
void  S1589C4 ::v11(){vfunc_called(this, "_ZN7S1589C43v11Ev");}
void  S1589C4 ::v12(){vfunc_called(this, "_ZN7S1589C43v12Ev");}
void  S1589C4 ::v13(){vfunc_called(this, "_ZN7S1589C43v13Ev");}
void  S1589C4 ::v14(){vfunc_called(this, "_ZN7S1589C43v14Ev");}
void  S1589C4 ::v15(){vfunc_called(this, "_ZN7S1589C43v15Ev");}
void  S1589C4 ::v16(){vfunc_called(this, "_ZN7S1589C43v16Ev");}
void  S1589C4 ::v17(){vfunc_called(this, "_ZN7S1589C43v17Ev");}
void  S1589C4 ::v18(){vfunc_called(this, "_ZN7S1589C43v18Ev");}
void  S1589C4 ::v19(){vfunc_called(this, "_ZN7S1589C43v19Ev");}
void  S1589C4 ::v20(){vfunc_called(this, "_ZN7S1589C43v20Ev");}
void  S1589C4 ::v21(){vfunc_called(this, "_ZN7S1589C43v21Ev");}
void  S1589C4 ::v22(){vfunc_called(this, "_ZN7S1589C43v22Ev");}
void  S1589C4 ::v23(){vfunc_called(this, "_ZN7S1589C43v23Ev");}
void  S1589C4 ::v24(){vfunc_called(this, "_ZN7S1589C43v24Ev");}
void  S1589C4 ::v25(){vfunc_called(this, "_ZN7S1589C43v25Ev");}
void  S1589C4 ::v26(){vfunc_called(this, "_ZN7S1589C43v26Ev");}
void  S1589C4 ::v27(){vfunc_called(this, "_ZN7S1589C43v27Ev");}
void  S1589C4 ::v28(){vfunc_called(this, "_ZN7S1589C43v28Ev");}
void  S1589C4 ::v29(){vfunc_called(this, "_ZN7S1589C43v29Ev");}
void  S1589C4 ::v30(){vfunc_called(this, "_ZN7S1589C43v30Ev");}
void  S1589C4 ::v31(){vfunc_called(this, "_ZN7S1589C43v31Ev");}
void  S1589C4 ::v32(){vfunc_called(this, "_ZN7S1589C43v32Ev");}
void  S1589C4 ::v33(){vfunc_called(this, "_ZN7S1589C43v33Ev");}
void  S1589C4 ::v34(){vfunc_called(this, "_ZN7S1589C43v34Ev");}
void  S1589C4 ::v35(){vfunc_called(this, "_ZN7S1589C43v35Ev");}
void  S1589C4 ::v36(){vfunc_called(this, "_ZN7S1589C43v36Ev");}
void  S1589C4 ::v37(){vfunc_called(this, "_ZN7S1589C43v37Ev");}
void  S1589C4 ::v38(){vfunc_called(this, "_ZN7S1589C43v38Ev");}
void  S1589C4 ::v39(){vfunc_called(this, "_ZN7S1589C43v39Ev");}
void  S1589C4 ::v40(){vfunc_called(this, "_ZN7S1589C43v40Ev");}
void  S1589C4 ::v41(){vfunc_called(this, "_ZN7S1589C43v41Ev");}
void  S1589C4 ::v42(){vfunc_called(this, "_ZN7S1589C43v42Ev");}
void  S1589C4 ::v43(){vfunc_called(this, "_ZN7S1589C43v43Ev");}
void  S1589C4 ::v44(){vfunc_called(this, "_ZN7S1589C43v44Ev");}
void  S1589C4 ::v45(){vfunc_called(this, "_ZN7S1589C43v45Ev");}
void  S1589C4 ::v46(){vfunc_called(this, "_ZN7S1589C43v46Ev");}
void  S1589C4 ::v47(){vfunc_called(this, "_ZN7S1589C43v47Ev");}
void  S1589C4 ::v48(){vfunc_called(this, "_ZN7S1589C43v48Ev");}
void  S1589C4 ::v49(){vfunc_called(this, "_ZN7S1589C43v49Ev");}
void  S1589C4 ::v50(){vfunc_called(this, "_ZN7S1589C43v50Ev");}
void  S1589C4 ::v51(){vfunc_called(this, "_ZN7S1589C43v51Ev");}
void  S1589C4 ::v52(){vfunc_called(this, "_ZN7S1589C43v52Ev");}
void  S1589C4 ::v53(){vfunc_called(this, "_ZN7S1589C43v53Ev");}
void  S1589C4 ::v54(){vfunc_called(this, "_ZN7S1589C43v54Ev");}
void  S1589C4 ::v55(){vfunc_called(this, "_ZN7S1589C43v55Ev");}
void  S1589C4 ::v56(){vfunc_called(this, "_ZN7S1589C43v56Ev");}
void  S1589C4 ::v57(){vfunc_called(this, "_ZN7S1589C43v57Ev");}
void  S1589C4 ::v58(){vfunc_called(this, "_ZN7S1589C43v58Ev");}
void  S1589C4 ::v59(){vfunc_called(this, "_ZN7S1589C43v59Ev");}
void  S1589C4 ::v60(){vfunc_called(this, "_ZN7S1589C43v60Ev");}
void  S1589C4 ::v61(){vfunc_called(this, "_ZN7S1589C43v61Ev");}
void  S1589C4 ::v62(){vfunc_called(this, "_ZN7S1589C43v62Ev");}
void  S1589C4 ::v63(){vfunc_called(this, "_ZN7S1589C43v63Ev");}
void  S1589C4 ::v64(){vfunc_called(this, "_ZN7S1589C43v64Ev");}
void  S1589C4 ::v65(){vfunc_called(this, "_ZN7S1589C43v65Ev");}
void  S1589C4 ::v66(){vfunc_called(this, "_ZN7S1589C43v66Ev");}
void  S1589C4 ::v67(){vfunc_called(this, "_ZN7S1589C43v67Ev");}
void  S1589C4 ::v68(){vfunc_called(this, "_ZN7S1589C43v68Ev");}
void  S1589C4 ::v69(){vfunc_called(this, "_ZN7S1589C43v69Ev");}
void  S1589C4 ::v70(){vfunc_called(this, "_ZN7S1589C43v70Ev");}
void  S1589C4 ::v71(){vfunc_called(this, "_ZN7S1589C43v71Ev");}
void  S1589C4 ::v72(){vfunc_called(this, "_ZN7S1589C43v72Ev");}
S1589C4 ::S1589C4(){ note_ctor("S1589C4", this);} // tgen

static void Test_S1589C4()
{
  extern Class_Descriptor cd_S1589C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1589C4, buf);
    S1589C4 *dp, &lv = *(dp=new (buf) S1589C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1589C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1589C4)");
    check_field_offset(lv, s1589c4f0, ABISELECT(8,4), "S1589C4.s1589c4f0");
    check_field_offset(lv, s1589c4f1, ABISELECT(16,8), "S1589C4.s1589c4f1");
    check_field_offset(lv, s1589c4f2, ABISELECT(24,16), "S1589C4.s1589c4f2");
    check_field_offset(lv, s1589c4f3, ABISELECT(56,32), "S1589C4.s1589c4f3");
    check_field_offset(lv, s1589c4f4, ABISELECT(64,40), "S1589C4.s1589c4f4");
    check_field_offset(lv, s1589c4f5, ABISELECT(72,44), "S1589C4.s1589c4f5");
    check_field_offset(lv, s1589c4f6, ABISELECT(80,52), "S1589C4.s1589c4f6");
    test_class_info(&lv, &cd_S1589C4);
    dp->~S1589C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1589C4(Test_S1589C4, "S1589C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1589C4C1Ev();
extern void _ZN7S1589C4D1Ev();
Name_Map name_map_S1589C4[] = {
  NSPAIR(_ZN7S1589C4C1Ev),
  NSPAIR(_ZN7S1589C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1589C4[];
extern void _ZN7S1589C4D1Ev();
extern void _ZN7S1589C4D0Ev();
extern void _ZN7S1589C42v9Ev();
extern void _ZN7S1589C43v10Ev();
extern void _ZN7S1589C43v11Ev();
extern void _ZN7S1589C43v12Ev();
extern void _ZN7S1589C43v13Ev();
extern void _ZN7S1589C43v14Ev();
extern void _ZN7S1589C43v15Ev();
extern void _ZN7S1589C43v16Ev();
extern void _ZN7S1589C43v17Ev();
extern void _ZN7S1589C43v18Ev();
extern void _ZN7S1589C43v19Ev();
extern void _ZN7S1589C43v20Ev();
extern void _ZN7S1589C43v21Ev();
extern void _ZN7S1589C43v22Ev();
extern void _ZN7S1589C43v23Ev();
extern void _ZN7S1589C43v24Ev();
extern void _ZN7S1589C43v25Ev();
extern void _ZN7S1589C43v26Ev();
extern void _ZN7S1589C43v27Ev();
extern void _ZN7S1589C43v28Ev();
extern void _ZN7S1589C43v29Ev();
extern void _ZN7S1589C43v30Ev();
extern void _ZN7S1589C43v31Ev();
extern void _ZN7S1589C43v32Ev();
extern void _ZN7S1589C43v33Ev();
extern void _ZN7S1589C43v34Ev();
extern void _ZN7S1589C43v35Ev();
extern void _ZN7S1589C43v36Ev();
extern void _ZN7S1589C43v37Ev();
extern void _ZN7S1589C43v38Ev();
extern void _ZN7S1589C43v39Ev();
extern void _ZN7S1589C43v40Ev();
extern void _ZN7S1589C43v41Ev();
extern void _ZN7S1589C43v42Ev();
extern void _ZN7S1589C43v43Ev();
extern void _ZN7S1589C43v44Ev();
extern void _ZN7S1589C43v45Ev();
extern void _ZN7S1589C43v46Ev();
extern void _ZN7S1589C43v47Ev();
extern void _ZN7S1589C43v48Ev();
extern void _ZN7S1589C43v49Ev();
extern void _ZN7S1589C43v50Ev();
extern void _ZN7S1589C43v51Ev();
extern void _ZN7S1589C43v52Ev();
extern void _ZN7S1589C43v53Ev();
extern void _ZN7S1589C43v54Ev();
extern void _ZN7S1589C43v55Ev();
extern void _ZN7S1589C43v56Ev();
extern void _ZN7S1589C43v57Ev();
extern void _ZN7S1589C43v58Ev();
extern void _ZN7S1589C43v59Ev();
extern void _ZN7S1589C43v60Ev();
extern void _ZN7S1589C43v61Ev();
extern void _ZN7S1589C43v62Ev();
extern void _ZN7S1589C43v63Ev();
extern void _ZN7S1589C43v64Ev();
extern void _ZN7S1589C43v65Ev();
extern void _ZN7S1589C43v66Ev();
extern void _ZN7S1589C43v67Ev();
extern void _ZN7S1589C43v68Ev();
extern void _ZN7S1589C43v69Ev();
extern void _ZN7S1589C43v70Ev();
extern void _ZN7S1589C43v71Ev();
extern void _ZN7S1589C43v72Ev();
static  VTBL_ENTRY vtc_S1589C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1589C4[0]),
  (VTBL_ENTRY)&_ZN7S1589C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1589C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1589C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v72Ev,
};
extern VTBL_ENTRY _ZTI7S1589C4[];
extern  VTBL_ENTRY _ZTV7S1589C4[];
Class_Descriptor cd_S1589C4 = {  "S1589C4", // class name
  0,0,//no base classes
  &(vtc_S1589C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1589C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1589C4),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  S1589C6  {
  virtual void  v73(); // _ZN7S1589C63v73Ev
  virtual void  v74(); // _ZN7S1589C63v74Ev
  virtual void  v75(); // _ZN7S1589C63v75Ev
  virtual void  v76(); // _ZN7S1589C63v76Ev
  virtual void  v77(); // _ZN7S1589C63v77Ev
  virtual void  v78(); // _ZN7S1589C63v78Ev
  virtual void  v79(); // _ZN7S1589C63v79Ev
  virtual void  v80(); // _ZN7S1589C63v80Ev
  virtual void  v81(); // _ZN7S1589C63v81Ev
  virtual void  v82(); // _ZN7S1589C63v82Ev
  virtual void  v83(); // _ZN7S1589C63v83Ev
  virtual void  v84(); // _ZN7S1589C63v84Ev
  virtual void  v85(); // _ZN7S1589C63v85Ev
  virtual void  v86(); // _ZN7S1589C63v86Ev
  virtual void  v87(); // _ZN7S1589C63v87Ev
  virtual void  v88(); // _ZN7S1589C63v88Ev
  ~S1589C6(); // tgen
  S1589C6(); // tgen
};
//SIG(-1 S1589C6) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16}


void  S1589C6 ::v73(){vfunc_called(this, "_ZN7S1589C63v73Ev");}
void  S1589C6 ::v74(){vfunc_called(this, "_ZN7S1589C63v74Ev");}
void  S1589C6 ::v75(){vfunc_called(this, "_ZN7S1589C63v75Ev");}
void  S1589C6 ::v76(){vfunc_called(this, "_ZN7S1589C63v76Ev");}
void  S1589C6 ::v77(){vfunc_called(this, "_ZN7S1589C63v77Ev");}
void  S1589C6 ::v78(){vfunc_called(this, "_ZN7S1589C63v78Ev");}
void  S1589C6 ::v79(){vfunc_called(this, "_ZN7S1589C63v79Ev");}
void  S1589C6 ::v80(){vfunc_called(this, "_ZN7S1589C63v80Ev");}
void  S1589C6 ::v81(){vfunc_called(this, "_ZN7S1589C63v81Ev");}
void  S1589C6 ::v82(){vfunc_called(this, "_ZN7S1589C63v82Ev");}
void  S1589C6 ::v83(){vfunc_called(this, "_ZN7S1589C63v83Ev");}
void  S1589C6 ::v84(){vfunc_called(this, "_ZN7S1589C63v84Ev");}
void  S1589C6 ::v85(){vfunc_called(this, "_ZN7S1589C63v85Ev");}
void  S1589C6 ::v86(){vfunc_called(this, "_ZN7S1589C63v86Ev");}
void  S1589C6 ::v87(){vfunc_called(this, "_ZN7S1589C63v87Ev");}
void  S1589C6 ::v88(){vfunc_called(this, "_ZN7S1589C63v88Ev");}
S1589C6 ::~S1589C6(){ note_dtor("S1589C6", this);} // tgen
S1589C6 ::S1589C6(){ note_ctor("S1589C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1589C6C1Ev();
extern void _ZN7S1589C6D1Ev();
Name_Map name_map_S1589C6[] = {
  NSPAIR(_ZN7S1589C6C1Ev),
  NSPAIR(_ZN7S1589C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1589C6[];
extern void _ZN7S1589C63v73Ev();
extern void _ZN7S1589C63v74Ev();
extern void _ZN7S1589C63v75Ev();
extern void _ZN7S1589C63v76Ev();
extern void _ZN7S1589C63v77Ev();
extern void _ZN7S1589C63v78Ev();
extern void _ZN7S1589C63v79Ev();
extern void _ZN7S1589C63v80Ev();
extern void _ZN7S1589C63v81Ev();
extern void _ZN7S1589C63v82Ev();
extern void _ZN7S1589C63v83Ev();
extern void _ZN7S1589C63v84Ev();
extern void _ZN7S1589C63v85Ev();
extern void _ZN7S1589C63v86Ev();
extern void _ZN7S1589C63v87Ev();
extern void _ZN7S1589C63v88Ev();
static  VTBL_ENTRY vtc_S1589C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1589C6[0]),
  (VTBL_ENTRY)&_ZN7S1589C63v73Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v74Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v75Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v76Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v77Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v78Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v79Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v80Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v81Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v82Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v83Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v85Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v86Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v87Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v88Ev,
};
extern VTBL_ENTRY _ZTI7S1589C6[];
extern  VTBL_ENTRY _ZTV7S1589C6[];
Class_Descriptor cd_S1589C6 = {  "S1589C6", // class name
  0,0,//no base classes
  &(vtc_S1589C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1589C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1589C6),18, //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  S1589C7  {
  virtual void  v89(); // _ZN7S1589C73v89Ev
  virtual void  v90(); // _ZN7S1589C73v90Ev
  virtual void  v91(); // _ZN7S1589C73v91Ev
  virtual void  v92(); // _ZN7S1589C73v92Ev
  virtual void  v93(); // _ZN7S1589C73v93Ev
  virtual void  v94(); // _ZN7S1589C73v94Ev
  virtual void  v95(); // _ZN7S1589C73v95Ev
  virtual void  v96(); // _ZN7S1589C73v96Ev
  virtual void  v97(); // _ZN7S1589C73v97Ev
  ~S1589C7(); // tgen
  S1589C7(); // tgen
};
//SIG(-1 S1589C7) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S1589C7 ::v89(){vfunc_called(this, "_ZN7S1589C73v89Ev");}
void  S1589C7 ::v90(){vfunc_called(this, "_ZN7S1589C73v90Ev");}
void  S1589C7 ::v91(){vfunc_called(this, "_ZN7S1589C73v91Ev");}
void  S1589C7 ::v92(){vfunc_called(this, "_ZN7S1589C73v92Ev");}
void  S1589C7 ::v93(){vfunc_called(this, "_ZN7S1589C73v93Ev");}
void  S1589C7 ::v94(){vfunc_called(this, "_ZN7S1589C73v94Ev");}
void  S1589C7 ::v95(){vfunc_called(this, "_ZN7S1589C73v95Ev");}
void  S1589C7 ::v96(){vfunc_called(this, "_ZN7S1589C73v96Ev");}
void  S1589C7 ::v97(){vfunc_called(this, "_ZN7S1589C73v97Ev");}
S1589C7 ::~S1589C7(){ note_dtor("S1589C7", this);} // tgen
S1589C7 ::S1589C7(){ note_ctor("S1589C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1589C7C1Ev();
extern void _ZN7S1589C7D1Ev();
Name_Map name_map_S1589C7[] = {
  NSPAIR(_ZN7S1589C7C1Ev),
  NSPAIR(_ZN7S1589C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1589C7[];
extern void _ZN7S1589C73v89Ev();
extern void _ZN7S1589C73v90Ev();
extern void _ZN7S1589C73v91Ev();
extern void _ZN7S1589C73v92Ev();
extern void _ZN7S1589C73v93Ev();
extern void _ZN7S1589C73v94Ev();
extern void _ZN7S1589C73v95Ev();
extern void _ZN7S1589C73v96Ev();
extern void _ZN7S1589C73v97Ev();
static  VTBL_ENTRY vtc_S1589C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1589C7[0]),
  (VTBL_ENTRY)&_ZN7S1589C73v89Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v90Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v91Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v92Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v93Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v94Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v95Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v96Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v97Ev,
};
extern VTBL_ENTRY _ZTI7S1589C7[];
extern  VTBL_ENTRY _ZTV7S1589C7[];
Class_Descriptor cd_S1589C7 = {  "S1589C7", // class name
  0,0,//no base classes
  &(vtc_S1589C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1589C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1589C7),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  S1589C3  : S1589C4 , S1589C6 , S1589C7 {
  void *s1589c3f0;
  ::S79C39_nt s1589c3f1;
  unsigned int s1589c3f2:1;
  unsigned int s1589c3f3:1;
  unsigned int s1589c3f4:1;
  unsigned int s1589c3f5:1;
  virtual  ~S1589C3(); // _ZN7S1589C3D1Ev
  virtual void  v98(); // _ZN7S1589C33v98Ev
  virtual void  v99(); // _ZN7S1589C33v99Ev
  virtual void  v100(); // _ZN7S1589C34v100Ev
  virtual void  v101(); // _ZN7S1589C34v101Ev
  virtual void  v102(); // _ZN7S1589C34v102Ev
  virtual void  v103(); // _ZN7S1589C34v103Ev
  virtual void  v104(); // _ZN7S1589C34v104Ev
  virtual void  v105(); // _ZN7S1589C34v105Ev
  virtual void  v106(); // _ZN7S1589C34v106Ev
  virtual void  v107(); // _ZN7S1589C34v107Ev
  virtual void  v108(); // _ZN7S1589C34v108Ev
  virtual void  v109(); // _ZN7S1589C34v109Ev
  virtual void  v110(); // _ZN7S1589C34v110Ev
  virtual void  v111(); // _ZN7S1589C34v111Ev
  virtual void  v112(); // _ZN7S1589C34v112Ev
  virtual void  v113(); // _ZN7S1589C34v113Ev
  virtual void  v114(); // _ZN7S1589C34v114Ev
  virtual void  v115(); // _ZN7S1589C34v115Ev
  virtual void  v116(); // _ZN7S1589C34v116Ev
  virtual void  v117(); // _ZN7S1589C34v117Ev
  virtual void  v118(); // _ZN7S1589C34v118Ev
  virtual void  v119(); // _ZN7S1589C34v119Ev
  virtual void  v120(); // _ZN7S1589C34v120Ev
  virtual void  v121(); // _ZN7S1589C34v121Ev
  S1589C3(); // tgen
};
//SIG(-1 S1589C3) C1{ BC2{ vd 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 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} BC4{ v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104} BC5{ v105 v106 v107 v108 v109 v110 v111 v112 v113} 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 Fp FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1}


 S1589C3 ::~S1589C3(){ note_dtor("S1589C3", this);}
void  S1589C3 ::v98(){vfunc_called(this, "_ZN7S1589C33v98Ev");}
void  S1589C3 ::v99(){vfunc_called(this, "_ZN7S1589C33v99Ev");}
void  S1589C3 ::v100(){vfunc_called(this, "_ZN7S1589C34v100Ev");}
void  S1589C3 ::v101(){vfunc_called(this, "_ZN7S1589C34v101Ev");}
void  S1589C3 ::v102(){vfunc_called(this, "_ZN7S1589C34v102Ev");}
void  S1589C3 ::v103(){vfunc_called(this, "_ZN7S1589C34v103Ev");}
void  S1589C3 ::v104(){vfunc_called(this, "_ZN7S1589C34v104Ev");}
void  S1589C3 ::v105(){vfunc_called(this, "_ZN7S1589C34v105Ev");}
void  S1589C3 ::v106(){vfunc_called(this, "_ZN7S1589C34v106Ev");}
void  S1589C3 ::v107(){vfunc_called(this, "_ZN7S1589C34v107Ev");}
void  S1589C3 ::v108(){vfunc_called(this, "_ZN7S1589C34v108Ev");}
void  S1589C3 ::v109(){vfunc_called(this, "_ZN7S1589C34v109Ev");}
void  S1589C3 ::v110(){vfunc_called(this, "_ZN7S1589C34v110Ev");}
void  S1589C3 ::v111(){vfunc_called(this, "_ZN7S1589C34v111Ev");}
void  S1589C3 ::v112(){vfunc_called(this, "_ZN7S1589C34v112Ev");}
void  S1589C3 ::v113(){vfunc_called(this, "_ZN7S1589C34v113Ev");}
void  S1589C3 ::v114(){vfunc_called(this, "_ZN7S1589C34v114Ev");}
void  S1589C3 ::v115(){vfunc_called(this, "_ZN7S1589C34v115Ev");}
void  S1589C3 ::v116(){vfunc_called(this, "_ZN7S1589C34v116Ev");}
void  S1589C3 ::v117(){vfunc_called(this, "_ZN7S1589C34v117Ev");}
void  S1589C3 ::v118(){vfunc_called(this, "_ZN7S1589C34v118Ev");}
void  S1589C3 ::v119(){vfunc_called(this, "_ZN7S1589C34v119Ev");}
void  S1589C3 ::v120(){vfunc_called(this, "_ZN7S1589C34v120Ev");}
void  S1589C3 ::v121(){vfunc_called(this, "_ZN7S1589C34v121Ev");}
S1589C3 ::S1589C3(){ note_ctor("S1589C3", this);} // tgen

static void Test_S1589C3()
{
  extern Class_Descriptor cd_S1589C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,23)];
    init_test(&cd_S1589C3, buf);
    S1589C3 *dp, &lv = *(dp=new (buf) S1589C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S1589C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1589C3)");
    check_base_class_offset(lv, (S1589C4*), 0, "S1589C3");
    check_base_class_offset(lv, (S1589C6*), ABISELECT(96,60), "S1589C3");
    check_base_class_offset(lv, (S1589C7*), ABISELECT(104,64), "S1589C3");
    check_field_offset(lv, s1589c3f0, ABISELECT(112,68), "S1589C3.s1589c3f0");
    check_field_offset(lv, s1589c3f1, ABISELECT(120,72), "S1589C3.s1589c3f1");
    set_bf_and_test(lv, s1589c3f2, ABISELECT(136,84), 0, 1, 1, "S1589C3");
    set_bf_and_test(lv, s1589c3f3, ABISELECT(136,84), 1, 1, 1, "S1589C3");
    set_bf_and_test(lv, s1589c3f4, ABISELECT(136,84), 2, 1, 1, "S1589C3");
    set_bf_and_test(lv, s1589c3f5, ABISELECT(136,84), 3, 1, 1, "S1589C3");
    test_class_info(&lv, &cd_S1589C3);
    dp->~S1589C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1589C3(Test_S1589C3, "S1589C3", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN7S1589C3C1Ev();
extern void _ZN7S1589C3D1Ev();
Name_Map name_map_S1589C3[] = {
  NSPAIR(_ZN7S1589C3C1Ev),
  NSPAIR(_ZN7S1589C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1589C4;
extern VTBL_ENTRY _ZTI7S1589C4[];
extern  VTBL_ENTRY _ZTV7S1589C4[];
extern Class_Descriptor cd_S1589C6;
extern VTBL_ENTRY _ZTI7S1589C6[];
extern  VTBL_ENTRY _ZTV7S1589C6[];
extern Class_Descriptor cd_S1589C7;
extern VTBL_ENTRY _ZTI7S1589C7[];
extern  VTBL_ENTRY _ZTV7S1589C7[];
static Base_Class bases_S1589C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1589C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1589C6,    ABISELECT(96,60), //bcp->offset
    92, //bcp->virtual_function_table_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_S1589C7,    ABISELECT(104,64), //bcp->offset
    110, //bcp->virtual_function_table_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 _ZTI7S1589C3[];
extern void _ZN7S1589C3D1Ev();
extern void _ZN7S1589C3D0Ev();
extern void _ZN7S1589C42v9Ev();
extern void _ZN7S1589C43v10Ev();
extern void _ZN7S1589C43v11Ev();
extern void _ZN7S1589C43v12Ev();
extern void _ZN7S1589C43v13Ev();
extern void _ZN7S1589C43v14Ev();
extern void _ZN7S1589C43v15Ev();
extern void _ZN7S1589C43v16Ev();
extern void _ZN7S1589C43v17Ev();
extern void _ZN7S1589C43v18Ev();
extern void _ZN7S1589C43v19Ev();
extern void _ZN7S1589C43v20Ev();
extern void _ZN7S1589C43v21Ev();
extern void _ZN7S1589C43v22Ev();
extern void _ZN7S1589C43v23Ev();
extern void _ZN7S1589C43v24Ev();
extern void _ZN7S1589C43v25Ev();
extern void _ZN7S1589C43v26Ev();
extern void _ZN7S1589C43v27Ev();
extern void _ZN7S1589C43v28Ev();
extern void _ZN7S1589C43v29Ev();
extern void _ZN7S1589C43v30Ev();
extern void _ZN7S1589C43v31Ev();
extern void _ZN7S1589C43v32Ev();
extern void _ZN7S1589C43v33Ev();
extern void _ZN7S1589C43v34Ev();
extern void _ZN7S1589C43v35Ev();
extern void _ZN7S1589C43v36Ev();
extern void _ZN7S1589C43v37Ev();
extern void _ZN7S1589C43v38Ev();
extern void _ZN7S1589C43v39Ev();
extern void _ZN7S1589C43v40Ev();
extern void _ZN7S1589C43v41Ev();
extern void _ZN7S1589C43v42Ev();
extern void _ZN7S1589C43v43Ev();
extern void _ZN7S1589C43v44Ev();
extern void _ZN7S1589C43v45Ev();
extern void _ZN7S1589C43v46Ev();
extern void _ZN7S1589C43v47Ev();
extern void _ZN7S1589C43v48Ev();
extern void _ZN7S1589C43v49Ev();
extern void _ZN7S1589C43v50Ev();
extern void _ZN7S1589C43v51Ev();
extern void _ZN7S1589C43v52Ev();
extern void _ZN7S1589C43v53Ev();
extern void _ZN7S1589C43v54Ev();
extern void _ZN7S1589C43v55Ev();
extern void _ZN7S1589C43v56Ev();
extern void _ZN7S1589C43v57Ev();
extern void _ZN7S1589C43v58Ev();
extern void _ZN7S1589C43v59Ev();
extern void _ZN7S1589C43v60Ev();
extern void _ZN7S1589C43v61Ev();
extern void _ZN7S1589C43v62Ev();
extern void _ZN7S1589C43v63Ev();
extern void _ZN7S1589C43v64Ev();
extern void _ZN7S1589C43v65Ev();
extern void _ZN7S1589C43v66Ev();
extern void _ZN7S1589C43v67Ev();
extern void _ZN7S1589C43v68Ev();
extern void _ZN7S1589C43v69Ev();
extern void _ZN7S1589C43v70Ev();
extern void _ZN7S1589C43v71Ev();
extern void _ZN7S1589C43v72Ev();
extern void _ZN7S1589C33v98Ev();
extern void _ZN7S1589C33v99Ev();
extern void _ZN7S1589C34v100Ev();
extern void _ZN7S1589C34v101Ev();
extern void _ZN7S1589C34v102Ev();
extern void _ZN7S1589C34v103Ev();
extern void _ZN7S1589C34v104Ev();
extern void _ZN7S1589C34v105Ev();
extern void _ZN7S1589C34v106Ev();
extern void _ZN7S1589C34v107Ev();
extern void _ZN7S1589C34v108Ev();
extern void _ZN7S1589C34v109Ev();
extern void _ZN7S1589C34v110Ev();
extern void _ZN7S1589C34v111Ev();
extern void _ZN7S1589C34v112Ev();
extern void _ZN7S1589C34v113Ev();
extern void _ZN7S1589C34v114Ev();
extern void _ZN7S1589C34v115Ev();
extern void _ZN7S1589C34v116Ev();
extern void _ZN7S1589C34v117Ev();
extern void _ZN7S1589C34v118Ev();
extern void _ZN7S1589C34v119Ev();
extern void _ZN7S1589C34v120Ev();
extern void _ZN7S1589C34v121Ev();
extern void _ZN7S1589C63v73Ev();
extern void _ZN7S1589C63v74Ev();
extern void _ZN7S1589C63v75Ev();
extern void _ZN7S1589C63v76Ev();
extern void _ZN7S1589C63v77Ev();
extern void _ZN7S1589C63v78Ev();
extern void _ZN7S1589C63v79Ev();
extern void _ZN7S1589C63v80Ev();
extern void _ZN7S1589C63v81Ev();
extern void _ZN7S1589C63v82Ev();
extern void _ZN7S1589C63v83Ev();
extern void _ZN7S1589C63v84Ev();
extern void _ZN7S1589C63v85Ev();
extern void _ZN7S1589C63v86Ev();
extern void _ZN7S1589C63v87Ev();
extern void _ZN7S1589C63v88Ev();
extern void _ZN7S1589C73v89Ev();
extern void _ZN7S1589C73v90Ev();
extern void _ZN7S1589C73v91Ev();
extern void _ZN7S1589C73v92Ev();
extern void _ZN7S1589C73v93Ev();
extern void _ZN7S1589C73v94Ev();
extern void _ZN7S1589C73v95Ev();
extern void _ZN7S1589C73v96Ev();
extern void _ZN7S1589C73v97Ev();
static  VTBL_ENTRY vtc_S1589C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1589C3[0]),
  (VTBL_ENTRY)&_ZN7S1589C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1589C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1589C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1589C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1589C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v121Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1589C3[0]),
  (VTBL_ENTRY)&_ZN7S1589C63v73Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v74Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v75Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v76Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v77Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v78Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v79Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v80Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v81Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v82Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v83Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v85Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v86Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v87Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v88Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1589C3[0]),
  (VTBL_ENTRY)&_ZN7S1589C73v89Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v90Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v91Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v92Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v93Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v94Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v95Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v96Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v97Ev,
};
extern VTBL_ENTRY _ZTI7S1589C3[];
extern  VTBL_ENTRY _ZTV7S1589C3[];
Class_Descriptor cd_S1589C3 = {  "S1589C3", // class name
  bases_S1589C3, 3,
  &(vtc_S1589C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI7S1589C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1589C3),121, //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  S1589C2  : S1589C3 {
  ::S3262C11_nt s1589c2f0;
  int s1589c2f1;
  virtual  ~S1589C2(); // _ZN7S1589C2D1Ev
  virtual void  v122(); // _ZN7S1589C24v122Ev
  virtual void  v123(); // _ZN7S1589C24v123Ev
  virtual void  v124(); // _ZN7S1589C24v124Ev
  virtual void  v125(); // _ZN7S1589C24v125Ev
  virtual void  v126(); // _ZN7S1589C24v126Ev
  virtual void  v127(); // _ZN7S1589C24v127Ev
  virtual void  v128(); // _ZN7S1589C24v128Ev
  virtual void  v129(); // _ZN7S1589C24v129Ev
  virtual void  v130(); // _ZN7S1589C24v130Ev
  virtual void  v131(); // _ZN7S1589C24v131Ev
  virtual void  v132(); // _ZN7S1589C24v132Ev
  virtual void  v133(); // _ZN7S1589C24v133Ev
  virtual void  v134(); // _ZN7S1589C24v134Ev
  virtual void  v135(); // _ZN7S1589C24v135Ev
  virtual void  v136(); // _ZN7S1589C24v136Ev
  virtual void  v137(); // _ZN7S1589C24v137Ev
  virtual void  v138(); // _ZN7S1589C24v138Ev
  virtual void  v139(); // _ZN7S1589C24v139Ev
  virtual void  v140(); // _ZN7S1589C24v140Ev
  virtual void  v141(); // _ZN7S1589C24v141Ev
  virtual void  v142(); // _ZN7S1589C24v142Ev
  virtual void  v143(); // _ZN7S1589C24v143Ev
  virtual void  v144(); // _ZN7S1589C24v144Ev
  virtual void  v145(); // _ZN7S1589C24v145Ev
  virtual void  v146(); // _ZN7S1589C24v146Ev
  virtual void  v147(); // _ZN7S1589C24v147Ev
  S1589C2(); // tgen
};
//SIG(-1 S1589C2) C1{ BC2{ BC3{ vd 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 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} BC5{ v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106} BC6{ v107 v108 v109 v110 v111 v112 v113 v114 v115} vd v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 Fp FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1} 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 FC11{ m FC12{ BC13{ BC10}} Fc} Fi}


 S1589C2 ::~S1589C2(){ note_dtor("S1589C2", this);}
void  S1589C2 ::v122(){vfunc_called(this, "_ZN7S1589C24v122Ev");}
void  S1589C2 ::v123(){vfunc_called(this, "_ZN7S1589C24v123Ev");}
void  S1589C2 ::v124(){vfunc_called(this, "_ZN7S1589C24v124Ev");}
void  S1589C2 ::v125(){vfunc_called(this, "_ZN7S1589C24v125Ev");}
void  S1589C2 ::v126(){vfunc_called(this, "_ZN7S1589C24v126Ev");}
void  S1589C2 ::v127(){vfunc_called(this, "_ZN7S1589C24v127Ev");}
void  S1589C2 ::v128(){vfunc_called(this, "_ZN7S1589C24v128Ev");}
void  S1589C2 ::v129(){vfunc_called(this, "_ZN7S1589C24v129Ev");}
void  S1589C2 ::v130(){vfunc_called(this, "_ZN7S1589C24v130Ev");}
void  S1589C2 ::v131(){vfunc_called(this, "_ZN7S1589C24v131Ev");}
void  S1589C2 ::v132(){vfunc_called(this, "_ZN7S1589C24v132Ev");}
void  S1589C2 ::v133(){vfunc_called(this, "_ZN7S1589C24v133Ev");}
void  S1589C2 ::v134(){vfunc_called(this, "_ZN7S1589C24v134Ev");}
void  S1589C2 ::v135(){vfunc_called(this, "_ZN7S1589C24v135Ev");}
void  S1589C2 ::v136(){vfunc_called(this, "_ZN7S1589C24v136Ev");}
void  S1589C2 ::v137(){vfunc_called(this, "_ZN7S1589C24v137Ev");}
void  S1589C2 ::v138(){vfunc_called(this, "_ZN7S1589C24v138Ev");}
void  S1589C2 ::v139(){vfunc_called(this, "_ZN7S1589C24v139Ev");}
void  S1589C2 ::v140(){vfunc_called(this, "_ZN7S1589C24v140Ev");}
void  S1589C2 ::v141(){vfunc_called(this, "_ZN7S1589C24v141Ev");}
void  S1589C2 ::v142(){vfunc_called(this, "_ZN7S1589C24v142Ev");}
void  S1589C2 ::v143(){vfunc_called(this, "_ZN7S1589C24v143Ev");}
void  S1589C2 ::v144(){vfunc_called(this, "_ZN7S1589C24v144Ev");}
void  S1589C2 ::v145(){vfunc_called(this, "_ZN7S1589C24v145Ev");}
void  S1589C2 ::v146(){vfunc_called(this, "_ZN7S1589C24v146Ev");}
void  S1589C2 ::v147(){vfunc_called(this, "_ZN7S1589C24v147Ev");}
S1589C2 ::S1589C2(){ note_ctor("S1589C2", this);} // tgen

static void Test_S1589C2()
{
  extern Class_Descriptor cd_S1589C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,28)];
    init_test(&cd_S1589C2, buf);
    S1589C2 *dp, &lv = *(dp=new (buf) S1589C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,108), "sizeof(S1589C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1589C2)");
    check_base_class_offset(lv, (S1589C4*)(S1589C3*), 0, "S1589C2");
    check_base_class_offset(lv, (S1589C6*)(S1589C3*), ABISELECT(96,60), "S1589C2");
    check_base_class_offset(lv, (S1589C7*)(S1589C3*), ABISELECT(104,64), "S1589C2");
    check_base_class_offset(lv, (S1589C3*), 0, "S1589C2");
    check_field_offset(lv, s1589c2f0, ABISELECT(144,88), "S1589C2.s1589c2f0");
    check_field_offset(lv, s1589c2f1, ABISELECT(168,104), "S1589C2.s1589c2f1");
    test_class_info(&lv, &cd_S1589C2);
    dp->~S1589C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1589C2(Test_S1589C2, "S1589C2", ABISELECT(176,108));

#else // __cplusplus

extern void _ZN7S1589C2C1Ev();
extern void _ZN7S1589C2D1Ev();
Name_Map name_map_S1589C2[] = {
  NSPAIR(_ZN7S1589C2C1Ev),
  NSPAIR(_ZN7S1589C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1589C4;
extern VTBL_ENTRY _ZTI7S1589C4[];
extern  VTBL_ENTRY _ZTV7S1589C4[];
extern Class_Descriptor cd_S1589C6;
extern VTBL_ENTRY _ZTI7S1589C6[];
extern  VTBL_ENTRY _ZTV7S1589C6[];
extern Class_Descriptor cd_S1589C7;
extern VTBL_ENTRY _ZTI7S1589C7[];
extern  VTBL_ENTRY _ZTV7S1589C7[];
extern Class_Descriptor cd_S1589C3;
extern VTBL_ENTRY _ZTI7S1589C3[];
extern  VTBL_ENTRY _ZTV7S1589C3[];
static Base_Class bases_S1589C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1589C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1589C6,    ABISELECT(96,60), //bcp->offset
    118, //bcp->virtual_function_table_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_S1589C7,    ABISELECT(104,64), //bcp->offset
    136, //bcp->virtual_function_table_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_S1589C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1589C2[];
extern void _ZN7S1589C2D1Ev();
extern void _ZN7S1589C2D0Ev();
extern void _ZN7S1589C42v9Ev();
extern void _ZN7S1589C43v10Ev();
extern void _ZN7S1589C43v11Ev();
extern void _ZN7S1589C43v12Ev();
extern void _ZN7S1589C43v13Ev();
extern void _ZN7S1589C43v14Ev();
extern void _ZN7S1589C43v15Ev();
extern void _ZN7S1589C43v16Ev();
extern void _ZN7S1589C43v17Ev();
extern void _ZN7S1589C43v18Ev();
extern void _ZN7S1589C43v19Ev();
extern void _ZN7S1589C43v20Ev();
extern void _ZN7S1589C43v21Ev();
extern void _ZN7S1589C43v22Ev();
extern void _ZN7S1589C43v23Ev();
extern void _ZN7S1589C43v24Ev();
extern void _ZN7S1589C43v25Ev();
extern void _ZN7S1589C43v26Ev();
extern void _ZN7S1589C43v27Ev();
extern void _ZN7S1589C43v28Ev();
extern void _ZN7S1589C43v29Ev();
extern void _ZN7S1589C43v30Ev();
extern void _ZN7S1589C43v31Ev();
extern void _ZN7S1589C43v32Ev();
extern void _ZN7S1589C43v33Ev();
extern void _ZN7S1589C43v34Ev();
extern void _ZN7S1589C43v35Ev();
extern void _ZN7S1589C43v36Ev();
extern void _ZN7S1589C43v37Ev();
extern void _ZN7S1589C43v38Ev();
extern void _ZN7S1589C43v39Ev();
extern void _ZN7S1589C43v40Ev();
extern void _ZN7S1589C43v41Ev();
extern void _ZN7S1589C43v42Ev();
extern void _ZN7S1589C43v43Ev();
extern void _ZN7S1589C43v44Ev();
extern void _ZN7S1589C43v45Ev();
extern void _ZN7S1589C43v46Ev();
extern void _ZN7S1589C43v47Ev();
extern void _ZN7S1589C43v48Ev();
extern void _ZN7S1589C43v49Ev();
extern void _ZN7S1589C43v50Ev();
extern void _ZN7S1589C43v51Ev();
extern void _ZN7S1589C43v52Ev();
extern void _ZN7S1589C43v53Ev();
extern void _ZN7S1589C43v54Ev();
extern void _ZN7S1589C43v55Ev();
extern void _ZN7S1589C43v56Ev();
extern void _ZN7S1589C43v57Ev();
extern void _ZN7S1589C43v58Ev();
extern void _ZN7S1589C43v59Ev();
extern void _ZN7S1589C43v60Ev();
extern void _ZN7S1589C43v61Ev();
extern void _ZN7S1589C43v62Ev();
extern void _ZN7S1589C43v63Ev();
extern void _ZN7S1589C43v64Ev();
extern void _ZN7S1589C43v65Ev();
extern void _ZN7S1589C43v66Ev();
extern void _ZN7S1589C43v67Ev();
extern void _ZN7S1589C43v68Ev();
extern void _ZN7S1589C43v69Ev();
extern void _ZN7S1589C43v70Ev();
extern void _ZN7S1589C43v71Ev();
extern void _ZN7S1589C43v72Ev();
extern void _ZN7S1589C33v98Ev();
extern void _ZN7S1589C33v99Ev();
extern void _ZN7S1589C34v100Ev();
extern void _ZN7S1589C34v101Ev();
extern void _ZN7S1589C34v102Ev();
extern void _ZN7S1589C34v103Ev();
extern void _ZN7S1589C34v104Ev();
extern void _ZN7S1589C34v105Ev();
extern void _ZN7S1589C34v106Ev();
extern void _ZN7S1589C34v107Ev();
extern void _ZN7S1589C34v108Ev();
extern void _ZN7S1589C34v109Ev();
extern void _ZN7S1589C34v110Ev();
extern void _ZN7S1589C34v111Ev();
extern void _ZN7S1589C34v112Ev();
extern void _ZN7S1589C34v113Ev();
extern void _ZN7S1589C34v114Ev();
extern void _ZN7S1589C34v115Ev();
extern void _ZN7S1589C34v116Ev();
extern void _ZN7S1589C34v117Ev();
extern void _ZN7S1589C34v118Ev();
extern void _ZN7S1589C34v119Ev();
extern void _ZN7S1589C34v120Ev();
extern void _ZN7S1589C34v121Ev();
extern void _ZN7S1589C24v122Ev();
extern void _ZN7S1589C24v123Ev();
extern void _ZN7S1589C24v124Ev();
extern void _ZN7S1589C24v125Ev();
extern void _ZN7S1589C24v126Ev();
extern void _ZN7S1589C24v127Ev();
extern void _ZN7S1589C24v128Ev();
extern void _ZN7S1589C24v129Ev();
extern void _ZN7S1589C24v130Ev();
extern void _ZN7S1589C24v131Ev();
extern void _ZN7S1589C24v132Ev();
extern void _ZN7S1589C24v133Ev();
extern void _ZN7S1589C24v134Ev();
extern void _ZN7S1589C24v135Ev();
extern void _ZN7S1589C24v136Ev();
extern void _ZN7S1589C24v137Ev();
extern void _ZN7S1589C24v138Ev();
extern void _ZN7S1589C24v139Ev();
extern void _ZN7S1589C24v140Ev();
extern void _ZN7S1589C24v141Ev();
extern void _ZN7S1589C24v142Ev();
extern void _ZN7S1589C24v143Ev();
extern void _ZN7S1589C24v144Ev();
extern void _ZN7S1589C24v145Ev();
extern void _ZN7S1589C24v146Ev();
extern void _ZN7S1589C24v147Ev();
extern void _ZN7S1589C63v73Ev();
extern void _ZN7S1589C63v74Ev();
extern void _ZN7S1589C63v75Ev();
extern void _ZN7S1589C63v76Ev();
extern void _ZN7S1589C63v77Ev();
extern void _ZN7S1589C63v78Ev();
extern void _ZN7S1589C63v79Ev();
extern void _ZN7S1589C63v80Ev();
extern void _ZN7S1589C63v81Ev();
extern void _ZN7S1589C63v82Ev();
extern void _ZN7S1589C63v83Ev();
extern void _ZN7S1589C63v84Ev();
extern void _ZN7S1589C63v85Ev();
extern void _ZN7S1589C63v86Ev();
extern void _ZN7S1589C63v87Ev();
extern void _ZN7S1589C63v88Ev();
extern void _ZN7S1589C73v89Ev();
extern void _ZN7S1589C73v90Ev();
extern void _ZN7S1589C73v91Ev();
extern void _ZN7S1589C73v92Ev();
extern void _ZN7S1589C73v93Ev();
extern void _ZN7S1589C73v94Ev();
extern void _ZN7S1589C73v95Ev();
extern void _ZN7S1589C73v96Ev();
extern void _ZN7S1589C73v97Ev();
static  VTBL_ENTRY vtc_S1589C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1589C2[0]),
  (VTBL_ENTRY)&_ZN7S1589C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1589C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1589C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1589C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1589C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v122Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v123Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v124Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v125Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v126Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v127Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v128Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v129Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v130Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v131Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v132Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v144Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v145Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v146Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v147Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1589C2[0]),
  (VTBL_ENTRY)&_ZN7S1589C63v73Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v74Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v75Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v76Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v77Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v78Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v79Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v80Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v81Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v82Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v83Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v85Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v86Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v87Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v88Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1589C2[0]),
  (VTBL_ENTRY)&_ZN7S1589C73v89Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v90Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v91Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v92Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v93Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v94Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v95Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v96Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v97Ev,
};
extern VTBL_ENTRY _ZTI7S1589C2[];
extern  VTBL_ENTRY _ZTV7S1589C2[];
Class_Descriptor cd_S1589C2 = {  "S1589C2", // class name
  bases_S1589C2, 4,
  &(vtc_S1589C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,108), // object size
  NSPAIRA(_ZTI7S1589C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1589C2),147, //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  S1589C1  : S1589C2 {
  virtual  ~S1589C1(); // _ZN7S1589C1D1Ev
  virtual void  v1(); // _ZN7S1589C12v1Ev
  virtual void  v2(); // _ZN7S1589C12v2Ev
  virtual void  v3(); // _ZN7S1589C12v3Ev
  virtual void  v4(); // _ZN7S1589C12v4Ev
  virtual void  v5(); // _ZN7S1589C12v5Ev
  virtual void  v6(); // _ZN7S1589C12v6Ev
  virtual void  v7(); // _ZN7S1589C12v7Ev
  virtual void  v8(); // _ZN7S1589C12v8Ev
  S1589C1(); // tgen
};
//SIG(1 S1589C1) 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 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} BC6{ v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88} BC7{ v89 v90 v91 v92 v93 v94 v95 v96 v97} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 Fp FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1} vd 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 FC12{ m FC13{ BC14{ BC11}} Fc} Fi} vd v1 v2 v3 v4 v5 v6 v7 v8}


 S1589C1 ::~S1589C1(){ note_dtor("S1589C1", this);}
void  S1589C1 ::v1(){vfunc_called(this, "_ZN7S1589C12v1Ev");}
void  S1589C1 ::v2(){vfunc_called(this, "_ZN7S1589C12v2Ev");}
void  S1589C1 ::v3(){vfunc_called(this, "_ZN7S1589C12v3Ev");}
void  S1589C1 ::v4(){vfunc_called(this, "_ZN7S1589C12v4Ev");}
void  S1589C1 ::v5(){vfunc_called(this, "_ZN7S1589C12v5Ev");}
void  S1589C1 ::v6(){vfunc_called(this, "_ZN7S1589C12v6Ev");}
void  S1589C1 ::v7(){vfunc_called(this, "_ZN7S1589C12v7Ev");}
void  S1589C1 ::v8(){vfunc_called(this, "_ZN7S1589C12v8Ev");}
S1589C1 ::S1589C1(){ note_ctor("S1589C1", this);} // tgen

static void Test_S1589C1()
{
  extern Class_Descriptor cd_S1589C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,28)];
    init_test(&cd_S1589C1, buf);
    S1589C1 *dp, &lv = *(dp=new (buf) S1589C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,108), "sizeof(S1589C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1589C1)");
    check_base_class_offset(lv, (S1589C4*)(S1589C3*)(S1589C2*), 0, "S1589C1");
    check_base_class_offset(lv, (S1589C6*)(S1589C3*)(S1589C2*), ABISELECT(96,60), "S1589C1");
    check_base_class_offset(lv, (S1589C7*)(S1589C3*)(S1589C2*), ABISELECT(104,64), "S1589C1");
    check_base_class_offset(lv, (S1589C3*)(S1589C2*), 0, "S1589C1");
    check_base_class_offset(lv, (S1589C2*), 0, "S1589C1");
    test_class_info(&lv, &cd_S1589C1);
    dp->~S1589C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1589C1(Test_S1589C1, "S1589C1", ABISELECT(176,108));

#else // __cplusplus

extern void _ZN7S1589C1C1Ev();
extern void _ZN7S1589C1D1Ev();
Name_Map name_map_S1589C1[] = {
  NSPAIR(_ZN7S1589C1C1Ev),
  NSPAIR(_ZN7S1589C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1589C4;
extern VTBL_ENTRY _ZTI7S1589C4[];
extern  VTBL_ENTRY _ZTV7S1589C4[];
extern Class_Descriptor cd_S1589C6;
extern VTBL_ENTRY _ZTI7S1589C6[];
extern  VTBL_ENTRY _ZTV7S1589C6[];
extern Class_Descriptor cd_S1589C7;
extern VTBL_ENTRY _ZTI7S1589C7[];
extern  VTBL_ENTRY _ZTV7S1589C7[];
extern Class_Descriptor cd_S1589C3;
extern VTBL_ENTRY _ZTI7S1589C3[];
extern  VTBL_ENTRY _ZTV7S1589C3[];
extern Class_Descriptor cd_S1589C2;
extern VTBL_ENTRY _ZTI7S1589C2[];
extern  VTBL_ENTRY _ZTV7S1589C2[];
static Base_Class bases_S1589C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1589C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1589C6,    ABISELECT(96,60), //bcp->offset
    126, //bcp->virtual_function_table_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_S1589C7,    ABISELECT(104,64), //bcp->offset
    144, //bcp->virtual_function_table_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_S1589C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1589C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1589C1[];
extern void _ZN7S1589C1D1Ev();
extern void _ZN7S1589C1D0Ev();
extern void _ZN7S1589C42v9Ev();
extern void _ZN7S1589C43v10Ev();
extern void _ZN7S1589C43v11Ev();
extern void _ZN7S1589C43v12Ev();
extern void _ZN7S1589C43v13Ev();
extern void _ZN7S1589C43v14Ev();
extern void _ZN7S1589C43v15Ev();
extern void _ZN7S1589C43v16Ev();
extern void _ZN7S1589C43v17Ev();
extern void _ZN7S1589C43v18Ev();
extern void _ZN7S1589C43v19Ev();
extern void _ZN7S1589C43v20Ev();
extern void _ZN7S1589C43v21Ev();
extern void _ZN7S1589C43v22Ev();
extern void _ZN7S1589C43v23Ev();
extern void _ZN7S1589C43v24Ev();
extern void _ZN7S1589C43v25Ev();
extern void _ZN7S1589C43v26Ev();
extern void _ZN7S1589C43v27Ev();
extern void _ZN7S1589C43v28Ev();
extern void _ZN7S1589C43v29Ev();
extern void _ZN7S1589C43v30Ev();
extern void _ZN7S1589C43v31Ev();
extern void _ZN7S1589C43v32Ev();
extern void _ZN7S1589C43v33Ev();
extern void _ZN7S1589C43v34Ev();
extern void _ZN7S1589C43v35Ev();
extern void _ZN7S1589C43v36Ev();
extern void _ZN7S1589C43v37Ev();
extern void _ZN7S1589C43v38Ev();
extern void _ZN7S1589C43v39Ev();
extern void _ZN7S1589C43v40Ev();
extern void _ZN7S1589C43v41Ev();
extern void _ZN7S1589C43v42Ev();
extern void _ZN7S1589C43v43Ev();
extern void _ZN7S1589C43v44Ev();
extern void _ZN7S1589C43v45Ev();
extern void _ZN7S1589C43v46Ev();
extern void _ZN7S1589C43v47Ev();
extern void _ZN7S1589C43v48Ev();
extern void _ZN7S1589C43v49Ev();
extern void _ZN7S1589C43v50Ev();
extern void _ZN7S1589C43v51Ev();
extern void _ZN7S1589C43v52Ev();
extern void _ZN7S1589C43v53Ev();
extern void _ZN7S1589C43v54Ev();
extern void _ZN7S1589C43v55Ev();
extern void _ZN7S1589C43v56Ev();
extern void _ZN7S1589C43v57Ev();
extern void _ZN7S1589C43v58Ev();
extern void _ZN7S1589C43v59Ev();
extern void _ZN7S1589C43v60Ev();
extern void _ZN7S1589C43v61Ev();
extern void _ZN7S1589C43v62Ev();
extern void _ZN7S1589C43v63Ev();
extern void _ZN7S1589C43v64Ev();
extern void _ZN7S1589C43v65Ev();
extern void _ZN7S1589C43v66Ev();
extern void _ZN7S1589C43v67Ev();
extern void _ZN7S1589C43v68Ev();
extern void _ZN7S1589C43v69Ev();
extern void _ZN7S1589C43v70Ev();
extern void _ZN7S1589C43v71Ev();
extern void _ZN7S1589C43v72Ev();
extern void _ZN7S1589C33v98Ev();
extern void _ZN7S1589C33v99Ev();
extern void _ZN7S1589C34v100Ev();
extern void _ZN7S1589C34v101Ev();
extern void _ZN7S1589C34v102Ev();
extern void _ZN7S1589C34v103Ev();
extern void _ZN7S1589C34v104Ev();
extern void _ZN7S1589C34v105Ev();
extern void _ZN7S1589C34v106Ev();
extern void _ZN7S1589C34v107Ev();
extern void _ZN7S1589C34v108Ev();
extern void _ZN7S1589C34v109Ev();
extern void _ZN7S1589C34v110Ev();
extern void _ZN7S1589C34v111Ev();
extern void _ZN7S1589C34v112Ev();
extern void _ZN7S1589C34v113Ev();
extern void _ZN7S1589C34v114Ev();
extern void _ZN7S1589C34v115Ev();
extern void _ZN7S1589C34v116Ev();
extern void _ZN7S1589C34v117Ev();
extern void _ZN7S1589C34v118Ev();
extern void _ZN7S1589C34v119Ev();
extern void _ZN7S1589C34v120Ev();
extern void _ZN7S1589C34v121Ev();
extern void _ZN7S1589C24v122Ev();
extern void _ZN7S1589C24v123Ev();
extern void _ZN7S1589C24v124Ev();
extern void _ZN7S1589C24v125Ev();
extern void _ZN7S1589C24v126Ev();
extern void _ZN7S1589C24v127Ev();
extern void _ZN7S1589C24v128Ev();
extern void _ZN7S1589C24v129Ev();
extern void _ZN7S1589C24v130Ev();
extern void _ZN7S1589C24v131Ev();
extern void _ZN7S1589C24v132Ev();
extern void _ZN7S1589C24v133Ev();
extern void _ZN7S1589C24v134Ev();
extern void _ZN7S1589C24v135Ev();
extern void _ZN7S1589C24v136Ev();
extern void _ZN7S1589C24v137Ev();
extern void _ZN7S1589C24v138Ev();
extern void _ZN7S1589C24v139Ev();
extern void _ZN7S1589C24v140Ev();
extern void _ZN7S1589C24v141Ev();
extern void _ZN7S1589C24v142Ev();
extern void _ZN7S1589C24v143Ev();
extern void _ZN7S1589C24v144Ev();
extern void _ZN7S1589C24v145Ev();
extern void _ZN7S1589C24v146Ev();
extern void _ZN7S1589C24v147Ev();
extern void _ZN7S1589C12v1Ev();
extern void _ZN7S1589C12v2Ev();
extern void _ZN7S1589C12v3Ev();
extern void _ZN7S1589C12v4Ev();
extern void _ZN7S1589C12v5Ev();
extern void _ZN7S1589C12v6Ev();
extern void _ZN7S1589C12v7Ev();
extern void _ZN7S1589C12v8Ev();
extern void _ZN7S1589C63v73Ev();
extern void _ZN7S1589C63v74Ev();
extern void _ZN7S1589C63v75Ev();
extern void _ZN7S1589C63v76Ev();
extern void _ZN7S1589C63v77Ev();
extern void _ZN7S1589C63v78Ev();
extern void _ZN7S1589C63v79Ev();
extern void _ZN7S1589C63v80Ev();
extern void _ZN7S1589C63v81Ev();
extern void _ZN7S1589C63v82Ev();
extern void _ZN7S1589C63v83Ev();
extern void _ZN7S1589C63v84Ev();
extern void _ZN7S1589C63v85Ev();
extern void _ZN7S1589C63v86Ev();
extern void _ZN7S1589C63v87Ev();
extern void _ZN7S1589C63v88Ev();
extern void _ZN7S1589C73v89Ev();
extern void _ZN7S1589C73v90Ev();
extern void _ZN7S1589C73v91Ev();
extern void _ZN7S1589C73v92Ev();
extern void _ZN7S1589C73v93Ev();
extern void _ZN7S1589C73v94Ev();
extern void _ZN7S1589C73v95Ev();
extern void _ZN7S1589C73v96Ev();
extern void _ZN7S1589C73v97Ev();
static  VTBL_ENTRY vtc_S1589C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1589C1[0]),
  (VTBL_ENTRY)&_ZN7S1589C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1589C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1589C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1589C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1589C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1589C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1589C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v122Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v123Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v124Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v125Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v126Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v127Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v128Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v129Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v130Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v131Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v132Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v144Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v145Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v146Ev,
  (VTBL_ENTRY)&_ZN7S1589C24v147Ev,
  (VTBL_ENTRY)&_ZN7S1589C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1589C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1589C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1589C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1589C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1589C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1589C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1589C12v8Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1589C1[0]),
  (VTBL_ENTRY)&_ZN7S1589C63v73Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v74Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v75Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v76Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v77Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v78Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v79Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v80Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v81Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v82Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v83Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v85Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v86Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v87Ev,
  (VTBL_ENTRY)&_ZN7S1589C63v88Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1589C1[0]),
  (VTBL_ENTRY)&_ZN7S1589C73v89Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v90Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v91Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v92Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v93Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v94Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v95Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v96Ev,
  (VTBL_ENTRY)&_ZN7S1589C73v97Ev,
};
extern VTBL_ENTRY _ZTI7S1589C1[];
extern  VTBL_ENTRY _ZTV7S1589C1[];
Class_Descriptor cd_S1589C1 = {  "S1589C1", // class name
  bases_S1589C1, 5,
  &(vtc_S1589C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,108), // object size
  NSPAIRA(_ZTI7S1589C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1589C1),155, //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  S1565C4  {
  int s1565c4f0;
  __tsi64 s1565c4f1;
  void *s1565c4f2[4];
  int s1565c4f3[2];
  void *s1565c4f4;
  ::S79C8_nt s1565c4f5;
  void *s1565c4f6[2];
  virtual  ~S1565C4(); // _ZN7S1565C4D1Ev
  virtual void  v8(); // _ZN7S1565C42v8Ev
  virtual void  v9(); // _ZN7S1565C42v9Ev
  virtual void  v10(); // _ZN7S1565C43v10Ev
  virtual void  v11(); // _ZN7S1565C43v11Ev
  virtual void  v12(); // _ZN7S1565C43v12Ev
  virtual void  v13(); // _ZN7S1565C43v13Ev
  virtual void  v14(); // _ZN7S1565C43v14Ev
  virtual void  v15(); // _ZN7S1565C43v15Ev
  virtual void  v16(); // _ZN7S1565C43v16Ev
  virtual void  v17(); // _ZN7S1565C43v17Ev
  virtual void  v18(); // _ZN7S1565C43v18Ev
  virtual void  v19(); // _ZN7S1565C43v19Ev
  virtual void  v20(); // _ZN7S1565C43v20Ev
  virtual void  v21(); // _ZN7S1565C43v21Ev
  virtual void  v22(); // _ZN7S1565C43v22Ev
  virtual void  v23(); // _ZN7S1565C43v23Ev
  virtual void  v24(); // _ZN7S1565C43v24Ev
  virtual void  v25(); // _ZN7S1565C43v25Ev
  virtual void  v26(); // _ZN7S1565C43v26Ev
  virtual void  v27(); // _ZN7S1565C43v27Ev
  virtual void  v28(); // _ZN7S1565C43v28Ev
  virtual void  v29(); // _ZN7S1565C43v29Ev
  virtual void  v30(); // _ZN7S1565C43v30Ev
  virtual void  v31(); // _ZN7S1565C43v31Ev
  virtual void  v32(); // _ZN7S1565C43v32Ev
  virtual void  v33(); // _ZN7S1565C43v33Ev
  virtual void  v34(); // _ZN7S1565C43v34Ev
  virtual void  v35(); // _ZN7S1565C43v35Ev
  virtual void  v36(); // _ZN7S1565C43v36Ev
  virtual void  v37(); // _ZN7S1565C43v37Ev
  virtual void  v38(); // _ZN7S1565C43v38Ev
  virtual void  v39(); // _ZN7S1565C43v39Ev
  virtual void  v40(); // _ZN7S1565C43v40Ev
  virtual void  v41(); // _ZN7S1565C43v41Ev
  virtual void  v42(); // _ZN7S1565C43v42Ev
  virtual void  v43(); // _ZN7S1565C43v43Ev
  virtual void  v44(); // _ZN7S1565C43v44Ev
  virtual void  v45(); // _ZN7S1565C43v45Ev
  virtual void  v46(); // _ZN7S1565C43v46Ev
  virtual void  v47(); // _ZN7S1565C43v47Ev
  virtual void  v48(); // _ZN7S1565C43v48Ev
  virtual void  v49(); // _ZN7S1565C43v49Ev
  virtual void  v50(); // _ZN7S1565C43v50Ev
  virtual void  v51(); // _ZN7S1565C43v51Ev
  virtual void  v52(); // _ZN7S1565C43v52Ev
  virtual void  v53(); // _ZN7S1565C43v53Ev
  virtual void  v54(); // _ZN7S1565C43v54Ev
  virtual void  v55(); // _ZN7S1565C43v55Ev
  virtual void  v56(); // _ZN7S1565C43v56Ev
  virtual void  v57(); // _ZN7S1565C43v57Ev
  virtual void  v58(); // _ZN7S1565C43v58Ev
  virtual void  v59(); // _ZN7S1565C43v59Ev
  virtual void  v60(); // _ZN7S1565C43v60Ev
  virtual void  v61(); // _ZN7S1565C43v61Ev
  virtual void  v62(); // _ZN7S1565C43v62Ev
  virtual void  v63(); // _ZN7S1565C43v63Ev
  virtual void  v64(); // _ZN7S1565C43v64Ev
  virtual void  v65(); // _ZN7S1565C43v65Ev
  virtual void  v66(); // _ZN7S1565C43v66Ev
  virtual void  v67(); // _ZN7S1565C43v67Ev
  virtual void  v68(); // _ZN7S1565C43v68Ev
  virtual void  v69(); // _ZN7S1565C43v69Ev
  virtual void  v70(); // _ZN7S1565C43v70Ev
  virtual void  v71(); // _ZN7S1565C43v71Ev
  S1565C4(); // tgen
};
//SIG(-1 S1565C4) 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]}


 S1565C4 ::~S1565C4(){ note_dtor("S1565C4", this);}
void  S1565C4 ::v8(){vfunc_called(this, "_ZN7S1565C42v8Ev");}
void  S1565C4 ::v9(){vfunc_called(this, "_ZN7S1565C42v9Ev");}
void  S1565C4 ::v10(){vfunc_called(this, "_ZN7S1565C43v10Ev");}
void  S1565C4 ::v11(){vfunc_called(this, "_ZN7S1565C43v11Ev");}
void  S1565C4 ::v12(){vfunc_called(this, "_ZN7S1565C43v12Ev");}
void  S1565C4 ::v13(){vfunc_called(this, "_ZN7S1565C43v13Ev");}
void  S1565C4 ::v14(){vfunc_called(this, "_ZN7S1565C43v14Ev");}
void  S1565C4 ::v15(){vfunc_called(this, "_ZN7S1565C43v15Ev");}
void  S1565C4 ::v16(){vfunc_called(this, "_ZN7S1565C43v16Ev");}
void  S1565C4 ::v17(){vfunc_called(this, "_ZN7S1565C43v17Ev");}
void  S1565C4 ::v18(){vfunc_called(this, "_ZN7S1565C43v18Ev");}
void  S1565C4 ::v19(){vfunc_called(this, "_ZN7S1565C43v19Ev");}
void  S1565C4 ::v20(){vfunc_called(this, "_ZN7S1565C43v20Ev");}
void  S1565C4 ::v21(){vfunc_called(this, "_ZN7S1565C43v21Ev");}
void  S1565C4 ::v22(){vfunc_called(this, "_ZN7S1565C43v22Ev");}
void  S1565C4 ::v23(){vfunc_called(this, "_ZN7S1565C43v23Ev");}
void  S1565C4 ::v24(){vfunc_called(this, "_ZN7S1565C43v24Ev");}
void  S1565C4 ::v25(){vfunc_called(this, "_ZN7S1565C43v25Ev");}
void  S1565C4 ::v26(){vfunc_called(this, "_ZN7S1565C43v26Ev");}
void  S1565C4 ::v27(){vfunc_called(this, "_ZN7S1565C43v27Ev");}
void  S1565C4 ::v28(){vfunc_called(this, "_ZN7S1565C43v28Ev");}
void  S1565C4 ::v29(){vfunc_called(this, "_ZN7S1565C43v29Ev");}
void  S1565C4 ::v30(){vfunc_called(this, "_ZN7S1565C43v30Ev");}
void  S1565C4 ::v31(){vfunc_called(this, "_ZN7S1565C43v31Ev");}
void  S1565C4 ::v32(){vfunc_called(this, "_ZN7S1565C43v32Ev");}
void  S1565C4 ::v33(){vfunc_called(this, "_ZN7S1565C43v33Ev");}
void  S1565C4 ::v34(){vfunc_called(this, "_ZN7S1565C43v34Ev");}
void  S1565C4 ::v35(){vfunc_called(this, "_ZN7S1565C43v35Ev");}
void  S1565C4 ::v36(){vfunc_called(this, "_ZN7S1565C43v36Ev");}
void  S1565C4 ::v37(){vfunc_called(this, "_ZN7S1565C43v37Ev");}
void  S1565C4 ::v38(){vfunc_called(this, "_ZN7S1565C43v38Ev");}
void  S1565C4 ::v39(){vfunc_called(this, "_ZN7S1565C43v39Ev");}
void  S1565C4 ::v40(){vfunc_called(this, "_ZN7S1565C43v40Ev");}
void  S1565C4 ::v41(){vfunc_called(this, "_ZN7S1565C43v41Ev");}
void  S1565C4 ::v42(){vfunc_called(this, "_ZN7S1565C43v42Ev");}
void  S1565C4 ::v43(){vfunc_called(this, "_ZN7S1565C43v43Ev");}
void  S1565C4 ::v44(){vfunc_called(this, "_ZN7S1565C43v44Ev");}
void  S1565C4 ::v45(){vfunc_called(this, "_ZN7S1565C43v45Ev");}
void  S1565C4 ::v46(){vfunc_called(this, "_ZN7S1565C43v46Ev");}
void  S1565C4 ::v47(){vfunc_called(this, "_ZN7S1565C43v47Ev");}
void  S1565C4 ::v48(){vfunc_called(this, "_ZN7S1565C43v48Ev");}
void  S1565C4 ::v49(){vfunc_called(this, "_ZN7S1565C43v49Ev");}
void  S1565C4 ::v50(){vfunc_called(this, "_ZN7S1565C43v50Ev");}
void  S1565C4 ::v51(){vfunc_called(this, "_ZN7S1565C43v51Ev");}
void  S1565C4 ::v52(){vfunc_called(this, "_ZN7S1565C43v52Ev");}
void  S1565C4 ::v53(){vfunc_called(this, "_ZN7S1565C43v53Ev");}
void  S1565C4 ::v54(){vfunc_called(this, "_ZN7S1565C43v54Ev");}
void  S1565C4 ::v55(){vfunc_called(this, "_ZN7S1565C43v55Ev");}
void  S1565C4 ::v56(){vfunc_called(this, "_ZN7S1565C43v56Ev");}
void  S1565C4 ::v57(){vfunc_called(this, "_ZN7S1565C43v57Ev");}
void  S1565C4 ::v58(){vfunc_called(this, "_ZN7S1565C43v58Ev");}
void  S1565C4 ::v59(){vfunc_called(this, "_ZN7S1565C43v59Ev");}
void  S1565C4 ::v60(){vfunc_called(this, "_ZN7S1565C43v60Ev");}
void  S1565C4 ::v61(){vfunc_called(this, "_ZN7S1565C43v61Ev");}
void  S1565C4 ::v62(){vfunc_called(this, "_ZN7S1565C43v62Ev");}
void  S1565C4 ::v63(){vfunc_called(this, "_ZN7S1565C43v63Ev");}
void  S1565C4 ::v64(){vfunc_called(this, "_ZN7S1565C43v64Ev");}
void  S1565C4 ::v65(){vfunc_called(this, "_ZN7S1565C43v65Ev");}
void  S1565C4 ::v66(){vfunc_called(this, "_ZN7S1565C43v66Ev");}
void  S1565C4 ::v67(){vfunc_called(this, "_ZN7S1565C43v67Ev");}
void  S1565C4 ::v68(){vfunc_called(this, "_ZN7S1565C43v68Ev");}
void  S1565C4 ::v69(){vfunc_called(this, "_ZN7S1565C43v69Ev");}
void  S1565C4 ::v70(){vfunc_called(this, "_ZN7S1565C43v70Ev");}
void  S1565C4 ::v71(){vfunc_called(this, "_ZN7S1565C43v71Ev");}
S1565C4 ::S1565C4(){ note_ctor("S1565C4", this);} // tgen

static void Test_S1565C4()
{
  extern Class_Descriptor cd_S1565C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1565C4, buf);
    S1565C4 *dp, &lv = *(dp=new (buf) S1565C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1565C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1565C4)");
    check_field_offset(lv, s1565c4f0, ABISELECT(8,4), "S1565C4.s1565c4f0");
    check_field_offset(lv, s1565c4f1, ABISELECT(16,8), "S1565C4.s1565c4f1");
    check_field_offset(lv, s1565c4f2, ABISELECT(24,16), "S1565C4.s1565c4f2");
    check_field_offset(lv, s1565c4f3, ABISELECT(56,32), "S1565C4.s1565c4f3");
    check_field_offset(lv, s1565c4f4, ABISELECT(64,40), "S1565C4.s1565c4f4");
    check_field_offset(lv, s1565c4f5, ABISELECT(72,44), "S1565C4.s1565c4f5");
    check_field_offset(lv, s1565c4f6, ABISELECT(80,52), "S1565C4.s1565c4f6");
    test_class_info(&lv, &cd_S1565C4);
    dp->~S1565C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1565C4(Test_S1565C4, "S1565C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1565C4C1Ev();
extern void _ZN7S1565C4D1Ev();
Name_Map name_map_S1565C4[] = {
  NSPAIR(_ZN7S1565C4C1Ev),
  NSPAIR(_ZN7S1565C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1565C4[];
extern void _ZN7S1565C4D1Ev();
extern void _ZN7S1565C4D0Ev();
extern void _ZN7S1565C42v8Ev();
extern void _ZN7S1565C42v9Ev();
extern void _ZN7S1565C43v10Ev();
extern void _ZN7S1565C43v11Ev();
extern void _ZN7S1565C43v12Ev();
extern void _ZN7S1565C43v13Ev();
extern void _ZN7S1565C43v14Ev();
extern void _ZN7S1565C43v15Ev();
extern void _ZN7S1565C43v16Ev();
extern void _ZN7S1565C43v17Ev();
extern void _ZN7S1565C43v18Ev();
extern void _ZN7S1565C43v19Ev();
extern void _ZN7S1565C43v20Ev();
extern void _ZN7S1565C43v21Ev();
extern void _ZN7S1565C43v22Ev();
extern void _ZN7S1565C43v23Ev();
extern void _ZN7S1565C43v24Ev();
extern void _ZN7S1565C43v25Ev();
extern void _ZN7S1565C43v26Ev();
extern void _ZN7S1565C43v27Ev();
extern void _ZN7S1565C43v28Ev();
extern void _ZN7S1565C43v29Ev();
extern void _ZN7S1565C43v30Ev();
extern void _ZN7S1565C43v31Ev();
extern void _ZN7S1565C43v32Ev();
extern void _ZN7S1565C43v33Ev();
extern void _ZN7S1565C43v34Ev();
extern void _ZN7S1565C43v35Ev();
extern void _ZN7S1565C43v36Ev();
extern void _ZN7S1565C43v37Ev();
extern void _ZN7S1565C43v38Ev();
extern void _ZN7S1565C43v39Ev();
extern void _ZN7S1565C43v40Ev();
extern void _ZN7S1565C43v41Ev();
extern void _ZN7S1565C43v42Ev();
extern void _ZN7S1565C43v43Ev();
extern void _ZN7S1565C43v44Ev();
extern void _ZN7S1565C43v45Ev();
extern void _ZN7S1565C43v46Ev();
extern void _ZN7S1565C43v47Ev();
extern void _ZN7S1565C43v48Ev();
extern void _ZN7S1565C43v49Ev();
extern void _ZN7S1565C43v50Ev();
extern void _ZN7S1565C43v51Ev();
extern void _ZN7S1565C43v52Ev();
extern void _ZN7S1565C43v53Ev();
extern void _ZN7S1565C43v54Ev();
extern void _ZN7S1565C43v55Ev();
extern void _ZN7S1565C43v56Ev();
extern void _ZN7S1565C43v57Ev();
extern void _ZN7S1565C43v58Ev();
extern void _ZN7S1565C43v59Ev();
extern void _ZN7S1565C43v60Ev();
extern void _ZN7S1565C43v61Ev();
extern void _ZN7S1565C43v62Ev();
extern void _ZN7S1565C43v63Ev();
extern void _ZN7S1565C43v64Ev();
extern void _ZN7S1565C43v65Ev();
extern void _ZN7S1565C43v66Ev();
extern void _ZN7S1565C43v67Ev();
extern void _ZN7S1565C43v68Ev();
extern void _ZN7S1565C43v69Ev();
extern void _ZN7S1565C43v70Ev();
extern void _ZN7S1565C43v71Ev();
static  VTBL_ENTRY vtc_S1565C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1565C4[0]),
  (VTBL_ENTRY)&_ZN7S1565C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1565C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1565C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1565C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v71Ev,
};
extern VTBL_ENTRY _ZTI7S1565C4[];
extern  VTBL_ENTRY _ZTV7S1565C4[];
Class_Descriptor cd_S1565C4 = {  "S1565C4", // class name
  0,0,//no base classes
  &(vtc_S1565C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1565C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1565C4),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  S1565C6  {
  virtual void  v72(); // _ZN7S1565C63v72Ev
  virtual void  v73(); // _ZN7S1565C63v73Ev
  virtual void  v74(); // _ZN7S1565C63v74Ev
  virtual void  v75(); // _ZN7S1565C63v75Ev
  virtual void  v76(); // _ZN7S1565C63v76Ev
  virtual void  v77(); // _ZN7S1565C63v77Ev
  virtual void  v78(); // _ZN7S1565C63v78Ev
  virtual void  v79(); // _ZN7S1565C63v79Ev
  virtual void  v80(); // _ZN7S1565C63v80Ev
  virtual void  v81(); // _ZN7S1565C63v81Ev
  virtual void  v82(); // _ZN7S1565C63v82Ev
  virtual void  v83(); // _ZN7S1565C63v83Ev
  virtual void  v84(); // _ZN7S1565C63v84Ev
  virtual void  v85(); // _ZN7S1565C63v85Ev
  virtual void  v86(); // _ZN7S1565C63v86Ev
  virtual void  v87(); // _ZN7S1565C63v87Ev
  ~S1565C6(); // tgen
  S1565C6(); // tgen
};
//SIG(-1 S1565C6) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16}


void  S1565C6 ::v72(){vfunc_called(this, "_ZN7S1565C63v72Ev");}
void  S1565C6 ::v73(){vfunc_called(this, "_ZN7S1565C63v73Ev");}
void  S1565C6 ::v74(){vfunc_called(this, "_ZN7S1565C63v74Ev");}
void  S1565C6 ::v75(){vfunc_called(this, "_ZN7S1565C63v75Ev");}
void  S1565C6 ::v76(){vfunc_called(this, "_ZN7S1565C63v76Ev");}
void  S1565C6 ::v77(){vfunc_called(this, "_ZN7S1565C63v77Ev");}
void  S1565C6 ::v78(){vfunc_called(this, "_ZN7S1565C63v78Ev");}
void  S1565C6 ::v79(){vfunc_called(this, "_ZN7S1565C63v79Ev");}
void  S1565C6 ::v80(){vfunc_called(this, "_ZN7S1565C63v80Ev");}
void  S1565C6 ::v81(){vfunc_called(this, "_ZN7S1565C63v81Ev");}
void  S1565C6 ::v82(){vfunc_called(this, "_ZN7S1565C63v82Ev");}
void  S1565C6 ::v83(){vfunc_called(this, "_ZN7S1565C63v83Ev");}
void  S1565C6 ::v84(){vfunc_called(this, "_ZN7S1565C63v84Ev");}
void  S1565C6 ::v85(){vfunc_called(this, "_ZN7S1565C63v85Ev");}
void  S1565C6 ::v86(){vfunc_called(this, "_ZN7S1565C63v86Ev");}
void  S1565C6 ::v87(){vfunc_called(this, "_ZN7S1565C63v87Ev");}
S1565C6 ::~S1565C6(){ note_dtor("S1565C6", this);} // tgen
S1565C6 ::S1565C6(){ note_ctor("S1565C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1565C6C1Ev();
extern void _ZN7S1565C6D1Ev();
Name_Map name_map_S1565C6[] = {
  NSPAIR(_ZN7S1565C6C1Ev),
  NSPAIR(_ZN7S1565C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1565C6[];
extern void _ZN7S1565C63v72Ev();
extern void _ZN7S1565C63v73Ev();
extern void _ZN7S1565C63v74Ev();
extern void _ZN7S1565C63v75Ev();
extern void _ZN7S1565C63v76Ev();
extern void _ZN7S1565C63v77Ev();
extern void _ZN7S1565C63v78Ev();
extern void _ZN7S1565C63v79Ev();
extern void _ZN7S1565C63v80Ev();
extern void _ZN7S1565C63v81Ev();
extern void _ZN7S1565C63v82Ev();
extern void _ZN7S1565C63v83Ev();
extern void _ZN7S1565C63v84Ev();
extern void _ZN7S1565C63v85Ev();
extern void _ZN7S1565C63v86Ev();
extern void _ZN7S1565C63v87Ev();
static  VTBL_ENTRY vtc_S1565C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1565C6[0]),
  (VTBL_ENTRY)&_ZN7S1565C63v72Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v73Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v74Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v75Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v76Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v77Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v78Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v79Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v80Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v81Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v82Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v83Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v85Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v86Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v87Ev,
};
extern VTBL_ENTRY _ZTI7S1565C6[];
extern  VTBL_ENTRY _ZTV7S1565C6[];
Class_Descriptor cd_S1565C6 = {  "S1565C6", // class name
  0,0,//no base classes
  &(vtc_S1565C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1565C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1565C6),18, //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  S1565C7  {
  virtual void  v88(); // _ZN7S1565C73v88Ev
  virtual void  v89(); // _ZN7S1565C73v89Ev
  virtual void  v90(); // _ZN7S1565C73v90Ev
  virtual void  v91(); // _ZN7S1565C73v91Ev
  virtual void  v92(); // _ZN7S1565C73v92Ev
  virtual void  v93(); // _ZN7S1565C73v93Ev
  virtual void  v94(); // _ZN7S1565C73v94Ev
  virtual void  v95(); // _ZN7S1565C73v95Ev
  virtual void  v96(); // _ZN7S1565C73v96Ev
  ~S1565C7(); // tgen
  S1565C7(); // tgen
};
//SIG(-1 S1565C7) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S1565C7 ::v88(){vfunc_called(this, "_ZN7S1565C73v88Ev");}
void  S1565C7 ::v89(){vfunc_called(this, "_ZN7S1565C73v89Ev");}
void  S1565C7 ::v90(){vfunc_called(this, "_ZN7S1565C73v90Ev");}
void  S1565C7 ::v91(){vfunc_called(this, "_ZN7S1565C73v91Ev");}
void  S1565C7 ::v92(){vfunc_called(this, "_ZN7S1565C73v92Ev");}
void  S1565C7 ::v93(){vfunc_called(this, "_ZN7S1565C73v93Ev");}
void  S1565C7 ::v94(){vfunc_called(this, "_ZN7S1565C73v94Ev");}
void  S1565C7 ::v95(){vfunc_called(this, "_ZN7S1565C73v95Ev");}
void  S1565C7 ::v96(){vfunc_called(this, "_ZN7S1565C73v96Ev");}
S1565C7 ::~S1565C7(){ note_dtor("S1565C7", this);} // tgen
S1565C7 ::S1565C7(){ note_ctor("S1565C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1565C7C1Ev();
extern void _ZN7S1565C7D1Ev();
Name_Map name_map_S1565C7[] = {
  NSPAIR(_ZN7S1565C7C1Ev),
  NSPAIR(_ZN7S1565C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1565C7[];
extern void _ZN7S1565C73v88Ev();
extern void _ZN7S1565C73v89Ev();
extern void _ZN7S1565C73v90Ev();
extern void _ZN7S1565C73v91Ev();
extern void _ZN7S1565C73v92Ev();
extern void _ZN7S1565C73v93Ev();
extern void _ZN7S1565C73v94Ev();
extern void _ZN7S1565C73v95Ev();
extern void _ZN7S1565C73v96Ev();
static  VTBL_ENTRY vtc_S1565C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1565C7[0]),
  (VTBL_ENTRY)&_ZN7S1565C73v88Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v89Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v90Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v91Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v92Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v93Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v94Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v95Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v96Ev,
};
extern VTBL_ENTRY _ZTI7S1565C7[];
extern  VTBL_ENTRY _ZTV7S1565C7[];
Class_Descriptor cd_S1565C7 = {  "S1565C7", // class name
  0,0,//no base classes
  &(vtc_S1565C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1565C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1565C7),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  S1565C3  : S1565C4 , S1565C6 , S1565C7 {
  void *s1565c3f0;
  ::S79C39_nt s1565c3f1;
  unsigned int s1565c3f2:1;
  unsigned int s1565c3f3:1;
  unsigned int s1565c3f4:1;
  unsigned int s1565c3f5:1;
  virtual  ~S1565C3(); // _ZN7S1565C3D1Ev
  virtual void  v97(); // _ZN7S1565C33v97Ev
  virtual void  v98(); // _ZN7S1565C33v98Ev
  virtual void  v99(); // _ZN7S1565C33v99Ev
  virtual void  v100(); // _ZN7S1565C34v100Ev
  virtual void  v101(); // _ZN7S1565C34v101Ev
  virtual void  v102(); // _ZN7S1565C34v102Ev
  virtual void  v103(); // _ZN7S1565C34v103Ev
  virtual void  v104(); // _ZN7S1565C34v104Ev
  virtual void  v105(); // _ZN7S1565C34v105Ev
  virtual void  v106(); // _ZN7S1565C34v106Ev
  virtual void  v107(); // _ZN7S1565C34v107Ev
  virtual void  v108(); // _ZN7S1565C34v108Ev
  virtual void  v109(); // _ZN7S1565C34v109Ev
  virtual void  v110(); // _ZN7S1565C34v110Ev
  virtual void  v111(); // _ZN7S1565C34v111Ev
  virtual void  v112(); // _ZN7S1565C34v112Ev
  virtual void  v113(); // _ZN7S1565C34v113Ev
  virtual void  v114(); // _ZN7S1565C34v114Ev
  virtual void  v115(); // _ZN7S1565C34v115Ev
  virtual void  v116(); // _ZN7S1565C34v116Ev
  virtual void  v117(); // _ZN7S1565C34v117Ev
  virtual void  v118(); // _ZN7S1565C34v118Ev
  virtual void  v119(); // _ZN7S1565C34v119Ev
  virtual void  v120(); // _ZN7S1565C34v120Ev
  S1565C3(); // tgen
};
//SIG(-1 S1565C3) C1{ BC2{ vd 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 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} BC4{ v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104} BC5{ v105 v106 v107 v108 v109 v110 v111 v112 v113} 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 Fp FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1}


 S1565C3 ::~S1565C3(){ note_dtor("S1565C3", this);}
void  S1565C3 ::v97(){vfunc_called(this, "_ZN7S1565C33v97Ev");}
void  S1565C3 ::v98(){vfunc_called(this, "_ZN7S1565C33v98Ev");}
void  S1565C3 ::v99(){vfunc_called(this, "_ZN7S1565C33v99Ev");}
void  S1565C3 ::v100(){vfunc_called(this, "_ZN7S1565C34v100Ev");}
void  S1565C3 ::v101(){vfunc_called(this, "_ZN7S1565C34v101Ev");}
void  S1565C3 ::v102(){vfunc_called(this, "_ZN7S1565C34v102Ev");}
void  S1565C3 ::v103(){vfunc_called(this, "_ZN7S1565C34v103Ev");}
void  S1565C3 ::v104(){vfunc_called(this, "_ZN7S1565C34v104Ev");}
void  S1565C3 ::v105(){vfunc_called(this, "_ZN7S1565C34v105Ev");}
void  S1565C3 ::v106(){vfunc_called(this, "_ZN7S1565C34v106Ev");}
void  S1565C3 ::v107(){vfunc_called(this, "_ZN7S1565C34v107Ev");}
void  S1565C3 ::v108(){vfunc_called(this, "_ZN7S1565C34v108Ev");}
void  S1565C3 ::v109(){vfunc_called(this, "_ZN7S1565C34v109Ev");}
void  S1565C3 ::v110(){vfunc_called(this, "_ZN7S1565C34v110Ev");}
void  S1565C3 ::v111(){vfunc_called(this, "_ZN7S1565C34v111Ev");}
void  S1565C3 ::v112(){vfunc_called(this, "_ZN7S1565C34v112Ev");}
void  S1565C3 ::v113(){vfunc_called(this, "_ZN7S1565C34v113Ev");}
void  S1565C3 ::v114(){vfunc_called(this, "_ZN7S1565C34v114Ev");}
void  S1565C3 ::v115(){vfunc_called(this, "_ZN7S1565C34v115Ev");}
void  S1565C3 ::v116(){vfunc_called(this, "_ZN7S1565C34v116Ev");}
void  S1565C3 ::v117(){vfunc_called(this, "_ZN7S1565C34v117Ev");}
void  S1565C3 ::v118(){vfunc_called(this, "_ZN7S1565C34v118Ev");}
void  S1565C3 ::v119(){vfunc_called(this, "_ZN7S1565C34v119Ev");}
void  S1565C3 ::v120(){vfunc_called(this, "_ZN7S1565C34v120Ev");}
S1565C3 ::S1565C3(){ note_ctor("S1565C3", this);} // tgen

static void Test_S1565C3()
{
  extern Class_Descriptor cd_S1565C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,23)];
    init_test(&cd_S1565C3, buf);
    S1565C3 *dp, &lv = *(dp=new (buf) S1565C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S1565C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1565C3)");
    check_base_class_offset(lv, (S1565C4*), 0, "S1565C3");
    check_base_class_offset(lv, (S1565C6*), ABISELECT(96,60), "S1565C3");
    check_base_class_offset(lv, (S1565C7*), ABISELECT(104,64), "S1565C3");
    check_field_offset(lv, s1565c3f0, ABISELECT(112,68), "S1565C3.s1565c3f0");
    check_field_offset(lv, s1565c3f1, ABISELECT(120,72), "S1565C3.s1565c3f1");
    set_bf_and_test(lv, s1565c3f2, ABISELECT(136,84), 0, 1, 1, "S1565C3");
    set_bf_and_test(lv, s1565c3f3, ABISELECT(136,84), 1, 1, 1, "S1565C3");
    set_bf_and_test(lv, s1565c3f4, ABISELECT(136,84), 2, 1, 1, "S1565C3");
    set_bf_and_test(lv, s1565c3f5, ABISELECT(136,84), 3, 1, 1, "S1565C3");
    test_class_info(&lv, &cd_S1565C3);
    dp->~S1565C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1565C3(Test_S1565C3, "S1565C3", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN7S1565C3C1Ev();
extern void _ZN7S1565C3D1Ev();
Name_Map name_map_S1565C3[] = {
  NSPAIR(_ZN7S1565C3C1Ev),
  NSPAIR(_ZN7S1565C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1565C4;
extern VTBL_ENTRY _ZTI7S1565C4[];
extern  VTBL_ENTRY _ZTV7S1565C4[];
extern Class_Descriptor cd_S1565C6;
extern VTBL_ENTRY _ZTI7S1565C6[];
extern  VTBL_ENTRY _ZTV7S1565C6[];
extern Class_Descriptor cd_S1565C7;
extern VTBL_ENTRY _ZTI7S1565C7[];
extern  VTBL_ENTRY _ZTV7S1565C7[];
static Base_Class bases_S1565C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1565C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1565C6,    ABISELECT(96,60), //bcp->offset
    92, //bcp->virtual_function_table_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_S1565C7,    ABISELECT(104,64), //bcp->offset
    110, //bcp->virtual_function_table_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 _ZTI7S1565C3[];
extern void _ZN7S1565C3D1Ev();
extern void _ZN7S1565C3D0Ev();
extern void _ZN7S1565C42v8Ev();
extern void _ZN7S1565C42v9Ev();
extern void _ZN7S1565C43v10Ev();
extern void _ZN7S1565C43v11Ev();
extern void _ZN7S1565C43v12Ev();
extern void _ZN7S1565C43v13Ev();
extern void _ZN7S1565C43v14Ev();
extern void _ZN7S1565C43v15Ev();
extern void _ZN7S1565C43v16Ev();
extern void _ZN7S1565C43v17Ev();
extern void _ZN7S1565C43v18Ev();
extern void _ZN7S1565C43v19Ev();
extern void _ZN7S1565C43v20Ev();
extern void _ZN7S1565C43v21Ev();
extern void _ZN7S1565C43v22Ev();
extern void _ZN7S1565C43v23Ev();
extern void _ZN7S1565C43v24Ev();
extern void _ZN7S1565C43v25Ev();
extern void _ZN7S1565C43v26Ev();
extern void _ZN7S1565C43v27Ev();
extern void _ZN7S1565C43v28Ev();
extern void _ZN7S1565C43v29Ev();
extern void _ZN7S1565C43v30Ev();
extern void _ZN7S1565C43v31Ev();
extern void _ZN7S1565C43v32Ev();
extern void _ZN7S1565C43v33Ev();
extern void _ZN7S1565C43v34Ev();
extern void _ZN7S1565C43v35Ev();
extern void _ZN7S1565C43v36Ev();
extern void _ZN7S1565C43v37Ev();
extern void _ZN7S1565C43v38Ev();
extern void _ZN7S1565C43v39Ev();
extern void _ZN7S1565C43v40Ev();
extern void _ZN7S1565C43v41Ev();
extern void _ZN7S1565C43v42Ev();
extern void _ZN7S1565C43v43Ev();
extern void _ZN7S1565C43v44Ev();
extern void _ZN7S1565C43v45Ev();
extern void _ZN7S1565C43v46Ev();
extern void _ZN7S1565C43v47Ev();
extern void _ZN7S1565C43v48Ev();
extern void _ZN7S1565C43v49Ev();
extern void _ZN7S1565C43v50Ev();
extern void _ZN7S1565C43v51Ev();
extern void _ZN7S1565C43v52Ev();
extern void _ZN7S1565C43v53Ev();
extern void _ZN7S1565C43v54Ev();
extern void _ZN7S1565C43v55Ev();
extern void _ZN7S1565C43v56Ev();
extern void _ZN7S1565C43v57Ev();
extern void _ZN7S1565C43v58Ev();
extern void _ZN7S1565C43v59Ev();
extern void _ZN7S1565C43v60Ev();
extern void _ZN7S1565C43v61Ev();
extern void _ZN7S1565C43v62Ev();
extern void _ZN7S1565C43v63Ev();
extern void _ZN7S1565C43v64Ev();
extern void _ZN7S1565C43v65Ev();
extern void _ZN7S1565C43v66Ev();
extern void _ZN7S1565C43v67Ev();
extern void _ZN7S1565C43v68Ev();
extern void _ZN7S1565C43v69Ev();
extern void _ZN7S1565C43v70Ev();
extern void _ZN7S1565C43v71Ev();
extern void _ZN7S1565C33v97Ev();
extern void _ZN7S1565C33v98Ev();
extern void _ZN7S1565C33v99Ev();
extern void _ZN7S1565C34v100Ev();
extern void _ZN7S1565C34v101Ev();
extern void _ZN7S1565C34v102Ev();
extern void _ZN7S1565C34v103Ev();
extern void _ZN7S1565C34v104Ev();
extern void _ZN7S1565C34v105Ev();
extern void _ZN7S1565C34v106Ev();
extern void _ZN7S1565C34v107Ev();
extern void _ZN7S1565C34v108Ev();
extern void _ZN7S1565C34v109Ev();
extern void _ZN7S1565C34v110Ev();
extern void _ZN7S1565C34v111Ev();
extern void _ZN7S1565C34v112Ev();
extern void _ZN7S1565C34v113Ev();
extern void _ZN7S1565C34v114Ev();
extern void _ZN7S1565C34v115Ev();
extern void _ZN7S1565C34v116Ev();
extern void _ZN7S1565C34v117Ev();
extern void _ZN7S1565C34v118Ev();
extern void _ZN7S1565C34v119Ev();
extern void _ZN7S1565C34v120Ev();
extern void _ZN7S1565C63v72Ev();
extern void _ZN7S1565C63v73Ev();
extern void _ZN7S1565C63v74Ev();
extern void _ZN7S1565C63v75Ev();
extern void _ZN7S1565C63v76Ev();
extern void _ZN7S1565C63v77Ev();
extern void _ZN7S1565C63v78Ev();
extern void _ZN7S1565C63v79Ev();
extern void _ZN7S1565C63v80Ev();
extern void _ZN7S1565C63v81Ev();
extern void _ZN7S1565C63v82Ev();
extern void _ZN7S1565C63v83Ev();
extern void _ZN7S1565C63v84Ev();
extern void _ZN7S1565C63v85Ev();
extern void _ZN7S1565C63v86Ev();
extern void _ZN7S1565C63v87Ev();
extern void _ZN7S1565C73v88Ev();
extern void _ZN7S1565C73v89Ev();
extern void _ZN7S1565C73v90Ev();
extern void _ZN7S1565C73v91Ev();
extern void _ZN7S1565C73v92Ev();
extern void _ZN7S1565C73v93Ev();
extern void _ZN7S1565C73v94Ev();
extern void _ZN7S1565C73v95Ev();
extern void _ZN7S1565C73v96Ev();
static  VTBL_ENTRY vtc_S1565C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1565C3[0]),
  (VTBL_ENTRY)&_ZN7S1565C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1565C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1565C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1565C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1565C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1565C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1565C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v120Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1565C3[0]),
  (VTBL_ENTRY)&_ZN7S1565C63v72Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v73Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v74Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v75Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v76Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v77Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v78Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v79Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v80Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v81Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v82Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v83Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v85Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v86Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v87Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1565C3[0]),
  (VTBL_ENTRY)&_ZN7S1565C73v88Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v89Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v90Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v91Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v92Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v93Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v94Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v95Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v96Ev,
};
extern VTBL_ENTRY _ZTI7S1565C3[];
extern  VTBL_ENTRY _ZTV7S1565C3[];
Class_Descriptor cd_S1565C3 = {  "S1565C3", // class name
  bases_S1565C3, 3,
  &(vtc_S1565C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI7S1565C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1565C3),121, //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  S1565C2  : S1565C3 {
  ::S3262C11_nt s1565c2f0;
  int s1565c2f1;
  virtual  ~S1565C2(); // _ZN7S1565C2D1Ev
  virtual void  v121(); // _ZN7S1565C24v121Ev
  virtual void  v122(); // _ZN7S1565C24v122Ev
  virtual void  v123(); // _ZN7S1565C24v123Ev
  virtual void  v124(); // _ZN7S1565C24v124Ev
  virtual void  v125(); // _ZN7S1565C24v125Ev
  virtual void  v126(); // _ZN7S1565C24v126Ev
  virtual void  v127(); // _ZN7S1565C24v127Ev
  virtual void  v128(); // _ZN7S1565C24v128Ev
  virtual void  v129(); // _ZN7S1565C24v129Ev
  virtual void  v130(); // _ZN7S1565C24v130Ev
  virtual void  v131(); // _ZN7S1565C24v131Ev
  virtual void  v132(); // _ZN7S1565C24v132Ev
  virtual void  v133(); // _ZN7S1565C24v133Ev
  virtual void  v134(); // _ZN7S1565C24v134Ev
  virtual void  v135(); // _ZN7S1565C24v135Ev
  virtual void  v136(); // _ZN7S1565C24v136Ev
  virtual void  v137(); // _ZN7S1565C24v137Ev
  virtual void  v138(); // _ZN7S1565C24v138Ev
  virtual void  v139(); // _ZN7S1565C24v139Ev
  virtual void  v140(); // _ZN7S1565C24v140Ev
  virtual void  v141(); // _ZN7S1565C24v141Ev
  virtual void  v142(); // _ZN7S1565C24v142Ev
  virtual void  v143(); // _ZN7S1565C24v143Ev
  virtual void  v144(); // _ZN7S1565C24v144Ev
  virtual void  v145(); // _ZN7S1565C24v145Ev
  virtual void  v146(); // _ZN7S1565C24v146Ev
  S1565C2(); // tgen
};
//SIG(-1 S1565C2) C1{ BC2{ BC3{ vd 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 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} BC5{ v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106} BC6{ v107 v108 v109 v110 v111 v112 v113 v114 v115} vd v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 Fp FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1} 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 FC11{ m FC12{ BC13{ BC10}} Fc} Fi}


 S1565C2 ::~S1565C2(){ note_dtor("S1565C2", this);}
void  S1565C2 ::v121(){vfunc_called(this, "_ZN7S1565C24v121Ev");}
void  S1565C2 ::v122(){vfunc_called(this, "_ZN7S1565C24v122Ev");}
void  S1565C2 ::v123(){vfunc_called(this, "_ZN7S1565C24v123Ev");}
void  S1565C2 ::v124(){vfunc_called(this, "_ZN7S1565C24v124Ev");}
void  S1565C2 ::v125(){vfunc_called(this, "_ZN7S1565C24v125Ev");}
void  S1565C2 ::v126(){vfunc_called(this, "_ZN7S1565C24v126Ev");}
void  S1565C2 ::v127(){vfunc_called(this, "_ZN7S1565C24v127Ev");}
void  S1565C2 ::v128(){vfunc_called(this, "_ZN7S1565C24v128Ev");}
void  S1565C2 ::v129(){vfunc_called(this, "_ZN7S1565C24v129Ev");}
void  S1565C2 ::v130(){vfunc_called(this, "_ZN7S1565C24v130Ev");}
void  S1565C2 ::v131(){vfunc_called(this, "_ZN7S1565C24v131Ev");}
void  S1565C2 ::v132(){vfunc_called(this, "_ZN7S1565C24v132Ev");}
void  S1565C2 ::v133(){vfunc_called(this, "_ZN7S1565C24v133Ev");}
void  S1565C2 ::v134(){vfunc_called(this, "_ZN7S1565C24v134Ev");}
void  S1565C2 ::v135(){vfunc_called(this, "_ZN7S1565C24v135Ev");}
void  S1565C2 ::v136(){vfunc_called(this, "_ZN7S1565C24v136Ev");}
void  S1565C2 ::v137(){vfunc_called(this, "_ZN7S1565C24v137Ev");}
void  S1565C2 ::v138(){vfunc_called(this, "_ZN7S1565C24v138Ev");}
void  S1565C2 ::v139(){vfunc_called(this, "_ZN7S1565C24v139Ev");}
void  S1565C2 ::v140(){vfunc_called(this, "_ZN7S1565C24v140Ev");}
void  S1565C2 ::v141(){vfunc_called(this, "_ZN7S1565C24v141Ev");}
void  S1565C2 ::v142(){vfunc_called(this, "_ZN7S1565C24v142Ev");}
void  S1565C2 ::v143(){vfunc_called(this, "_ZN7S1565C24v143Ev");}
void  S1565C2 ::v144(){vfunc_called(this, "_ZN7S1565C24v144Ev");}
void  S1565C2 ::v145(){vfunc_called(this, "_ZN7S1565C24v145Ev");}
void  S1565C2 ::v146(){vfunc_called(this, "_ZN7S1565C24v146Ev");}
S1565C2 ::S1565C2(){ note_ctor("S1565C2", this);} // tgen

static void Test_S1565C2()
{
  extern Class_Descriptor cd_S1565C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,28)];
    init_test(&cd_S1565C2, buf);
    S1565C2 *dp, &lv = *(dp=new (buf) S1565C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,108), "sizeof(S1565C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1565C2)");
    check_base_class_offset(lv, (S1565C4*)(S1565C3*), 0, "S1565C2");
    check_base_class_offset(lv, (S1565C6*)(S1565C3*), ABISELECT(96,60), "S1565C2");
    check_base_class_offset(lv, (S1565C7*)(S1565C3*), ABISELECT(104,64), "S1565C2");
    check_base_class_offset(lv, (S1565C3*), 0, "S1565C2");
    check_field_offset(lv, s1565c2f0, ABISELECT(144,88), "S1565C2.s1565c2f0");
    check_field_offset(lv, s1565c2f1, ABISELECT(168,104), "S1565C2.s1565c2f1");
    test_class_info(&lv, &cd_S1565C2);
    dp->~S1565C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1565C2(Test_S1565C2, "S1565C2", ABISELECT(176,108));

#else // __cplusplus

extern void _ZN7S1565C2C1Ev();
extern void _ZN7S1565C2D1Ev();
Name_Map name_map_S1565C2[] = {
  NSPAIR(_ZN7S1565C2C1Ev),
  NSPAIR(_ZN7S1565C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1565C4;
extern VTBL_ENTRY _ZTI7S1565C4[];
extern  VTBL_ENTRY _ZTV7S1565C4[];
extern Class_Descriptor cd_S1565C6;
extern VTBL_ENTRY _ZTI7S1565C6[];
extern  VTBL_ENTRY _ZTV7S1565C6[];
extern Class_Descriptor cd_S1565C7;
extern VTBL_ENTRY _ZTI7S1565C7[];
extern  VTBL_ENTRY _ZTV7S1565C7[];
extern Class_Descriptor cd_S1565C3;
extern VTBL_ENTRY _ZTI7S1565C3[];
extern  VTBL_ENTRY _ZTV7S1565C3[];
static Base_Class bases_S1565C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1565C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1565C6,    ABISELECT(96,60), //bcp->offset
    118, //bcp->virtual_function_table_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_S1565C7,    ABISELECT(104,64), //bcp->offset
    136, //bcp->virtual_function_table_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_S1565C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1565C2[];
extern void _ZN7S1565C2D1Ev();
extern void _ZN7S1565C2D0Ev();
extern void _ZN7S1565C42v8Ev();
extern void _ZN7S1565C42v9Ev();
extern void _ZN7S1565C43v10Ev();
extern void _ZN7S1565C43v11Ev();
extern void _ZN7S1565C43v12Ev();
extern void _ZN7S1565C43v13Ev();
extern void _ZN7S1565C43v14Ev();
extern void _ZN7S1565C43v15Ev();
extern void _ZN7S1565C43v16Ev();
extern void _ZN7S1565C43v17Ev();
extern void _ZN7S1565C43v18Ev();
extern void _ZN7S1565C43v19Ev();
extern void _ZN7S1565C43v20Ev();
extern void _ZN7S1565C43v21Ev();
extern void _ZN7S1565C43v22Ev();
extern void _ZN7S1565C43v23Ev();
extern void _ZN7S1565C43v24Ev();
extern void _ZN7S1565C43v25Ev();
extern void _ZN7S1565C43v26Ev();
extern void _ZN7S1565C43v27Ev();
extern void _ZN7S1565C43v28Ev();
extern void _ZN7S1565C43v29Ev();
extern void _ZN7S1565C43v30Ev();
extern void _ZN7S1565C43v31Ev();
extern void _ZN7S1565C43v32Ev();
extern void _ZN7S1565C43v33Ev();
extern void _ZN7S1565C43v34Ev();
extern void _ZN7S1565C43v35Ev();
extern void _ZN7S1565C43v36Ev();
extern void _ZN7S1565C43v37Ev();
extern void _ZN7S1565C43v38Ev();
extern void _ZN7S1565C43v39Ev();
extern void _ZN7S1565C43v40Ev();
extern void _ZN7S1565C43v41Ev();
extern void _ZN7S1565C43v42Ev();
extern void _ZN7S1565C43v43Ev();
extern void _ZN7S1565C43v44Ev();
extern void _ZN7S1565C43v45Ev();
extern void _ZN7S1565C43v46Ev();
extern void _ZN7S1565C43v47Ev();
extern void _ZN7S1565C43v48Ev();
extern void _ZN7S1565C43v49Ev();
extern void _ZN7S1565C43v50Ev();
extern void _ZN7S1565C43v51Ev();
extern void _ZN7S1565C43v52Ev();
extern void _ZN7S1565C43v53Ev();
extern void _ZN7S1565C43v54Ev();
extern void _ZN7S1565C43v55Ev();
extern void _ZN7S1565C43v56Ev();
extern void _ZN7S1565C43v57Ev();
extern void _ZN7S1565C43v58Ev();
extern void _ZN7S1565C43v59Ev();
extern void _ZN7S1565C43v60Ev();
extern void _ZN7S1565C43v61Ev();
extern void _ZN7S1565C43v62Ev();
extern void _ZN7S1565C43v63Ev();
extern void _ZN7S1565C43v64Ev();
extern void _ZN7S1565C43v65Ev();
extern void _ZN7S1565C43v66Ev();
extern void _ZN7S1565C43v67Ev();
extern void _ZN7S1565C43v68Ev();
extern void _ZN7S1565C43v69Ev();
extern void _ZN7S1565C43v70Ev();
extern void _ZN7S1565C43v71Ev();
extern void _ZN7S1565C33v97Ev();
extern void _ZN7S1565C33v98Ev();
extern void _ZN7S1565C33v99Ev();
extern void _ZN7S1565C34v100Ev();
extern void _ZN7S1565C34v101Ev();
extern void _ZN7S1565C34v102Ev();
extern void _ZN7S1565C34v103Ev();
extern void _ZN7S1565C34v104Ev();
extern void _ZN7S1565C34v105Ev();
extern void _ZN7S1565C34v106Ev();
extern void _ZN7S1565C34v107Ev();
extern void _ZN7S1565C34v108Ev();
extern void _ZN7S1565C34v109Ev();
extern void _ZN7S1565C34v110Ev();
extern void _ZN7S1565C34v111Ev();
extern void _ZN7S1565C34v112Ev();
extern void _ZN7S1565C34v113Ev();
extern void _ZN7S1565C34v114Ev();
extern void _ZN7S1565C34v115Ev();
extern void _ZN7S1565C34v116Ev();
extern void _ZN7S1565C34v117Ev();
extern void _ZN7S1565C34v118Ev();
extern void _ZN7S1565C34v119Ev();
extern void _ZN7S1565C34v120Ev();
extern void _ZN7S1565C24v121Ev();
extern void _ZN7S1565C24v122Ev();
extern void _ZN7S1565C24v123Ev();
extern void _ZN7S1565C24v124Ev();
extern void _ZN7S1565C24v125Ev();
extern void _ZN7S1565C24v126Ev();
extern void _ZN7S1565C24v127Ev();
extern void _ZN7S1565C24v128Ev();
extern void _ZN7S1565C24v129Ev();
extern void _ZN7S1565C24v130Ev();
extern void _ZN7S1565C24v131Ev();
extern void _ZN7S1565C24v132Ev();
extern void _ZN7S1565C24v133Ev();
extern void _ZN7S1565C24v134Ev();
extern void _ZN7S1565C24v135Ev();
extern void _ZN7S1565C24v136Ev();
extern void _ZN7S1565C24v137Ev();
extern void _ZN7S1565C24v138Ev();
extern void _ZN7S1565C24v139Ev();
extern void _ZN7S1565C24v140Ev();
extern void _ZN7S1565C24v141Ev();
extern void _ZN7S1565C24v142Ev();
extern void _ZN7S1565C24v143Ev();
extern void _ZN7S1565C24v144Ev();
extern void _ZN7S1565C24v145Ev();
extern void _ZN7S1565C24v146Ev();
extern void _ZN7S1565C63v72Ev();
extern void _ZN7S1565C63v73Ev();
extern void _ZN7S1565C63v74Ev();
extern void _ZN7S1565C63v75Ev();
extern void _ZN7S1565C63v76Ev();
extern void _ZN7S1565C63v77Ev();
extern void _ZN7S1565C63v78Ev();
extern void _ZN7S1565C63v79Ev();
extern void _ZN7S1565C63v80Ev();
extern void _ZN7S1565C63v81Ev();
extern void _ZN7S1565C63v82Ev();
extern void _ZN7S1565C63v83Ev();
extern void _ZN7S1565C63v84Ev();
extern void _ZN7S1565C63v85Ev();
extern void _ZN7S1565C63v86Ev();
extern void _ZN7S1565C63v87Ev();
extern void _ZN7S1565C73v88Ev();
extern void _ZN7S1565C73v89Ev();
extern void _ZN7S1565C73v90Ev();
extern void _ZN7S1565C73v91Ev();
extern void _ZN7S1565C73v92Ev();
extern void _ZN7S1565C73v93Ev();
extern void _ZN7S1565C73v94Ev();
extern void _ZN7S1565C73v95Ev();
extern void _ZN7S1565C73v96Ev();
static  VTBL_ENTRY vtc_S1565C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1565C2[0]),
  (VTBL_ENTRY)&_ZN7S1565C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1565C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1565C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1565C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1565C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1565C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1565C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v121Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v122Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v123Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v124Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v125Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v126Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v127Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v128Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v129Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v130Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v131Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v132Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v144Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v145Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v146Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1565C2[0]),
  (VTBL_ENTRY)&_ZN7S1565C63v72Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v73Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v74Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v75Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v76Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v77Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v78Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v79Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v80Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v81Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v82Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v83Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v85Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v86Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v87Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1565C2[0]),
  (VTBL_ENTRY)&_ZN7S1565C73v88Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v89Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v90Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v91Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v92Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v93Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v94Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v95Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v96Ev,
};
extern VTBL_ENTRY _ZTI7S1565C2[];
extern  VTBL_ENTRY _ZTV7S1565C2[];
Class_Descriptor cd_S1565C2 = {  "S1565C2", // class name
  bases_S1565C2, 4,
  &(vtc_S1565C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,108), // object size
  NSPAIRA(_ZTI7S1565C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1565C2),147, //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  S1565C1  : S1565C2 {
  virtual  ~S1565C1(); // _ZN7S1565C1D1Ev
  virtual void  v1(); // _ZN7S1565C12v1Ev
  virtual void  v2(); // _ZN7S1565C12v2Ev
  virtual void  v3(); // _ZN7S1565C12v3Ev
  virtual void  v4(); // _ZN7S1565C12v4Ev
  virtual void  v5(); // _ZN7S1565C12v5Ev
  virtual void  v6(); // _ZN7S1565C12v6Ev
  virtual void  v7(); // _ZN7S1565C12v7Ev
  S1565C1(); // tgen
};
//SIG(1 S1565C1) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} BC6{ v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87} BC7{ v88 v89 v90 v91 v92 v93 v94 v95 v96} vd v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 Fp FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1} vd 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 FC12{ m FC13{ BC14{ BC11}} Fc} Fi} vd v1 v2 v3 v4 v5 v6 v7}


 S1565C1 ::~S1565C1(){ note_dtor("S1565C1", this);}
void  S1565C1 ::v1(){vfunc_called(this, "_ZN7S1565C12v1Ev");}
void  S1565C1 ::v2(){vfunc_called(this, "_ZN7S1565C12v2Ev");}
void  S1565C1 ::v3(){vfunc_called(this, "_ZN7S1565C12v3Ev");}
void  S1565C1 ::v4(){vfunc_called(this, "_ZN7S1565C12v4Ev");}
void  S1565C1 ::v5(){vfunc_called(this, "_ZN7S1565C12v5Ev");}
void  S1565C1 ::v6(){vfunc_called(this, "_ZN7S1565C12v6Ev");}
void  S1565C1 ::v7(){vfunc_called(this, "_ZN7S1565C12v7Ev");}
S1565C1 ::S1565C1(){ note_ctor("S1565C1", this);} // tgen

static void Test_S1565C1()
{
  extern Class_Descriptor cd_S1565C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,28)];
    init_test(&cd_S1565C1, buf);
    S1565C1 *dp, &lv = *(dp=new (buf) S1565C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,108), "sizeof(S1565C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1565C1)");
    check_base_class_offset(lv, (S1565C4*)(S1565C3*)(S1565C2*), 0, "S1565C1");
    check_base_class_offset(lv, (S1565C6*)(S1565C3*)(S1565C2*), ABISELECT(96,60), "S1565C1");
    check_base_class_offset(lv, (S1565C7*)(S1565C3*)(S1565C2*), ABISELECT(104,64), "S1565C1");
    check_base_class_offset(lv, (S1565C3*)(S1565C2*), 0, "S1565C1");
    check_base_class_offset(lv, (S1565C2*), 0, "S1565C1");
    test_class_info(&lv, &cd_S1565C1);
    dp->~S1565C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1565C1(Test_S1565C1, "S1565C1", ABISELECT(176,108));

#else // __cplusplus

extern void _ZN7S1565C1C1Ev();
extern void _ZN7S1565C1D1Ev();
Name_Map name_map_S1565C1[] = {
  NSPAIR(_ZN7S1565C1C1Ev),
  NSPAIR(_ZN7S1565C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1565C4;
extern VTBL_ENTRY _ZTI7S1565C4[];
extern  VTBL_ENTRY _ZTV7S1565C4[];
extern Class_Descriptor cd_S1565C6;
extern VTBL_ENTRY _ZTI7S1565C6[];
extern  VTBL_ENTRY _ZTV7S1565C6[];
extern Class_Descriptor cd_S1565C7;
extern VTBL_ENTRY _ZTI7S1565C7[];
extern  VTBL_ENTRY _ZTV7S1565C7[];
extern Class_Descriptor cd_S1565C3;
extern VTBL_ENTRY _ZTI7S1565C3[];
extern  VTBL_ENTRY _ZTV7S1565C3[];
extern Class_Descriptor cd_S1565C2;
extern VTBL_ENTRY _ZTI7S1565C2[];
extern  VTBL_ENTRY _ZTV7S1565C2[];
static Base_Class bases_S1565C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1565C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1565C6,    ABISELECT(96,60), //bcp->offset
    125, //bcp->virtual_function_table_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_S1565C7,    ABISELECT(104,64), //bcp->offset
    143, //bcp->virtual_function_table_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_S1565C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1565C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1565C1[];
extern void _ZN7S1565C1D1Ev();
extern void _ZN7S1565C1D0Ev();
extern void _ZN7S1565C42v8Ev();
extern void _ZN7S1565C42v9Ev();
extern void _ZN7S1565C43v10Ev();
extern void _ZN7S1565C43v11Ev();
extern void _ZN7S1565C43v12Ev();
extern void _ZN7S1565C43v13Ev();
extern void _ZN7S1565C43v14Ev();
extern void _ZN7S1565C43v15Ev();
extern void _ZN7S1565C43v16Ev();
extern void _ZN7S1565C43v17Ev();
extern void _ZN7S1565C43v18Ev();
extern void _ZN7S1565C43v19Ev();
extern void _ZN7S1565C43v20Ev();
extern void _ZN7S1565C43v21Ev();
extern void _ZN7S1565C43v22Ev();
extern void _ZN7S1565C43v23Ev();
extern void _ZN7S1565C43v24Ev();
extern void _ZN7S1565C43v25Ev();
extern void _ZN7S1565C43v26Ev();
extern void _ZN7S1565C43v27Ev();
extern void _ZN7S1565C43v28Ev();
extern void _ZN7S1565C43v29Ev();
extern void _ZN7S1565C43v30Ev();
extern void _ZN7S1565C43v31Ev();
extern void _ZN7S1565C43v32Ev();
extern void _ZN7S1565C43v33Ev();
extern void _ZN7S1565C43v34Ev();
extern void _ZN7S1565C43v35Ev();
extern void _ZN7S1565C43v36Ev();
extern void _ZN7S1565C43v37Ev();
extern void _ZN7S1565C43v38Ev();
extern void _ZN7S1565C43v39Ev();
extern void _ZN7S1565C43v40Ev();
extern void _ZN7S1565C43v41Ev();
extern void _ZN7S1565C43v42Ev();
extern void _ZN7S1565C43v43Ev();
extern void _ZN7S1565C43v44Ev();
extern void _ZN7S1565C43v45Ev();
extern void _ZN7S1565C43v46Ev();
extern void _ZN7S1565C43v47Ev();
extern void _ZN7S1565C43v48Ev();
extern void _ZN7S1565C43v49Ev();
extern void _ZN7S1565C43v50Ev();
extern void _ZN7S1565C43v51Ev();
extern void _ZN7S1565C43v52Ev();
extern void _ZN7S1565C43v53Ev();
extern void _ZN7S1565C43v54Ev();
extern void _ZN7S1565C43v55Ev();
extern void _ZN7S1565C43v56Ev();
extern void _ZN7S1565C43v57Ev();
extern void _ZN7S1565C43v58Ev();
extern void _ZN7S1565C43v59Ev();
extern void _ZN7S1565C43v60Ev();
extern void _ZN7S1565C43v61Ev();
extern void _ZN7S1565C43v62Ev();
extern void _ZN7S1565C43v63Ev();
extern void _ZN7S1565C43v64Ev();
extern void _ZN7S1565C43v65Ev();
extern void _ZN7S1565C43v66Ev();
extern void _ZN7S1565C43v67Ev();
extern void _ZN7S1565C43v68Ev();
extern void _ZN7S1565C43v69Ev();
extern void _ZN7S1565C43v70Ev();
extern void _ZN7S1565C43v71Ev();
extern void _ZN7S1565C33v97Ev();
extern void _ZN7S1565C33v98Ev();
extern void _ZN7S1565C33v99Ev();
extern void _ZN7S1565C34v100Ev();
extern void _ZN7S1565C34v101Ev();
extern void _ZN7S1565C34v102Ev();
extern void _ZN7S1565C34v103Ev();
extern void _ZN7S1565C34v104Ev();
extern void _ZN7S1565C34v105Ev();
extern void _ZN7S1565C34v106Ev();
extern void _ZN7S1565C34v107Ev();
extern void _ZN7S1565C34v108Ev();
extern void _ZN7S1565C34v109Ev();
extern void _ZN7S1565C34v110Ev();
extern void _ZN7S1565C34v111Ev();
extern void _ZN7S1565C34v112Ev();
extern void _ZN7S1565C34v113Ev();
extern void _ZN7S1565C34v114Ev();
extern void _ZN7S1565C34v115Ev();
extern void _ZN7S1565C34v116Ev();
extern void _ZN7S1565C34v117Ev();
extern void _ZN7S1565C34v118Ev();
extern void _ZN7S1565C34v119Ev();
extern void _ZN7S1565C34v120Ev();
extern void _ZN7S1565C24v121Ev();
extern void _ZN7S1565C24v122Ev();
extern void _ZN7S1565C24v123Ev();
extern void _ZN7S1565C24v124Ev();
extern void _ZN7S1565C24v125Ev();
extern void _ZN7S1565C24v126Ev();
extern void _ZN7S1565C24v127Ev();
extern void _ZN7S1565C24v128Ev();
extern void _ZN7S1565C24v129Ev();
extern void _ZN7S1565C24v130Ev();
extern void _ZN7S1565C24v131Ev();
extern void _ZN7S1565C24v132Ev();
extern void _ZN7S1565C24v133Ev();
extern void _ZN7S1565C24v134Ev();
extern void _ZN7S1565C24v135Ev();
extern void _ZN7S1565C24v136Ev();
extern void _ZN7S1565C24v137Ev();
extern void _ZN7S1565C24v138Ev();
extern void _ZN7S1565C24v139Ev();
extern void _ZN7S1565C24v140Ev();
extern void _ZN7S1565C24v141Ev();
extern void _ZN7S1565C24v142Ev();
extern void _ZN7S1565C24v143Ev();
extern void _ZN7S1565C24v144Ev();
extern void _ZN7S1565C24v145Ev();
extern void _ZN7S1565C24v146Ev();
extern void _ZN7S1565C12v1Ev();
extern void _ZN7S1565C12v2Ev();
extern void _ZN7S1565C12v3Ev();
extern void _ZN7S1565C12v4Ev();
extern void _ZN7S1565C12v5Ev();
extern void _ZN7S1565C12v6Ev();
extern void _ZN7S1565C12v7Ev();
extern void _ZN7S1565C63v72Ev();
extern void _ZN7S1565C63v73Ev();
extern void _ZN7S1565C63v74Ev();
extern void _ZN7S1565C63v75Ev();
extern void _ZN7S1565C63v76Ev();
extern void _ZN7S1565C63v77Ev();
extern void _ZN7S1565C63v78Ev();
extern void _ZN7S1565C63v79Ev();
extern void _ZN7S1565C63v80Ev();
extern void _ZN7S1565C63v81Ev();
extern void _ZN7S1565C63v82Ev();
extern void _ZN7S1565C63v83Ev();
extern void _ZN7S1565C63v84Ev();
extern void _ZN7S1565C63v85Ev();
extern void _ZN7S1565C63v86Ev();
extern void _ZN7S1565C63v87Ev();
extern void _ZN7S1565C73v88Ev();
extern void _ZN7S1565C73v89Ev();
extern void _ZN7S1565C73v90Ev();
extern void _ZN7S1565C73v91Ev();
extern void _ZN7S1565C73v92Ev();
extern void _ZN7S1565C73v93Ev();
extern void _ZN7S1565C73v94Ev();
extern void _ZN7S1565C73v95Ev();
extern void _ZN7S1565C73v96Ev();
static  VTBL_ENTRY vtc_S1565C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1565C1[0]),
  (VTBL_ENTRY)&_ZN7S1565C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1565C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1565C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1565C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1565C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1565C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1565C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1565C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1565C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v121Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v122Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v123Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v124Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v125Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v126Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v127Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v128Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v129Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v130Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v131Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v132Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v144Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v145Ev,
  (VTBL_ENTRY)&_ZN7S1565C24v146Ev,
  (VTBL_ENTRY)&_ZN7S1565C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1565C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1565C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1565C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1565C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1565C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1565C12v7Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1565C1[0]),
  (VTBL_ENTRY)&_ZN7S1565C63v72Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v73Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v74Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v75Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v76Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v77Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v78Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v79Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v80Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v81Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v82Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v83Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v85Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v86Ev,
  (VTBL_ENTRY)&_ZN7S1565C63v87Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1565C1[0]),
  (VTBL_ENTRY)&_ZN7S1565C73v88Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v89Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v90Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v91Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v92Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v93Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v94Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v95Ev,
  (VTBL_ENTRY)&_ZN7S1565C73v96Ev,
};
extern VTBL_ENTRY _ZTI7S1565C1[];
extern  VTBL_ENTRY _ZTV7S1565C1[];
Class_Descriptor cd_S1565C1 = {  "S1565C1", // class name
  bases_S1565C1, 5,
  &(vtc_S1565C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,108), // object size
  NSPAIRA(_ZTI7S1565C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1565C1),154, //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  S1501C4  {
  int s1501c4f0;
  __tsi64 s1501c4f1;
  void *s1501c4f2[4];
  int s1501c4f3[2];
  void *s1501c4f4;
  ::S79C8_nt s1501c4f5;
  void *s1501c4f6[2];
  virtual  ~S1501C4(); // _ZN7S1501C4D1Ev
  virtual void  v6(); // _ZN7S1501C42v6Ev
  virtual void  v7(); // _ZN7S1501C42v7Ev
  virtual void  v8(); // _ZN7S1501C42v8Ev
  virtual void  v9(); // _ZN7S1501C42v9Ev
  virtual void  v10(); // _ZN7S1501C43v10Ev
  virtual void  v11(); // _ZN7S1501C43v11Ev
  virtual void  v12(); // _ZN7S1501C43v12Ev
  virtual void  v13(); // _ZN7S1501C43v13Ev
  virtual void  v14(); // _ZN7S1501C43v14Ev
  virtual void  v15(); // _ZN7S1501C43v15Ev
  virtual void  v16(); // _ZN7S1501C43v16Ev
  virtual void  v17(); // _ZN7S1501C43v17Ev
  virtual void  v18(); // _ZN7S1501C43v18Ev
  virtual void  v19(); // _ZN7S1501C43v19Ev
  virtual void  v20(); // _ZN7S1501C43v20Ev
  virtual void  v21(); // _ZN7S1501C43v21Ev
  virtual void  v22(); // _ZN7S1501C43v22Ev
  virtual void  v23(); // _ZN7S1501C43v23Ev
  virtual void  v24(); // _ZN7S1501C43v24Ev
  virtual void  v25(); // _ZN7S1501C43v25Ev
  virtual void  v26(); // _ZN7S1501C43v26Ev
  virtual void  v27(); // _ZN7S1501C43v27Ev
  virtual void  v28(); // _ZN7S1501C43v28Ev
  virtual void  v29(); // _ZN7S1501C43v29Ev
  virtual void  v30(); // _ZN7S1501C43v30Ev
  virtual void  v31(); // _ZN7S1501C43v31Ev
  virtual void  v32(); // _ZN7S1501C43v32Ev
  virtual void  v33(); // _ZN7S1501C43v33Ev
  virtual void  v34(); // _ZN7S1501C43v34Ev
  virtual void  v35(); // _ZN7S1501C43v35Ev
  virtual void  v36(); // _ZN7S1501C43v36Ev
  virtual void  v37(); // _ZN7S1501C43v37Ev
  virtual void  v38(); // _ZN7S1501C43v38Ev
  virtual void  v39(); // _ZN7S1501C43v39Ev
  virtual void  v40(); // _ZN7S1501C43v40Ev
  virtual void  v41(); // _ZN7S1501C43v41Ev
  virtual void  v42(); // _ZN7S1501C43v42Ev
  virtual void  v43(); // _ZN7S1501C43v43Ev
  virtual void  v44(); // _ZN7S1501C43v44Ev
  virtual void  v45(); // _ZN7S1501C43v45Ev
  virtual void  v46(); // _ZN7S1501C43v46Ev
  virtual void  v47(); // _ZN7S1501C43v47Ev
  virtual void  v48(); // _ZN7S1501C43v48Ev
  virtual void  v49(); // _ZN7S1501C43v49Ev
  virtual void  v50(); // _ZN7S1501C43v50Ev
  virtual void  v51(); // _ZN7S1501C43v51Ev
  virtual void  v52(); // _ZN7S1501C43v52Ev
  virtual void  v53(); // _ZN7S1501C43v53Ev
  virtual void  v54(); // _ZN7S1501C43v54Ev
  virtual void  v55(); // _ZN7S1501C43v55Ev
  virtual void  v56(); // _ZN7S1501C43v56Ev
  virtual void  v57(); // _ZN7S1501C43v57Ev
  virtual void  v58(); // _ZN7S1501C43v58Ev
  virtual void  v59(); // _ZN7S1501C43v59Ev
  virtual void  v60(); // _ZN7S1501C43v60Ev
  virtual void  v61(); // _ZN7S1501C43v61Ev
  virtual void  v62(); // _ZN7S1501C43v62Ev
  virtual void  v63(); // _ZN7S1501C43v63Ev
  virtual void  v64(); // _ZN7S1501C43v64Ev
  virtual void  v65(); // _ZN7S1501C43v65Ev
  virtual void  v66(); // _ZN7S1501C43v66Ev
  virtual void  v67(); // _ZN7S1501C43v67Ev
  virtual void  v68(); // _ZN7S1501C43v68Ev
  virtual void  v69(); // _ZN7S1501C43v69Ev
  S1501C4(); // tgen
};
//SIG(-1 S1501C4) 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]}


 S1501C4 ::~S1501C4(){ note_dtor("S1501C4", this);}
void  S1501C4 ::v6(){vfunc_called(this, "_ZN7S1501C42v6Ev");}
void  S1501C4 ::v7(){vfunc_called(this, "_ZN7S1501C42v7Ev");}
void  S1501C4 ::v8(){vfunc_called(this, "_ZN7S1501C42v8Ev");}
void  S1501C4 ::v9(){vfunc_called(this, "_ZN7S1501C42v9Ev");}
void  S1501C4 ::v10(){vfunc_called(this, "_ZN7S1501C43v10Ev");}
void  S1501C4 ::v11(){vfunc_called(this, "_ZN7S1501C43v11Ev");}
void  S1501C4 ::v12(){vfunc_called(this, "_ZN7S1501C43v12Ev");}
void  S1501C4 ::v13(){vfunc_called(this, "_ZN7S1501C43v13Ev");}
void  S1501C4 ::v14(){vfunc_called(this, "_ZN7S1501C43v14Ev");}
void  S1501C4 ::v15(){vfunc_called(this, "_ZN7S1501C43v15Ev");}
void  S1501C4 ::v16(){vfunc_called(this, "_ZN7S1501C43v16Ev");}
void  S1501C4 ::v17(){vfunc_called(this, "_ZN7S1501C43v17Ev");}
void  S1501C4 ::v18(){vfunc_called(this, "_ZN7S1501C43v18Ev");}
void  S1501C4 ::v19(){vfunc_called(this, "_ZN7S1501C43v19Ev");}
void  S1501C4 ::v20(){vfunc_called(this, "_ZN7S1501C43v20Ev");}
void  S1501C4 ::v21(){vfunc_called(this, "_ZN7S1501C43v21Ev");}
void  S1501C4 ::v22(){vfunc_called(this, "_ZN7S1501C43v22Ev");}
void  S1501C4 ::v23(){vfunc_called(this, "_ZN7S1501C43v23Ev");}
void  S1501C4 ::v24(){vfunc_called(this, "_ZN7S1501C43v24Ev");}
void  S1501C4 ::v25(){vfunc_called(this, "_ZN7S1501C43v25Ev");}
void  S1501C4 ::v26(){vfunc_called(this, "_ZN7S1501C43v26Ev");}
void  S1501C4 ::v27(){vfunc_called(this, "_ZN7S1501C43v27Ev");}
void  S1501C4 ::v28(){vfunc_called(this, "_ZN7S1501C43v28Ev");}
void  S1501C4 ::v29(){vfunc_called(this, "_ZN7S1501C43v29Ev");}
void  S1501C4 ::v30(){vfunc_called(this, "_ZN7S1501C43v30Ev");}
void  S1501C4 ::v31(){vfunc_called(this, "_ZN7S1501C43v31Ev");}
void  S1501C4 ::v32(){vfunc_called(this, "_ZN7S1501C43v32Ev");}
void  S1501C4 ::v33(){vfunc_called(this, "_ZN7S1501C43v33Ev");}
void  S1501C4 ::v34(){vfunc_called(this, "_ZN7S1501C43v34Ev");}
void  S1501C4 ::v35(){vfunc_called(this, "_ZN7S1501C43v35Ev");}
void  S1501C4 ::v36(){vfunc_called(this, "_ZN7S1501C43v36Ev");}
void  S1501C4 ::v37(){vfunc_called(this, "_ZN7S1501C43v37Ev");}
void  S1501C4 ::v38(){vfunc_called(this, "_ZN7S1501C43v38Ev");}
void  S1501C4 ::v39(){vfunc_called(this, "_ZN7S1501C43v39Ev");}
void  S1501C4 ::v40(){vfunc_called(this, "_ZN7S1501C43v40Ev");}
void  S1501C4 ::v41(){vfunc_called(this, "_ZN7S1501C43v41Ev");}
void  S1501C4 ::v42(){vfunc_called(this, "_ZN7S1501C43v42Ev");}
void  S1501C4 ::v43(){vfunc_called(this, "_ZN7S1501C43v43Ev");}
void  S1501C4 ::v44(){vfunc_called(this, "_ZN7S1501C43v44Ev");}
void  S1501C4 ::v45(){vfunc_called(this, "_ZN7S1501C43v45Ev");}
void  S1501C4 ::v46(){vfunc_called(this, "_ZN7S1501C43v46Ev");}
void  S1501C4 ::v47(){vfunc_called(this, "_ZN7S1501C43v47Ev");}
void  S1501C4 ::v48(){vfunc_called(this, "_ZN7S1501C43v48Ev");}
void  S1501C4 ::v49(){vfunc_called(this, "_ZN7S1501C43v49Ev");}
void  S1501C4 ::v50(){vfunc_called(this, "_ZN7S1501C43v50Ev");}
void  S1501C4 ::v51(){vfunc_called(this, "_ZN7S1501C43v51Ev");}
void  S1501C4 ::v52(){vfunc_called(this, "_ZN7S1501C43v52Ev");}
void  S1501C4 ::v53(){vfunc_called(this, "_ZN7S1501C43v53Ev");}
void  S1501C4 ::v54(){vfunc_called(this, "_ZN7S1501C43v54Ev");}
void  S1501C4 ::v55(){vfunc_called(this, "_ZN7S1501C43v55Ev");}
void  S1501C4 ::v56(){vfunc_called(this, "_ZN7S1501C43v56Ev");}
void  S1501C4 ::v57(){vfunc_called(this, "_ZN7S1501C43v57Ev");}
void  S1501C4 ::v58(){vfunc_called(this, "_ZN7S1501C43v58Ev");}
void  S1501C4 ::v59(){vfunc_called(this, "_ZN7S1501C43v59Ev");}
void  S1501C4 ::v60(){vfunc_called(this, "_ZN7S1501C43v60Ev");}
void  S1501C4 ::v61(){vfunc_called(this, "_ZN7S1501C43v61Ev");}
void  S1501C4 ::v62(){vfunc_called(this, "_ZN7S1501C43v62Ev");}
void  S1501C4 ::v63(){vfunc_called(this, "_ZN7S1501C43v63Ev");}
void  S1501C4 ::v64(){vfunc_called(this, "_ZN7S1501C43v64Ev");}
void  S1501C4 ::v65(){vfunc_called(this, "_ZN7S1501C43v65Ev");}
void  S1501C4 ::v66(){vfunc_called(this, "_ZN7S1501C43v66Ev");}
void  S1501C4 ::v67(){vfunc_called(this, "_ZN7S1501C43v67Ev");}
void  S1501C4 ::v68(){vfunc_called(this, "_ZN7S1501C43v68Ev");}
void  S1501C4 ::v69(){vfunc_called(this, "_ZN7S1501C43v69Ev");}
S1501C4 ::S1501C4(){ note_ctor("S1501C4", this);} // tgen

static void Test_S1501C4()
{
  extern Class_Descriptor cd_S1501C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1501C4, buf);
    S1501C4 *dp, &lv = *(dp=new (buf) S1501C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1501C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1501C4)");
    check_field_offset(lv, s1501c4f0, ABISELECT(8,4), "S1501C4.s1501c4f0");
    check_field_offset(lv, s1501c4f1, ABISELECT(16,8), "S1501C4.s1501c4f1");
    check_field_offset(lv, s1501c4f2, ABISELECT(24,16), "S1501C4.s1501c4f2");
    check_field_offset(lv, s1501c4f3, ABISELECT(56,32), "S1501C4.s1501c4f3");
    check_field_offset(lv, s1501c4f4, ABISELECT(64,40), "S1501C4.s1501c4f4");
    check_field_offset(lv, s1501c4f5, ABISELECT(72,44), "S1501C4.s1501c4f5");
    check_field_offset(lv, s1501c4f6, ABISELECT(80,52), "S1501C4.s1501c4f6");
    test_class_info(&lv, &cd_S1501C4);
    dp->~S1501C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1501C4(Test_S1501C4, "S1501C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1501C4C1Ev();
extern void _ZN7S1501C4D1Ev();
Name_Map name_map_S1501C4[] = {
  NSPAIR(_ZN7S1501C4C1Ev),
  NSPAIR(_ZN7S1501C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1501C4[];
extern void _ZN7S1501C4D1Ev();
extern void _ZN7S1501C4D0Ev();
extern void _ZN7S1501C42v6Ev();
extern void _ZN7S1501C42v7Ev();
extern void _ZN7S1501C42v8Ev();
extern void _ZN7S1501C42v9Ev();
extern void _ZN7S1501C43v10Ev();
extern void _ZN7S1501C43v11Ev();
extern void _ZN7S1501C43v12Ev();
extern void _ZN7S1501C43v13Ev();
extern void _ZN7S1501C43v14Ev();
extern void _ZN7S1501C43v15Ev();
extern void _ZN7S1501C43v16Ev();
extern void _ZN7S1501C43v17Ev();
extern void _ZN7S1501C43v18Ev();
extern void _ZN7S1501C43v19Ev();
extern void _ZN7S1501C43v20Ev();
extern void _ZN7S1501C43v21Ev();
extern void _ZN7S1501C43v22Ev();
extern void _ZN7S1501C43v23Ev();
extern void _ZN7S1501C43v24Ev();
extern void _ZN7S1501C43v25Ev();
extern void _ZN7S1501C43v26Ev();
extern void _ZN7S1501C43v27Ev();
extern void _ZN7S1501C43v28Ev();
extern void _ZN7S1501C43v29Ev();
extern void _ZN7S1501C43v30Ev();
extern void _ZN7S1501C43v31Ev();
extern void _ZN7S1501C43v32Ev();
extern void _ZN7S1501C43v33Ev();
extern void _ZN7S1501C43v34Ev();
extern void _ZN7S1501C43v35Ev();
extern void _ZN7S1501C43v36Ev();
extern void _ZN7S1501C43v37Ev();
extern void _ZN7S1501C43v38Ev();
extern void _ZN7S1501C43v39Ev();
extern void _ZN7S1501C43v40Ev();
extern void _ZN7S1501C43v41Ev();
extern void _ZN7S1501C43v42Ev();
extern void _ZN7S1501C43v43Ev();
extern void _ZN7S1501C43v44Ev();
extern void _ZN7S1501C43v45Ev();
extern void _ZN7S1501C43v46Ev();
extern void _ZN7S1501C43v47Ev();
extern void _ZN7S1501C43v48Ev();
extern void _ZN7S1501C43v49Ev();
extern void _ZN7S1501C43v50Ev();
extern void _ZN7S1501C43v51Ev();
extern void _ZN7S1501C43v52Ev();
extern void _ZN7S1501C43v53Ev();
extern void _ZN7S1501C43v54Ev();
extern void _ZN7S1501C43v55Ev();
extern void _ZN7S1501C43v56Ev();
extern void _ZN7S1501C43v57Ev();
extern void _ZN7S1501C43v58Ev();
extern void _ZN7S1501C43v59Ev();
extern void _ZN7S1501C43v60Ev();
extern void _ZN7S1501C43v61Ev();
extern void _ZN7S1501C43v62Ev();
extern void _ZN7S1501C43v63Ev();
extern void _ZN7S1501C43v64Ev();
extern void _ZN7S1501C43v65Ev();
extern void _ZN7S1501C43v66Ev();
extern void _ZN7S1501C43v67Ev();
extern void _ZN7S1501C43v68Ev();
extern void _ZN7S1501C43v69Ev();
static  VTBL_ENTRY vtc_S1501C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1501C4[0]),
  (VTBL_ENTRY)&_ZN7S1501C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1501C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1501C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1501C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1501C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1501C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v69Ev,
};
extern VTBL_ENTRY _ZTI7S1501C4[];
extern  VTBL_ENTRY _ZTV7S1501C4[];
Class_Descriptor cd_S1501C4 = {  "S1501C4", // class name
  0,0,//no base classes
  &(vtc_S1501C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1501C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1501C4),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  S1501C6  {
  virtual void  v70(); // _ZN7S1501C63v70Ev
  virtual void  v71(); // _ZN7S1501C63v71Ev
  virtual void  v72(); // _ZN7S1501C63v72Ev
  virtual void  v73(); // _ZN7S1501C63v73Ev
  virtual void  v74(); // _ZN7S1501C63v74Ev
  virtual void  v75(); // _ZN7S1501C63v75Ev
  virtual void  v76(); // _ZN7S1501C63v76Ev
  virtual void  v77(); // _ZN7S1501C63v77Ev
  virtual void  v78(); // _ZN7S1501C63v78Ev
  virtual void  v79(); // _ZN7S1501C63v79Ev
  virtual void  v80(); // _ZN7S1501C63v80Ev
  virtual void  v81(); // _ZN7S1501C63v81Ev
  virtual void  v82(); // _ZN7S1501C63v82Ev
  virtual void  v83(); // _ZN7S1501C63v83Ev
  virtual void  v84(); // _ZN7S1501C63v84Ev
  virtual void  v85(); // _ZN7S1501C63v85Ev
  ~S1501C6(); // tgen
  S1501C6(); // tgen
};
//SIG(-1 S1501C6) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16}


void  S1501C6 ::v70(){vfunc_called(this, "_ZN7S1501C63v70Ev");}
void  S1501C6 ::v71(){vfunc_called(this, "_ZN7S1501C63v71Ev");}
void  S1501C6 ::v72(){vfunc_called(this, "_ZN7S1501C63v72Ev");}
void  S1501C6 ::v73(){vfunc_called(this, "_ZN7S1501C63v73Ev");}
void  S1501C6 ::v74(){vfunc_called(this, "_ZN7S1501C63v74Ev");}
void  S1501C6 ::v75(){vfunc_called(this, "_ZN7S1501C63v75Ev");}
void  S1501C6 ::v76(){vfunc_called(this, "_ZN7S1501C63v76Ev");}
void  S1501C6 ::v77(){vfunc_called(this, "_ZN7S1501C63v77Ev");}
void  S1501C6 ::v78(){vfunc_called(this, "_ZN7S1501C63v78Ev");}
void  S1501C6 ::v79(){vfunc_called(this, "_ZN7S1501C63v79Ev");}
void  S1501C6 ::v80(){vfunc_called(this, "_ZN7S1501C63v80Ev");}
void  S1501C6 ::v81(){vfunc_called(this, "_ZN7S1501C63v81Ev");}
void  S1501C6 ::v82(){vfunc_called(this, "_ZN7S1501C63v82Ev");}
void  S1501C6 ::v83(){vfunc_called(this, "_ZN7S1501C63v83Ev");}
void  S1501C6 ::v84(){vfunc_called(this, "_ZN7S1501C63v84Ev");}
void  S1501C6 ::v85(){vfunc_called(this, "_ZN7S1501C63v85Ev");}
S1501C6 ::~S1501C6(){ note_dtor("S1501C6", this);} // tgen
S1501C6 ::S1501C6(){ note_ctor("S1501C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1501C6C1Ev();
extern void _ZN7S1501C6D1Ev();
Name_Map name_map_S1501C6[] = {
  NSPAIR(_ZN7S1501C6C1Ev),
  NSPAIR(_ZN7S1501C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1501C6[];
extern void _ZN7S1501C63v70Ev();
extern void _ZN7S1501C63v71Ev();
extern void _ZN7S1501C63v72Ev();
extern void _ZN7S1501C63v73Ev();
extern void _ZN7S1501C63v74Ev();
extern void _ZN7S1501C63v75Ev();
extern void _ZN7S1501C63v76Ev();
extern void _ZN7S1501C63v77Ev();
extern void _ZN7S1501C63v78Ev();
extern void _ZN7S1501C63v79Ev();
extern void _ZN7S1501C63v80Ev();
extern void _ZN7S1501C63v81Ev();
extern void _ZN7S1501C63v82Ev();
extern void _ZN7S1501C63v83Ev();
extern void _ZN7S1501C63v84Ev();
extern void _ZN7S1501C63v85Ev();
static  VTBL_ENTRY vtc_S1501C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1501C6[0]),
  (VTBL_ENTRY)&_ZN7S1501C63v70Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v71Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v72Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v73Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v74Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v75Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v76Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v77Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v78Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v79Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v80Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v81Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v82Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v83Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v85Ev,
};
extern VTBL_ENTRY _ZTI7S1501C6[];
extern  VTBL_ENTRY _ZTV7S1501C6[];
Class_Descriptor cd_S1501C6 = {  "S1501C6", // class name
  0,0,//no base classes
  &(vtc_S1501C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1501C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1501C6),18, //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  S1501C7  {
  virtual void  v86(); // _ZN7S1501C73v86Ev
  virtual void  v87(); // _ZN7S1501C73v87Ev
  virtual void  v88(); // _ZN7S1501C73v88Ev
  virtual void  v89(); // _ZN7S1501C73v89Ev
  virtual void  v90(); // _ZN7S1501C73v90Ev
  virtual void  v91(); // _ZN7S1501C73v91Ev
  virtual void  v92(); // _ZN7S1501C73v92Ev
  virtual void  v93(); // _ZN7S1501C73v93Ev
  virtual void  v94(); // _ZN7S1501C73v94Ev
  ~S1501C7(); // tgen
  S1501C7(); // tgen
};
//SIG(-1 S1501C7) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S1501C7 ::v86(){vfunc_called(this, "_ZN7S1501C73v86Ev");}
void  S1501C7 ::v87(){vfunc_called(this, "_ZN7S1501C73v87Ev");}
void  S1501C7 ::v88(){vfunc_called(this, "_ZN7S1501C73v88Ev");}
void  S1501C7 ::v89(){vfunc_called(this, "_ZN7S1501C73v89Ev");}
void  S1501C7 ::v90(){vfunc_called(this, "_ZN7S1501C73v90Ev");}
void  S1501C7 ::v91(){vfunc_called(this, "_ZN7S1501C73v91Ev");}
void  S1501C7 ::v92(){vfunc_called(this, "_ZN7S1501C73v92Ev");}
void  S1501C7 ::v93(){vfunc_called(this, "_ZN7S1501C73v93Ev");}
void  S1501C7 ::v94(){vfunc_called(this, "_ZN7S1501C73v94Ev");}
S1501C7 ::~S1501C7(){ note_dtor("S1501C7", this);} // tgen
S1501C7 ::S1501C7(){ note_ctor("S1501C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1501C7C1Ev();
extern void _ZN7S1501C7D1Ev();
Name_Map name_map_S1501C7[] = {
  NSPAIR(_ZN7S1501C7C1Ev),
  NSPAIR(_ZN7S1501C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1501C7[];
extern void _ZN7S1501C73v86Ev();
extern void _ZN7S1501C73v87Ev();
extern void _ZN7S1501C73v88Ev();
extern void _ZN7S1501C73v89Ev();
extern void _ZN7S1501C73v90Ev();
extern void _ZN7S1501C73v91Ev();
extern void _ZN7S1501C73v92Ev();
extern void _ZN7S1501C73v93Ev();
extern void _ZN7S1501C73v94Ev();
static  VTBL_ENTRY vtc_S1501C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1501C7[0]),
  (VTBL_ENTRY)&_ZN7S1501C73v86Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v87Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v88Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v89Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v90Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v91Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v92Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v93Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v94Ev,
};
extern VTBL_ENTRY _ZTI7S1501C7[];
extern  VTBL_ENTRY _ZTV7S1501C7[];
Class_Descriptor cd_S1501C7 = {  "S1501C7", // class name
  0,0,//no base classes
  &(vtc_S1501C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1501C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1501C7),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  S1501C3  : S1501C4 , S1501C6 , S1501C7 {
  void *s1501c3f0;
  ::S79C39_nt s1501c3f1;
  unsigned int s1501c3f2:1;
  unsigned int s1501c3f3:1;
  unsigned int s1501c3f4:1;
  unsigned int s1501c3f5:1;
  virtual  ~S1501C3(); // _ZN7S1501C3D1Ev
  virtual void  v95(); // _ZN7S1501C33v95Ev
  virtual void  v96(); // _ZN7S1501C33v96Ev
  virtual void  v97(); // _ZN7S1501C33v97Ev
  virtual void  v98(); // _ZN7S1501C33v98Ev
  virtual void  v99(); // _ZN7S1501C33v99Ev
  virtual void  v100(); // _ZN7S1501C34v100Ev
  virtual void  v101(); // _ZN7S1501C34v101Ev
  virtual void  v102(); // _ZN7S1501C34v102Ev
  virtual void  v103(); // _ZN7S1501C34v103Ev
  virtual void  v104(); // _ZN7S1501C34v104Ev
  virtual void  v105(); // _ZN7S1501C34v105Ev
  virtual void  v106(); // _ZN7S1501C34v106Ev
  virtual void  v107(); // _ZN7S1501C34v107Ev
  virtual void  v108(); // _ZN7S1501C34v108Ev
  virtual void  v109(); // _ZN7S1501C34v109Ev
  virtual void  v110(); // _ZN7S1501C34v110Ev
  virtual void  v111(); // _ZN7S1501C34v111Ev
  virtual void  v112(); // _ZN7S1501C34v112Ev
  virtual void  v113(); // _ZN7S1501C34v113Ev
  virtual void  v114(); // _ZN7S1501C34v114Ev
  virtual void  v115(); // _ZN7S1501C34v115Ev
  virtual void  v116(); // _ZN7S1501C34v116Ev
  virtual void  v117(); // _ZN7S1501C34v117Ev
  virtual void  v118(); // _ZN7S1501C34v118Ev
  S1501C3(); // tgen
};
//SIG(-1 S1501C3) C1{ BC2{ vd 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 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} BC4{ v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104} BC5{ v105 v106 v107 v108 v109 v110 v111 v112 v113} 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 Fp FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1}


 S1501C3 ::~S1501C3(){ note_dtor("S1501C3", this);}
void  S1501C3 ::v95(){vfunc_called(this, "_ZN7S1501C33v95Ev");}
void  S1501C3 ::v96(){vfunc_called(this, "_ZN7S1501C33v96Ev");}
void  S1501C3 ::v97(){vfunc_called(this, "_ZN7S1501C33v97Ev");}
void  S1501C3 ::v98(){vfunc_called(this, "_ZN7S1501C33v98Ev");}
void  S1501C3 ::v99(){vfunc_called(this, "_ZN7S1501C33v99Ev");}
void  S1501C3 ::v100(){vfunc_called(this, "_ZN7S1501C34v100Ev");}
void  S1501C3 ::v101(){vfunc_called(this, "_ZN7S1501C34v101Ev");}
void  S1501C3 ::v102(){vfunc_called(this, "_ZN7S1501C34v102Ev");}
void  S1501C3 ::v103(){vfunc_called(this, "_ZN7S1501C34v103Ev");}
void  S1501C3 ::v104(){vfunc_called(this, "_ZN7S1501C34v104Ev");}
void  S1501C3 ::v105(){vfunc_called(this, "_ZN7S1501C34v105Ev");}
void  S1501C3 ::v106(){vfunc_called(this, "_ZN7S1501C34v106Ev");}
void  S1501C3 ::v107(){vfunc_called(this, "_ZN7S1501C34v107Ev");}
void  S1501C3 ::v108(){vfunc_called(this, "_ZN7S1501C34v108Ev");}
void  S1501C3 ::v109(){vfunc_called(this, "_ZN7S1501C34v109Ev");}
void  S1501C3 ::v110(){vfunc_called(this, "_ZN7S1501C34v110Ev");}
void  S1501C3 ::v111(){vfunc_called(this, "_ZN7S1501C34v111Ev");}
void  S1501C3 ::v112(){vfunc_called(this, "_ZN7S1501C34v112Ev");}
void  S1501C3 ::v113(){vfunc_called(this, "_ZN7S1501C34v113Ev");}
void  S1501C3 ::v114(){vfunc_called(this, "_ZN7S1501C34v114Ev");}
void  S1501C3 ::v115(){vfunc_called(this, "_ZN7S1501C34v115Ev");}
void  S1501C3 ::v116(){vfunc_called(this, "_ZN7S1501C34v116Ev");}
void  S1501C3 ::v117(){vfunc_called(this, "_ZN7S1501C34v117Ev");}
void  S1501C3 ::v118(){vfunc_called(this, "_ZN7S1501C34v118Ev");}
S1501C3 ::S1501C3(){ note_ctor("S1501C3", this);} // tgen

static void Test_S1501C3()
{
  extern Class_Descriptor cd_S1501C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,23)];
    init_test(&cd_S1501C3, buf);
    S1501C3 *dp, &lv = *(dp=new (buf) S1501C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S1501C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1501C3)");
    check_base_class_offset(lv, (S1501C4*), 0, "S1501C3");
    check_base_class_offset(lv, (S1501C6*), ABISELECT(96,60), "S1501C3");
    check_base_class_offset(lv, (S1501C7*), ABISELECT(104,64), "S1501C3");
    check_field_offset(lv, s1501c3f0, ABISELECT(112,68), "S1501C3.s1501c3f0");
    check_field_offset(lv, s1501c3f1, ABISELECT(120,72), "S1501C3.s1501c3f1");
    set_bf_and_test(lv, s1501c3f2, ABISELECT(136,84), 0, 1, 1, "S1501C3");
    set_bf_and_test(lv, s1501c3f3, ABISELECT(136,84), 1, 1, 1, "S1501C3");
    set_bf_and_test(lv, s1501c3f4, ABISELECT(136,84), 2, 1, 1, "S1501C3");
    set_bf_and_test(lv, s1501c3f5, ABISELECT(136,84), 3, 1, 1, "S1501C3");
    test_class_info(&lv, &cd_S1501C3);
    dp->~S1501C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1501C3(Test_S1501C3, "S1501C3", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN7S1501C3C1Ev();
extern void _ZN7S1501C3D1Ev();
Name_Map name_map_S1501C3[] = {
  NSPAIR(_ZN7S1501C3C1Ev),
  NSPAIR(_ZN7S1501C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1501C4;
extern VTBL_ENTRY _ZTI7S1501C4[];
extern  VTBL_ENTRY _ZTV7S1501C4[];
extern Class_Descriptor cd_S1501C6;
extern VTBL_ENTRY _ZTI7S1501C6[];
extern  VTBL_ENTRY _ZTV7S1501C6[];
extern Class_Descriptor cd_S1501C7;
extern VTBL_ENTRY _ZTI7S1501C7[];
extern  VTBL_ENTRY _ZTV7S1501C7[];
static Base_Class bases_S1501C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1501C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1501C6,    ABISELECT(96,60), //bcp->offset
    92, //bcp->virtual_function_table_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_S1501C7,    ABISELECT(104,64), //bcp->offset
    110, //bcp->virtual_function_table_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 _ZTI7S1501C3[];
extern void _ZN7S1501C3D1Ev();
extern void _ZN7S1501C3D0Ev();
extern void _ZN7S1501C42v6Ev();
extern void _ZN7S1501C42v7Ev();
extern void _ZN7S1501C42v8Ev();
extern void _ZN7S1501C42v9Ev();
extern void _ZN7S1501C43v10Ev();
extern void _ZN7S1501C43v11Ev();
extern void _ZN7S1501C43v12Ev();
extern void _ZN7S1501C43v13Ev();
extern void _ZN7S1501C43v14Ev();
extern void _ZN7S1501C43v15Ev();
extern void _ZN7S1501C43v16Ev();
extern void _ZN7S1501C43v17Ev();
extern void _ZN7S1501C43v18Ev();
extern void _ZN7S1501C43v19Ev();
extern void _ZN7S1501C43v20Ev();
extern void _ZN7S1501C43v21Ev();
extern void _ZN7S1501C43v22Ev();
extern void _ZN7S1501C43v23Ev();
extern void _ZN7S1501C43v24Ev();
extern void _ZN7S1501C43v25Ev();
extern void _ZN7S1501C43v26Ev();
extern void _ZN7S1501C43v27Ev();
extern void _ZN7S1501C43v28Ev();
extern void _ZN7S1501C43v29Ev();
extern void _ZN7S1501C43v30Ev();
extern void _ZN7S1501C43v31Ev();
extern void _ZN7S1501C43v32Ev();
extern void _ZN7S1501C43v33Ev();
extern void _ZN7S1501C43v34Ev();
extern void _ZN7S1501C43v35Ev();
extern void _ZN7S1501C43v36Ev();
extern void _ZN7S1501C43v37Ev();
extern void _ZN7S1501C43v38Ev();
extern void _ZN7S1501C43v39Ev();
extern void _ZN7S1501C43v40Ev();
extern void _ZN7S1501C43v41Ev();
extern void _ZN7S1501C43v42Ev();
extern void _ZN7S1501C43v43Ev();
extern void _ZN7S1501C43v44Ev();
extern void _ZN7S1501C43v45Ev();
extern void _ZN7S1501C43v46Ev();
extern void _ZN7S1501C43v47Ev();
extern void _ZN7S1501C43v48Ev();
extern void _ZN7S1501C43v49Ev();
extern void _ZN7S1501C43v50Ev();
extern void _ZN7S1501C43v51Ev();
extern void _ZN7S1501C43v52Ev();
extern void _ZN7S1501C43v53Ev();
extern void _ZN7S1501C43v54Ev();
extern void _ZN7S1501C43v55Ev();
extern void _ZN7S1501C43v56Ev();
extern void _ZN7S1501C43v57Ev();
extern void _ZN7S1501C43v58Ev();
extern void _ZN7S1501C43v59Ev();
extern void _ZN7S1501C43v60Ev();
extern void _ZN7S1501C43v61Ev();
extern void _ZN7S1501C43v62Ev();
extern void _ZN7S1501C43v63Ev();
extern void _ZN7S1501C43v64Ev();
extern void _ZN7S1501C43v65Ev();
extern void _ZN7S1501C43v66Ev();
extern void _ZN7S1501C43v67Ev();
extern void _ZN7S1501C43v68Ev();
extern void _ZN7S1501C43v69Ev();
extern void _ZN7S1501C33v95Ev();
extern void _ZN7S1501C33v96Ev();
extern void _ZN7S1501C33v97Ev();
extern void _ZN7S1501C33v98Ev();
extern void _ZN7S1501C33v99Ev();
extern void _ZN7S1501C34v100Ev();
extern void _ZN7S1501C34v101Ev();
extern void _ZN7S1501C34v102Ev();
extern void _ZN7S1501C34v103Ev();
extern void _ZN7S1501C34v104Ev();
extern void _ZN7S1501C34v105Ev();
extern void _ZN7S1501C34v106Ev();
extern void _ZN7S1501C34v107Ev();
extern void _ZN7S1501C34v108Ev();
extern void _ZN7S1501C34v109Ev();
extern void _ZN7S1501C34v110Ev();
extern void _ZN7S1501C34v111Ev();
extern void _ZN7S1501C34v112Ev();
extern void _ZN7S1501C34v113Ev();
extern void _ZN7S1501C34v114Ev();
extern void _ZN7S1501C34v115Ev();
extern void _ZN7S1501C34v116Ev();
extern void _ZN7S1501C34v117Ev();
extern void _ZN7S1501C34v118Ev();
extern void _ZN7S1501C63v70Ev();
extern void _ZN7S1501C63v71Ev();
extern void _ZN7S1501C63v72Ev();
extern void _ZN7S1501C63v73Ev();
extern void _ZN7S1501C63v74Ev();
extern void _ZN7S1501C63v75Ev();
extern void _ZN7S1501C63v76Ev();
extern void _ZN7S1501C63v77Ev();
extern void _ZN7S1501C63v78Ev();
extern void _ZN7S1501C63v79Ev();
extern void _ZN7S1501C63v80Ev();
extern void _ZN7S1501C63v81Ev();
extern void _ZN7S1501C63v82Ev();
extern void _ZN7S1501C63v83Ev();
extern void _ZN7S1501C63v84Ev();
extern void _ZN7S1501C63v85Ev();
extern void _ZN7S1501C73v86Ev();
extern void _ZN7S1501C73v87Ev();
extern void _ZN7S1501C73v88Ev();
extern void _ZN7S1501C73v89Ev();
extern void _ZN7S1501C73v90Ev();
extern void _ZN7S1501C73v91Ev();
extern void _ZN7S1501C73v92Ev();
extern void _ZN7S1501C73v93Ev();
extern void _ZN7S1501C73v94Ev();
static  VTBL_ENTRY vtc_S1501C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1501C3[0]),
  (VTBL_ENTRY)&_ZN7S1501C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1501C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1501C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1501C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1501C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1501C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1501C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1501C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1501C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1501C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1501C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v118Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1501C3[0]),
  (VTBL_ENTRY)&_ZN7S1501C63v70Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v71Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v72Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v73Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v74Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v75Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v76Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v77Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v78Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v79Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v80Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v81Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v82Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v83Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v85Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1501C3[0]),
  (VTBL_ENTRY)&_ZN7S1501C73v86Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v87Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v88Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v89Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v90Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v91Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v92Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v93Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v94Ev,
};
extern VTBL_ENTRY _ZTI7S1501C3[];
extern  VTBL_ENTRY _ZTV7S1501C3[];
Class_Descriptor cd_S1501C3 = {  "S1501C3", // class name
  bases_S1501C3, 3,
  &(vtc_S1501C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI7S1501C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1501C3),121, //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  S1501C2  : S1501C3 {
  ::S3262C11_nt s1501c2f0;
  int s1501c2f1;
  virtual  ~S1501C2(); // _ZN7S1501C2D1Ev
  virtual void  v119(); // _ZN7S1501C24v119Ev
  virtual void  v120(); // _ZN7S1501C24v120Ev
  virtual void  v121(); // _ZN7S1501C24v121Ev
  virtual void  v122(); // _ZN7S1501C24v122Ev
  virtual void  v123(); // _ZN7S1501C24v123Ev
  virtual void  v124(); // _ZN7S1501C24v124Ev
  virtual void  v125(); // _ZN7S1501C24v125Ev
  virtual void  v126(); // _ZN7S1501C24v126Ev
  virtual void  v127(); // _ZN7S1501C24v127Ev
  virtual void  v128(); // _ZN7S1501C24v128Ev
  virtual void  v129(); // _ZN7S1501C24v129Ev
  virtual void  v130(); // _ZN7S1501C24v130Ev
  virtual void  v131(); // _ZN7S1501C24v131Ev
  virtual void  v132(); // _ZN7S1501C24v132Ev
  virtual void  v133(); // _ZN7S1501C24v133Ev
  virtual void  v134(); // _ZN7S1501C24v134Ev
  virtual void  v135(); // _ZN7S1501C24v135Ev
  virtual void  v136(); // _ZN7S1501C24v136Ev
  virtual void  v137(); // _ZN7S1501C24v137Ev
  virtual void  v138(); // _ZN7S1501C24v138Ev
  virtual void  v139(); // _ZN7S1501C24v139Ev
  virtual void  v140(); // _ZN7S1501C24v140Ev
  virtual void  v141(); // _ZN7S1501C24v141Ev
  virtual void  v142(); // _ZN7S1501C24v142Ev
  virtual void  v143(); // _ZN7S1501C24v143Ev
  virtual void  v144(); // _ZN7S1501C24v144Ev
  virtual void  v145(); // _ZN7S1501C24v145Ev
  S1501C2(); // tgen
};
//SIG(-1 S1501C2) C1{ BC2{ BC3{ vd 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 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} BC5{ v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107} BC6{ v108 v109 v110 v111 v112 v113 v114 v115 v116} vd v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 Fp FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1} 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 FC11{ m FC12{ BC13{ BC10}} Fc} Fi}


 S1501C2 ::~S1501C2(){ note_dtor("S1501C2", this);}
void  S1501C2 ::v119(){vfunc_called(this, "_ZN7S1501C24v119Ev");}
void  S1501C2 ::v120(){vfunc_called(this, "_ZN7S1501C24v120Ev");}
void  S1501C2 ::v121(){vfunc_called(this, "_ZN7S1501C24v121Ev");}
void  S1501C2 ::v122(){vfunc_called(this, "_ZN7S1501C24v122Ev");}
void  S1501C2 ::v123(){vfunc_called(this, "_ZN7S1501C24v123Ev");}
void  S1501C2 ::v124(){vfunc_called(this, "_ZN7S1501C24v124Ev");}
void  S1501C2 ::v125(){vfunc_called(this, "_ZN7S1501C24v125Ev");}
void  S1501C2 ::v126(){vfunc_called(this, "_ZN7S1501C24v126Ev");}
void  S1501C2 ::v127(){vfunc_called(this, "_ZN7S1501C24v127Ev");}
void  S1501C2 ::v128(){vfunc_called(this, "_ZN7S1501C24v128Ev");}
void  S1501C2 ::v129(){vfunc_called(this, "_ZN7S1501C24v129Ev");}
void  S1501C2 ::v130(){vfunc_called(this, "_ZN7S1501C24v130Ev");}
void  S1501C2 ::v131(){vfunc_called(this, "_ZN7S1501C24v131Ev");}
void  S1501C2 ::v132(){vfunc_called(this, "_ZN7S1501C24v132Ev");}
void  S1501C2 ::v133(){vfunc_called(this, "_ZN7S1501C24v133Ev");}
void  S1501C2 ::v134(){vfunc_called(this, "_ZN7S1501C24v134Ev");}
void  S1501C2 ::v135(){vfunc_called(this, "_ZN7S1501C24v135Ev");}
void  S1501C2 ::v136(){vfunc_called(this, "_ZN7S1501C24v136Ev");}
void  S1501C2 ::v137(){vfunc_called(this, "_ZN7S1501C24v137Ev");}
void  S1501C2 ::v138(){vfunc_called(this, "_ZN7S1501C24v138Ev");}
void  S1501C2 ::v139(){vfunc_called(this, "_ZN7S1501C24v139Ev");}
void  S1501C2 ::v140(){vfunc_called(this, "_ZN7S1501C24v140Ev");}
void  S1501C2 ::v141(){vfunc_called(this, "_ZN7S1501C24v141Ev");}
void  S1501C2 ::v142(){vfunc_called(this, "_ZN7S1501C24v142Ev");}
void  S1501C2 ::v143(){vfunc_called(this, "_ZN7S1501C24v143Ev");}
void  S1501C2 ::v144(){vfunc_called(this, "_ZN7S1501C24v144Ev");}
void  S1501C2 ::v145(){vfunc_called(this, "_ZN7S1501C24v145Ev");}
S1501C2 ::S1501C2(){ note_ctor("S1501C2", this);} // tgen

static void Test_S1501C2()
{
  extern Class_Descriptor cd_S1501C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,28)];
    init_test(&cd_S1501C2, buf);
    S1501C2 *dp, &lv = *(dp=new (buf) S1501C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,108), "sizeof(S1501C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1501C2)");
    check_base_class_offset(lv, (S1501C4*)(S1501C3*), 0, "S1501C2");
    check_base_class_offset(lv, (S1501C6*)(S1501C3*), ABISELECT(96,60), "S1501C2");
    check_base_class_offset(lv, (S1501C7*)(S1501C3*), ABISELECT(104,64), "S1501C2");
    check_base_class_offset(lv, (S1501C3*), 0, "S1501C2");
    check_field_offset(lv, s1501c2f0, ABISELECT(144,88), "S1501C2.s1501c2f0");
    check_field_offset(lv, s1501c2f1, ABISELECT(168,104), "S1501C2.s1501c2f1");
    test_class_info(&lv, &cd_S1501C2);
    dp->~S1501C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1501C2(Test_S1501C2, "S1501C2", ABISELECT(176,108));

#else // __cplusplus

extern void _ZN7S1501C2C1Ev();
extern void _ZN7S1501C2D1Ev();
Name_Map name_map_S1501C2[] = {
  NSPAIR(_ZN7S1501C2C1Ev),
  NSPAIR(_ZN7S1501C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1501C4;
extern VTBL_ENTRY _ZTI7S1501C4[];
extern  VTBL_ENTRY _ZTV7S1501C4[];
extern Class_Descriptor cd_S1501C6;
extern VTBL_ENTRY _ZTI7S1501C6[];
extern  VTBL_ENTRY _ZTV7S1501C6[];
extern Class_Descriptor cd_S1501C7;
extern VTBL_ENTRY _ZTI7S1501C7[];
extern  VTBL_ENTRY _ZTV7S1501C7[];
extern Class_Descriptor cd_S1501C3;
extern VTBL_ENTRY _ZTI7S1501C3[];
extern  VTBL_ENTRY _ZTV7S1501C3[];
static Base_Class bases_S1501C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1501C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1501C6,    ABISELECT(96,60), //bcp->offset
    119, //bcp->virtual_function_table_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_S1501C7,    ABISELECT(104,64), //bcp->offset
    137, //bcp->virtual_function_table_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_S1501C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1501C2[];
extern void _ZN7S1501C2D1Ev();
extern void _ZN7S1501C2D0Ev();
extern void _ZN7S1501C42v6Ev();
extern void _ZN7S1501C42v7Ev();
extern void _ZN7S1501C42v8Ev();
extern void _ZN7S1501C42v9Ev();
extern void _ZN7S1501C43v10Ev();
extern void _ZN7S1501C43v11Ev();
extern void _ZN7S1501C43v12Ev();
extern void _ZN7S1501C43v13Ev();
extern void _ZN7S1501C43v14Ev();
extern void _ZN7S1501C43v15Ev();
extern void _ZN7S1501C43v16Ev();
extern void _ZN7S1501C43v17Ev();
extern void _ZN7S1501C43v18Ev();
extern void _ZN7S1501C43v19Ev();
extern void _ZN7S1501C43v20Ev();
extern void _ZN7S1501C43v21Ev();
extern void _ZN7S1501C43v22Ev();
extern void _ZN7S1501C43v23Ev();
extern void _ZN7S1501C43v24Ev();
extern void _ZN7S1501C43v25Ev();
extern void _ZN7S1501C43v26Ev();
extern void _ZN7S1501C43v27Ev();
extern void _ZN7S1501C43v28Ev();
extern void _ZN7S1501C43v29Ev();
extern void _ZN7S1501C43v30Ev();
extern void _ZN7S1501C43v31Ev();
extern void _ZN7S1501C43v32Ev();
extern void _ZN7S1501C43v33Ev();
extern void _ZN7S1501C43v34Ev();
extern void _ZN7S1501C43v35Ev();
extern void _ZN7S1501C43v36Ev();
extern void _ZN7S1501C43v37Ev();
extern void _ZN7S1501C43v38Ev();
extern void _ZN7S1501C43v39Ev();
extern void _ZN7S1501C43v40Ev();
extern void _ZN7S1501C43v41Ev();
extern void _ZN7S1501C43v42Ev();
extern void _ZN7S1501C43v43Ev();
extern void _ZN7S1501C43v44Ev();
extern void _ZN7S1501C43v45Ev();
extern void _ZN7S1501C43v46Ev();
extern void _ZN7S1501C43v47Ev();
extern void _ZN7S1501C43v48Ev();
extern void _ZN7S1501C43v49Ev();
extern void _ZN7S1501C43v50Ev();
extern void _ZN7S1501C43v51Ev();
extern void _ZN7S1501C43v52Ev();
extern void _ZN7S1501C43v53Ev();
extern void _ZN7S1501C43v54Ev();
extern void _ZN7S1501C43v55Ev();
extern void _ZN7S1501C43v56Ev();
extern void _ZN7S1501C43v57Ev();
extern void _ZN7S1501C43v58Ev();
extern void _ZN7S1501C43v59Ev();
extern void _ZN7S1501C43v60Ev();
extern void _ZN7S1501C43v61Ev();
extern void _ZN7S1501C43v62Ev();
extern void _ZN7S1501C43v63Ev();
extern void _ZN7S1501C43v64Ev();
extern void _ZN7S1501C43v65Ev();
extern void _ZN7S1501C43v66Ev();
extern void _ZN7S1501C43v67Ev();
extern void _ZN7S1501C43v68Ev();
extern void _ZN7S1501C43v69Ev();
extern void _ZN7S1501C33v95Ev();
extern void _ZN7S1501C33v96Ev();
extern void _ZN7S1501C33v97Ev();
extern void _ZN7S1501C33v98Ev();
extern void _ZN7S1501C33v99Ev();
extern void _ZN7S1501C34v100Ev();
extern void _ZN7S1501C34v101Ev();
extern void _ZN7S1501C34v102Ev();
extern void _ZN7S1501C34v103Ev();
extern void _ZN7S1501C34v104Ev();
extern void _ZN7S1501C34v105Ev();
extern void _ZN7S1501C34v106Ev();
extern void _ZN7S1501C34v107Ev();
extern void _ZN7S1501C34v108Ev();
extern void _ZN7S1501C34v109Ev();
extern void _ZN7S1501C34v110Ev();
extern void _ZN7S1501C34v111Ev();
extern void _ZN7S1501C34v112Ev();
extern void _ZN7S1501C34v113Ev();
extern void _ZN7S1501C34v114Ev();
extern void _ZN7S1501C34v115Ev();
extern void _ZN7S1501C34v116Ev();
extern void _ZN7S1501C34v117Ev();
extern void _ZN7S1501C34v118Ev();
extern void _ZN7S1501C24v119Ev();
extern void _ZN7S1501C24v120Ev();
extern void _ZN7S1501C24v121Ev();
extern void _ZN7S1501C24v122Ev();
extern void _ZN7S1501C24v123Ev();
extern void _ZN7S1501C24v124Ev();
extern void _ZN7S1501C24v125Ev();
extern void _ZN7S1501C24v126Ev();
extern void _ZN7S1501C24v127Ev();
extern void _ZN7S1501C24v128Ev();
extern void _ZN7S1501C24v129Ev();
extern void _ZN7S1501C24v130Ev();
extern void _ZN7S1501C24v131Ev();
extern void _ZN7S1501C24v132Ev();
extern void _ZN7S1501C24v133Ev();
extern void _ZN7S1501C24v134Ev();
extern void _ZN7S1501C24v135Ev();
extern void _ZN7S1501C24v136Ev();
extern void _ZN7S1501C24v137Ev();
extern void _ZN7S1501C24v138Ev();
extern void _ZN7S1501C24v139Ev();
extern void _ZN7S1501C24v140Ev();
extern void _ZN7S1501C24v141Ev();
extern void _ZN7S1501C24v142Ev();
extern void _ZN7S1501C24v143Ev();
extern void _ZN7S1501C24v144Ev();
extern void _ZN7S1501C24v145Ev();
extern void _ZN7S1501C63v70Ev();
extern void _ZN7S1501C63v71Ev();
extern void _ZN7S1501C63v72Ev();
extern void _ZN7S1501C63v73Ev();
extern void _ZN7S1501C63v74Ev();
extern void _ZN7S1501C63v75Ev();
extern void _ZN7S1501C63v76Ev();
extern void _ZN7S1501C63v77Ev();
extern void _ZN7S1501C63v78Ev();
extern void _ZN7S1501C63v79Ev();
extern void _ZN7S1501C63v80Ev();
extern void _ZN7S1501C63v81Ev();
extern void _ZN7S1501C63v82Ev();
extern void _ZN7S1501C63v83Ev();
extern void _ZN7S1501C63v84Ev();
extern void _ZN7S1501C63v85Ev();
extern void _ZN7S1501C73v86Ev();
extern void _ZN7S1501C73v87Ev();
extern void _ZN7S1501C73v88Ev();
extern void _ZN7S1501C73v89Ev();
extern void _ZN7S1501C73v90Ev();
extern void _ZN7S1501C73v91Ev();
extern void _ZN7S1501C73v92Ev();
extern void _ZN7S1501C73v93Ev();
extern void _ZN7S1501C73v94Ev();
static  VTBL_ENTRY vtc_S1501C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1501C2[0]),
  (VTBL_ENTRY)&_ZN7S1501C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1501C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1501C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1501C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1501C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1501C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1501C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1501C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1501C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1501C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1501C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v119Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v120Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v121Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v122Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v123Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v124Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v125Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v126Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v127Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v128Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v129Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v130Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v131Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v132Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v144Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v145Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1501C2[0]),
  (VTBL_ENTRY)&_ZN7S1501C63v70Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v71Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v72Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v73Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v74Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v75Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v76Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v77Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v78Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v79Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v80Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v81Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v82Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v83Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v85Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1501C2[0]),
  (VTBL_ENTRY)&_ZN7S1501C73v86Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v87Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v88Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v89Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v90Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v91Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v92Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v93Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v94Ev,
};
extern VTBL_ENTRY _ZTI7S1501C2[];
extern  VTBL_ENTRY _ZTV7S1501C2[];
Class_Descriptor cd_S1501C2 = {  "S1501C2", // class name
  bases_S1501C2, 4,
  &(vtc_S1501C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,108), // object size
  NSPAIRA(_ZTI7S1501C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1501C2),148, //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  S1501C1  : S1501C2 {
  ::S79C8_nt s1501c1f0;
  virtual  ~S1501C1(); // _ZN7S1501C1D1Ev
  virtual void  v1(); // _ZN7S1501C12v1Ev
  virtual void  v2(); // _ZN7S1501C12v2Ev
  virtual void  v3(); // _ZN7S1501C12v3Ev
  virtual void  v4(); // _ZN7S1501C12v4Ev
  virtual void  v5(); // _ZN7S1501C12v5Ev
  S1501C1(); // tgen
};
//SIG(1 S1501C1) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} BC6{ v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85} BC7{ v86 v87 v88 v89 v90 v91 v92 v93 v94} vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 Fp FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1} vd 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 FC12{ m FC13{ BC14{ BC11}} Fc} Fi} vd v1 v2 v3 v4 v5 FC5}


 S1501C1 ::~S1501C1(){ note_dtor("S1501C1", this);}
void  S1501C1 ::v1(){vfunc_called(this, "_ZN7S1501C12v1Ev");}
void  S1501C1 ::v2(){vfunc_called(this, "_ZN7S1501C12v2Ev");}
void  S1501C1 ::v3(){vfunc_called(this, "_ZN7S1501C12v3Ev");}
void  S1501C1 ::v4(){vfunc_called(this, "_ZN7S1501C12v4Ev");}
void  S1501C1 ::v5(){vfunc_called(this, "_ZN7S1501C12v5Ev");}
S1501C1 ::S1501C1(){ note_ctor("S1501C1", this);} // tgen

static void Test_S1501C1()
{
  extern Class_Descriptor cd_S1501C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,30)];
    init_test(&cd_S1501C1, buf);
    S1501C1 *dp, &lv = *(dp=new (buf) S1501C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,116), "sizeof(S1501C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1501C1)");
    check_base_class_offset(lv, (S1501C4*)(S1501C3*)(S1501C2*), 0, "S1501C1");
    check_base_class_offset(lv, (S1501C6*)(S1501C3*)(S1501C2*), ABISELECT(96,60), "S1501C1");
    check_base_class_offset(lv, (S1501C7*)(S1501C3*)(S1501C2*), ABISELECT(104,64), "S1501C1");
    check_base_class_offset(lv, (S1501C3*)(S1501C2*), 0, "S1501C1");
    check_base_class_offset(lv, (S1501C2*), 0, "S1501C1");
    check_field_offset(lv, s1501c1f0, ABISELECT(172,108), "S1501C1.s1501c1f0");
    test_class_info(&lv, &cd_S1501C1);
    dp->~S1501C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1501C1(Test_S1501C1, "S1501C1", ABISELECT(184,116));

#else // __cplusplus

extern void _ZN7S1501C1C1Ev();
extern void _ZN7S1501C1D1Ev();
Name_Map name_map_S1501C1[] = {
  NSPAIR(_ZN7S1501C1C1Ev),
  NSPAIR(_ZN7S1501C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1501C4;
extern VTBL_ENTRY _ZTI7S1501C4[];
extern  VTBL_ENTRY _ZTV7S1501C4[];
extern Class_Descriptor cd_S1501C6;
extern VTBL_ENTRY _ZTI7S1501C6[];
extern  VTBL_ENTRY _ZTV7S1501C6[];
extern Class_Descriptor cd_S1501C7;
extern VTBL_ENTRY _ZTI7S1501C7[];
extern  VTBL_ENTRY _ZTV7S1501C7[];
extern Class_Descriptor cd_S1501C3;
extern VTBL_ENTRY _ZTI7S1501C3[];
extern  VTBL_ENTRY _ZTV7S1501C3[];
extern Class_Descriptor cd_S1501C2;
extern VTBL_ENTRY _ZTI7S1501C2[];
extern  VTBL_ENTRY _ZTV7S1501C2[];
static Base_Class bases_S1501C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1501C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1501C6,    ABISELECT(96,60), //bcp->offset
    124, //bcp->virtual_function_table_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_S1501C7,    ABISELECT(104,64), //bcp->offset
    142, //bcp->virtual_function_table_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_S1501C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1501C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1501C1[];
extern void _ZN7S1501C1D1Ev();
extern void _ZN7S1501C1D0Ev();
extern void _ZN7S1501C42v6Ev();
extern void _ZN7S1501C42v7Ev();
extern void _ZN7S1501C42v8Ev();
extern void _ZN7S1501C42v9Ev();
extern void _ZN7S1501C43v10Ev();
extern void _ZN7S1501C43v11Ev();
extern void _ZN7S1501C43v12Ev();
extern void _ZN7S1501C43v13Ev();
extern void _ZN7S1501C43v14Ev();
extern void _ZN7S1501C43v15Ev();
extern void _ZN7S1501C43v16Ev();
extern void _ZN7S1501C43v17Ev();
extern void _ZN7S1501C43v18Ev();
extern void _ZN7S1501C43v19Ev();
extern void _ZN7S1501C43v20Ev();
extern void _ZN7S1501C43v21Ev();
extern void _ZN7S1501C43v22Ev();
extern void _ZN7S1501C43v23Ev();
extern void _ZN7S1501C43v24Ev();
extern void _ZN7S1501C43v25Ev();
extern void _ZN7S1501C43v26Ev();
extern void _ZN7S1501C43v27Ev();
extern void _ZN7S1501C43v28Ev();
extern void _ZN7S1501C43v29Ev();
extern void _ZN7S1501C43v30Ev();
extern void _ZN7S1501C43v31Ev();
extern void _ZN7S1501C43v32Ev();
extern void _ZN7S1501C43v33Ev();
extern void _ZN7S1501C43v34Ev();
extern void _ZN7S1501C43v35Ev();
extern void _ZN7S1501C43v36Ev();
extern void _ZN7S1501C43v37Ev();
extern void _ZN7S1501C43v38Ev();
extern void _ZN7S1501C43v39Ev();
extern void _ZN7S1501C43v40Ev();
extern void _ZN7S1501C43v41Ev();
extern void _ZN7S1501C43v42Ev();
extern void _ZN7S1501C43v43Ev();
extern void _ZN7S1501C43v44Ev();
extern void _ZN7S1501C43v45Ev();
extern void _ZN7S1501C43v46Ev();
extern void _ZN7S1501C43v47Ev();
extern void _ZN7S1501C43v48Ev();
extern void _ZN7S1501C43v49Ev();
extern void _ZN7S1501C43v50Ev();
extern void _ZN7S1501C43v51Ev();
extern void _ZN7S1501C43v52Ev();
extern void _ZN7S1501C43v53Ev();
extern void _ZN7S1501C43v54Ev();
extern void _ZN7S1501C43v55Ev();
extern void _ZN7S1501C43v56Ev();
extern void _ZN7S1501C43v57Ev();
extern void _ZN7S1501C43v58Ev();
extern void _ZN7S1501C43v59Ev();
extern void _ZN7S1501C43v60Ev();
extern void _ZN7S1501C43v61Ev();
extern void _ZN7S1501C43v62Ev();
extern void _ZN7S1501C43v63Ev();
extern void _ZN7S1501C43v64Ev();
extern void _ZN7S1501C43v65Ev();
extern void _ZN7S1501C43v66Ev();
extern void _ZN7S1501C43v67Ev();
extern void _ZN7S1501C43v68Ev();
extern void _ZN7S1501C43v69Ev();
extern void _ZN7S1501C33v95Ev();
extern void _ZN7S1501C33v96Ev();
extern void _ZN7S1501C33v97Ev();
extern void _ZN7S1501C33v98Ev();
extern void _ZN7S1501C33v99Ev();
extern void _ZN7S1501C34v100Ev();
extern void _ZN7S1501C34v101Ev();
extern void _ZN7S1501C34v102Ev();
extern void _ZN7S1501C34v103Ev();
extern void _ZN7S1501C34v104Ev();
extern void _ZN7S1501C34v105Ev();
extern void _ZN7S1501C34v106Ev();
extern void _ZN7S1501C34v107Ev();
extern void _ZN7S1501C34v108Ev();
extern void _ZN7S1501C34v109Ev();
extern void _ZN7S1501C34v110Ev();
extern void _ZN7S1501C34v111Ev();
extern void _ZN7S1501C34v112Ev();
extern void _ZN7S1501C34v113Ev();
extern void _ZN7S1501C34v114Ev();
extern void _ZN7S1501C34v115Ev();
extern void _ZN7S1501C34v116Ev();
extern void _ZN7S1501C34v117Ev();
extern void _ZN7S1501C34v118Ev();
extern void _ZN7S1501C24v119Ev();
extern void _ZN7S1501C24v120Ev();
extern void _ZN7S1501C24v121Ev();
extern void _ZN7S1501C24v122Ev();
extern void _ZN7S1501C24v123Ev();
extern void _ZN7S1501C24v124Ev();
extern void _ZN7S1501C24v125Ev();
extern void _ZN7S1501C24v126Ev();
extern void _ZN7S1501C24v127Ev();
extern void _ZN7S1501C24v128Ev();
extern void _ZN7S1501C24v129Ev();
extern void _ZN7S1501C24v130Ev();
extern void _ZN7S1501C24v131Ev();
extern void _ZN7S1501C24v132Ev();
extern void _ZN7S1501C24v133Ev();
extern void _ZN7S1501C24v134Ev();
extern void _ZN7S1501C24v135Ev();
extern void _ZN7S1501C24v136Ev();
extern void _ZN7S1501C24v137Ev();
extern void _ZN7S1501C24v138Ev();
extern void _ZN7S1501C24v139Ev();
extern void _ZN7S1501C24v140Ev();
extern void _ZN7S1501C24v141Ev();
extern void _ZN7S1501C24v142Ev();
extern void _ZN7S1501C24v143Ev();
extern void _ZN7S1501C24v144Ev();
extern void _ZN7S1501C24v145Ev();
extern void _ZN7S1501C12v1Ev();
extern void _ZN7S1501C12v2Ev();
extern void _ZN7S1501C12v3Ev();
extern void _ZN7S1501C12v4Ev();
extern void _ZN7S1501C12v5Ev();
extern void _ZN7S1501C63v70Ev();
extern void _ZN7S1501C63v71Ev();
extern void _ZN7S1501C63v72Ev();
extern void _ZN7S1501C63v73Ev();
extern void _ZN7S1501C63v74Ev();
extern void _ZN7S1501C63v75Ev();
extern void _ZN7S1501C63v76Ev();
extern void _ZN7S1501C63v77Ev();
extern void _ZN7S1501C63v78Ev();
extern void _ZN7S1501C63v79Ev();
extern void _ZN7S1501C63v80Ev();
extern void _ZN7S1501C63v81Ev();
extern void _ZN7S1501C63v82Ev();
extern void _ZN7S1501C63v83Ev();
extern void _ZN7S1501C63v84Ev();
extern void _ZN7S1501C63v85Ev();
extern void _ZN7S1501C73v86Ev();
extern void _ZN7S1501C73v87Ev();
extern void _ZN7S1501C73v88Ev();
extern void _ZN7S1501C73v89Ev();
extern void _ZN7S1501C73v90Ev();
extern void _ZN7S1501C73v91Ev();
extern void _ZN7S1501C73v92Ev();
extern void _ZN7S1501C73v93Ev();
extern void _ZN7S1501C73v94Ev();
static  VTBL_ENTRY vtc_S1501C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1501C1[0]),
  (VTBL_ENTRY)&_ZN7S1501C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1501C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1501C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1501C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1501C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1501C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1501C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1501C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1501C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1501C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1501C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1501C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1501C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v119Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v120Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v121Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v122Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v123Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v124Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v125Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v126Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v127Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v128Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v129Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v130Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v131Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v132Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v144Ev,
  (VTBL_ENTRY)&_ZN7S1501C24v145Ev,
  (VTBL_ENTRY)&_ZN7S1501C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1501C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1501C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1501C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1501C12v5Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1501C1[0]),
  (VTBL_ENTRY)&_ZN7S1501C63v70Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v71Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v72Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v73Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v74Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v75Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v76Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v77Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v78Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v79Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v80Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v81Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v82Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v83Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1501C63v85Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1501C1[0]),
  (VTBL_ENTRY)&_ZN7S1501C73v86Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v87Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v88Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v89Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v90Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v91Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v92Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v93Ev,
  (VTBL_ENTRY)&_ZN7S1501C73v94Ev,
};
extern VTBL_ENTRY _ZTI7S1501C1[];
extern  VTBL_ENTRY _ZTV7S1501C1[];
Class_Descriptor cd_S1501C1 = {  "S1501C1", // class name
  bases_S1501C1, 5,
  &(vtc_S1501C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,116), // object size
  NSPAIRA(_ZTI7S1501C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1501C1),153, //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  S1500C4  {
  int s1500c4f0;
  __tsi64 s1500c4f1;
  void *s1500c4f2[4];
  int s1500c4f3[2];
  void *s1500c4f4;
  ::S79C8_nt s1500c4f5;
  void *s1500c4f6[2];
  virtual  ~S1500C4(); // _ZN7S1500C4D1Ev
  virtual void  v6(); // _ZN7S1500C42v6Ev
  virtual void  v7(); // _ZN7S1500C42v7Ev
  virtual void  v8(); // _ZN7S1500C42v8Ev
  virtual void  v9(); // _ZN7S1500C42v9Ev
  virtual void  v10(); // _ZN7S1500C43v10Ev
  virtual void  v11(); // _ZN7S1500C43v11Ev
  virtual void  v12(); // _ZN7S1500C43v12Ev
  virtual void  v13(); // _ZN7S1500C43v13Ev
  virtual void  v14(); // _ZN7S1500C43v14Ev
  virtual void  v15(); // _ZN7S1500C43v15Ev
  virtual void  v16(); // _ZN7S1500C43v16Ev
  virtual void  v17(); // _ZN7S1500C43v17Ev
  virtual void  v18(); // _ZN7S1500C43v18Ev
  virtual void  v19(); // _ZN7S1500C43v19Ev
  virtual void  v20(); // _ZN7S1500C43v20Ev
  virtual void  v21(); // _ZN7S1500C43v21Ev
  virtual void  v22(); // _ZN7S1500C43v22Ev
  virtual void  v23(); // _ZN7S1500C43v23Ev
  virtual void  v24(); // _ZN7S1500C43v24Ev
  virtual void  v25(); // _ZN7S1500C43v25Ev
  virtual void  v26(); // _ZN7S1500C43v26Ev
  virtual void  v27(); // _ZN7S1500C43v27Ev
  virtual void  v28(); // _ZN7S1500C43v28Ev
  virtual void  v29(); // _ZN7S1500C43v29Ev
  virtual void  v30(); // _ZN7S1500C43v30Ev
  virtual void  v31(); // _ZN7S1500C43v31Ev
  virtual void  v32(); // _ZN7S1500C43v32Ev
  virtual void  v33(); // _ZN7S1500C43v33Ev
  virtual void  v34(); // _ZN7S1500C43v34Ev
  virtual void  v35(); // _ZN7S1500C43v35Ev
  virtual void  v36(); // _ZN7S1500C43v36Ev
  virtual void  v37(); // _ZN7S1500C43v37Ev
  virtual void  v38(); // _ZN7S1500C43v38Ev
  virtual void  v39(); // _ZN7S1500C43v39Ev
  virtual void  v40(); // _ZN7S1500C43v40Ev
  virtual void  v41(); // _ZN7S1500C43v41Ev
  virtual void  v42(); // _ZN7S1500C43v42Ev
  virtual void  v43(); // _ZN7S1500C43v43Ev
  virtual void  v44(); // _ZN7S1500C43v44Ev
  virtual void  v45(); // _ZN7S1500C43v45Ev
  virtual void  v46(); // _ZN7S1500C43v46Ev
  virtual void  v47(); // _ZN7S1500C43v47Ev
  virtual void  v48(); // _ZN7S1500C43v48Ev
  virtual void  v49(); // _ZN7S1500C43v49Ev
  virtual void  v50(); // _ZN7S1500C43v50Ev
  virtual void  v51(); // _ZN7S1500C43v51Ev
  virtual void  v52(); // _ZN7S1500C43v52Ev
  virtual void  v53(); // _ZN7S1500C43v53Ev
  virtual void  v54(); // _ZN7S1500C43v54Ev
  virtual void  v55(); // _ZN7S1500C43v55Ev
  virtual void  v56(); // _ZN7S1500C43v56Ev
  virtual void  v57(); // _ZN7S1500C43v57Ev
  virtual void  v58(); // _ZN7S1500C43v58Ev
  virtual void  v59(); // _ZN7S1500C43v59Ev
  virtual void  v60(); // _ZN7S1500C43v60Ev
  virtual void  v61(); // _ZN7S1500C43v61Ev
  virtual void  v62(); // _ZN7S1500C43v62Ev
  virtual void  v63(); // _ZN7S1500C43v63Ev
  virtual void  v64(); // _ZN7S1500C43v64Ev
  virtual void  v65(); // _ZN7S1500C43v65Ev
  virtual void  v66(); // _ZN7S1500C43v66Ev
  virtual void  v67(); // _ZN7S1500C43v67Ev
  virtual void  v68(); // _ZN7S1500C43v68Ev
  virtual void  v69(); // _ZN7S1500C43v69Ev
  S1500C4(); // tgen
};
//SIG(-1 S1500C4) 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]}


 S1500C4 ::~S1500C4(){ note_dtor("S1500C4", this);}
void  S1500C4 ::v6(){vfunc_called(this, "_ZN7S1500C42v6Ev");}
void  S1500C4 ::v7(){vfunc_called(this, "_ZN7S1500C42v7Ev");}
void  S1500C4 ::v8(){vfunc_called(this, "_ZN7S1500C42v8Ev");}
void  S1500C4 ::v9(){vfunc_called(this, "_ZN7S1500C42v9Ev");}
void  S1500C4 ::v10(){vfunc_called(this, "_ZN7S1500C43v10Ev");}
void  S1500C4 ::v11(){vfunc_called(this, "_ZN7S1500C43v11Ev");}
void  S1500C4 ::v12(){vfunc_called(this, "_ZN7S1500C43v12Ev");}
void  S1500C4 ::v13(){vfunc_called(this, "_ZN7S1500C43v13Ev");}
void  S1500C4 ::v14(){vfunc_called(this, "_ZN7S1500C43v14Ev");}
void  S1500C4 ::v15(){vfunc_called(this, "_ZN7S1500C43v15Ev");}
void  S1500C4 ::v16(){vfunc_called(this, "_ZN7S1500C43v16Ev");}
void  S1500C4 ::v17(){vfunc_called(this, "_ZN7S1500C43v17Ev");}
void  S1500C4 ::v18(){vfunc_called(this, "_ZN7S1500C43v18Ev");}
void  S1500C4 ::v19(){vfunc_called(this, "_ZN7S1500C43v19Ev");}
void  S1500C4 ::v20(){vfunc_called(this, "_ZN7S1500C43v20Ev");}
void  S1500C4 ::v21(){vfunc_called(this, "_ZN7S1500C43v21Ev");}
void  S1500C4 ::v22(){vfunc_called(this, "_ZN7S1500C43v22Ev");}
void  S1500C4 ::v23(){vfunc_called(this, "_ZN7S1500C43v23Ev");}
void  S1500C4 ::v24(){vfunc_called(this, "_ZN7S1500C43v24Ev");}
void  S1500C4 ::v25(){vfunc_called(this, "_ZN7S1500C43v25Ev");}
void  S1500C4 ::v26(){vfunc_called(this, "_ZN7S1500C43v26Ev");}
void  S1500C4 ::v27(){vfunc_called(this, "_ZN7S1500C43v27Ev");}
void  S1500C4 ::v28(){vfunc_called(this, "_ZN7S1500C43v28Ev");}
void  S1500C4 ::v29(){vfunc_called(this, "_ZN7S1500C43v29Ev");}
void  S1500C4 ::v30(){vfunc_called(this, "_ZN7S1500C43v30Ev");}
void  S1500C4 ::v31(){vfunc_called(this, "_ZN7S1500C43v31Ev");}
void  S1500C4 ::v32(){vfunc_called(this, "_ZN7S1500C43v32Ev");}
void  S1500C4 ::v33(){vfunc_called(this, "_ZN7S1500C43v33Ev");}
void  S1500C4 ::v34(){vfunc_called(this, "_ZN7S1500C43v34Ev");}
void  S1500C4 ::v35(){vfunc_called(this, "_ZN7S1500C43v35Ev");}
void  S1500C4 ::v36(){vfunc_called(this, "_ZN7S1500C43v36Ev");}
void  S1500C4 ::v37(){vfunc_called(this, "_ZN7S1500C43v37Ev");}
void  S1500C4 ::v38(){vfunc_called(this, "_ZN7S1500C43v38Ev");}
void  S1500C4 ::v39(){vfunc_called(this, "_ZN7S1500C43v39Ev");}
void  S1500C4 ::v40(){vfunc_called(this, "_ZN7S1500C43v40Ev");}
void  S1500C4 ::v41(){vfunc_called(this, "_ZN7S1500C43v41Ev");}
void  S1500C4 ::v42(){vfunc_called(this, "_ZN7S1500C43v42Ev");}
void  S1500C4 ::v43(){vfunc_called(this, "_ZN7S1500C43v43Ev");}
void  S1500C4 ::v44(){vfunc_called(this, "_ZN7S1500C43v44Ev");}
void  S1500C4 ::v45(){vfunc_called(this, "_ZN7S1500C43v45Ev");}
void  S1500C4 ::v46(){vfunc_called(this, "_ZN7S1500C43v46Ev");}
void  S1500C4 ::v47(){vfunc_called(this, "_ZN7S1500C43v47Ev");}
void  S1500C4 ::v48(){vfunc_called(this, "_ZN7S1500C43v48Ev");}
void  S1500C4 ::v49(){vfunc_called(this, "_ZN7S1500C43v49Ev");}
void  S1500C4 ::v50(){vfunc_called(this, "_ZN7S1500C43v50Ev");}
void  S1500C4 ::v51(){vfunc_called(this, "_ZN7S1500C43v51Ev");}
void  S1500C4 ::v52(){vfunc_called(this, "_ZN7S1500C43v52Ev");}
void  S1500C4 ::v53(){vfunc_called(this, "_ZN7S1500C43v53Ev");}
void  S1500C4 ::v54(){vfunc_called(this, "_ZN7S1500C43v54Ev");}
void  S1500C4 ::v55(){vfunc_called(this, "_ZN7S1500C43v55Ev");}
void  S1500C4 ::v56(){vfunc_called(this, "_ZN7S1500C43v56Ev");}
void  S1500C4 ::v57(){vfunc_called(this, "_ZN7S1500C43v57Ev");}
void  S1500C4 ::v58(){vfunc_called(this, "_ZN7S1500C43v58Ev");}
void  S1500C4 ::v59(){vfunc_called(this, "_ZN7S1500C43v59Ev");}
void  S1500C4 ::v60(){vfunc_called(this, "_ZN7S1500C43v60Ev");}
void  S1500C4 ::v61(){vfunc_called(this, "_ZN7S1500C43v61Ev");}
void  S1500C4 ::v62(){vfunc_called(this, "_ZN7S1500C43v62Ev");}
void  S1500C4 ::v63(){vfunc_called(this, "_ZN7S1500C43v63Ev");}
void  S1500C4 ::v64(){vfunc_called(this, "_ZN7S1500C43v64Ev");}
void  S1500C4 ::v65(){vfunc_called(this, "_ZN7S1500C43v65Ev");}
void  S1500C4 ::v66(){vfunc_called(this, "_ZN7S1500C43v66Ev");}
void  S1500C4 ::v67(){vfunc_called(this, "_ZN7S1500C43v67Ev");}
void  S1500C4 ::v68(){vfunc_called(this, "_ZN7S1500C43v68Ev");}
void  S1500C4 ::v69(){vfunc_called(this, "_ZN7S1500C43v69Ev");}
S1500C4 ::S1500C4(){ note_ctor("S1500C4", this);} // tgen

static void Test_S1500C4()
{
  extern Class_Descriptor cd_S1500C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1500C4, buf);
    S1500C4 *dp, &lv = *(dp=new (buf) S1500C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1500C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1500C4)");
    check_field_offset(lv, s1500c4f0, ABISELECT(8,4), "S1500C4.s1500c4f0");
    check_field_offset(lv, s1500c4f1, ABISELECT(16,8), "S1500C4.s1500c4f1");
    check_field_offset(lv, s1500c4f2, ABISELECT(24,16), "S1500C4.s1500c4f2");
    check_field_offset(lv, s1500c4f3, ABISELECT(56,32), "S1500C4.s1500c4f3");
    check_field_offset(lv, s1500c4f4, ABISELECT(64,40), "S1500C4.s1500c4f4");
    check_field_offset(lv, s1500c4f5, ABISELECT(72,44), "S1500C4.s1500c4f5");
    check_field_offset(lv, s1500c4f6, ABISELECT(80,52), "S1500C4.s1500c4f6");
    test_class_info(&lv, &cd_S1500C4);
    dp->~S1500C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1500C4(Test_S1500C4, "S1500C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1500C4C1Ev();
extern void _ZN7S1500C4D1Ev();
Name_Map name_map_S1500C4[] = {
  NSPAIR(_ZN7S1500C4C1Ev),
  NSPAIR(_ZN7S1500C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1500C4[];
extern void _ZN7S1500C4D1Ev();
extern void _ZN7S1500C4D0Ev();
extern void _ZN7S1500C42v6Ev();
extern void _ZN7S1500C42v7Ev();
extern void _ZN7S1500C42v8Ev();
extern void _ZN7S1500C42v9Ev();
extern void _ZN7S1500C43v10Ev();
extern void _ZN7S1500C43v11Ev();
extern void _ZN7S1500C43v12Ev();
extern void _ZN7S1500C43v13Ev();
extern void _ZN7S1500C43v14Ev();
extern void _ZN7S1500C43v15Ev();
extern void _ZN7S1500C43v16Ev();
extern void _ZN7S1500C43v17Ev();
extern void _ZN7S1500C43v18Ev();
extern void _ZN7S1500C43v19Ev();
extern void _ZN7S1500C43v20Ev();
extern void _ZN7S1500C43v21Ev();
extern void _ZN7S1500C43v22Ev();
extern void _ZN7S1500C43v23Ev();
extern void _ZN7S1500C43v24Ev();
extern void _ZN7S1500C43v25Ev();
extern void _ZN7S1500C43v26Ev();
extern void _ZN7S1500C43v27Ev();
extern void _ZN7S1500C43v28Ev();
extern void _ZN7S1500C43v29Ev();
extern void _ZN7S1500C43v30Ev();
extern void _ZN7S1500C43v31Ev();
extern void _ZN7S1500C43v32Ev();
extern void _ZN7S1500C43v33Ev();
extern void _ZN7S1500C43v34Ev();
extern void _ZN7S1500C43v35Ev();
extern void _ZN7S1500C43v36Ev();
extern void _ZN7S1500C43v37Ev();
extern void _ZN7S1500C43v38Ev();
extern void _ZN7S1500C43v39Ev();
extern void _ZN7S1500C43v40Ev();
extern void _ZN7S1500C43v41Ev();
extern void _ZN7S1500C43v42Ev();
extern void _ZN7S1500C43v43Ev();
extern void _ZN7S1500C43v44Ev();
extern void _ZN7S1500C43v45Ev();
extern void _ZN7S1500C43v46Ev();
extern void _ZN7S1500C43v47Ev();
extern void _ZN7S1500C43v48Ev();
extern void _ZN7S1500C43v49Ev();
extern void _ZN7S1500C43v50Ev();
extern void _ZN7S1500C43v51Ev();
extern void _ZN7S1500C43v52Ev();
extern void _ZN7S1500C43v53Ev();
extern void _ZN7S1500C43v54Ev();
extern void _ZN7S1500C43v55Ev();
extern void _ZN7S1500C43v56Ev();
extern void _ZN7S1500C43v57Ev();
extern void _ZN7S1500C43v58Ev();
extern void _ZN7S1500C43v59Ev();
extern void _ZN7S1500C43v60Ev();
extern void _ZN7S1500C43v61Ev();
extern void _ZN7S1500C43v62Ev();
extern void _ZN7S1500C43v63Ev();
extern void _ZN7S1500C43v64Ev();
extern void _ZN7S1500C43v65Ev();
extern void _ZN7S1500C43v66Ev();
extern void _ZN7S1500C43v67Ev();
extern void _ZN7S1500C43v68Ev();
extern void _ZN7S1500C43v69Ev();
static  VTBL_ENTRY vtc_S1500C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1500C4[0]),
  (VTBL_ENTRY)&_ZN7S1500C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1500C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1500C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1500C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1500C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1500C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v69Ev,
};
extern VTBL_ENTRY _ZTI7S1500C4[];
extern  VTBL_ENTRY _ZTV7S1500C4[];
Class_Descriptor cd_S1500C4 = {  "S1500C4", // class name
  0,0,//no base classes
  &(vtc_S1500C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1500C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1500C4),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  S1500C6  {
  virtual void  v70(); // _ZN7S1500C63v70Ev
  virtual void  v71(); // _ZN7S1500C63v71Ev
  virtual void  v72(); // _ZN7S1500C63v72Ev
  virtual void  v73(); // _ZN7S1500C63v73Ev
  virtual void  v74(); // _ZN7S1500C63v74Ev
  virtual void  v75(); // _ZN7S1500C63v75Ev
  virtual void  v76(); // _ZN7S1500C63v76Ev
  virtual void  v77(); // _ZN7S1500C63v77Ev
  virtual void  v78(); // _ZN7S1500C63v78Ev
  virtual void  v79(); // _ZN7S1500C63v79Ev
  virtual void  v80(); // _ZN7S1500C63v80Ev
  virtual void  v81(); // _ZN7S1500C63v81Ev
  virtual void  v82(); // _ZN7S1500C63v82Ev
  virtual void  v83(); // _ZN7S1500C63v83Ev
  virtual void  v84(); // _ZN7S1500C63v84Ev
  virtual void  v85(); // _ZN7S1500C63v85Ev
  ~S1500C6(); // tgen
  S1500C6(); // tgen
};
//SIG(-1 S1500C6) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16}


void  S1500C6 ::v70(){vfunc_called(this, "_ZN7S1500C63v70Ev");}
void  S1500C6 ::v71(){vfunc_called(this, "_ZN7S1500C63v71Ev");}
void  S1500C6 ::v72(){vfunc_called(this, "_ZN7S1500C63v72Ev");}
void  S1500C6 ::v73(){vfunc_called(this, "_ZN7S1500C63v73Ev");}
void  S1500C6 ::v74(){vfunc_called(this, "_ZN7S1500C63v74Ev");}
void  S1500C6 ::v75(){vfunc_called(this, "_ZN7S1500C63v75Ev");}
void  S1500C6 ::v76(){vfunc_called(this, "_ZN7S1500C63v76Ev");}
void  S1500C6 ::v77(){vfunc_called(this, "_ZN7S1500C63v77Ev");}
void  S1500C6 ::v78(){vfunc_called(this, "_ZN7S1500C63v78Ev");}
void  S1500C6 ::v79(){vfunc_called(this, "_ZN7S1500C63v79Ev");}
void  S1500C6 ::v80(){vfunc_called(this, "_ZN7S1500C63v80Ev");}
void  S1500C6 ::v81(){vfunc_called(this, "_ZN7S1500C63v81Ev");}
void  S1500C6 ::v82(){vfunc_called(this, "_ZN7S1500C63v82Ev");}
void  S1500C6 ::v83(){vfunc_called(this, "_ZN7S1500C63v83Ev");}
void  S1500C6 ::v84(){vfunc_called(this, "_ZN7S1500C63v84Ev");}
void  S1500C6 ::v85(){vfunc_called(this, "_ZN7S1500C63v85Ev");}
S1500C6 ::~S1500C6(){ note_dtor("S1500C6", this);} // tgen
S1500C6 ::S1500C6(){ note_ctor("S1500C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1500C6C1Ev();
extern void _ZN7S1500C6D1Ev();
Name_Map name_map_S1500C6[] = {
  NSPAIR(_ZN7S1500C6C1Ev),
  NSPAIR(_ZN7S1500C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1500C6[];
extern void _ZN7S1500C63v70Ev();
extern void _ZN7S1500C63v71Ev();
extern void _ZN7S1500C63v72Ev();
extern void _ZN7S1500C63v73Ev();
extern void _ZN7S1500C63v74Ev();
extern void _ZN7S1500C63v75Ev();
extern void _ZN7S1500C63v76Ev();
extern void _ZN7S1500C63v77Ev();
extern void _ZN7S1500C63v78Ev();
extern void _ZN7S1500C63v79Ev();
extern void _ZN7S1500C63v80Ev();
extern void _ZN7S1500C63v81Ev();
extern void _ZN7S1500C63v82Ev();
extern void _ZN7S1500C63v83Ev();
extern void _ZN7S1500C63v84Ev();
extern void _ZN7S1500C63v85Ev();
static  VTBL_ENTRY vtc_S1500C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1500C6[0]),
  (VTBL_ENTRY)&_ZN7S1500C63v70Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v71Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v72Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v73Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v74Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v75Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v76Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v77Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v78Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v79Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v80Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v81Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v82Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v83Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v85Ev,
};
extern VTBL_ENTRY _ZTI7S1500C6[];
extern  VTBL_ENTRY _ZTV7S1500C6[];
Class_Descriptor cd_S1500C6 = {  "S1500C6", // class name
  0,0,//no base classes
  &(vtc_S1500C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1500C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1500C6),18, //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  S1500C7  {
  virtual void  v86(); // _ZN7S1500C73v86Ev
  virtual void  v87(); // _ZN7S1500C73v87Ev
  virtual void  v88(); // _ZN7S1500C73v88Ev
  virtual void  v89(); // _ZN7S1500C73v89Ev
  virtual void  v90(); // _ZN7S1500C73v90Ev
  virtual void  v91(); // _ZN7S1500C73v91Ev
  virtual void  v92(); // _ZN7S1500C73v92Ev
  virtual void  v93(); // _ZN7S1500C73v93Ev
  virtual void  v94(); // _ZN7S1500C73v94Ev
  ~S1500C7(); // tgen
  S1500C7(); // tgen
};
//SIG(-1 S1500C7) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S1500C7 ::v86(){vfunc_called(this, "_ZN7S1500C73v86Ev");}
void  S1500C7 ::v87(){vfunc_called(this, "_ZN7S1500C73v87Ev");}
void  S1500C7 ::v88(){vfunc_called(this, "_ZN7S1500C73v88Ev");}
void  S1500C7 ::v89(){vfunc_called(this, "_ZN7S1500C73v89Ev");}
void  S1500C7 ::v90(){vfunc_called(this, "_ZN7S1500C73v90Ev");}
void  S1500C7 ::v91(){vfunc_called(this, "_ZN7S1500C73v91Ev");}
void  S1500C7 ::v92(){vfunc_called(this, "_ZN7S1500C73v92Ev");}
void  S1500C7 ::v93(){vfunc_called(this, "_ZN7S1500C73v93Ev");}
void  S1500C7 ::v94(){vfunc_called(this, "_ZN7S1500C73v94Ev");}
S1500C7 ::~S1500C7(){ note_dtor("S1500C7", this);} // tgen
S1500C7 ::S1500C7(){ note_ctor("S1500C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1500C7C1Ev();
extern void _ZN7S1500C7D1Ev();
Name_Map name_map_S1500C7[] = {
  NSPAIR(_ZN7S1500C7C1Ev),
  NSPAIR(_ZN7S1500C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1500C7[];
extern void _ZN7S1500C73v86Ev();
extern void _ZN7S1500C73v87Ev();
extern void _ZN7S1500C73v88Ev();
extern void _ZN7S1500C73v89Ev();
extern void _ZN7S1500C73v90Ev();
extern void _ZN7S1500C73v91Ev();
extern void _ZN7S1500C73v92Ev();
extern void _ZN7S1500C73v93Ev();
extern void _ZN7S1500C73v94Ev();
static  VTBL_ENTRY vtc_S1500C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1500C7[0]),
  (VTBL_ENTRY)&_ZN7S1500C73v86Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v87Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v88Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v89Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v90Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v91Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v92Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v93Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v94Ev,
};
extern VTBL_ENTRY _ZTI7S1500C7[];
extern  VTBL_ENTRY _ZTV7S1500C7[];
Class_Descriptor cd_S1500C7 = {  "S1500C7", // class name
  0,0,//no base classes
  &(vtc_S1500C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1500C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1500C7),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  S1500C3  : S1500C4 , S1500C6 , S1500C7 {
  void *s1500c3f0;
  ::S79C39_nt s1500c3f1;
  unsigned int s1500c3f2:1;
  unsigned int s1500c3f3:1;
  unsigned int s1500c3f4:1;
  unsigned int s1500c3f5:1;
  virtual  ~S1500C3(); // _ZN7S1500C3D1Ev
  virtual void  v95(); // _ZN7S1500C33v95Ev
  virtual void  v96(); // _ZN7S1500C33v96Ev
  virtual void  v97(); // _ZN7S1500C33v97Ev
  virtual void  v98(); // _ZN7S1500C33v98Ev
  virtual void  v99(); // _ZN7S1500C33v99Ev
  virtual void  v100(); // _ZN7S1500C34v100Ev
  virtual void  v101(); // _ZN7S1500C34v101Ev
  virtual void  v102(); // _ZN7S1500C34v102Ev
  virtual void  v103(); // _ZN7S1500C34v103Ev
  virtual void  v104(); // _ZN7S1500C34v104Ev
  virtual void  v105(); // _ZN7S1500C34v105Ev
  virtual void  v106(); // _ZN7S1500C34v106Ev
  virtual void  v107(); // _ZN7S1500C34v107Ev
  virtual void  v108(); // _ZN7S1500C34v108Ev
  virtual void  v109(); // _ZN7S1500C34v109Ev
  virtual void  v110(); // _ZN7S1500C34v110Ev
  virtual void  v111(); // _ZN7S1500C34v111Ev
  virtual void  v112(); // _ZN7S1500C34v112Ev
  virtual void  v113(); // _ZN7S1500C34v113Ev
  virtual void  v114(); // _ZN7S1500C34v114Ev
  virtual void  v115(); // _ZN7S1500C34v115Ev
  virtual void  v116(); // _ZN7S1500C34v116Ev
  virtual void  v117(); // _ZN7S1500C34v117Ev
  virtual void  v118(); // _ZN7S1500C34v118Ev
  S1500C3(); // tgen
};
//SIG(-1 S1500C3) C1{ BC2{ vd 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 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} BC4{ v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104} BC5{ v105 v106 v107 v108 v109 v110 v111 v112 v113} 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 Fp FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1}


 S1500C3 ::~S1500C3(){ note_dtor("S1500C3", this);}
void  S1500C3 ::v95(){vfunc_called(this, "_ZN7S1500C33v95Ev");}
void  S1500C3 ::v96(){vfunc_called(this, "_ZN7S1500C33v96Ev");}
void  S1500C3 ::v97(){vfunc_called(this, "_ZN7S1500C33v97Ev");}
void  S1500C3 ::v98(){vfunc_called(this, "_ZN7S1500C33v98Ev");}
void  S1500C3 ::v99(){vfunc_called(this, "_ZN7S1500C33v99Ev");}
void  S1500C3 ::v100(){vfunc_called(this, "_ZN7S1500C34v100Ev");}
void  S1500C3 ::v101(){vfunc_called(this, "_ZN7S1500C34v101Ev");}
void  S1500C3 ::v102(){vfunc_called(this, "_ZN7S1500C34v102Ev");}
void  S1500C3 ::v103(){vfunc_called(this, "_ZN7S1500C34v103Ev");}
void  S1500C3 ::v104(){vfunc_called(this, "_ZN7S1500C34v104Ev");}
void  S1500C3 ::v105(){vfunc_called(this, "_ZN7S1500C34v105Ev");}
void  S1500C3 ::v106(){vfunc_called(this, "_ZN7S1500C34v106Ev");}
void  S1500C3 ::v107(){vfunc_called(this, "_ZN7S1500C34v107Ev");}
void  S1500C3 ::v108(){vfunc_called(this, "_ZN7S1500C34v108Ev");}
void  S1500C3 ::v109(){vfunc_called(this, "_ZN7S1500C34v109Ev");}
void  S1500C3 ::v110(){vfunc_called(this, "_ZN7S1500C34v110Ev");}
void  S1500C3 ::v111(){vfunc_called(this, "_ZN7S1500C34v111Ev");}
void  S1500C3 ::v112(){vfunc_called(this, "_ZN7S1500C34v112Ev");}
void  S1500C3 ::v113(){vfunc_called(this, "_ZN7S1500C34v113Ev");}
void  S1500C3 ::v114(){vfunc_called(this, "_ZN7S1500C34v114Ev");}
void  S1500C3 ::v115(){vfunc_called(this, "_ZN7S1500C34v115Ev");}
void  S1500C3 ::v116(){vfunc_called(this, "_ZN7S1500C34v116Ev");}
void  S1500C3 ::v117(){vfunc_called(this, "_ZN7S1500C34v117Ev");}
void  S1500C3 ::v118(){vfunc_called(this, "_ZN7S1500C34v118Ev");}
S1500C3 ::S1500C3(){ note_ctor("S1500C3", this);} // tgen

static void Test_S1500C3()
{
  extern Class_Descriptor cd_S1500C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,23)];
    init_test(&cd_S1500C3, buf);
    S1500C3 *dp, &lv = *(dp=new (buf) S1500C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S1500C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1500C3)");
    check_base_class_offset(lv, (S1500C4*), 0, "S1500C3");
    check_base_class_offset(lv, (S1500C6*), ABISELECT(96,60), "S1500C3");
    check_base_class_offset(lv, (S1500C7*), ABISELECT(104,64), "S1500C3");
    check_field_offset(lv, s1500c3f0, ABISELECT(112,68), "S1500C3.s1500c3f0");
    check_field_offset(lv, s1500c3f1, ABISELECT(120,72), "S1500C3.s1500c3f1");
    set_bf_and_test(lv, s1500c3f2, ABISELECT(136,84), 0, 1, 1, "S1500C3");
    set_bf_and_test(lv, s1500c3f3, ABISELECT(136,84), 1, 1, 1, "S1500C3");
    set_bf_and_test(lv, s1500c3f4, ABISELECT(136,84), 2, 1, 1, "S1500C3");
    set_bf_and_test(lv, s1500c3f5, ABISELECT(136,84), 3, 1, 1, "S1500C3");
    test_class_info(&lv, &cd_S1500C3);
    dp->~S1500C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1500C3(Test_S1500C3, "S1500C3", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN7S1500C3C1Ev();
extern void _ZN7S1500C3D1Ev();
Name_Map name_map_S1500C3[] = {
  NSPAIR(_ZN7S1500C3C1Ev),
  NSPAIR(_ZN7S1500C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1500C4;
extern VTBL_ENTRY _ZTI7S1500C4[];
extern  VTBL_ENTRY _ZTV7S1500C4[];
extern Class_Descriptor cd_S1500C6;
extern VTBL_ENTRY _ZTI7S1500C6[];
extern  VTBL_ENTRY _ZTV7S1500C6[];
extern Class_Descriptor cd_S1500C7;
extern VTBL_ENTRY _ZTI7S1500C7[];
extern  VTBL_ENTRY _ZTV7S1500C7[];
static Base_Class bases_S1500C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1500C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1500C6,    ABISELECT(96,60), //bcp->offset
    92, //bcp->virtual_function_table_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_S1500C7,    ABISELECT(104,64), //bcp->offset
    110, //bcp->virtual_function_table_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 _ZTI7S1500C3[];
extern void _ZN7S1500C3D1Ev();
extern void _ZN7S1500C3D0Ev();
extern void _ZN7S1500C42v6Ev();
extern void _ZN7S1500C42v7Ev();
extern void _ZN7S1500C42v8Ev();
extern void _ZN7S1500C42v9Ev();
extern void _ZN7S1500C43v10Ev();
extern void _ZN7S1500C43v11Ev();
extern void _ZN7S1500C43v12Ev();
extern void _ZN7S1500C43v13Ev();
extern void _ZN7S1500C43v14Ev();
extern void _ZN7S1500C43v15Ev();
extern void _ZN7S1500C43v16Ev();
extern void _ZN7S1500C43v17Ev();
extern void _ZN7S1500C43v18Ev();
extern void _ZN7S1500C43v19Ev();
extern void _ZN7S1500C43v20Ev();
extern void _ZN7S1500C43v21Ev();
extern void _ZN7S1500C43v22Ev();
extern void _ZN7S1500C43v23Ev();
extern void _ZN7S1500C43v24Ev();
extern void _ZN7S1500C43v25Ev();
extern void _ZN7S1500C43v26Ev();
extern void _ZN7S1500C43v27Ev();
extern void _ZN7S1500C43v28Ev();
extern void _ZN7S1500C43v29Ev();
extern void _ZN7S1500C43v30Ev();
extern void _ZN7S1500C43v31Ev();
extern void _ZN7S1500C43v32Ev();
extern void _ZN7S1500C43v33Ev();
extern void _ZN7S1500C43v34Ev();
extern void _ZN7S1500C43v35Ev();
extern void _ZN7S1500C43v36Ev();
extern void _ZN7S1500C43v37Ev();
extern void _ZN7S1500C43v38Ev();
extern void _ZN7S1500C43v39Ev();
extern void _ZN7S1500C43v40Ev();
extern void _ZN7S1500C43v41Ev();
extern void _ZN7S1500C43v42Ev();
extern void _ZN7S1500C43v43Ev();
extern void _ZN7S1500C43v44Ev();
extern void _ZN7S1500C43v45Ev();
extern void _ZN7S1500C43v46Ev();
extern void _ZN7S1500C43v47Ev();
extern void _ZN7S1500C43v48Ev();
extern void _ZN7S1500C43v49Ev();
extern void _ZN7S1500C43v50Ev();
extern void _ZN7S1500C43v51Ev();
extern void _ZN7S1500C43v52Ev();
extern void _ZN7S1500C43v53Ev();
extern void _ZN7S1500C43v54Ev();
extern void _ZN7S1500C43v55Ev();
extern void _ZN7S1500C43v56Ev();
extern void _ZN7S1500C43v57Ev();
extern void _ZN7S1500C43v58Ev();
extern void _ZN7S1500C43v59Ev();
extern void _ZN7S1500C43v60Ev();
extern void _ZN7S1500C43v61Ev();
extern void _ZN7S1500C43v62Ev();
extern void _ZN7S1500C43v63Ev();
extern void _ZN7S1500C43v64Ev();
extern void _ZN7S1500C43v65Ev();
extern void _ZN7S1500C43v66Ev();
extern void _ZN7S1500C43v67Ev();
extern void _ZN7S1500C43v68Ev();
extern void _ZN7S1500C43v69Ev();
extern void _ZN7S1500C33v95Ev();
extern void _ZN7S1500C33v96Ev();
extern void _ZN7S1500C33v97Ev();
extern void _ZN7S1500C33v98Ev();
extern void _ZN7S1500C33v99Ev();
extern void _ZN7S1500C34v100Ev();
extern void _ZN7S1500C34v101Ev();
extern void _ZN7S1500C34v102Ev();
extern void _ZN7S1500C34v103Ev();
extern void _ZN7S1500C34v104Ev();
extern void _ZN7S1500C34v105Ev();
extern void _ZN7S1500C34v106Ev();
extern void _ZN7S1500C34v107Ev();
extern void _ZN7S1500C34v108Ev();
extern void _ZN7S1500C34v109Ev();
extern void _ZN7S1500C34v110Ev();
extern void _ZN7S1500C34v111Ev();
extern void _ZN7S1500C34v112Ev();
extern void _ZN7S1500C34v113Ev();
extern void _ZN7S1500C34v114Ev();
extern void _ZN7S1500C34v115Ev();
extern void _ZN7S1500C34v116Ev();
extern void _ZN7S1500C34v117Ev();
extern void _ZN7S1500C34v118Ev();
extern void _ZN7S1500C63v70Ev();
extern void _ZN7S1500C63v71Ev();
extern void _ZN7S1500C63v72Ev();
extern void _ZN7S1500C63v73Ev();
extern void _ZN7S1500C63v74Ev();
extern void _ZN7S1500C63v75Ev();
extern void _ZN7S1500C63v76Ev();
extern void _ZN7S1500C63v77Ev();
extern void _ZN7S1500C63v78Ev();
extern void _ZN7S1500C63v79Ev();
extern void _ZN7S1500C63v80Ev();
extern void _ZN7S1500C63v81Ev();
extern void _ZN7S1500C63v82Ev();
extern void _ZN7S1500C63v83Ev();
extern void _ZN7S1500C63v84Ev();
extern void _ZN7S1500C63v85Ev();
extern void _ZN7S1500C73v86Ev();
extern void _ZN7S1500C73v87Ev();
extern void _ZN7S1500C73v88Ev();
extern void _ZN7S1500C73v89Ev();
extern void _ZN7S1500C73v90Ev();
extern void _ZN7S1500C73v91Ev();
extern void _ZN7S1500C73v92Ev();
extern void _ZN7S1500C73v93Ev();
extern void _ZN7S1500C73v94Ev();
static  VTBL_ENTRY vtc_S1500C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1500C3[0]),
  (VTBL_ENTRY)&_ZN7S1500C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1500C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1500C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1500C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1500C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1500C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1500C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1500C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1500C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1500C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1500C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v118Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1500C3[0]),
  (VTBL_ENTRY)&_ZN7S1500C63v70Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v71Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v72Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v73Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v74Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v75Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v76Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v77Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v78Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v79Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v80Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v81Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v82Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v83Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v85Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1500C3[0]),
  (VTBL_ENTRY)&_ZN7S1500C73v86Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v87Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v88Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v89Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v90Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v91Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v92Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v93Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v94Ev,
};
extern VTBL_ENTRY _ZTI7S1500C3[];
extern  VTBL_ENTRY _ZTV7S1500C3[];
Class_Descriptor cd_S1500C3 = {  "S1500C3", // class name
  bases_S1500C3, 3,
  &(vtc_S1500C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI7S1500C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1500C3),121, //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  S1500C2  : S1500C3 {
  ::S3262C11_nt s1500c2f0;
  int s1500c2f1;
  virtual  ~S1500C2(); // _ZN7S1500C2D1Ev
  virtual void  v119(); // _ZN7S1500C24v119Ev
  virtual void  v120(); // _ZN7S1500C24v120Ev
  virtual void  v121(); // _ZN7S1500C24v121Ev
  virtual void  v122(); // _ZN7S1500C24v122Ev
  virtual void  v123(); // _ZN7S1500C24v123Ev
  virtual void  v124(); // _ZN7S1500C24v124Ev
  virtual void  v125(); // _ZN7S1500C24v125Ev
  virtual void  v126(); // _ZN7S1500C24v126Ev
  virtual void  v127(); // _ZN7S1500C24v127Ev
  virtual void  v128(); // _ZN7S1500C24v128Ev
  virtual void  v129(); // _ZN7S1500C24v129Ev
  virtual void  v130(); // _ZN7S1500C24v130Ev
  virtual void  v131(); // _ZN7S1500C24v131Ev
  virtual void  v132(); // _ZN7S1500C24v132Ev
  virtual void  v133(); // _ZN7S1500C24v133Ev
  virtual void  v134(); // _ZN7S1500C24v134Ev
  virtual void  v135(); // _ZN7S1500C24v135Ev
  virtual void  v136(); // _ZN7S1500C24v136Ev
  virtual void  v137(); // _ZN7S1500C24v137Ev
  virtual void  v138(); // _ZN7S1500C24v138Ev
  virtual void  v139(); // _ZN7S1500C24v139Ev
  virtual void  v140(); // _ZN7S1500C24v140Ev
  virtual void  v141(); // _ZN7S1500C24v141Ev
  virtual void  v142(); // _ZN7S1500C24v142Ev
  virtual void  v143(); // _ZN7S1500C24v143Ev
  virtual void  v144(); // _ZN7S1500C24v144Ev
  S1500C2(); // tgen
};
//SIG(-1 S1500C2) C1{ BC2{ BC3{ vd 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 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} BC5{ v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106} BC6{ v107 v108 v109 v110 v111 v112 v113 v114 v115} vd v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 Fp FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1} 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 FC11{ m FC12{ BC13{ BC10}} Fc} Fi}


 S1500C2 ::~S1500C2(){ note_dtor("S1500C2", this);}
void  S1500C2 ::v119(){vfunc_called(this, "_ZN7S1500C24v119Ev");}
void  S1500C2 ::v120(){vfunc_called(this, "_ZN7S1500C24v120Ev");}
void  S1500C2 ::v121(){vfunc_called(this, "_ZN7S1500C24v121Ev");}
void  S1500C2 ::v122(){vfunc_called(this, "_ZN7S1500C24v122Ev");}
void  S1500C2 ::v123(){vfunc_called(this, "_ZN7S1500C24v123Ev");}
void  S1500C2 ::v124(){vfunc_called(this, "_ZN7S1500C24v124Ev");}
void  S1500C2 ::v125(){vfunc_called(this, "_ZN7S1500C24v125Ev");}
void  S1500C2 ::v126(){vfunc_called(this, "_ZN7S1500C24v126Ev");}
void  S1500C2 ::v127(){vfunc_called(this, "_ZN7S1500C24v127Ev");}
void  S1500C2 ::v128(){vfunc_called(this, "_ZN7S1500C24v128Ev");}
void  S1500C2 ::v129(){vfunc_called(this, "_ZN7S1500C24v129Ev");}
void  S1500C2 ::v130(){vfunc_called(this, "_ZN7S1500C24v130Ev");}
void  S1500C2 ::v131(){vfunc_called(this, "_ZN7S1500C24v131Ev");}
void  S1500C2 ::v132(){vfunc_called(this, "_ZN7S1500C24v132Ev");}
void  S1500C2 ::v133(){vfunc_called(this, "_ZN7S1500C24v133Ev");}
void  S1500C2 ::v134(){vfunc_called(this, "_ZN7S1500C24v134Ev");}
void  S1500C2 ::v135(){vfunc_called(this, "_ZN7S1500C24v135Ev");}
void  S1500C2 ::v136(){vfunc_called(this, "_ZN7S1500C24v136Ev");}
void  S1500C2 ::v137(){vfunc_called(this, "_ZN7S1500C24v137Ev");}
void  S1500C2 ::v138(){vfunc_called(this, "_ZN7S1500C24v138Ev");}
void  S1500C2 ::v139(){vfunc_called(this, "_ZN7S1500C24v139Ev");}
void  S1500C2 ::v140(){vfunc_called(this, "_ZN7S1500C24v140Ev");}
void  S1500C2 ::v141(){vfunc_called(this, "_ZN7S1500C24v141Ev");}
void  S1500C2 ::v142(){vfunc_called(this, "_ZN7S1500C24v142Ev");}
void  S1500C2 ::v143(){vfunc_called(this, "_ZN7S1500C24v143Ev");}
void  S1500C2 ::v144(){vfunc_called(this, "_ZN7S1500C24v144Ev");}
S1500C2 ::S1500C2(){ note_ctor("S1500C2", this);} // tgen

static void Test_S1500C2()
{
  extern Class_Descriptor cd_S1500C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,28)];
    init_test(&cd_S1500C2, buf);
    S1500C2 *dp, &lv = *(dp=new (buf) S1500C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,108), "sizeof(S1500C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1500C2)");
    check_base_class_offset(lv, (S1500C4*)(S1500C3*), 0, "S1500C2");
    check_base_class_offset(lv, (S1500C6*)(S1500C3*), ABISELECT(96,60), "S1500C2");
    check_base_class_offset(lv, (S1500C7*)(S1500C3*), ABISELECT(104,64), "S1500C2");
    check_base_class_offset(lv, (S1500C3*), 0, "S1500C2");
    check_field_offset(lv, s1500c2f0, ABISELECT(144,88), "S1500C2.s1500c2f0");
    check_field_offset(lv, s1500c2f1, ABISELECT(168,104), "S1500C2.s1500c2f1");
    test_class_info(&lv, &cd_S1500C2);
    dp->~S1500C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1500C2(Test_S1500C2, "S1500C2", ABISELECT(176,108));

#else // __cplusplus

extern void _ZN7S1500C2C1Ev();
extern void _ZN7S1500C2D1Ev();
Name_Map name_map_S1500C2[] = {
  NSPAIR(_ZN7S1500C2C1Ev),
  NSPAIR(_ZN7S1500C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1500C4;
extern VTBL_ENTRY _ZTI7S1500C4[];
extern  VTBL_ENTRY _ZTV7S1500C4[];
extern Class_Descriptor cd_S1500C6;
extern VTBL_ENTRY _ZTI7S1500C6[];
extern  VTBL_ENTRY _ZTV7S1500C6[];
extern Class_Descriptor cd_S1500C7;
extern VTBL_ENTRY _ZTI7S1500C7[];
extern  VTBL_ENTRY _ZTV7S1500C7[];
extern Class_Descriptor cd_S1500C3;
extern VTBL_ENTRY _ZTI7S1500C3[];
extern  VTBL_ENTRY _ZTV7S1500C3[];
static Base_Class bases_S1500C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1500C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1500C6,    ABISELECT(96,60), //bcp->offset
    118, //bcp->virtual_function_table_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_S1500C7,    ABISELECT(104,64), //bcp->offset
    136, //bcp->virtual_function_table_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_S1500C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1500C2[];
extern void _ZN7S1500C2D1Ev();
extern void _ZN7S1500C2D0Ev();
extern void _ZN7S1500C42v6Ev();
extern void _ZN7S1500C42v7Ev();
extern void _ZN7S1500C42v8Ev();
extern void _ZN7S1500C42v9Ev();
extern void _ZN7S1500C43v10Ev();
extern void _ZN7S1500C43v11Ev();
extern void _ZN7S1500C43v12Ev();
extern void _ZN7S1500C43v13Ev();
extern void _ZN7S1500C43v14Ev();
extern void _ZN7S1500C43v15Ev();
extern void _ZN7S1500C43v16Ev();
extern void _ZN7S1500C43v17Ev();
extern void _ZN7S1500C43v18Ev();
extern void _ZN7S1500C43v19Ev();
extern void _ZN7S1500C43v20Ev();
extern void _ZN7S1500C43v21Ev();
extern void _ZN7S1500C43v22Ev();
extern void _ZN7S1500C43v23Ev();
extern void _ZN7S1500C43v24Ev();
extern void _ZN7S1500C43v25Ev();
extern void _ZN7S1500C43v26Ev();
extern void _ZN7S1500C43v27Ev();
extern void _ZN7S1500C43v28Ev();
extern void _ZN7S1500C43v29Ev();
extern void _ZN7S1500C43v30Ev();
extern void _ZN7S1500C43v31Ev();
extern void _ZN7S1500C43v32Ev();
extern void _ZN7S1500C43v33Ev();
extern void _ZN7S1500C43v34Ev();
extern void _ZN7S1500C43v35Ev();
extern void _ZN7S1500C43v36Ev();
extern void _ZN7S1500C43v37Ev();
extern void _ZN7S1500C43v38Ev();
extern void _ZN7S1500C43v39Ev();
extern void _ZN7S1500C43v40Ev();
extern void _ZN7S1500C43v41Ev();
extern void _ZN7S1500C43v42Ev();
extern void _ZN7S1500C43v43Ev();
extern void _ZN7S1500C43v44Ev();
extern void _ZN7S1500C43v45Ev();
extern void _ZN7S1500C43v46Ev();
extern void _ZN7S1500C43v47Ev();
extern void _ZN7S1500C43v48Ev();
extern void _ZN7S1500C43v49Ev();
extern void _ZN7S1500C43v50Ev();
extern void _ZN7S1500C43v51Ev();
extern void _ZN7S1500C43v52Ev();
extern void _ZN7S1500C43v53Ev();
extern void _ZN7S1500C43v54Ev();
extern void _ZN7S1500C43v55Ev();
extern void _ZN7S1500C43v56Ev();
extern void _ZN7S1500C43v57Ev();
extern void _ZN7S1500C43v58Ev();
extern void _ZN7S1500C43v59Ev();
extern void _ZN7S1500C43v60Ev();
extern void _ZN7S1500C43v61Ev();
extern void _ZN7S1500C43v62Ev();
extern void _ZN7S1500C43v63Ev();
extern void _ZN7S1500C43v64Ev();
extern void _ZN7S1500C43v65Ev();
extern void _ZN7S1500C43v66Ev();
extern void _ZN7S1500C43v67Ev();
extern void _ZN7S1500C43v68Ev();
extern void _ZN7S1500C43v69Ev();
extern void _ZN7S1500C33v95Ev();
extern void _ZN7S1500C33v96Ev();
extern void _ZN7S1500C33v97Ev();
extern void _ZN7S1500C33v98Ev();
extern void _ZN7S1500C33v99Ev();
extern void _ZN7S1500C34v100Ev();
extern void _ZN7S1500C34v101Ev();
extern void _ZN7S1500C34v102Ev();
extern void _ZN7S1500C34v103Ev();
extern void _ZN7S1500C34v104Ev();
extern void _ZN7S1500C34v105Ev();
extern void _ZN7S1500C34v106Ev();
extern void _ZN7S1500C34v107Ev();
extern void _ZN7S1500C34v108Ev();
extern void _ZN7S1500C34v109Ev();
extern void _ZN7S1500C34v110Ev();
extern void _ZN7S1500C34v111Ev();
extern void _ZN7S1500C34v112Ev();
extern void _ZN7S1500C34v113Ev();
extern void _ZN7S1500C34v114Ev();
extern void _ZN7S1500C34v115Ev();
extern void _ZN7S1500C34v116Ev();
extern void _ZN7S1500C34v117Ev();
extern void _ZN7S1500C34v118Ev();
extern void _ZN7S1500C24v119Ev();
extern void _ZN7S1500C24v120Ev();
extern void _ZN7S1500C24v121Ev();
extern void _ZN7S1500C24v122Ev();
extern void _ZN7S1500C24v123Ev();
extern void _ZN7S1500C24v124Ev();
extern void _ZN7S1500C24v125Ev();
extern void _ZN7S1500C24v126Ev();
extern void _ZN7S1500C24v127Ev();
extern void _ZN7S1500C24v128Ev();
extern void _ZN7S1500C24v129Ev();
extern void _ZN7S1500C24v130Ev();
extern void _ZN7S1500C24v131Ev();
extern void _ZN7S1500C24v132Ev();
extern void _ZN7S1500C24v133Ev();
extern void _ZN7S1500C24v134Ev();
extern void _ZN7S1500C24v135Ev();
extern void _ZN7S1500C24v136Ev();
extern void _ZN7S1500C24v137Ev();
extern void _ZN7S1500C24v138Ev();
extern void _ZN7S1500C24v139Ev();
extern void _ZN7S1500C24v140Ev();
extern void _ZN7S1500C24v141Ev();
extern void _ZN7S1500C24v142Ev();
extern void _ZN7S1500C24v143Ev();
extern void _ZN7S1500C24v144Ev();
extern void _ZN7S1500C63v70Ev();
extern void _ZN7S1500C63v71Ev();
extern void _ZN7S1500C63v72Ev();
extern void _ZN7S1500C63v73Ev();
extern void _ZN7S1500C63v74Ev();
extern void _ZN7S1500C63v75Ev();
extern void _ZN7S1500C63v76Ev();
extern void _ZN7S1500C63v77Ev();
extern void _ZN7S1500C63v78Ev();
extern void _ZN7S1500C63v79Ev();
extern void _ZN7S1500C63v80Ev();
extern void _ZN7S1500C63v81Ev();
extern void _ZN7S1500C63v82Ev();
extern void _ZN7S1500C63v83Ev();
extern void _ZN7S1500C63v84Ev();
extern void _ZN7S1500C63v85Ev();
extern void _ZN7S1500C73v86Ev();
extern void _ZN7S1500C73v87Ev();
extern void _ZN7S1500C73v88Ev();
extern void _ZN7S1500C73v89Ev();
extern void _ZN7S1500C73v90Ev();
extern void _ZN7S1500C73v91Ev();
extern void _ZN7S1500C73v92Ev();
extern void _ZN7S1500C73v93Ev();
extern void _ZN7S1500C73v94Ev();
static  VTBL_ENTRY vtc_S1500C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1500C2[0]),
  (VTBL_ENTRY)&_ZN7S1500C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1500C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1500C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1500C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1500C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1500C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1500C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1500C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1500C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1500C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1500C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v119Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v120Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v121Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v122Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v123Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v124Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v125Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v126Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v127Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v128Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v129Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v130Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v131Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v132Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v144Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1500C2[0]),
  (VTBL_ENTRY)&_ZN7S1500C63v70Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v71Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v72Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v73Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v74Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v75Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v76Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v77Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v78Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v79Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v80Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v81Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v82Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v83Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v85Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1500C2[0]),
  (VTBL_ENTRY)&_ZN7S1500C73v86Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v87Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v88Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v89Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v90Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v91Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v92Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v93Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v94Ev,
};
extern VTBL_ENTRY _ZTI7S1500C2[];
extern  VTBL_ENTRY _ZTV7S1500C2[];
Class_Descriptor cd_S1500C2 = {  "S1500C2", // class name
  bases_S1500C2, 4,
  &(vtc_S1500C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,108), // object size
  NSPAIRA(_ZTI7S1500C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1500C2),147, //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  S1500C1  : S1500C2 {
  ::S79C8_nt s1500c1f0;
  virtual  ~S1500C1(); // _ZN7S1500C1D1Ev
  virtual void  v1(); // _ZN7S1500C12v1Ev
  virtual void  v2(); // _ZN7S1500C12v2Ev
  virtual void  v3(); // _ZN7S1500C12v3Ev
  virtual void  v4(); // _ZN7S1500C12v4Ev
  virtual void  v5(); // _ZN7S1500C12v5Ev
  S1500C1(); // tgen
};
//SIG(1 S1500C1) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} BC6{ v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85} BC7{ v86 v87 v88 v89 v90 v91 v92 v93 v94} vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 Fp FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1} vd 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 FC12{ m FC13{ BC14{ BC11}} Fc} Fi} vd v1 v2 v3 v4 v5 FC5}


 S1500C1 ::~S1500C1(){ note_dtor("S1500C1", this);}
void  S1500C1 ::v1(){vfunc_called(this, "_ZN7S1500C12v1Ev");}
void  S1500C1 ::v2(){vfunc_called(this, "_ZN7S1500C12v2Ev");}
void  S1500C1 ::v3(){vfunc_called(this, "_ZN7S1500C12v3Ev");}
void  S1500C1 ::v4(){vfunc_called(this, "_ZN7S1500C12v4Ev");}
void  S1500C1 ::v5(){vfunc_called(this, "_ZN7S1500C12v5Ev");}
S1500C1 ::S1500C1(){ note_ctor("S1500C1", this);} // tgen

static void Test_S1500C1()
{
  extern Class_Descriptor cd_S1500C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,30)];
    init_test(&cd_S1500C1, buf);
    S1500C1 *dp, &lv = *(dp=new (buf) S1500C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,116), "sizeof(S1500C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1500C1)");
    check_base_class_offset(lv, (S1500C4*)(S1500C3*)(S1500C2*), 0, "S1500C1");
    check_base_class_offset(lv, (S1500C6*)(S1500C3*)(S1500C2*), ABISELECT(96,60), "S1500C1");
    check_base_class_offset(lv, (S1500C7*)(S1500C3*)(S1500C2*), ABISELECT(104,64), "S1500C1");
    check_base_class_offset(lv, (S1500C3*)(S1500C2*), 0, "S1500C1");
    check_base_class_offset(lv, (S1500C2*), 0, "S1500C1");
    check_field_offset(lv, s1500c1f0, ABISELECT(172,108), "S1500C1.s1500c1f0");
    test_class_info(&lv, &cd_S1500C1);
    dp->~S1500C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1500C1(Test_S1500C1, "S1500C1", ABISELECT(184,116));

#else // __cplusplus

extern void _ZN7S1500C1C1Ev();
extern void _ZN7S1500C1D1Ev();
Name_Map name_map_S1500C1[] = {
  NSPAIR(_ZN7S1500C1C1Ev),
  NSPAIR(_ZN7S1500C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1500C4;
extern VTBL_ENTRY _ZTI7S1500C4[];
extern  VTBL_ENTRY _ZTV7S1500C4[];
extern Class_Descriptor cd_S1500C6;
extern VTBL_ENTRY _ZTI7S1500C6[];
extern  VTBL_ENTRY _ZTV7S1500C6[];
extern Class_Descriptor cd_S1500C7;
extern VTBL_ENTRY _ZTI7S1500C7[];
extern  VTBL_ENTRY _ZTV7S1500C7[];
extern Class_Descriptor cd_S1500C3;
extern VTBL_ENTRY _ZTI7S1500C3[];
extern  VTBL_ENTRY _ZTV7S1500C3[];
extern Class_Descriptor cd_S1500C2;
extern VTBL_ENTRY _ZTI7S1500C2[];
extern  VTBL_ENTRY _ZTV7S1500C2[];
static Base_Class bases_S1500C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1500C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1500C6,    ABISELECT(96,60), //bcp->offset
    123, //bcp->virtual_function_table_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_S1500C7,    ABISELECT(104,64), //bcp->offset
    141, //bcp->virtual_function_table_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_S1500C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1500C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1500C1[];
extern void _ZN7S1500C1D1Ev();
extern void _ZN7S1500C1D0Ev();
extern void _ZN7S1500C42v6Ev();
extern void _ZN7S1500C42v7Ev();
extern void _ZN7S1500C42v8Ev();
extern void _ZN7S1500C42v9Ev();
extern void _ZN7S1500C43v10Ev();
extern void _ZN7S1500C43v11Ev();
extern void _ZN7S1500C43v12Ev();
extern void _ZN7S1500C43v13Ev();
extern void _ZN7S1500C43v14Ev();
extern void _ZN7S1500C43v15Ev();
extern void _ZN7S1500C43v16Ev();
extern void _ZN7S1500C43v17Ev();
extern void _ZN7S1500C43v18Ev();
extern void _ZN7S1500C43v19Ev();
extern void _ZN7S1500C43v20Ev();
extern void _ZN7S1500C43v21Ev();
extern void _ZN7S1500C43v22Ev();
extern void _ZN7S1500C43v23Ev();
extern void _ZN7S1500C43v24Ev();
extern void _ZN7S1500C43v25Ev();
extern void _ZN7S1500C43v26Ev();
extern void _ZN7S1500C43v27Ev();
extern void _ZN7S1500C43v28Ev();
extern void _ZN7S1500C43v29Ev();
extern void _ZN7S1500C43v30Ev();
extern void _ZN7S1500C43v31Ev();
extern void _ZN7S1500C43v32Ev();
extern void _ZN7S1500C43v33Ev();
extern void _ZN7S1500C43v34Ev();
extern void _ZN7S1500C43v35Ev();
extern void _ZN7S1500C43v36Ev();
extern void _ZN7S1500C43v37Ev();
extern void _ZN7S1500C43v38Ev();
extern void _ZN7S1500C43v39Ev();
extern void _ZN7S1500C43v40Ev();
extern void _ZN7S1500C43v41Ev();
extern void _ZN7S1500C43v42Ev();
extern void _ZN7S1500C43v43Ev();
extern void _ZN7S1500C43v44Ev();
extern void _ZN7S1500C43v45Ev();
extern void _ZN7S1500C43v46Ev();
extern void _ZN7S1500C43v47Ev();
extern void _ZN7S1500C43v48Ev();
extern void _ZN7S1500C43v49Ev();
extern void _ZN7S1500C43v50Ev();
extern void _ZN7S1500C43v51Ev();
extern void _ZN7S1500C43v52Ev();
extern void _ZN7S1500C43v53Ev();
extern void _ZN7S1500C43v54Ev();
extern void _ZN7S1500C43v55Ev();
extern void _ZN7S1500C43v56Ev();
extern void _ZN7S1500C43v57Ev();
extern void _ZN7S1500C43v58Ev();
extern void _ZN7S1500C43v59Ev();
extern void _ZN7S1500C43v60Ev();
extern void _ZN7S1500C43v61Ev();
extern void _ZN7S1500C43v62Ev();
extern void _ZN7S1500C43v63Ev();
extern void _ZN7S1500C43v64Ev();
extern void _ZN7S1500C43v65Ev();
extern void _ZN7S1500C43v66Ev();
extern void _ZN7S1500C43v67Ev();
extern void _ZN7S1500C43v68Ev();
extern void _ZN7S1500C43v69Ev();
extern void _ZN7S1500C33v95Ev();
extern void _ZN7S1500C33v96Ev();
extern void _ZN7S1500C33v97Ev();
extern void _ZN7S1500C33v98Ev();
extern void _ZN7S1500C33v99Ev();
extern void _ZN7S1500C34v100Ev();
extern void _ZN7S1500C34v101Ev();
extern void _ZN7S1500C34v102Ev();
extern void _ZN7S1500C34v103Ev();
extern void _ZN7S1500C34v104Ev();
extern void _ZN7S1500C34v105Ev();
extern void _ZN7S1500C34v106Ev();
extern void _ZN7S1500C34v107Ev();
extern void _ZN7S1500C34v108Ev();
extern void _ZN7S1500C34v109Ev();
extern void _ZN7S1500C34v110Ev();
extern void _ZN7S1500C34v111Ev();
extern void _ZN7S1500C34v112Ev();
extern void _ZN7S1500C34v113Ev();
extern void _ZN7S1500C34v114Ev();
extern void _ZN7S1500C34v115Ev();
extern void _ZN7S1500C34v116Ev();
extern void _ZN7S1500C34v117Ev();
extern void _ZN7S1500C34v118Ev();
extern void _ZN7S1500C24v119Ev();
extern void _ZN7S1500C24v120Ev();
extern void _ZN7S1500C24v121Ev();
extern void _ZN7S1500C24v122Ev();
extern void _ZN7S1500C24v123Ev();
extern void _ZN7S1500C24v124Ev();
extern void _ZN7S1500C24v125Ev();
extern void _ZN7S1500C24v126Ev();
extern void _ZN7S1500C24v127Ev();
extern void _ZN7S1500C24v128Ev();
extern void _ZN7S1500C24v129Ev();
extern void _ZN7S1500C24v130Ev();
extern void _ZN7S1500C24v131Ev();
extern void _ZN7S1500C24v132Ev();
extern void _ZN7S1500C24v133Ev();
extern void _ZN7S1500C24v134Ev();
extern void _ZN7S1500C24v135Ev();
extern void _ZN7S1500C24v136Ev();
extern void _ZN7S1500C24v137Ev();
extern void _ZN7S1500C24v138Ev();
extern void _ZN7S1500C24v139Ev();
extern void _ZN7S1500C24v140Ev();
extern void _ZN7S1500C24v141Ev();
extern void _ZN7S1500C24v142Ev();
extern void _ZN7S1500C24v143Ev();
extern void _ZN7S1500C24v144Ev();
extern void _ZN7S1500C12v1Ev();
extern void _ZN7S1500C12v2Ev();
extern void _ZN7S1500C12v3Ev();
extern void _ZN7S1500C12v4Ev();
extern void _ZN7S1500C12v5Ev();
extern void _ZN7S1500C63v70Ev();
extern void _ZN7S1500C63v71Ev();
extern void _ZN7S1500C63v72Ev();
extern void _ZN7S1500C63v73Ev();
extern void _ZN7S1500C63v74Ev();
extern void _ZN7S1500C63v75Ev();
extern void _ZN7S1500C63v76Ev();
extern void _ZN7S1500C63v77Ev();
extern void _ZN7S1500C63v78Ev();
extern void _ZN7S1500C63v79Ev();
extern void _ZN7S1500C63v80Ev();
extern void _ZN7S1500C63v81Ev();
extern void _ZN7S1500C63v82Ev();
extern void _ZN7S1500C63v83Ev();
extern void _ZN7S1500C63v84Ev();
extern void _ZN7S1500C63v85Ev();
extern void _ZN7S1500C73v86Ev();
extern void _ZN7S1500C73v87Ev();
extern void _ZN7S1500C73v88Ev();
extern void _ZN7S1500C73v89Ev();
extern void _ZN7S1500C73v90Ev();
extern void _ZN7S1500C73v91Ev();
extern void _ZN7S1500C73v92Ev();
extern void _ZN7S1500C73v93Ev();
extern void _ZN7S1500C73v94Ev();
static  VTBL_ENTRY vtc_S1500C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1500C1[0]),
  (VTBL_ENTRY)&_ZN7S1500C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1500C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1500C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1500C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1500C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1500C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1500C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1500C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1500C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1500C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1500C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1500C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1500C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v119Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v120Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v121Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v122Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v123Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v124Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v125Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v126Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v127Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v128Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v129Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v130Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v131Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v132Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1500C24v144Ev,
  (VTBL_ENTRY)&_ZN7S1500C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1500C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1500C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1500C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1500C12v5Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1500C1[0]),
  (VTBL_ENTRY)&_ZN7S1500C63v70Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v71Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v72Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v73Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v74Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v75Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v76Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v77Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v78Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v79Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v80Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v81Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v82Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v83Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v84Ev,
  (VTBL_ENTRY)&_ZN7S1500C63v85Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S1500C1[0]),
  (VTBL_ENTRY)&_ZN7S1500C73v86Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v87Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v88Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v89Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v90Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v91Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v92Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v93Ev,
  (VTBL_ENTRY)&_ZN7S1500C73v94Ev,
};
extern VTBL_ENTRY _ZTI7S1500C1[];
extern  VTBL_ENTRY _ZTV7S1500C1[];
Class_Descriptor cd_S1500C1 = {  "S1500C1", // class name
  bases_S1500C1, 5,
  &(vtc_S1500C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,116), // object size
  NSPAIRA(_ZTI7S1500C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1500C1),152, //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  S3043C3  {
  int s3043c3f0;
  __tsi64 s3043c3f1;
  void *s3043c3f2[4];
  int s3043c3f3[2];
  void *s3043c3f4;
  ::S79C8_nt s3043c3f5;
  void *s3043c3f6[2];
  virtual  ~S3043C3(); // _ZN7S3043C3D1Ev
  virtual void  v17(); // _ZN7S3043C33v17Ev
  virtual void  v18(); // _ZN7S3043C33v18Ev
  virtual void  v19(); // _ZN7S3043C33v19Ev
  virtual void  v20(); // _ZN7S3043C33v20Ev
  virtual void  v21(); // _ZN7S3043C33v21Ev
  virtual void  v22(); // _ZN7S3043C33v22Ev
  virtual void  v23(); // _ZN7S3043C33v23Ev
  virtual void  v24(); // _ZN7S3043C33v24Ev
  virtual void  v25(); // _ZN7S3043C33v25Ev
  virtual void  v26(); // _ZN7S3043C33v26Ev
  virtual void  v27(); // _ZN7S3043C33v27Ev
  virtual void  v28(); // _ZN7S3043C33v28Ev
  virtual void  v29(); // _ZN7S3043C33v29Ev
  virtual void  v30(); // _ZN7S3043C33v30Ev
  virtual void  v31(); // _ZN7S3043C33v31Ev
  virtual void  v32(); // _ZN7S3043C33v32Ev
  virtual void  v33(); // _ZN7S3043C33v33Ev
  virtual void  v34(); // _ZN7S3043C33v34Ev
  virtual void  v35(); // _ZN7S3043C33v35Ev
  virtual void  v36(); // _ZN7S3043C33v36Ev
  virtual void  v37(); // _ZN7S3043C33v37Ev
  virtual void  v38(); // _ZN7S3043C33v38Ev
  virtual void  v39(); // _ZN7S3043C33v39Ev
  virtual void  v40(); // _ZN7S3043C33v40Ev
  virtual void  v41(); // _ZN7S3043C33v41Ev
  virtual void  v42(); // _ZN7S3043C33v42Ev
  virtual void  v43(); // _ZN7S3043C33v43Ev
  virtual void  v44(); // _ZN7S3043C33v44Ev
  virtual void  v45(); // _ZN7S3043C33v45Ev
  virtual void  v46(); // _ZN7S3043C33v46Ev
  virtual void  v47(); // _ZN7S3043C33v47Ev
  virtual void  v48(); // _ZN7S3043C33v48Ev
  virtual void  v49(); // _ZN7S3043C33v49Ev
  virtual void  v50(); // _ZN7S3043C33v50Ev
  virtual void  v51(); // _ZN7S3043C33v51Ev
  virtual void  v52(); // _ZN7S3043C33v52Ev
  virtual void  v53(); // _ZN7S3043C33v53Ev
  virtual void  v54(); // _ZN7S3043C33v54Ev
  virtual void  v55(); // _ZN7S3043C33v55Ev
  virtual void  v56(); // _ZN7S3043C33v56Ev
  virtual void  v57(); // _ZN7S3043C33v57Ev
  virtual void  v58(); // _ZN7S3043C33v58Ev
  virtual void  v59(); // _ZN7S3043C33v59Ev
  virtual void  v60(); // _ZN7S3043C33v60Ev
  virtual void  v61(); // _ZN7S3043C33v61Ev
  virtual void  v62(); // _ZN7S3043C33v62Ev
  virtual void  v63(); // _ZN7S3043C33v63Ev
  virtual void  v64(); // _ZN7S3043C33v64Ev
  virtual void  v65(); // _ZN7S3043C33v65Ev
  virtual void  v66(); // _ZN7S3043C33v66Ev
  virtual void  v67(); // _ZN7S3043C33v67Ev
  virtual void  v68(); // _ZN7S3043C33v68Ev
  virtual void  v69(); // _ZN7S3043C33v69Ev
  virtual void  v70(); // _ZN7S3043C33v70Ev
  virtual void  v71(); // _ZN7S3043C33v71Ev
  virtual void  v72(); // _ZN7S3043C33v72Ev
  virtual void  v73(); // _ZN7S3043C33v73Ev
  virtual void  v74(); // _ZN7S3043C33v74Ev
  virtual void  v75(); // _ZN7S3043C33v75Ev
  virtual void  v76(); // _ZN7S3043C33v76Ev
  virtual void  v77(); // _ZN7S3043C33v77Ev
  virtual void  v78(); // _ZN7S3043C33v78Ev
  virtual void  v79(); // _ZN7S3043C33v79Ev
  virtual void  v80(); // _ZN7S3043C33v80Ev
  S3043C3(); // tgen
};
//SIG(-1 S3043C3) 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]}


 S3043C3 ::~S3043C3(){ note_dtor("S3043C3", this);}
void  S3043C3 ::v17(){vfunc_called(this, "_ZN7S3043C33v17Ev");}
void  S3043C3 ::v18(){vfunc_called(this, "_ZN7S3043C33v18Ev");}
void  S3043C3 ::v19(){vfunc_called(this, "_ZN7S3043C33v19Ev");}
void  S3043C3 ::v20(){vfunc_called(this, "_ZN7S3043C33v20Ev");}
void  S3043C3 ::v21(){vfunc_called(this, "_ZN7S3043C33v21Ev");}
void  S3043C3 ::v22(){vfunc_called(this, "_ZN7S3043C33v22Ev");}
void  S3043C3 ::v23(){vfunc_called(this, "_ZN7S3043C33v23Ev");}
void  S3043C3 ::v24(){vfunc_called(this, "_ZN7S3043C33v24Ev");}
void  S3043C3 ::v25(){vfunc_called(this, "_ZN7S3043C33v25Ev");}
void  S3043C3 ::v26(){vfunc_called(this, "_ZN7S3043C33v26Ev");}
void  S3043C3 ::v27(){vfunc_called(this, "_ZN7S3043C33v27Ev");}
void  S3043C3 ::v28(){vfunc_called(this, "_ZN7S3043C33v28Ev");}
void  S3043C3 ::v29(){vfunc_called(this, "_ZN7S3043C33v29Ev");}
void  S3043C3 ::v30(){vfunc_called(this, "_ZN7S3043C33v30Ev");}
void  S3043C3 ::v31(){vfunc_called(this, "_ZN7S3043C33v31Ev");}
void  S3043C3 ::v32(){vfunc_called(this, "_ZN7S3043C33v32Ev");}
void  S3043C3 ::v33(){vfunc_called(this, "_ZN7S3043C33v33Ev");}
void  S3043C3 ::v34(){vfunc_called(this, "_ZN7S3043C33v34Ev");}
void  S3043C3 ::v35(){vfunc_called(this, "_ZN7S3043C33v35Ev");}
void  S3043C3 ::v36(){vfunc_called(this, "_ZN7S3043C33v36Ev");}
void  S3043C3 ::v37(){vfunc_called(this, "_ZN7S3043C33v37Ev");}
void  S3043C3 ::v38(){vfunc_called(this, "_ZN7S3043C33v38Ev");}
void  S3043C3 ::v39(){vfunc_called(this, "_ZN7S3043C33v39Ev");}
void  S3043C3 ::v40(){vfunc_called(this, "_ZN7S3043C33v40Ev");}
void  S3043C3 ::v41(){vfunc_called(this, "_ZN7S3043C33v41Ev");}
void  S3043C3 ::v42(){vfunc_called(this, "_ZN7S3043C33v42Ev");}
void  S3043C3 ::v43(){vfunc_called(this, "_ZN7S3043C33v43Ev");}
void  S3043C3 ::v44(){vfunc_called(this, "_ZN7S3043C33v44Ev");}
void  S3043C3 ::v45(){vfunc_called(this, "_ZN7S3043C33v45Ev");}
void  S3043C3 ::v46(){vfunc_called(this, "_ZN7S3043C33v46Ev");}
void  S3043C3 ::v47(){vfunc_called(this, "_ZN7S3043C33v47Ev");}
void  S3043C3 ::v48(){vfunc_called(this, "_ZN7S3043C33v48Ev");}
void  S3043C3 ::v49(){vfunc_called(this, "_ZN7S3043C33v49Ev");}
void  S3043C3 ::v50(){vfunc_called(this, "_ZN7S3043C33v50Ev");}
void  S3043C3 ::v51(){vfunc_called(this, "_ZN7S3043C33v51Ev");}
void  S3043C3 ::v52(){vfunc_called(this, "_ZN7S3043C33v52Ev");}
void  S3043C3 ::v53(){vfunc_called(this, "_ZN7S3043C33v53Ev");}
void  S3043C3 ::v54(){vfunc_called(this, "_ZN7S3043C33v54Ev");}
void  S3043C3 ::v55(){vfunc_called(this, "_ZN7S3043C33v55Ev");}
void  S3043C3 ::v56(){vfunc_called(this, "_ZN7S3043C33v56Ev");}
void  S3043C3 ::v57(){vfunc_called(this, "_ZN7S3043C33v57Ev");}
void  S3043C3 ::v58(){vfunc_called(this, "_ZN7S3043C33v58Ev");}
void  S3043C3 ::v59(){vfunc_called(this, "_ZN7S3043C33v59Ev");}
void  S3043C3 ::v60(){vfunc_called(this, "_ZN7S3043C33v60Ev");}
void  S3043C3 ::v61(){vfunc_called(this, "_ZN7S3043C33v61Ev");}
void  S3043C3 ::v62(){vfunc_called(this, "_ZN7S3043C33v62Ev");}
void  S3043C3 ::v63(){vfunc_called(this, "_ZN7S3043C33v63Ev");}
void  S3043C3 ::v64(){vfunc_called(this, "_ZN7S3043C33v64Ev");}
void  S3043C3 ::v65(){vfunc_called(this, "_ZN7S3043C33v65Ev");}
void  S3043C3 ::v66(){vfunc_called(this, "_ZN7S3043C33v66Ev");}
void  S3043C3 ::v67(){vfunc_called(this, "_ZN7S3043C33v67Ev");}
void  S3043C3 ::v68(){vfunc_called(this, "_ZN7S3043C33v68Ev");}
void  S3043C3 ::v69(){vfunc_called(this, "_ZN7S3043C33v69Ev");}
void  S3043C3 ::v70(){vfunc_called(this, "_ZN7S3043C33v70Ev");}
void  S3043C3 ::v71(){vfunc_called(this, "_ZN7S3043C33v71Ev");}
void  S3043C3 ::v72(){vfunc_called(this, "_ZN7S3043C33v72Ev");}
void  S3043C3 ::v73(){vfunc_called(this, "_ZN7S3043C33v73Ev");}
void  S3043C3 ::v74(){vfunc_called(this, "_ZN7S3043C33v74Ev");}
void  S3043C3 ::v75(){vfunc_called(this, "_ZN7S3043C33v75Ev");}
void  S3043C3 ::v76(){vfunc_called(this, "_ZN7S3043C33v76Ev");}
void  S3043C3 ::v77(){vfunc_called(this, "_ZN7S3043C33v77Ev");}
void  S3043C3 ::v78(){vfunc_called(this, "_ZN7S3043C33v78Ev");}
void  S3043C3 ::v79(){vfunc_called(this, "_ZN7S3043C33v79Ev");}
void  S3043C3 ::v80(){vfunc_called(this, "_ZN7S3043C33v80Ev");}
S3043C3 ::S3043C3(){ note_ctor("S3043C3", this);} // tgen

static void Test_S3043C3()
{
  extern Class_Descriptor cd_S3043C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3043C3, buf);
    S3043C3 *dp, &lv = *(dp=new (buf) S3043C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3043C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3043C3)");
    check_field_offset(lv, s3043c3f0, ABISELECT(8,4), "S3043C3.s3043c3f0");
    check_field_offset(lv, s3043c3f1, ABISELECT(16,8), "S3043C3.s3043c3f1");
    check_field_offset(lv, s3043c3f2, ABISELECT(24,16), "S3043C3.s3043c3f2");
    check_field_offset(lv, s3043c3f3, ABISELECT(56,32), "S3043C3.s3043c3f3");
    check_field_offset(lv, s3043c3f4, ABISELECT(64,40), "S3043C3.s3043c3f4");
    check_field_offset(lv, s3043c3f5, ABISELECT(72,44), "S3043C3.s3043c3f5");
    check_field_offset(lv, s3043c3f6, ABISELECT(80,52), "S3043C3.s3043c3f6");
    test_class_info(&lv, &cd_S3043C3);
    dp->~S3043C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3043C3(Test_S3043C3, "S3043C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3043C3C1Ev();
extern void _ZN7S3043C3D1Ev();
Name_Map name_map_S3043C3[] = {
  NSPAIR(_ZN7S3043C3C1Ev),
  NSPAIR(_ZN7S3043C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3043C3[];
extern void _ZN7S3043C3D1Ev();
extern void _ZN7S3043C3D0Ev();
extern void _ZN7S3043C33v17Ev();
extern void _ZN7S3043C33v18Ev();
extern void _ZN7S3043C33v19Ev();
extern void _ZN7S3043C33v20Ev();
extern void _ZN7S3043C33v21Ev();
extern void _ZN7S3043C33v22Ev();
extern void _ZN7S3043C33v23Ev();
extern void _ZN7S3043C33v24Ev();
extern void _ZN7S3043C33v25Ev();
extern void _ZN7S3043C33v26Ev();
extern void _ZN7S3043C33v27Ev();
extern void _ZN7S3043C33v28Ev();
extern void _ZN7S3043C33v29Ev();
extern void _ZN7S3043C33v30Ev();
extern void _ZN7S3043C33v31Ev();
extern void _ZN7S3043C33v32Ev();
extern void _ZN7S3043C33v33Ev();
extern void _ZN7S3043C33v34Ev();
extern void _ZN7S3043C33v35Ev();
extern void _ZN7S3043C33v36Ev();
extern void _ZN7S3043C33v37Ev();
extern void _ZN7S3043C33v38Ev();
extern void _ZN7S3043C33v39Ev();
extern void _ZN7S3043C33v40Ev();
extern void _ZN7S3043C33v41Ev();
extern void _ZN7S3043C33v42Ev();
extern void _ZN7S3043C33v43Ev();
extern void _ZN7S3043C33v44Ev();
extern void _ZN7S3043C33v45Ev();
extern void _ZN7S3043C33v46Ev();
extern void _ZN7S3043C33v47Ev();
extern void _ZN7S3043C33v48Ev();
extern void _ZN7S3043C33v49Ev();
extern void _ZN7S3043C33v50Ev();
extern void _ZN7S3043C33v51Ev();
extern void _ZN7S3043C33v52Ev();
extern void _ZN7S3043C33v53Ev();
extern void _ZN7S3043C33v54Ev();
extern void _ZN7S3043C33v55Ev();
extern void _ZN7S3043C33v56Ev();
extern void _ZN7S3043C33v57Ev();
extern void _ZN7S3043C33v58Ev();
extern void _ZN7S3043C33v59Ev();
extern void _ZN7S3043C33v60Ev();
extern void _ZN7S3043C33v61Ev();
extern void _ZN7S3043C33v62Ev();
extern void _ZN7S3043C33v63Ev();
extern void _ZN7S3043C33v64Ev();
extern void _ZN7S3043C33v65Ev();
extern void _ZN7S3043C33v66Ev();
extern void _ZN7S3043C33v67Ev();
extern void _ZN7S3043C33v68Ev();
extern void _ZN7S3043C33v69Ev();
extern void _ZN7S3043C33v70Ev();
extern void _ZN7S3043C33v71Ev();
extern void _ZN7S3043C33v72Ev();
extern void _ZN7S3043C33v73Ev();
extern void _ZN7S3043C33v74Ev();
extern void _ZN7S3043C33v75Ev();
extern void _ZN7S3043C33v76Ev();
extern void _ZN7S3043C33v77Ev();
extern void _ZN7S3043C33v78Ev();
extern void _ZN7S3043C33v79Ev();
extern void _ZN7S3043C33v80Ev();
static  VTBL_ENTRY vtc_S3043C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3043C3[0]),
  (VTBL_ENTRY)&_ZN7S3043C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3043C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v74Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v75Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v76Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v77Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v78Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v79Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v80Ev,
};
extern VTBL_ENTRY _ZTI7S3043C3[];
extern  VTBL_ENTRY _ZTV7S3043C3[];
Class_Descriptor cd_S3043C3 = {  "S3043C3", // class name
  0,0,//no base classes
  &(vtc_S3043C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3043C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3043C3),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  S3043C5  {
  virtual void  v81(); // _ZN7S3043C53v81Ev
  virtual void  v82(); // _ZN7S3043C53v82Ev
  virtual void  v83(); // _ZN7S3043C53v83Ev
  virtual void  v84(); // _ZN7S3043C53v84Ev
  virtual void  v85(); // _ZN7S3043C53v85Ev
  virtual void  v86(); // _ZN7S3043C53v86Ev
  virtual void  v87(); // _ZN7S3043C53v87Ev
  virtual void  v88(); // _ZN7S3043C53v88Ev
  virtual void  v89(); // _ZN7S3043C53v89Ev
  virtual void  v90(); // _ZN7S3043C53v90Ev
  virtual void  v91(); // _ZN7S3043C53v91Ev
  virtual void  v92(); // _ZN7S3043C53v92Ev
  virtual void  v93(); // _ZN7S3043C53v93Ev
  virtual void  v94(); // _ZN7S3043C53v94Ev
  virtual void  v95(); // _ZN7S3043C53v95Ev
  virtual void  v96(); // _ZN7S3043C53v96Ev
  ~S3043C5(); // tgen
  S3043C5(); // tgen
};
//SIG(-1 S3043C5) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16}


void  S3043C5 ::v81(){vfunc_called(this, "_ZN7S3043C53v81Ev");}
void  S3043C5 ::v82(){vfunc_called(this, "_ZN7S3043C53v82Ev");}
void  S3043C5 ::v83(){vfunc_called(this, "_ZN7S3043C53v83Ev");}
void  S3043C5 ::v84(){vfunc_called(this, "_ZN7S3043C53v84Ev");}
void  S3043C5 ::v85(){vfunc_called(this, "_ZN7S3043C53v85Ev");}
void  S3043C5 ::v86(){vfunc_called(this, "_ZN7S3043C53v86Ev");}
void  S3043C5 ::v87(){vfunc_called(this, "_ZN7S3043C53v87Ev");}
void  S3043C5 ::v88(){vfunc_called(this, "_ZN7S3043C53v88Ev");}
void  S3043C5 ::v89(){vfunc_called(this, "_ZN7S3043C53v89Ev");}
void  S3043C5 ::v90(){vfunc_called(this, "_ZN7S3043C53v90Ev");}
void  S3043C5 ::v91(){vfunc_called(this, "_ZN7S3043C53v91Ev");}
void  S3043C5 ::v92(){vfunc_called(this, "_ZN7S3043C53v92Ev");}
void  S3043C5 ::v93(){vfunc_called(this, "_ZN7S3043C53v93Ev");}
void  S3043C5 ::v94(){vfunc_called(this, "_ZN7S3043C53v94Ev");}
void  S3043C5 ::v95(){vfunc_called(this, "_ZN7S3043C53v95Ev");}
void  S3043C5 ::v96(){vfunc_called(this, "_ZN7S3043C53v96Ev");}
S3043C5 ::~S3043C5(){ note_dtor("S3043C5", this);} // tgen
S3043C5 ::S3043C5(){ note_ctor("S3043C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3043C5C1Ev();
extern void _ZN7S3043C5D1Ev();
Name_Map name_map_S3043C5[] = {
  NSPAIR(_ZN7S3043C5C1Ev),
  NSPAIR(_ZN7S3043C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3043C5[];
extern void _ZN7S3043C53v81Ev();
extern void _ZN7S3043C53v82Ev();
extern void _ZN7S3043C53v83Ev();
extern void _ZN7S3043C53v84Ev();
extern void _ZN7S3043C53v85Ev();
extern void _ZN7S3043C53v86Ev();
extern void _ZN7S3043C53v87Ev();
extern void _ZN7S3043C53v88Ev();
extern void _ZN7S3043C53v89Ev();
extern void _ZN7S3043C53v90Ev();
extern void _ZN7S3043C53v91Ev();
extern void _ZN7S3043C53v92Ev();
extern void _ZN7S3043C53v93Ev();
extern void _ZN7S3043C53v94Ev();
extern void _ZN7S3043C53v95Ev();
extern void _ZN7S3043C53v96Ev();
static  VTBL_ENTRY vtc_S3043C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3043C5[0]),
  (VTBL_ENTRY)&_ZN7S3043C53v81Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v82Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v83Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v84Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v85Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v86Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v87Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v88Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v89Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v90Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v91Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v92Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v93Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v94Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v95Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v96Ev,
};
extern VTBL_ENTRY _ZTI7S3043C5[];
extern  VTBL_ENTRY _ZTV7S3043C5[];
Class_Descriptor cd_S3043C5 = {  "S3043C5", // class name
  0,0,//no base classes
  &(vtc_S3043C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3043C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3043C5),18, //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  S3043C6  {
  virtual void  v97(); // _ZN7S3043C63v97Ev
  virtual void  v98(); // _ZN7S3043C63v98Ev
  virtual void  v99(); // _ZN7S3043C63v99Ev
  virtual void  v100(); // _ZN7S3043C64v100Ev
  virtual void  v101(); // _ZN7S3043C64v101Ev
  virtual void  v102(); // _ZN7S3043C64v102Ev
  virtual void  v103(); // _ZN7S3043C64v103Ev
  virtual void  v104(); // _ZN7S3043C64v104Ev
  virtual void  v105(); // _ZN7S3043C64v105Ev
  ~S3043C6(); // tgen
  S3043C6(); // tgen
};
//SIG(-1 S3043C6) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S3043C6 ::v97(){vfunc_called(this, "_ZN7S3043C63v97Ev");}
void  S3043C6 ::v98(){vfunc_called(this, "_ZN7S3043C63v98Ev");}
void  S3043C6 ::v99(){vfunc_called(this, "_ZN7S3043C63v99Ev");}
void  S3043C6 ::v100(){vfunc_called(this, "_ZN7S3043C64v100Ev");}
void  S3043C6 ::v101(){vfunc_called(this, "_ZN7S3043C64v101Ev");}
void  S3043C6 ::v102(){vfunc_called(this, "_ZN7S3043C64v102Ev");}
void  S3043C6 ::v103(){vfunc_called(this, "_ZN7S3043C64v103Ev");}
void  S3043C6 ::v104(){vfunc_called(this, "_ZN7S3043C64v104Ev");}
void  S3043C6 ::v105(){vfunc_called(this, "_ZN7S3043C64v105Ev");}
S3043C6 ::~S3043C6(){ note_dtor("S3043C6", this);} // tgen
S3043C6 ::S3043C6(){ note_ctor("S3043C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3043C6C1Ev();
extern void _ZN7S3043C6D1Ev();
Name_Map name_map_S3043C6[] = {
  NSPAIR(_ZN7S3043C6C1Ev),
  NSPAIR(_ZN7S3043C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3043C6[];
extern void _ZN7S3043C63v97Ev();
extern void _ZN7S3043C63v98Ev();
extern void _ZN7S3043C63v99Ev();
extern void _ZN7S3043C64v100Ev();
extern void _ZN7S3043C64v101Ev();
extern void _ZN7S3043C64v102Ev();
extern void _ZN7S3043C64v103Ev();
extern void _ZN7S3043C64v104Ev();
extern void _ZN7S3043C64v105Ev();
static  VTBL_ENTRY vtc_S3043C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3043C6[0]),
  (VTBL_ENTRY)&_ZN7S3043C63v97Ev,
  (VTBL_ENTRY)&_ZN7S3043C63v98Ev,
  (VTBL_ENTRY)&_ZN7S3043C63v99Ev,
  (VTBL_ENTRY)&_ZN7S3043C64v100Ev,
  (VTBL_ENTRY)&_ZN7S3043C64v101Ev,
  (VTBL_ENTRY)&_ZN7S3043C64v102Ev,
  (VTBL_ENTRY)&_ZN7S3043C64v103Ev,
  (VTBL_ENTRY)&_ZN7S3043C64v104Ev,
  (VTBL_ENTRY)&_ZN7S3043C64v105Ev,
};
extern VTBL_ENTRY _ZTI7S3043C6[];
extern  VTBL_ENTRY _ZTV7S3043C6[];
Class_Descriptor cd_S3043C6 = {  "S3043C6", // class name
  0,0,//no base classes
  &(vtc_S3043C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3043C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3043C6),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  S3043C2  : S3043C3 , S3043C5 , S3043C6 {
  void *s3043c2f0;
  ::S79C39_nt s3043c2f1;
  unsigned int s3043c2f2:1;
  unsigned int s3043c2f3:1;
  unsigned int s3043c2f4:1;
  unsigned int s3043c2f5:1;
  virtual  ~S3043C2(); // _ZN7S3043C2D1Ev
  virtual void  v106(); // _ZN7S3043C24v106Ev
  virtual void  v107(); // _ZN7S3043C24v107Ev
  virtual void  v108(); // _ZN7S3043C24v108Ev
  virtual void  v109(); // _ZN7S3043C24v109Ev
  virtual void  v110(); // _ZN7S3043C24v110Ev
  virtual void  v111(); // _ZN7S3043C24v111Ev
  virtual void  v112(); // _ZN7S3043C24v112Ev
  virtual void  v113(); // _ZN7S3043C24v113Ev
  virtual void  v114(); // _ZN7S3043C24v114Ev
  virtual void  v115(); // _ZN7S3043C24v115Ev
  virtual void  v116(); // _ZN7S3043C24v116Ev
  virtual void  v117(); // _ZN7S3043C24v117Ev
  virtual void  v118(); // _ZN7S3043C24v118Ev
  virtual void  v119(); // _ZN7S3043C24v119Ev
  virtual void  v120(); // _ZN7S3043C24v120Ev
  virtual void  v121(); // _ZN7S3043C24v121Ev
  virtual void  v122(); // _ZN7S3043C24v122Ev
  virtual void  v123(); // _ZN7S3043C24v123Ev
  virtual void  v124(); // _ZN7S3043C24v124Ev
  virtual void  v125(); // _ZN7S3043C24v125Ev
  virtual void  v126(); // _ZN7S3043C24v126Ev
  virtual void  v127(); // _ZN7S3043C24v127Ev
  virtual void  v128(); // _ZN7S3043C24v128Ev
  virtual void  v129(); // _ZN7S3043C24v129Ev
  S3043C2(); // tgen
};
//SIG(-1 S3043C2) C1{ BC2{ vd 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 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} BC4{ v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104} BC5{ v105 v106 v107 v108 v109 v110 v111 v112 v113} 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 Fp FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1}


 S3043C2 ::~S3043C2(){ note_dtor("S3043C2", this);}
void  S3043C2 ::v106(){vfunc_called(this, "_ZN7S3043C24v106Ev");}
void  S3043C2 ::v107(){vfunc_called(this, "_ZN7S3043C24v107Ev");}
void  S3043C2 ::v108(){vfunc_called(this, "_ZN7S3043C24v108Ev");}
void  S3043C2 ::v109(){vfunc_called(this, "_ZN7S3043C24v109Ev");}
void  S3043C2 ::v110(){vfunc_called(this, "_ZN7S3043C24v110Ev");}
void  S3043C2 ::v111(){vfunc_called(this, "_ZN7S3043C24v111Ev");}
void  S3043C2 ::v112(){vfunc_called(this, "_ZN7S3043C24v112Ev");}
void  S3043C2 ::v113(){vfunc_called(this, "_ZN7S3043C24v113Ev");}
void  S3043C2 ::v114(){vfunc_called(this, "_ZN7S3043C24v114Ev");}
void  S3043C2 ::v115(){vfunc_called(this, "_ZN7S3043C24v115Ev");}
void  S3043C2 ::v116(){vfunc_called(this, "_ZN7S3043C24v116Ev");}
void  S3043C2 ::v117(){vfunc_called(this, "_ZN7S3043C24v117Ev");}
void  S3043C2 ::v118(){vfunc_called(this, "_ZN7S3043C24v118Ev");}
void  S3043C2 ::v119(){vfunc_called(this, "_ZN7S3043C24v119Ev");}
void  S3043C2 ::v120(){vfunc_called(this, "_ZN7S3043C24v120Ev");}
void  S3043C2 ::v121(){vfunc_called(this, "_ZN7S3043C24v121Ev");}
void  S3043C2 ::v122(){vfunc_called(this, "_ZN7S3043C24v122Ev");}
void  S3043C2 ::v123(){vfunc_called(this, "_ZN7S3043C24v123Ev");}
void  S3043C2 ::v124(){vfunc_called(this, "_ZN7S3043C24v124Ev");}
void  S3043C2 ::v125(){vfunc_called(this, "_ZN7S3043C24v125Ev");}
void  S3043C2 ::v126(){vfunc_called(this, "_ZN7S3043C24v126Ev");}
void  S3043C2 ::v127(){vfunc_called(this, "_ZN7S3043C24v127Ev");}
void  S3043C2 ::v128(){vfunc_called(this, "_ZN7S3043C24v128Ev");}
void  S3043C2 ::v129(){vfunc_called(this, "_ZN7S3043C24v129Ev");}
S3043C2 ::S3043C2(){ note_ctor("S3043C2", this);} // tgen

static void Test_S3043C2()
{
  extern Class_Descriptor cd_S3043C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,23)];
    init_test(&cd_S3043C2, buf);
    S3043C2 *dp, &lv = *(dp=new (buf) S3043C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S3043C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3043C2)");
    check_base_class_offset(lv, (S3043C3*), 0, "S3043C2");
    check_base_class_offset(lv, (S3043C5*), ABISELECT(96,60), "S3043C2");
    check_base_class_offset(lv, (S3043C6*), ABISELECT(104,64), "S3043C2");
    check_field_offset(lv, s3043c2f0, ABISELECT(112,68), "S3043C2.s3043c2f0");
    check_field_offset(lv, s3043c2f1, ABISELECT(120,72), "S3043C2.s3043c2f1");
    set_bf_and_test(lv, s3043c2f2, ABISELECT(136,84), 0, 1, 1, "S3043C2");
    set_bf_and_test(lv, s3043c2f3, ABISELECT(136,84), 1, 1, 1, "S3043C2");
    set_bf_and_test(lv, s3043c2f4, ABISELECT(136,84), 2, 1, 1, "S3043C2");
    set_bf_and_test(lv, s3043c2f5, ABISELECT(136,84), 3, 1, 1, "S3043C2");
    test_class_info(&lv, &cd_S3043C2);
    dp->~S3043C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3043C2(Test_S3043C2, "S3043C2", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN7S3043C2C1Ev();
extern void _ZN7S3043C2D1Ev();
Name_Map name_map_S3043C2[] = {
  NSPAIR(_ZN7S3043C2C1Ev),
  NSPAIR(_ZN7S3043C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3043C3;
extern VTBL_ENTRY _ZTI7S3043C3[];
extern  VTBL_ENTRY _ZTV7S3043C3[];
extern Class_Descriptor cd_S3043C5;
extern VTBL_ENTRY _ZTI7S3043C5[];
extern  VTBL_ENTRY _ZTV7S3043C5[];
extern Class_Descriptor cd_S3043C6;
extern VTBL_ENTRY _ZTI7S3043C6[];
extern  VTBL_ENTRY _ZTV7S3043C6[];
static Base_Class bases_S3043C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3043C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3043C5,    ABISELECT(96,60), //bcp->offset
    92, //bcp->virtual_function_table_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_S3043C6,    ABISELECT(104,64), //bcp->offset
    110, //bcp->virtual_function_table_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 _ZTI7S3043C2[];
extern void _ZN7S3043C2D1Ev();
extern void _ZN7S3043C2D0Ev();
extern void _ZN7S3043C33v17Ev();
extern void _ZN7S3043C33v18Ev();
extern void _ZN7S3043C33v19Ev();
extern void _ZN7S3043C33v20Ev();
extern void _ZN7S3043C33v21Ev();
extern void _ZN7S3043C33v22Ev();
extern void _ZN7S3043C33v23Ev();
extern void _ZN7S3043C33v24Ev();
extern void _ZN7S3043C33v25Ev();
extern void _ZN7S3043C33v26Ev();
extern void _ZN7S3043C33v27Ev();
extern void _ZN7S3043C33v28Ev();
extern void _ZN7S3043C33v29Ev();
extern void _ZN7S3043C33v30Ev();
extern void _ZN7S3043C33v31Ev();
extern void _ZN7S3043C33v32Ev();
extern void _ZN7S3043C33v33Ev();
extern void _ZN7S3043C33v34Ev();
extern void _ZN7S3043C33v35Ev();
extern void _ZN7S3043C33v36Ev();
extern void _ZN7S3043C33v37Ev();
extern void _ZN7S3043C33v38Ev();
extern void _ZN7S3043C33v39Ev();
extern void _ZN7S3043C33v40Ev();
extern void _ZN7S3043C33v41Ev();
extern void _ZN7S3043C33v42Ev();
extern void _ZN7S3043C33v43Ev();
extern void _ZN7S3043C33v44Ev();
extern void _ZN7S3043C33v45Ev();
extern void _ZN7S3043C33v46Ev();
extern void _ZN7S3043C33v47Ev();
extern void _ZN7S3043C33v48Ev();
extern void _ZN7S3043C33v49Ev();
extern void _ZN7S3043C33v50Ev();
extern void _ZN7S3043C33v51Ev();
extern void _ZN7S3043C33v52Ev();
extern void _ZN7S3043C33v53Ev();
extern void _ZN7S3043C33v54Ev();
extern void _ZN7S3043C33v55Ev();
extern void _ZN7S3043C33v56Ev();
extern void _ZN7S3043C33v57Ev();
extern void _ZN7S3043C33v58Ev();
extern void _ZN7S3043C33v59Ev();
extern void _ZN7S3043C33v60Ev();
extern void _ZN7S3043C33v61Ev();
extern void _ZN7S3043C33v62Ev();
extern void _ZN7S3043C33v63Ev();
extern void _ZN7S3043C33v64Ev();
extern void _ZN7S3043C33v65Ev();
extern void _ZN7S3043C33v66Ev();
extern void _ZN7S3043C33v67Ev();
extern void _ZN7S3043C33v68Ev();
extern void _ZN7S3043C33v69Ev();
extern void _ZN7S3043C33v70Ev();
extern void _ZN7S3043C33v71Ev();
extern void _ZN7S3043C33v72Ev();
extern void _ZN7S3043C33v73Ev();
extern void _ZN7S3043C33v74Ev();
extern void _ZN7S3043C33v75Ev();
extern void _ZN7S3043C33v76Ev();
extern void _ZN7S3043C33v77Ev();
extern void _ZN7S3043C33v78Ev();
extern void _ZN7S3043C33v79Ev();
extern void _ZN7S3043C33v80Ev();
extern void _ZN7S3043C24v106Ev();
extern void _ZN7S3043C24v107Ev();
extern void _ZN7S3043C24v108Ev();
extern void _ZN7S3043C24v109Ev();
extern void _ZN7S3043C24v110Ev();
extern void _ZN7S3043C24v111Ev();
extern void _ZN7S3043C24v112Ev();
extern void _ZN7S3043C24v113Ev();
extern void _ZN7S3043C24v114Ev();
extern void _ZN7S3043C24v115Ev();
extern void _ZN7S3043C24v116Ev();
extern void _ZN7S3043C24v117Ev();
extern void _ZN7S3043C24v118Ev();
extern void _ZN7S3043C24v119Ev();
extern void _ZN7S3043C24v120Ev();
extern void _ZN7S3043C24v121Ev();
extern void _ZN7S3043C24v122Ev();
extern void _ZN7S3043C24v123Ev();
extern void _ZN7S3043C24v124Ev();
extern void _ZN7S3043C24v125Ev();
extern void _ZN7S3043C24v126Ev();
extern void _ZN7S3043C24v127Ev();
extern void _ZN7S3043C24v128Ev();
extern void _ZN7S3043C24v129Ev();
extern void _ZN7S3043C53v81Ev();
extern void _ZN7S3043C53v82Ev();
extern void _ZN7S3043C53v83Ev();
extern void _ZN7S3043C53v84Ev();
extern void _ZN7S3043C53v85Ev();
extern void _ZN7S3043C53v86Ev();
extern void _ZN7S3043C53v87Ev();
extern void _ZN7S3043C53v88Ev();
extern void _ZN7S3043C53v89Ev();
extern void _ZN7S3043C53v90Ev();
extern void _ZN7S3043C53v91Ev();
extern void _ZN7S3043C53v92Ev();
extern void _ZN7S3043C53v93Ev();
extern void _ZN7S3043C53v94Ev();
extern void _ZN7S3043C53v95Ev();
extern void _ZN7S3043C53v96Ev();
extern void _ZN7S3043C63v97Ev();
extern void _ZN7S3043C63v98Ev();
extern void _ZN7S3043C63v99Ev();
extern void _ZN7S3043C64v100Ev();
extern void _ZN7S3043C64v101Ev();
extern void _ZN7S3043C64v102Ev();
extern void _ZN7S3043C64v103Ev();
extern void _ZN7S3043C64v104Ev();
extern void _ZN7S3043C64v105Ev();
static  VTBL_ENTRY vtc_S3043C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3043C2[0]),
  (VTBL_ENTRY)&_ZN7S3043C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3043C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v74Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v75Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v76Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v77Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v78Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v79Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v80Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v106Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v107Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v108Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v109Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v110Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v111Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v112Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v113Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v114Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v115Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v116Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v117Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v118Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v119Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v120Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v121Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v122Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v123Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v124Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v125Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v126Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v127Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v128Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v129Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S3043C2[0]),
  (VTBL_ENTRY)&_ZN7S3043C53v81Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v82Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v83Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v84Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v85Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v86Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v87Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v88Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v89Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v90Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v91Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v92Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v93Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v94Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v95Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v96Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S3043C2[0]),
  (VTBL_ENTRY)&_ZN7S3043C63v97Ev,
  (VTBL_ENTRY)&_ZN7S3043C63v98Ev,
  (VTBL_ENTRY)&_ZN7S3043C63v99Ev,
  (VTBL_ENTRY)&_ZN7S3043C64v100Ev,
  (VTBL_ENTRY)&_ZN7S3043C64v101Ev,
  (VTBL_ENTRY)&_ZN7S3043C64v102Ev,
  (VTBL_ENTRY)&_ZN7S3043C64v103Ev,
  (VTBL_ENTRY)&_ZN7S3043C64v104Ev,
  (VTBL_ENTRY)&_ZN7S3043C64v105Ev,
};
extern VTBL_ENTRY _ZTI7S3043C2[];
extern  VTBL_ENTRY _ZTV7S3043C2[];
Class_Descriptor cd_S3043C2 = {  "S3043C2", // class name
  bases_S3043C2, 3,
  &(vtc_S3043C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI7S3043C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3043C2),121, //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  S3043C1  : S3043C2 {
  ::S79C44 s3043c1f0;
  ::S79C40 s3043c1f1;
  void *s3043c1f2;
  virtual  ~S3043C1(); // _ZN7S3043C1D1Ev
  virtual void  v1(); // _ZN7S3043C12v1Ev
  virtual void  v2(); // _ZN7S3043C12v2Ev
  virtual void  v3(); // _ZN7S3043C12v3Ev
  virtual void  v4(); // _ZN7S3043C12v4Ev
  virtual void  v5(); // _ZN7S3043C12v5Ev
  virtual void  v6(); // _ZN7S3043C12v6Ev
  virtual void  v7(); // _ZN7S3043C12v7Ev
  virtual void  v8(); // _ZN7S3043C12v8Ev
  virtual void  v9(); // _ZN7S3043C12v9Ev
  virtual void  v10(); // _ZN7S3043C13v10Ev
  virtual void  v11(); // _ZN7S3043C13v11Ev
  virtual void  v12(); // _ZN7S3043C13v12Ev
  virtual void  v13(); // _ZN7S3043C13v13Ev
  virtual void  v14(); // _ZN7S3043C13v14Ev
  virtual void  v15(); // _ZN7S3043C13v15Ev
  virtual void  v16(); // _ZN7S3043C13v16Ev
  S3043C1(); // tgen
};
//SIG(1 S3043C1) C1{ BC2{ BC3{ vd 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 v79 v80 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} BC5{ v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96} BC6{ v97 v98 v99 v100 v101 v102 v103 v104 v105} vd v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 Fp FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 FC11{ BC12{ BC10}} FC8 Fp}


 S3043C1 ::~S3043C1(){ note_dtor("S3043C1", this);}
void  S3043C1 ::v1(){vfunc_called(this, "_ZN7S3043C12v1Ev");}
void  S3043C1 ::v2(){vfunc_called(this, "_ZN7S3043C12v2Ev");}
void  S3043C1 ::v3(){vfunc_called(this, "_ZN7S3043C12v3Ev");}
void  S3043C1 ::v4(){vfunc_called(this, "_ZN7S3043C12v4Ev");}
void  S3043C1 ::v5(){vfunc_called(this, "_ZN7S3043C12v5Ev");}
void  S3043C1 ::v6(){vfunc_called(this, "_ZN7S3043C12v6Ev");}
void  S3043C1 ::v7(){vfunc_called(this, "_ZN7S3043C12v7Ev");}
void  S3043C1 ::v8(){vfunc_called(this, "_ZN7S3043C12v8Ev");}
void  S3043C1 ::v9(){vfunc_called(this, "_ZN7S3043C12v9Ev");}
void  S3043C1 ::v10(){vfunc_called(this, "_ZN7S3043C13v10Ev");}
void  S3043C1 ::v11(){vfunc_called(this, "_ZN7S3043C13v11Ev");}
void  S3043C1 ::v12(){vfunc_called(this, "_ZN7S3043C13v12Ev");}
void  S3043C1 ::v13(){vfunc_called(this, "_ZN7S3043C13v13Ev");}
void  S3043C1 ::v14(){vfunc_called(this, "_ZN7S3043C13v14Ev");}
void  S3043C1 ::v15(){vfunc_called(this, "_ZN7S3043C13v15Ev");}
void  S3043C1 ::v16(){vfunc_called(this, "_ZN7S3043C13v16Ev");}
S3043C1 ::S3043C1(){ note_ctor("S3043C1", this);} // tgen

static void Test_S3043C1()
{
  extern Class_Descriptor cd_S3043C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,30)];
    init_test(&cd_S3043C1, buf);
    S3043C1 *dp, &lv = *(dp=new (buf) S3043C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,116), "sizeof(S3043C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3043C1)");
    check_base_class_offset(lv, (S3043C3*)(S3043C2*), 0, "S3043C1");
    check_base_class_offset(lv, (S3043C5*)(S3043C2*), ABISELECT(96,60), "S3043C1");
    check_base_class_offset(lv, (S3043C6*)(S3043C2*), ABISELECT(104,64), "S3043C1");
    check_base_class_offset(lv, (S3043C2*), 0, "S3043C1");
    check_field_offset(lv, s3043c1f0, ABISELECT(144,88), "S3043C1.s3043c1f0");
    check_field_offset(lv, s3043c1f1, ABISELECT(160,100), "S3043C1.s3043c1f1");
    check_field_offset(lv, s3043c1f2, ABISELECT(176,112), "S3043C1.s3043c1f2");
    test_class_info(&lv, &cd_S3043C1);
    dp->~S3043C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3043C1(Test_S3043C1, "S3043C1", ABISELECT(184,116));

#else // __cplusplus

extern void _ZN7S3043C1C1Ev();
extern void _ZN7S3043C1D1Ev();
Name_Map name_map_S3043C1[] = {
  NSPAIR(_ZN7S3043C1C1Ev),
  NSPAIR(_ZN7S3043C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3043C3;
extern VTBL_ENTRY _ZTI7S3043C3[];
extern  VTBL_ENTRY _ZTV7S3043C3[];
extern Class_Descriptor cd_S3043C5;
extern VTBL_ENTRY _ZTI7S3043C5[];
extern  VTBL_ENTRY _ZTV7S3043C5[];
extern Class_Descriptor cd_S3043C6;
extern VTBL_ENTRY _ZTI7S3043C6[];
extern  VTBL_ENTRY _ZTV7S3043C6[];
extern Class_Descriptor cd_S3043C2;
extern VTBL_ENTRY _ZTI7S3043C2[];
extern  VTBL_ENTRY _ZTV7S3043C2[];
static Base_Class bases_S3043C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3043C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3043C5,    ABISELECT(96,60), //bcp->offset
    108, //bcp->virtual_function_table_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_S3043C6,    ABISELECT(104,64), //bcp->offset
    126, //bcp->virtual_function_table_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_S3043C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3043C1[];
extern void _ZN7S3043C1D1Ev();
extern void _ZN7S3043C1D0Ev();
extern void _ZN7S3043C33v17Ev();
extern void _ZN7S3043C33v18Ev();
extern void _ZN7S3043C33v19Ev();
extern void _ZN7S3043C33v20Ev();
extern void _ZN7S3043C33v21Ev();
extern void _ZN7S3043C33v22Ev();
extern void _ZN7S3043C33v23Ev();
extern void _ZN7S3043C33v24Ev();
extern void _ZN7S3043C33v25Ev();
extern void _ZN7S3043C33v26Ev();
extern void _ZN7S3043C33v27Ev();
extern void _ZN7S3043C33v28Ev();
extern void _ZN7S3043C33v29Ev();
extern void _ZN7S3043C33v30Ev();
extern void _ZN7S3043C33v31Ev();
extern void _ZN7S3043C33v32Ev();
extern void _ZN7S3043C33v33Ev();
extern void _ZN7S3043C33v34Ev();
extern void _ZN7S3043C33v35Ev();
extern void _ZN7S3043C33v36Ev();
extern void _ZN7S3043C33v37Ev();
extern void _ZN7S3043C33v38Ev();
extern void _ZN7S3043C33v39Ev();
extern void _ZN7S3043C33v40Ev();
extern void _ZN7S3043C33v41Ev();
extern void _ZN7S3043C33v42Ev();
extern void _ZN7S3043C33v43Ev();
extern void _ZN7S3043C33v44Ev();
extern void _ZN7S3043C33v45Ev();
extern void _ZN7S3043C33v46Ev();
extern void _ZN7S3043C33v47Ev();
extern void _ZN7S3043C33v48Ev();
extern void _ZN7S3043C33v49Ev();
extern void _ZN7S3043C33v50Ev();
extern void _ZN7S3043C33v51Ev();
extern void _ZN7S3043C33v52Ev();
extern void _ZN7S3043C33v53Ev();
extern void _ZN7S3043C33v54Ev();
extern void _ZN7S3043C33v55Ev();
extern void _ZN7S3043C33v56Ev();
extern void _ZN7S3043C33v57Ev();
extern void _ZN7S3043C33v58Ev();
extern void _ZN7S3043C33v59Ev();
extern void _ZN7S3043C33v60Ev();
extern void _ZN7S3043C33v61Ev();
extern void _ZN7S3043C33v62Ev();
extern void _ZN7S3043C33v63Ev();
extern void _ZN7S3043C33v64Ev();
extern void _ZN7S3043C33v65Ev();
extern void _ZN7S3043C33v66Ev();
extern void _ZN7S3043C33v67Ev();
extern void _ZN7S3043C33v68Ev();
extern void _ZN7S3043C33v69Ev();
extern void _ZN7S3043C33v70Ev();
extern void _ZN7S3043C33v71Ev();
extern void _ZN7S3043C33v72Ev();
extern void _ZN7S3043C33v73Ev();
extern void _ZN7S3043C33v74Ev();
extern void _ZN7S3043C33v75Ev();
extern void _ZN7S3043C33v76Ev();
extern void _ZN7S3043C33v77Ev();
extern void _ZN7S3043C33v78Ev();
extern void _ZN7S3043C33v79Ev();
extern void _ZN7S3043C33v80Ev();
extern void _ZN7S3043C24v106Ev();
extern void _ZN7S3043C24v107Ev();
extern void _ZN7S3043C24v108Ev();
extern void _ZN7S3043C24v109Ev();
extern void _ZN7S3043C24v110Ev();
extern void _ZN7S3043C24v111Ev();
extern void _ZN7S3043C24v112Ev();
extern void _ZN7S3043C24v113Ev();
extern void _ZN7S3043C24v114Ev();
extern void _ZN7S3043C24v115Ev();
extern void _ZN7S3043C24v116Ev();
extern void _ZN7S3043C24v117Ev();
extern void _ZN7S3043C24v118Ev();
extern void _ZN7S3043C24v119Ev();
extern void _ZN7S3043C24v120Ev();
extern void _ZN7S3043C24v121Ev();
extern void _ZN7S3043C24v122Ev();
extern void _ZN7S3043C24v123Ev();
extern void _ZN7S3043C24v124Ev();
extern void _ZN7S3043C24v125Ev();
extern void _ZN7S3043C24v126Ev();
extern void _ZN7S3043C24v127Ev();
extern void _ZN7S3043C24v128Ev();
extern void _ZN7S3043C24v129Ev();
extern void _ZN7S3043C12v1Ev();
extern void _ZN7S3043C12v2Ev();
extern void _ZN7S3043C12v3Ev();
extern void _ZN7S3043C12v4Ev();
extern void _ZN7S3043C12v5Ev();
extern void _ZN7S3043C12v6Ev();
extern void _ZN7S3043C12v7Ev();
extern void _ZN7S3043C12v8Ev();
extern void _ZN7S3043C12v9Ev();
extern void _ZN7S3043C13v10Ev();
extern void _ZN7S3043C13v11Ev();
extern void _ZN7S3043C13v12Ev();
extern void _ZN7S3043C13v13Ev();
extern void _ZN7S3043C13v14Ev();
extern void _ZN7S3043C13v15Ev();
extern void _ZN7S3043C13v16Ev();
extern void _ZN7S3043C53v81Ev();
extern void _ZN7S3043C53v82Ev();
extern void _ZN7S3043C53v83Ev();
extern void _ZN7S3043C53v84Ev();
extern void _ZN7S3043C53v85Ev();
extern void _ZN7S3043C53v86Ev();
extern void _ZN7S3043C53v87Ev();
extern void _ZN7S3043C53v88Ev();
extern void _ZN7S3043C53v89Ev();
extern void _ZN7S3043C53v90Ev();
extern void _ZN7S3043C53v91Ev();
extern void _ZN7S3043C53v92Ev();
extern void _ZN7S3043C53v93Ev();
extern void _ZN7S3043C53v94Ev();
extern void _ZN7S3043C53v95Ev();
extern void _ZN7S3043C53v96Ev();
extern void _ZN7S3043C63v97Ev();
extern void _ZN7S3043C63v98Ev();
extern void _ZN7S3043C63v99Ev();
extern void _ZN7S3043C64v100Ev();
extern void _ZN7S3043C64v101Ev();
extern void _ZN7S3043C64v102Ev();
extern void _ZN7S3043C64v103Ev();
extern void _ZN7S3043C64v104Ev();
extern void _ZN7S3043C64v105Ev();
static  VTBL_ENTRY vtc_S3043C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3043C1[0]),
  (VTBL_ENTRY)&_ZN7S3043C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3043C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v74Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v75Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v76Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v77Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v78Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v79Ev,
  (VTBL_ENTRY)&_ZN7S3043C33v80Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v106Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v107Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v108Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v109Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v110Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v111Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v112Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v113Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v114Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v115Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v116Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v117Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v118Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v119Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v120Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v121Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v122Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v123Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v124Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v125Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v126Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v127Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v128Ev,
  (VTBL_ENTRY)&_ZN7S3043C24v129Ev,
  (VTBL_ENTRY)&_ZN7S3043C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3043C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3043C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3043C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3043C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3043C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3043C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3043C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3043C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3043C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3043C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3043C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3043C13v13Ev,
  (VTBL_ENTRY)&_ZN7S3043C13v14Ev,
  (VTBL_ENTRY)&_ZN7S3043C13v15Ev,
  (VTBL_ENTRY)&_ZN7S3043C13v16Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S3043C1[0]),
  (VTBL_ENTRY)&_ZN7S3043C53v81Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v82Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v83Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v84Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v85Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v86Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v87Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v88Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v89Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v90Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v91Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v92Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v93Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v94Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v95Ev,
  (VTBL_ENTRY)&_ZN7S3043C53v96Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S3043C1[0]),
  (VTBL_ENTRY)&_ZN7S3043C63v97Ev,
  (VTBL_ENTRY)&_ZN7S3043C63v98Ev,
  (VTBL_ENTRY)&_ZN7S3043C63v99Ev,
  (VTBL_ENTRY)&_ZN7S3043C64v100Ev,
  (VTBL_ENTRY)&_ZN7S3043C64v101Ev,
  (VTBL_ENTRY)&_ZN7S3043C64v102Ev,
  (VTBL_ENTRY)&_ZN7S3043C64v103Ev,
  (VTBL_ENTRY)&_ZN7S3043C64v104Ev,
  (VTBL_ENTRY)&_ZN7S3043C64v105Ev,
};
extern VTBL_ENTRY _ZTI7S3043C1[];
extern  VTBL_ENTRY _ZTV7S3043C1[];
Class_Descriptor cd_S3043C1 = {  "S3043C1", // class name
  bases_S3043C1, 4,
  &(vtc_S3043C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,116), // object size
  NSPAIRA(_ZTI7S3043C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3043C1),137, //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  S3038C3  {
  int s3038c3f0;
  __tsi64 s3038c3f1;
  void *s3038c3f2[4];
  int s3038c3f3[2];
  void *s3038c3f4;
  ::S79C8_nt s3038c3f5;
  void *s3038c3f6[2];
  virtual  ~S3038C3(); // _ZN7S3038C3D1Ev
  virtual void  v16(); // _ZN7S3038C33v16Ev
  virtual void  v17(); // _ZN7S3038C33v17Ev
  virtual void  v18(); // _ZN7S3038C33v18Ev
  virtual void  v19(); // _ZN7S3038C33v19Ev
  virtual void  v20(); // _ZN7S3038C33v20Ev
  virtual void  v21(); // _ZN7S3038C33v21Ev
  virtual void  v22(); // _ZN7S3038C33v22Ev
  virtual void  v23(); // _ZN7S3038C33v23Ev
  virtual void  v24(); // _ZN7S3038C33v24Ev
  virtual void  v25(); // _ZN7S3038C33v25Ev
  virtual void  v26(); // _ZN7S3038C33v26Ev
  virtual void  v27(); // _ZN7S3038C33v27Ev
  virtual void  v28(); // _ZN7S3038C33v28Ev
  virtual void  v29(); // _ZN7S3038C33v29Ev
  virtual void  v30(); // _ZN7S3038C33v30Ev
  virtual void  v31(); // _ZN7S3038C33v31Ev
  virtual void  v32(); // _ZN7S3038C33v32Ev
  virtual void  v33(); // _ZN7S3038C33v33Ev
  virtual void  v34(); // _ZN7S3038C33v34Ev
  virtual void  v35(); // _ZN7S3038C33v35Ev
  virtual void  v36(); // _ZN7S3038C33v36Ev
  virtual void  v37(); // _ZN7S3038C33v37Ev
  virtual void  v38(); // _ZN7S3038C33v38Ev
  virtual void  v39(); // _ZN7S3038C33v39Ev
  virtual void  v40(); // _ZN7S3038C33v40Ev
  virtual void  v41(); // _ZN7S3038C33v41Ev
  virtual void  v42(); // _ZN7S3038C33v42Ev
  virtual void  v43(); // _ZN7S3038C33v43Ev
  virtual void  v44(); // _ZN7S3038C33v44Ev
  virtual void  v45(); // _ZN7S3038C33v45Ev
  virtual void  v46(); // _ZN7S3038C33v46Ev
  virtual void  v47(); // _ZN7S3038C33v47Ev
  virtual void  v48(); // _ZN7S3038C33v48Ev
  virtual void  v49(); // _ZN7S3038C33v49Ev
  virtual void  v50(); // _ZN7S3038C33v50Ev
  virtual void  v51(); // _ZN7S3038C33v51Ev
  virtual void  v52(); // _ZN7S3038C33v52Ev
  virtual void  v53(); // _ZN7S3038C33v53Ev
  virtual void  v54(); // _ZN7S3038C33v54Ev
  virtual void  v55(); // _ZN7S3038C33v55Ev
  virtual void  v56(); // _ZN7S3038C33v56Ev
  virtual void  v57(); // _ZN7S3038C33v57Ev
  virtual void  v58(); // _ZN7S3038C33v58Ev
  virtual void  v59(); // _ZN7S3038C33v59Ev
  virtual void  v60(); // _ZN7S3038C33v60Ev
  virtual void  v61(); // _ZN7S3038C33v61Ev
  virtual void  v62(); // _ZN7S3038C33v62Ev
  virtual void  v63(); // _ZN7S3038C33v63Ev
  virtual void  v64(); // _ZN7S3038C33v64Ev
  virtual void  v65(); // _ZN7S3038C33v65Ev
  virtual void  v66(); // _ZN7S3038C33v66Ev
  virtual void  v67(); // _ZN7S3038C33v67Ev
  virtual void  v68(); // _ZN7S3038C33v68Ev
  virtual void  v69(); // _ZN7S3038C33v69Ev
  virtual void  v70(); // _ZN7S3038C33v70Ev
  virtual void  v71(); // _ZN7S3038C33v71Ev
  virtual void  v72(); // _ZN7S3038C33v72Ev
  virtual void  v73(); // _ZN7S3038C33v73Ev
  virtual void  v74(); // _ZN7S3038C33v74Ev
  virtual void  v75(); // _ZN7S3038C33v75Ev
  virtual void  v76(); // _ZN7S3038C33v76Ev
  virtual void  v77(); // _ZN7S3038C33v77Ev
  virtual void  v78(); // _ZN7S3038C33v78Ev
  virtual void  v79(); // _ZN7S3038C33v79Ev
  S3038C3(); // tgen
};
//SIG(-1 S3038C3) 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]}


 S3038C3 ::~S3038C3(){ note_dtor("S3038C3", this);}
void  S3038C3 ::v16(){vfunc_called(this, "_ZN7S3038C33v16Ev");}
void  S3038C3 ::v17(){vfunc_called(this, "_ZN7S3038C33v17Ev");}
void  S3038C3 ::v18(){vfunc_called(this, "_ZN7S3038C33v18Ev");}
void  S3038C3 ::v19(){vfunc_called(this, "_ZN7S3038C33v19Ev");}
void  S3038C3 ::v20(){vfunc_called(this, "_ZN7S3038C33v20Ev");}
void  S3038C3 ::v21(){vfunc_called(this, "_ZN7S3038C33v21Ev");}
void  S3038C3 ::v22(){vfunc_called(this, "_ZN7S3038C33v22Ev");}
void  S3038C3 ::v23(){vfunc_called(this, "_ZN7S3038C33v23Ev");}
void  S3038C3 ::v24(){vfunc_called(this, "_ZN7S3038C33v24Ev");}
void  S3038C3 ::v25(){vfunc_called(this, "_ZN7S3038C33v25Ev");}
void  S3038C3 ::v26(){vfunc_called(this, "_ZN7S3038C33v26Ev");}
void  S3038C3 ::v27(){vfunc_called(this, "_ZN7S3038C33v27Ev");}
void  S3038C3 ::v28(){vfunc_called(this, "_ZN7S3038C33v28Ev");}
void  S3038C3 ::v29(){vfunc_called(this, "_ZN7S3038C33v29Ev");}
void  S3038C3 ::v30(){vfunc_called(this, "_ZN7S3038C33v30Ev");}
void  S3038C3 ::v31(){vfunc_called(this, "_ZN7S3038C33v31Ev");}
void  S3038C3 ::v32(){vfunc_called(this, "_ZN7S3038C33v32Ev");}
void  S3038C3 ::v33(){vfunc_called(this, "_ZN7S3038C33v33Ev");}
void  S3038C3 ::v34(){vfunc_called(this, "_ZN7S3038C33v34Ev");}
void  S3038C3 ::v35(){vfunc_called(this, "_ZN7S3038C33v35Ev");}
void  S3038C3 ::v36(){vfunc_called(this, "_ZN7S3038C33v36Ev");}
void  S3038C3 ::v37(){vfunc_called(this, "_ZN7S3038C33v37Ev");}
void  S3038C3 ::v38(){vfunc_called(this, "_ZN7S3038C33v38Ev");}
void  S3038C3 ::v39(){vfunc_called(this, "_ZN7S3038C33v39Ev");}
void  S3038C3 ::v40(){vfunc_called(this, "_ZN7S3038C33v40Ev");}
void  S3038C3 ::v41(){vfunc_called(this, "_ZN7S3038C33v41Ev");}
void  S3038C3 ::v42(){vfunc_called(this, "_ZN7S3038C33v42Ev");}
void  S3038C3 ::v43(){vfunc_called(this, "_ZN7S3038C33v43Ev");}
void  S3038C3 ::v44(){vfunc_called(this, "_ZN7S3038C33v44Ev");}
void  S3038C3 ::v45(){vfunc_called(this, "_ZN7S3038C33v45Ev");}
void  S3038C3 ::v46(){vfunc_called(this, "_ZN7S3038C33v46Ev");}
void  S3038C3 ::v47(){vfunc_called(this, "_ZN7S3038C33v47Ev");}
void  S3038C3 ::v48(){vfunc_called(this, "_ZN7S3038C33v48Ev");}
void  S3038C3 ::v49(){vfunc_called(this, "_ZN7S3038C33v49Ev");}
void  S3038C3 ::v50(){vfunc_called(this, "_ZN7S3038C33v50Ev");}
void  S3038C3 ::v51(){vfunc_called(this, "_ZN7S3038C33v51Ev");}
void  S3038C3 ::v52(){vfunc_called(this, "_ZN7S3038C33v52Ev");}
void  S3038C3 ::v53(){vfunc_called(this, "_ZN7S3038C33v53Ev");}
void  S3038C3 ::v54(){vfunc_called(this, "_ZN7S3038C33v54Ev");}
void  S3038C3 ::v55(){vfunc_called(this, "_ZN7S3038C33v55Ev");}
void  S3038C3 ::v56(){vfunc_called(this, "_ZN7S3038C33v56Ev");}
void  S3038C3 ::v57(){vfunc_called(this, "_ZN7S3038C33v57Ev");}
void  S3038C3 ::v58(){vfunc_called(this, "_ZN7S3038C33v58Ev");}
void  S3038C3 ::v59(){vfunc_called(this, "_ZN7S3038C33v59Ev");}
void  S3038C3 ::v60(){vfunc_called(this, "_ZN7S3038C33v60Ev");}
void  S3038C3 ::v61(){vfunc_called(this, "_ZN7S3038C33v61Ev");}
void  S3038C3 ::v62(){vfunc_called(this, "_ZN7S3038C33v62Ev");}
void  S3038C3 ::v63(){vfunc_called(this, "_ZN7S3038C33v63Ev");}
void  S3038C3 ::v64(){vfunc_called(this, "_ZN7S3038C33v64Ev");}
void  S3038C3 ::v65(){vfunc_called(this, "_ZN7S3038C33v65Ev");}
void  S3038C3 ::v66(){vfunc_called(this, "_ZN7S3038C33v66Ev");}
void  S3038C3 ::v67(){vfunc_called(this, "_ZN7S3038C33v67Ev");}
void  S3038C3 ::v68(){vfunc_called(this, "_ZN7S3038C33v68Ev");}
void  S3038C3 ::v69(){vfunc_called(this, "_ZN7S3038C33v69Ev");}
void  S3038C3 ::v70(){vfunc_called(this, "_ZN7S3038C33v70Ev");}
void  S3038C3 ::v71(){vfunc_called(this, "_ZN7S3038C33v71Ev");}
void  S3038C3 ::v72(){vfunc_called(this, "_ZN7S3038C33v72Ev");}
void  S3038C3 ::v73(){vfunc_called(this, "_ZN7S3038C33v73Ev");}
void  S3038C3 ::v74(){vfunc_called(this, "_ZN7S3038C33v74Ev");}
void  S3038C3 ::v75(){vfunc_called(this, "_ZN7S3038C33v75Ev");}
void  S3038C3 ::v76(){vfunc_called(this, "_ZN7S3038C33v76Ev");}
void  S3038C3 ::v77(){vfunc_called(this, "_ZN7S3038C33v77Ev");}
void  S3038C3 ::v78(){vfunc_called(this, "_ZN7S3038C33v78Ev");}
void  S3038C3 ::v79(){vfunc_called(this, "_ZN7S3038C33v79Ev");}
S3038C3 ::S3038C3(){ note_ctor("S3038C3", this);} // tgen

static void Test_S3038C3()
{
  extern Class_Descriptor cd_S3038C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3038C3, buf);
    S3038C3 *dp, &lv = *(dp=new (buf) S3038C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3038C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3038C3)");
    check_field_offset(lv, s3038c3f0, ABISELECT(8,4), "S3038C3.s3038c3f0");
    check_field_offset(lv, s3038c3f1, ABISELECT(16,8), "S3038C3.s3038c3f1");
    check_field_offset(lv, s3038c3f2, ABISELECT(24,16), "S3038C3.s3038c3f2");
    check_field_offset(lv, s3038c3f3, ABISELECT(56,32), "S3038C3.s3038c3f3");
    check_field_offset(lv, s3038c3f4, ABISELECT(64,40), "S3038C3.s3038c3f4");
    check_field_offset(lv, s3038c3f5, ABISELECT(72,44), "S3038C3.s3038c3f5");
    check_field_offset(lv, s3038c3f6, ABISELECT(80,52), "S3038C3.s3038c3f6");
    test_class_info(&lv, &cd_S3038C3);
    dp->~S3038C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3038C3(Test_S3038C3, "S3038C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3038C3C1Ev();
extern void _ZN7S3038C3D1Ev();
Name_Map name_map_S3038C3[] = {
  NSPAIR(_ZN7S3038C3C1Ev),
  NSPAIR(_ZN7S3038C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3038C3[];
extern void _ZN7S3038C3D1Ev();
extern void _ZN7S3038C3D0Ev();
extern void _ZN7S3038C33v16Ev();
extern void _ZN7S3038C33v17Ev();
extern void _ZN7S3038C33v18Ev();
extern void _ZN7S3038C33v19Ev();
extern void _ZN7S3038C33v20Ev();
extern void _ZN7S3038C33v21Ev();
extern void _ZN7S3038C33v22Ev();
extern void _ZN7S3038C33v23Ev();
extern void _ZN7S3038C33v24Ev();
extern void _ZN7S3038C33v25Ev();
extern void _ZN7S3038C33v26Ev();
extern void _ZN7S3038C33v27Ev();
extern void _ZN7S3038C33v28Ev();
extern void _ZN7S3038C33v29Ev();
extern void _ZN7S3038C33v30Ev();
extern void _ZN7S3038C33v31Ev();
extern void _ZN7S3038C33v32Ev();
extern void _ZN7S3038C33v33Ev();
extern void _ZN7S3038C33v34Ev();
extern void _ZN7S3038C33v35Ev();
extern void _ZN7S3038C33v36Ev();
extern void _ZN7S3038C33v37Ev();
extern void _ZN7S3038C33v38Ev();
extern void _ZN7S3038C33v39Ev();
extern void _ZN7S3038C33v40Ev();
extern void _ZN7S3038C33v41Ev();
extern void _ZN7S3038C33v42Ev();
extern void _ZN7S3038C33v43Ev();
extern void _ZN7S3038C33v44Ev();
extern void _ZN7S3038C33v45Ev();
extern void _ZN7S3038C33v46Ev();
extern void _ZN7S3038C33v47Ev();
extern void _ZN7S3038C33v48Ev();
extern void _ZN7S3038C33v49Ev();
extern void _ZN7S3038C33v50Ev();
extern void _ZN7S3038C33v51Ev();
extern void _ZN7S3038C33v52Ev();
extern void _ZN7S3038C33v53Ev();
extern void _ZN7S3038C33v54Ev();
extern void _ZN7S3038C33v55Ev();
extern void _ZN7S3038C33v56Ev();
extern void _ZN7S3038C33v57Ev();
extern void _ZN7S3038C33v58Ev();
extern void _ZN7S3038C33v59Ev();
extern void _ZN7S3038C33v60Ev();
extern void _ZN7S3038C33v61Ev();
extern void _ZN7S3038C33v62Ev();
extern void _ZN7S3038C33v63Ev();
extern void _ZN7S3038C33v64Ev();
extern void _ZN7S3038C33v65Ev();
extern void _ZN7S3038C33v66Ev();
extern void _ZN7S3038C33v67Ev();
extern void _ZN7S3038C33v68Ev();
extern void _ZN7S3038C33v69Ev();
extern void _ZN7S3038C33v70Ev();
extern void _ZN7S3038C33v71Ev();
extern void _ZN7S3038C33v72Ev();
extern void _ZN7S3038C33v73Ev();
extern void _ZN7S3038C33v74Ev();
extern void _ZN7S3038C33v75Ev();
extern void _ZN7S3038C33v76Ev();
extern void _ZN7S3038C33v77Ev();
extern void _ZN7S3038C33v78Ev();
extern void _ZN7S3038C33v79Ev();
static  VTBL_ENTRY vtc_S3038C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3038C3[0]),
  (VTBL_ENTRY)&_ZN7S3038C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3038C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v74Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v75Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v76Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v77Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v78Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v79Ev,
};
extern VTBL_ENTRY _ZTI7S3038C3[];
extern  VTBL_ENTRY _ZTV7S3038C3[];
Class_Descriptor cd_S3038C3 = {  "S3038C3", // class name
  0,0,//no base classes
  &(vtc_S3038C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3038C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3038C3),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  S3038C5  {
  virtual void  v80(); // _ZN7S3038C53v80Ev
  virtual void  v81(); // _ZN7S3038C53v81Ev
  virtual void  v82(); // _ZN7S3038C53v82Ev
  virtual void  v83(); // _ZN7S3038C53v83Ev
  virtual void  v84(); // _ZN7S3038C53v84Ev
  virtual void  v85(); // _ZN7S3038C53v85Ev
  virtual void  v86(); // _ZN7S3038C53v86Ev
  virtual void  v87(); // _ZN7S3038C53v87Ev
  virtual void  v88(); // _ZN7S3038C53v88Ev
  virtual void  v89(); // _ZN7S3038C53v89Ev
  virtual void  v90(); // _ZN7S3038C53v90Ev
  virtual void  v91(); // _ZN7S3038C53v91Ev
  virtual void  v92(); // _ZN7S3038C53v92Ev
  virtual void  v93(); // _ZN7S3038C53v93Ev
  virtual void  v94(); // _ZN7S3038C53v94Ev
  virtual void  v95(); // _ZN7S3038C53v95Ev
  ~S3038C5(); // tgen
  S3038C5(); // tgen
};
//SIG(-1 S3038C5) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16}


void  S3038C5 ::v80(){vfunc_called(this, "_ZN7S3038C53v80Ev");}
void  S3038C5 ::v81(){vfunc_called(this, "_ZN7S3038C53v81Ev");}
void  S3038C5 ::v82(){vfunc_called(this, "_ZN7S3038C53v82Ev");}
void  S3038C5 ::v83(){vfunc_called(this, "_ZN7S3038C53v83Ev");}
void  S3038C5 ::v84(){vfunc_called(this, "_ZN7S3038C53v84Ev");}
void  S3038C5 ::v85(){vfunc_called(this, "_ZN7S3038C53v85Ev");}
void  S3038C5 ::v86(){vfunc_called(this, "_ZN7S3038C53v86Ev");}
void  S3038C5 ::v87(){vfunc_called(this, "_ZN7S3038C53v87Ev");}
void  S3038C5 ::v88(){vfunc_called(this, "_ZN7S3038C53v88Ev");}
void  S3038C5 ::v89(){vfunc_called(this, "_ZN7S3038C53v89Ev");}
void  S3038C5 ::v90(){vfunc_called(this, "_ZN7S3038C53v90Ev");}
void  S3038C5 ::v91(){vfunc_called(this, "_ZN7S3038C53v91Ev");}
void  S3038C5 ::v92(){vfunc_called(this, "_ZN7S3038C53v92Ev");}
void  S3038C5 ::v93(){vfunc_called(this, "_ZN7S3038C53v93Ev");}
void  S3038C5 ::v94(){vfunc_called(this, "_ZN7S3038C53v94Ev");}
void  S3038C5 ::v95(){vfunc_called(this, "_ZN7S3038C53v95Ev");}
S3038C5 ::~S3038C5(){ note_dtor("S3038C5", this);} // tgen
S3038C5 ::S3038C5(){ note_ctor("S3038C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3038C5C1Ev();
extern void _ZN7S3038C5D1Ev();
Name_Map name_map_S3038C5[] = {
  NSPAIR(_ZN7S3038C5C1Ev),
  NSPAIR(_ZN7S3038C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3038C5[];
extern void _ZN7S3038C53v80Ev();
extern void _ZN7S3038C53v81Ev();
extern void _ZN7S3038C53v82Ev();
extern void _ZN7S3038C53v83Ev();
extern void _ZN7S3038C53v84Ev();
extern void _ZN7S3038C53v85Ev();
extern void _ZN7S3038C53v86Ev();
extern void _ZN7S3038C53v87Ev();
extern void _ZN7S3038C53v88Ev();
extern void _ZN7S3038C53v89Ev();
extern void _ZN7S3038C53v90Ev();
extern void _ZN7S3038C53v91Ev();
extern void _ZN7S3038C53v92Ev();
extern void _ZN7S3038C53v93Ev();
extern void _ZN7S3038C53v94Ev();
extern void _ZN7S3038C53v95Ev();
static  VTBL_ENTRY vtc_S3038C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3038C5[0]),
  (VTBL_ENTRY)&_ZN7S3038C53v80Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v81Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v82Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v83Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v84Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v85Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v86Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v87Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v88Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v89Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v90Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v91Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v92Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v93Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v94Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v95Ev,
};
extern VTBL_ENTRY _ZTI7S3038C5[];
extern  VTBL_ENTRY _ZTV7S3038C5[];
Class_Descriptor cd_S3038C5 = {  "S3038C5", // class name
  0,0,//no base classes
  &(vtc_S3038C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3038C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3038C5),18, //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  S3038C6  {
  virtual void  v96(); // _ZN7S3038C63v96Ev
  virtual void  v97(); // _ZN7S3038C63v97Ev
  virtual void  v98(); // _ZN7S3038C63v98Ev
  virtual void  v99(); // _ZN7S3038C63v99Ev
  virtual void  v100(); // _ZN7S3038C64v100Ev
  virtual void  v101(); // _ZN7S3038C64v101Ev
  virtual void  v102(); // _ZN7S3038C64v102Ev
  virtual void  v103(); // _ZN7S3038C64v103Ev
  virtual void  v104(); // _ZN7S3038C64v104Ev
  ~S3038C6(); // tgen
  S3038C6(); // tgen
};
//SIG(-1 S3038C6) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S3038C6 ::v96(){vfunc_called(this, "_ZN7S3038C63v96Ev");}
void  S3038C6 ::v97(){vfunc_called(this, "_ZN7S3038C63v97Ev");}
void  S3038C6 ::v98(){vfunc_called(this, "_ZN7S3038C63v98Ev");}
void  S3038C6 ::v99(){vfunc_called(this, "_ZN7S3038C63v99Ev");}
void  S3038C6 ::v100(){vfunc_called(this, "_ZN7S3038C64v100Ev");}
void  S3038C6 ::v101(){vfunc_called(this, "_ZN7S3038C64v101Ev");}
void  S3038C6 ::v102(){vfunc_called(this, "_ZN7S3038C64v102Ev");}
void  S3038C6 ::v103(){vfunc_called(this, "_ZN7S3038C64v103Ev");}
void  S3038C6 ::v104(){vfunc_called(this, "_ZN7S3038C64v104Ev");}
S3038C6 ::~S3038C6(){ note_dtor("S3038C6", this);} // tgen
S3038C6 ::S3038C6(){ note_ctor("S3038C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3038C6C1Ev();
extern void _ZN7S3038C6D1Ev();
Name_Map name_map_S3038C6[] = {
  NSPAIR(_ZN7S3038C6C1Ev),
  NSPAIR(_ZN7S3038C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3038C6[];
extern void _ZN7S3038C63v96Ev();
extern void _ZN7S3038C63v97Ev();
extern void _ZN7S3038C63v98Ev();
extern void _ZN7S3038C63v99Ev();
extern void _ZN7S3038C64v100Ev();
extern void _ZN7S3038C64v101Ev();
extern void _ZN7S3038C64v102Ev();
extern void _ZN7S3038C64v103Ev();
extern void _ZN7S3038C64v104Ev();
static  VTBL_ENTRY vtc_S3038C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3038C6[0]),
  (VTBL_ENTRY)&_ZN7S3038C63v96Ev,
  (VTBL_ENTRY)&_ZN7S3038C63v97Ev,
  (VTBL_ENTRY)&_ZN7S3038C63v98Ev,
  (VTBL_ENTRY)&_ZN7S3038C63v99Ev,
  (VTBL_ENTRY)&_ZN7S3038C64v100Ev,
  (VTBL_ENTRY)&_ZN7S3038C64v101Ev,
  (VTBL_ENTRY)&_ZN7S3038C64v102Ev,
  (VTBL_ENTRY)&_ZN7S3038C64v103Ev,
  (VTBL_ENTRY)&_ZN7S3038C64v104Ev,
};
extern VTBL_ENTRY _ZTI7S3038C6[];
extern  VTBL_ENTRY _ZTV7S3038C6[];
Class_Descriptor cd_S3038C6 = {  "S3038C6", // class name
  0,0,//no base classes
  &(vtc_S3038C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3038C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3038C6),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  S3038C2  : S3038C3 , S3038C5 , S3038C6 {
  void *s3038c2f0;
  ::S79C39_nt s3038c2f1;
  unsigned int s3038c2f2:1;
  unsigned int s3038c2f3:1;
  unsigned int s3038c2f4:1;
  unsigned int s3038c2f5:1;
  virtual  ~S3038C2(); // _ZN7S3038C2D1Ev
  virtual void  v105(); // _ZN7S3038C24v105Ev
  virtual void  v106(); // _ZN7S3038C24v106Ev
  virtual void  v107(); // _ZN7S3038C24v107Ev
  virtual void  v108(); // _ZN7S3038C24v108Ev
  virtual void  v109(); // _ZN7S3038C24v109Ev
  virtual void  v110(); // _ZN7S3038C24v110Ev
  virtual void  v111(); // _ZN7S3038C24v111Ev
  virtual void  v112(); // _ZN7S3038C24v112Ev
  virtual void  v113(); // _ZN7S3038C24v113Ev
  virtual void  v114(); // _ZN7S3038C24v114Ev
  virtual void  v115(); // _ZN7S3038C24v115Ev
  virtual void  v116(); // _ZN7S3038C24v116Ev
  virtual void  v117(); // _ZN7S3038C24v117Ev
  virtual void  v118(); // _ZN7S3038C24v118Ev
  virtual void  v119(); // _ZN7S3038C24v119Ev
  virtual void  v120(); // _ZN7S3038C24v120Ev
  virtual void  v121(); // _ZN7S3038C24v121Ev
  virtual void  v122(); // _ZN7S3038C24v122Ev
  virtual void  v123(); // _ZN7S3038C24v123Ev
  virtual void  v124(); // _ZN7S3038C24v124Ev
  virtual void  v125(); // _ZN7S3038C24v125Ev
  virtual void  v126(); // _ZN7S3038C24v126Ev
  virtual void  v127(); // _ZN7S3038C24v127Ev
  virtual void  v128(); // _ZN7S3038C24v128Ev
  S3038C2(); // tgen
};
//SIG(-1 S3038C2) C1{ BC2{ vd 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 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} BC4{ v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104} BC5{ v105 v106 v107 v108 v109 v110 v111 v112 v113} 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 Fp FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1}


 S3038C2 ::~S3038C2(){ note_dtor("S3038C2", this);}
void  S3038C2 ::v105(){vfunc_called(this, "_ZN7S3038C24v105Ev");}
void  S3038C2 ::v106(){vfunc_called(this, "_ZN7S3038C24v106Ev");}
void  S3038C2 ::v107(){vfunc_called(this, "_ZN7S3038C24v107Ev");}
void  S3038C2 ::v108(){vfunc_called(this, "_ZN7S3038C24v108Ev");}
void  S3038C2 ::v109(){vfunc_called(this, "_ZN7S3038C24v109Ev");}
void  S3038C2 ::v110(){vfunc_called(this, "_ZN7S3038C24v110Ev");}
void  S3038C2 ::v111(){vfunc_called(this, "_ZN7S3038C24v111Ev");}
void  S3038C2 ::v112(){vfunc_called(this, "_ZN7S3038C24v112Ev");}
void  S3038C2 ::v113(){vfunc_called(this, "_ZN7S3038C24v113Ev");}
void  S3038C2 ::v114(){vfunc_called(this, "_ZN7S3038C24v114Ev");}
void  S3038C2 ::v115(){vfunc_called(this, "_ZN7S3038C24v115Ev");}
void  S3038C2 ::v116(){vfunc_called(this, "_ZN7S3038C24v116Ev");}
void  S3038C2 ::v117(){vfunc_called(this, "_ZN7S3038C24v117Ev");}
void  S3038C2 ::v118(){vfunc_called(this, "_ZN7S3038C24v118Ev");}
void  S3038C2 ::v119(){vfunc_called(this, "_ZN7S3038C24v119Ev");}
void  S3038C2 ::v120(){vfunc_called(this, "_ZN7S3038C24v120Ev");}
void  S3038C2 ::v121(){vfunc_called(this, "_ZN7S3038C24v121Ev");}
void  S3038C2 ::v122(){vfunc_called(this, "_ZN7S3038C24v122Ev");}
void  S3038C2 ::v123(){vfunc_called(this, "_ZN7S3038C24v123Ev");}
void  S3038C2 ::v124(){vfunc_called(this, "_ZN7S3038C24v124Ev");}
void  S3038C2 ::v125(){vfunc_called(this, "_ZN7S3038C24v125Ev");}
void  S3038C2 ::v126(){vfunc_called(this, "_ZN7S3038C24v126Ev");}
void  S3038C2 ::v127(){vfunc_called(this, "_ZN7S3038C24v127Ev");}
void  S3038C2 ::v128(){vfunc_called(this, "_ZN7S3038C24v128Ev");}
S3038C2 ::S3038C2(){ note_ctor("S3038C2", this);} // tgen

static void Test_S3038C2()
{
  extern Class_Descriptor cd_S3038C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,23)];
    init_test(&cd_S3038C2, buf);
    S3038C2 *dp, &lv = *(dp=new (buf) S3038C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S3038C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3038C2)");
    check_base_class_offset(lv, (S3038C3*), 0, "S3038C2");
    check_base_class_offset(lv, (S3038C5*), ABISELECT(96,60), "S3038C2");
    check_base_class_offset(lv, (S3038C6*), ABISELECT(104,64), "S3038C2");
    check_field_offset(lv, s3038c2f0, ABISELECT(112,68), "S3038C2.s3038c2f0");
    check_field_offset(lv, s3038c2f1, ABISELECT(120,72), "S3038C2.s3038c2f1");
    set_bf_and_test(lv, s3038c2f2, ABISELECT(136,84), 0, 1, 1, "S3038C2");
    set_bf_and_test(lv, s3038c2f3, ABISELECT(136,84), 1, 1, 1, "S3038C2");
    set_bf_and_test(lv, s3038c2f4, ABISELECT(136,84), 2, 1, 1, "S3038C2");
    set_bf_and_test(lv, s3038c2f5, ABISELECT(136,84), 3, 1, 1, "S3038C2");
    test_class_info(&lv, &cd_S3038C2);
    dp->~S3038C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3038C2(Test_S3038C2, "S3038C2", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN7S3038C2C1Ev();
extern void _ZN7S3038C2D1Ev();
Name_Map name_map_S3038C2[] = {
  NSPAIR(_ZN7S3038C2C1Ev),
  NSPAIR(_ZN7S3038C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3038C3;
extern VTBL_ENTRY _ZTI7S3038C3[];
extern  VTBL_ENTRY _ZTV7S3038C3[];
extern Class_Descriptor cd_S3038C5;
extern VTBL_ENTRY _ZTI7S3038C5[];
extern  VTBL_ENTRY _ZTV7S3038C5[];
extern Class_Descriptor cd_S3038C6;
extern VTBL_ENTRY _ZTI7S3038C6[];
extern  VTBL_ENTRY _ZTV7S3038C6[];
static Base_Class bases_S3038C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3038C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3038C5,    ABISELECT(96,60), //bcp->offset
    92, //bcp->virtual_function_table_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_S3038C6,    ABISELECT(104,64), //bcp->offset
    110, //bcp->virtual_function_table_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 _ZTI7S3038C2[];
extern void _ZN7S3038C2D1Ev();
extern void _ZN7S3038C2D0Ev();
extern void _ZN7S3038C33v16Ev();
extern void _ZN7S3038C33v17Ev();
extern void _ZN7S3038C33v18Ev();
extern void _ZN7S3038C33v19Ev();
extern void _ZN7S3038C33v20Ev();
extern void _ZN7S3038C33v21Ev();
extern void _ZN7S3038C33v22Ev();
extern void _ZN7S3038C33v23Ev();
extern void _ZN7S3038C33v24Ev();
extern void _ZN7S3038C33v25Ev();
extern void _ZN7S3038C33v26Ev();
extern void _ZN7S3038C33v27Ev();
extern void _ZN7S3038C33v28Ev();
extern void _ZN7S3038C33v29Ev();
extern void _ZN7S3038C33v30Ev();
extern void _ZN7S3038C33v31Ev();
extern void _ZN7S3038C33v32Ev();
extern void _ZN7S3038C33v33Ev();
extern void _ZN7S3038C33v34Ev();
extern void _ZN7S3038C33v35Ev();
extern void _ZN7S3038C33v36Ev();
extern void _ZN7S3038C33v37Ev();
extern void _ZN7S3038C33v38Ev();
extern void _ZN7S3038C33v39Ev();
extern void _ZN7S3038C33v40Ev();
extern void _ZN7S3038C33v41Ev();
extern void _ZN7S3038C33v42Ev();
extern void _ZN7S3038C33v43Ev();
extern void _ZN7S3038C33v44Ev();
extern void _ZN7S3038C33v45Ev();
extern void _ZN7S3038C33v46Ev();
extern void _ZN7S3038C33v47Ev();
extern void _ZN7S3038C33v48Ev();
extern void _ZN7S3038C33v49Ev();
extern void _ZN7S3038C33v50Ev();
extern void _ZN7S3038C33v51Ev();
extern void _ZN7S3038C33v52Ev();
extern void _ZN7S3038C33v53Ev();
extern void _ZN7S3038C33v54Ev();
extern void _ZN7S3038C33v55Ev();
extern void _ZN7S3038C33v56Ev();
extern void _ZN7S3038C33v57Ev();
extern void _ZN7S3038C33v58Ev();
extern void _ZN7S3038C33v59Ev();
extern void _ZN7S3038C33v60Ev();
extern void _ZN7S3038C33v61Ev();
extern void _ZN7S3038C33v62Ev();
extern void _ZN7S3038C33v63Ev();
extern void _ZN7S3038C33v64Ev();
extern void _ZN7S3038C33v65Ev();
extern void _ZN7S3038C33v66Ev();
extern void _ZN7S3038C33v67Ev();
extern void _ZN7S3038C33v68Ev();
extern void _ZN7S3038C33v69Ev();
extern void _ZN7S3038C33v70Ev();
extern void _ZN7S3038C33v71Ev();
extern void _ZN7S3038C33v72Ev();
extern void _ZN7S3038C33v73Ev();
extern void _ZN7S3038C33v74Ev();
extern void _ZN7S3038C33v75Ev();
extern void _ZN7S3038C33v76Ev();
extern void _ZN7S3038C33v77Ev();
extern void _ZN7S3038C33v78Ev();
extern void _ZN7S3038C33v79Ev();
extern void _ZN7S3038C24v105Ev();
extern void _ZN7S3038C24v106Ev();
extern void _ZN7S3038C24v107Ev();
extern void _ZN7S3038C24v108Ev();
extern void _ZN7S3038C24v109Ev();
extern void _ZN7S3038C24v110Ev();
extern void _ZN7S3038C24v111Ev();
extern void _ZN7S3038C24v112Ev();
extern void _ZN7S3038C24v113Ev();
extern void _ZN7S3038C24v114Ev();
extern void _ZN7S3038C24v115Ev();
extern void _ZN7S3038C24v116Ev();
extern void _ZN7S3038C24v117Ev();
extern void _ZN7S3038C24v118Ev();
extern void _ZN7S3038C24v119Ev();
extern void _ZN7S3038C24v120Ev();
extern void _ZN7S3038C24v121Ev();
extern void _ZN7S3038C24v122Ev();
extern void _ZN7S3038C24v123Ev();
extern void _ZN7S3038C24v124Ev();
extern void _ZN7S3038C24v125Ev();
extern void _ZN7S3038C24v126Ev();
extern void _ZN7S3038C24v127Ev();
extern void _ZN7S3038C24v128Ev();
extern void _ZN7S3038C53v80Ev();
extern void _ZN7S3038C53v81Ev();
extern void _ZN7S3038C53v82Ev();
extern void _ZN7S3038C53v83Ev();
extern void _ZN7S3038C53v84Ev();
extern void _ZN7S3038C53v85Ev();
extern void _ZN7S3038C53v86Ev();
extern void _ZN7S3038C53v87Ev();
extern void _ZN7S3038C53v88Ev();
extern void _ZN7S3038C53v89Ev();
extern void _ZN7S3038C53v90Ev();
extern void _ZN7S3038C53v91Ev();
extern void _ZN7S3038C53v92Ev();
extern void _ZN7S3038C53v93Ev();
extern void _ZN7S3038C53v94Ev();
extern void _ZN7S3038C53v95Ev();
extern void _ZN7S3038C63v96Ev();
extern void _ZN7S3038C63v97Ev();
extern void _ZN7S3038C63v98Ev();
extern void _ZN7S3038C63v99Ev();
extern void _ZN7S3038C64v100Ev();
extern void _ZN7S3038C64v101Ev();
extern void _ZN7S3038C64v102Ev();
extern void _ZN7S3038C64v103Ev();
extern void _ZN7S3038C64v104Ev();
static  VTBL_ENTRY vtc_S3038C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3038C2[0]),
  (VTBL_ENTRY)&_ZN7S3038C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3038C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v74Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v75Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v76Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v77Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v78Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v79Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v105Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v106Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v107Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v108Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v109Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v110Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v111Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v112Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v113Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v114Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v115Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v116Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v117Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v118Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v119Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v120Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v121Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v122Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v123Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v124Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v125Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v126Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v127Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v128Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S3038C2[0]),
  (VTBL_ENTRY)&_ZN7S3038C53v80Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v81Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v82Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v83Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v84Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v85Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v86Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v87Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v88Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v89Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v90Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v91Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v92Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v93Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v94Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v95Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S3038C2[0]),
  (VTBL_ENTRY)&_ZN7S3038C63v96Ev,
  (VTBL_ENTRY)&_ZN7S3038C63v97Ev,
  (VTBL_ENTRY)&_ZN7S3038C63v98Ev,
  (VTBL_ENTRY)&_ZN7S3038C63v99Ev,
  (VTBL_ENTRY)&_ZN7S3038C64v100Ev,
  (VTBL_ENTRY)&_ZN7S3038C64v101Ev,
  (VTBL_ENTRY)&_ZN7S3038C64v102Ev,
  (VTBL_ENTRY)&_ZN7S3038C64v103Ev,
  (VTBL_ENTRY)&_ZN7S3038C64v104Ev,
};
extern VTBL_ENTRY _ZTI7S3038C2[];
extern  VTBL_ENTRY _ZTV7S3038C2[];
Class_Descriptor cd_S3038C2 = {  "S3038C2", // class name
  bases_S3038C2, 3,
  &(vtc_S3038C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI7S3038C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3038C2),121, //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  S3038C1  : S3038C2 {
  ::S79C44 s3038c1f0;
  unsigned int s3038c1f1:1;
  unsigned int s3038c1f2:1;
  unsigned int s3038c1f3:1;
  virtual  ~S3038C1(); // _ZN7S3038C1D1Ev
  virtual void  v1(); // _ZN7S3038C12v1Ev
  virtual void  v2(); // _ZN7S3038C12v2Ev
  virtual void  v3(); // _ZN7S3038C12v3Ev
  virtual void  v4(); // _ZN7S3038C12v4Ev
  virtual void  v5(); // _ZN7S3038C12v5Ev
  virtual void  v6(); // _ZN7S3038C12v6Ev
  virtual void  v7(); // _ZN7S3038C12v7Ev
  virtual void  v8(); // _ZN7S3038C12v8Ev
  virtual void  v9(); // _ZN7S3038C12v9Ev
  virtual void  v10(); // _ZN7S3038C13v10Ev
  virtual void  v11(); // _ZN7S3038C13v11Ev
  virtual void  v12(); // _ZN7S3038C13v12Ev
  virtual void  v13(); // _ZN7S3038C13v13Ev
  virtual void  v14(); // _ZN7S3038C13v14Ev
  virtual void  v15(); // _ZN7S3038C13v15Ev
  S3038C1(); // tgen
};
//SIG(1 S3038C1) C1{ BC2{ BC3{ vd 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 v79 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} BC5{ v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95} BC6{ v96 v97 v98 v99 v100 v101 v102 v103 v104} vd v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 Fp FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 FC11{ BC12{ BC10}} Fi:1 Fi:1 Fi:1}


 S3038C1 ::~S3038C1(){ note_dtor("S3038C1", this);}
void  S3038C1 ::v1(){vfunc_called(this, "_ZN7S3038C12v1Ev");}
void  S3038C1 ::v2(){vfunc_called(this, "_ZN7S3038C12v2Ev");}
void  S3038C1 ::v3(){vfunc_called(this, "_ZN7S3038C12v3Ev");}
void  S3038C1 ::v4(){vfunc_called(this, "_ZN7S3038C12v4Ev");}
void  S3038C1 ::v5(){vfunc_called(this, "_ZN7S3038C12v5Ev");}
void  S3038C1 ::v6(){vfunc_called(this, "_ZN7S3038C12v6Ev");}
void  S3038C1 ::v7(){vfunc_called(this, "_ZN7S3038C12v7Ev");}
void  S3038C1 ::v8(){vfunc_called(this, "_ZN7S3038C12v8Ev");}
void  S3038C1 ::v9(){vfunc_called(this, "_ZN7S3038C12v9Ev");}
void  S3038C1 ::v10(){vfunc_called(this, "_ZN7S3038C13v10Ev");}
void  S3038C1 ::v11(){vfunc_called(this, "_ZN7S3038C13v11Ev");}
void  S3038C1 ::v12(){vfunc_called(this, "_ZN7S3038C13v12Ev");}
void  S3038C1 ::v13(){vfunc_called(this, "_ZN7S3038C13v13Ev");}
void  S3038C1 ::v14(){vfunc_called(this, "_ZN7S3038C13v14Ev");}
void  S3038C1 ::v15(){vfunc_called(this, "_ZN7S3038C13v15Ev");}
S3038C1 ::S3038C1(){ note_ctor("S3038C1", this);} // tgen

static void Test_S3038C1()
{
  extern Class_Descriptor cd_S3038C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,27)];
    init_test(&cd_S3038C1, buf);
    S3038C1 *dp, &lv = *(dp=new (buf) S3038C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,104), "sizeof(S3038C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3038C1)");
    check_base_class_offset(lv, (S3038C3*)(S3038C2*), 0, "S3038C1");
    check_base_class_offset(lv, (S3038C5*)(S3038C2*), ABISELECT(96,60), "S3038C1");
    check_base_class_offset(lv, (S3038C6*)(S3038C2*), ABISELECT(104,64), "S3038C1");
    check_base_class_offset(lv, (S3038C2*), 0, "S3038C1");
    check_field_offset(lv, s3038c1f0, ABISELECT(144,88), "S3038C1.s3038c1f0");
    set_bf_and_test(lv, s3038c1f1, ABISELECT(160,100), 0, 1, 1, "S3038C1");
    set_bf_and_test(lv, s3038c1f2, ABISELECT(160,100), 1, 1, 1, "S3038C1");
    set_bf_and_test(lv, s3038c1f3, ABISELECT(160,100), 2, 1, 1, "S3038C1");
    test_class_info(&lv, &cd_S3038C1);
    dp->~S3038C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3038C1(Test_S3038C1, "S3038C1", ABISELECT(168,104));

#else // __cplusplus

extern void _ZN7S3038C1C1Ev();
extern void _ZN7S3038C1D1Ev();
Name_Map name_map_S3038C1[] = {
  NSPAIR(_ZN7S3038C1C1Ev),
  NSPAIR(_ZN7S3038C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3038C3;
extern VTBL_ENTRY _ZTI7S3038C3[];
extern  VTBL_ENTRY _ZTV7S3038C3[];
extern Class_Descriptor cd_S3038C5;
extern VTBL_ENTRY _ZTI7S3038C5[];
extern  VTBL_ENTRY _ZTV7S3038C5[];
extern Class_Descriptor cd_S3038C6;
extern VTBL_ENTRY _ZTI7S3038C6[];
extern  VTBL_ENTRY _ZTV7S3038C6[];
extern Class_Descriptor cd_S3038C2;
extern VTBL_ENTRY _ZTI7S3038C2[];
extern  VTBL_ENTRY _ZTV7S3038C2[];
static Base_Class bases_S3038C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3038C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3038C5,    ABISELECT(96,60), //bcp->offset
    107, //bcp->virtual_function_table_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_S3038C6,    ABISELECT(104,64), //bcp->offset
    125, //bcp->virtual_function_table_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_S3038C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3038C1[];
extern void _ZN7S3038C1D1Ev();
extern void _ZN7S3038C1D0Ev();
extern void _ZN7S3038C33v16Ev();
extern void _ZN7S3038C33v17Ev();
extern void _ZN7S3038C33v18Ev();
extern void _ZN7S3038C33v19Ev();
extern void _ZN7S3038C33v20Ev();
extern void _ZN7S3038C33v21Ev();
extern void _ZN7S3038C33v22Ev();
extern void _ZN7S3038C33v23Ev();
extern void _ZN7S3038C33v24Ev();
extern void _ZN7S3038C33v25Ev();
extern void _ZN7S3038C33v26Ev();
extern void _ZN7S3038C33v27Ev();
extern void _ZN7S3038C33v28Ev();
extern void _ZN7S3038C33v29Ev();
extern void _ZN7S3038C33v30Ev();
extern void _ZN7S3038C33v31Ev();
extern void _ZN7S3038C33v32Ev();
extern void _ZN7S3038C33v33Ev();
extern void _ZN7S3038C33v34Ev();
extern void _ZN7S3038C33v35Ev();
extern void _ZN7S3038C33v36Ev();
extern void _ZN7S3038C33v37Ev();
extern void _ZN7S3038C33v38Ev();
extern void _ZN7S3038C33v39Ev();
extern void _ZN7S3038C33v40Ev();
extern void _ZN7S3038C33v41Ev();
extern void _ZN7S3038C33v42Ev();
extern void _ZN7S3038C33v43Ev();
extern void _ZN7S3038C33v44Ev();
extern void _ZN7S3038C33v45Ev();
extern void _ZN7S3038C33v46Ev();
extern void _ZN7S3038C33v47Ev();
extern void _ZN7S3038C33v48Ev();
extern void _ZN7S3038C33v49Ev();
extern void _ZN7S3038C33v50Ev();
extern void _ZN7S3038C33v51Ev();
extern void _ZN7S3038C33v52Ev();
extern void _ZN7S3038C33v53Ev();
extern void _ZN7S3038C33v54Ev();
extern void _ZN7S3038C33v55Ev();
extern void _ZN7S3038C33v56Ev();
extern void _ZN7S3038C33v57Ev();
extern void _ZN7S3038C33v58Ev();
extern void _ZN7S3038C33v59Ev();
extern void _ZN7S3038C33v60Ev();
extern void _ZN7S3038C33v61Ev();
extern void _ZN7S3038C33v62Ev();
extern void _ZN7S3038C33v63Ev();
extern void _ZN7S3038C33v64Ev();
extern void _ZN7S3038C33v65Ev();
extern void _ZN7S3038C33v66Ev();
extern void _ZN7S3038C33v67Ev();
extern void _ZN7S3038C33v68Ev();
extern void _ZN7S3038C33v69Ev();
extern void _ZN7S3038C33v70Ev();
extern void _ZN7S3038C33v71Ev();
extern void _ZN7S3038C33v72Ev();
extern void _ZN7S3038C33v73Ev();
extern void _ZN7S3038C33v74Ev();
extern void _ZN7S3038C33v75Ev();
extern void _ZN7S3038C33v76Ev();
extern void _ZN7S3038C33v77Ev();
extern void _ZN7S3038C33v78Ev();
extern void _ZN7S3038C33v79Ev();
extern void _ZN7S3038C24v105Ev();
extern void _ZN7S3038C24v106Ev();
extern void _ZN7S3038C24v107Ev();
extern void _ZN7S3038C24v108Ev();
extern void _ZN7S3038C24v109Ev();
extern void _ZN7S3038C24v110Ev();
extern void _ZN7S3038C24v111Ev();
extern void _ZN7S3038C24v112Ev();
extern void _ZN7S3038C24v113Ev();
extern void _ZN7S3038C24v114Ev();
extern void _ZN7S3038C24v115Ev();
extern void _ZN7S3038C24v116Ev();
extern void _ZN7S3038C24v117Ev();
extern void _ZN7S3038C24v118Ev();
extern void _ZN7S3038C24v119Ev();
extern void _ZN7S3038C24v120Ev();
extern void _ZN7S3038C24v121Ev();
extern void _ZN7S3038C24v122Ev();
extern void _ZN7S3038C24v123Ev();
extern void _ZN7S3038C24v124Ev();
extern void _ZN7S3038C24v125Ev();
extern void _ZN7S3038C24v126Ev();
extern void _ZN7S3038C24v127Ev();
extern void _ZN7S3038C24v128Ev();
extern void _ZN7S3038C12v1Ev();
extern void _ZN7S3038C12v2Ev();
extern void _ZN7S3038C12v3Ev();
extern void _ZN7S3038C12v4Ev();
extern void _ZN7S3038C12v5Ev();
extern void _ZN7S3038C12v6Ev();
extern void _ZN7S3038C12v7Ev();
extern void _ZN7S3038C12v8Ev();
extern void _ZN7S3038C12v9Ev();
extern void _ZN7S3038C13v10Ev();
extern void _ZN7S3038C13v11Ev();
extern void _ZN7S3038C13v12Ev();
extern void _ZN7S3038C13v13Ev();
extern void _ZN7S3038C13v14Ev();
extern void _ZN7S3038C13v15Ev();
extern void _ZN7S3038C53v80Ev();
extern void _ZN7S3038C53v81Ev();
extern void _ZN7S3038C53v82Ev();
extern void _ZN7S3038C53v83Ev();
extern void _ZN7S3038C53v84Ev();
extern void _ZN7S3038C53v85Ev();
extern void _ZN7S3038C53v86Ev();
extern void _ZN7S3038C53v87Ev();
extern void _ZN7S3038C53v88Ev();
extern void _ZN7S3038C53v89Ev();
extern void _ZN7S3038C53v90Ev();
extern void _ZN7S3038C53v91Ev();
extern void _ZN7S3038C53v92Ev();
extern void _ZN7S3038C53v93Ev();
extern void _ZN7S3038C53v94Ev();
extern void _ZN7S3038C53v95Ev();
extern void _ZN7S3038C63v96Ev();
extern void _ZN7S3038C63v97Ev();
extern void _ZN7S3038C63v98Ev();
extern void _ZN7S3038C63v99Ev();
extern void _ZN7S3038C64v100Ev();
extern void _ZN7S3038C64v101Ev();
extern void _ZN7S3038C64v102Ev();
extern void _ZN7S3038C64v103Ev();
extern void _ZN7S3038C64v104Ev();
static  VTBL_ENTRY vtc_S3038C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3038C1[0]),
  (VTBL_ENTRY)&_ZN7S3038C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3038C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v74Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v75Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v76Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v77Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v78Ev,
  (VTBL_ENTRY)&_ZN7S3038C33v79Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v105Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v106Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v107Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v108Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v109Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v110Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v111Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v112Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v113Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v114Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v115Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v116Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v117Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v118Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v119Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v120Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v121Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v122Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v123Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v124Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v125Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v126Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v127Ev,
  (VTBL_ENTRY)&_ZN7S3038C24v128Ev,
  (VTBL_ENTRY)&_ZN7S3038C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3038C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3038C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3038C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3038C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3038C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3038C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3038C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3038C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3038C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3038C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3038C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3038C13v13Ev,
  (VTBL_ENTRY)&_ZN7S3038C13v14Ev,
  (VTBL_ENTRY)&_ZN7S3038C13v15Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S3038C1[0]),
  (VTBL_ENTRY)&_ZN7S3038C53v80Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v81Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v82Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v83Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v84Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v85Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v86Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v87Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v88Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v89Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v90Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v91Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v92Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v93Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v94Ev,
  (VTBL_ENTRY)&_ZN7S3038C53v95Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S3038C1[0]),
  (VTBL_ENTRY)&_ZN7S3038C63v96Ev,
  (VTBL_ENTRY)&_ZN7S3038C63v97Ev,
  (VTBL_ENTRY)&_ZN7S3038C63v98Ev,
  (VTBL_ENTRY)&_ZN7S3038C63v99Ev,
  (VTBL_ENTRY)&_ZN7S3038C64v100Ev,
  (VTBL_ENTRY)&_ZN7S3038C64v101Ev,
  (VTBL_ENTRY)&_ZN7S3038C64v102Ev,
  (VTBL_ENTRY)&_ZN7S3038C64v103Ev,
  (VTBL_ENTRY)&_ZN7S3038C64v104Ev,
};
extern VTBL_ENTRY _ZTI7S3038C1[];
extern  VTBL_ENTRY _ZTV7S3038C1[];
Class_Descriptor cd_S3038C1 = {  "S3038C1", // class name
  bases_S3038C1, 4,
  &(vtc_S3038C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,104), // object size
  NSPAIRA(_ZTI7S3038C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3038C1),136, //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  S3044C3  {
  int s3044c3f0;
  __tsi64 s3044c3f1;
  void *s3044c3f2[4];
  int s3044c3f3[2];
  void *s3044c3f4;
  ::S79C8_nt s3044c3f5;
  void *s3044c3f6[2];
  virtual  ~S3044C3(); // _ZN7S3044C3D1Ev
  virtual void  v17(); // _ZN7S3044C33v17Ev
  virtual void  v18(); // _ZN7S3044C33v18Ev
  virtual void  v19(); // _ZN7S3044C33v19Ev
  virtual void  v20(); // _ZN7S3044C33v20Ev
  virtual void  v21(); // _ZN7S3044C33v21Ev
  virtual void  v22(); // _ZN7S3044C33v22Ev
  virtual void  v23(); // _ZN7S3044C33v23Ev
  virtual void  v24(); // _ZN7S3044C33v24Ev
  virtual void  v25(); // _ZN7S3044C33v25Ev
  virtual void  v26(); // _ZN7S3044C33v26Ev
  virtual void  v27(); // _ZN7S3044C33v27Ev
  virtual void  v28(); // _ZN7S3044C33v28Ev
  virtual void  v29(); // _ZN7S3044C33v29Ev
  virtual void  v30(); // _ZN7S3044C33v30Ev
  virtual void  v31(); // _ZN7S3044C33v31Ev
  virtual void  v32(); // _ZN7S3044C33v32Ev
  virtual void  v33(); // _ZN7S3044C33v33Ev
  virtual void  v34(); // _ZN7S3044C33v34Ev
  virtual void  v35(); // _ZN7S3044C33v35Ev
  virtual void  v36(); // _ZN7S3044C33v36Ev
  virtual void  v37(); // _ZN7S3044C33v37Ev
  virtual void  v38(); // _ZN7S3044C33v38Ev
  virtual void  v39(); // _ZN7S3044C33v39Ev
  virtual void  v40(); // _ZN7S3044C33v40Ev
  virtual void  v41(); // _ZN7S3044C33v41Ev
  virtual void  v42(); // _ZN7S3044C33v42Ev
  virtual void  v43(); // _ZN7S3044C33v43Ev
  virtual void  v44(); // _ZN7S3044C33v44Ev
  virtual void  v45(); // _ZN7S3044C33v45Ev
  virtual void  v46(); // _ZN7S3044C33v46Ev
  virtual void  v47(); // _ZN7S3044C33v47Ev
  virtual void  v48(); // _ZN7S3044C33v48Ev
  virtual void  v49(); // _ZN7S3044C33v49Ev
  virtual void  v50(); // _ZN7S3044C33v50Ev
  virtual void  v51(); // _ZN7S3044C33v51Ev
  virtual void  v52(); // _ZN7S3044C33v52Ev
  virtual void  v53(); // _ZN7S3044C33v53Ev
  virtual void  v54(); // _ZN7S3044C33v54Ev
  virtual void  v55(); // _ZN7S3044C33v55Ev
  virtual void  v56(); // _ZN7S3044C33v56Ev
  virtual void  v57(); // _ZN7S3044C33v57Ev
  virtual void  v58(); // _ZN7S3044C33v58Ev
  virtual void  v59(); // _ZN7S3044C33v59Ev
  virtual void  v60(); // _ZN7S3044C33v60Ev
  virtual void  v61(); // _ZN7S3044C33v61Ev
  virtual void  v62(); // _ZN7S3044C33v62Ev
  virtual void  v63(); // _ZN7S3044C33v63Ev
  virtual void  v64(); // _ZN7S3044C33v64Ev
  virtual void  v65(); // _ZN7S3044C33v65Ev
  virtual void  v66(); // _ZN7S3044C33v66Ev
  virtual void  v67(); // _ZN7S3044C33v67Ev
  virtual void  v68(); // _ZN7S3044C33v68Ev
  virtual void  v69(); // _ZN7S3044C33v69Ev
  virtual void  v70(); // _ZN7S3044C33v70Ev
  virtual void  v71(); // _ZN7S3044C33v71Ev
  virtual void  v72(); // _ZN7S3044C33v72Ev
  virtual void  v73(); // _ZN7S3044C33v73Ev
  virtual void  v74(); // _ZN7S3044C33v74Ev
  virtual void  v75(); // _ZN7S3044C33v75Ev
  virtual void  v76(); // _ZN7S3044C33v76Ev
  virtual void  v77(); // _ZN7S3044C33v77Ev
  virtual void  v78(); // _ZN7S3044C33v78Ev
  virtual void  v79(); // _ZN7S3044C33v79Ev
  virtual void  v80(); // _ZN7S3044C33v80Ev
  S3044C3(); // tgen
};
//SIG(-1 S3044C3) 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]}


 S3044C3 ::~S3044C3(){ note_dtor("S3044C3", this);}
void  S3044C3 ::v17(){vfunc_called(this, "_ZN7S3044C33v17Ev");}
void  S3044C3 ::v18(){vfunc_called(this, "_ZN7S3044C33v18Ev");}
void  S3044C3 ::v19(){vfunc_called(this, "_ZN7S3044C33v19Ev");}
void  S3044C3 ::v20(){vfunc_called(this, "_ZN7S3044C33v20Ev");}
void  S3044C3 ::v21(){vfunc_called(this, "_ZN7S3044C33v21Ev");}
void  S3044C3 ::v22(){vfunc_called(this, "_ZN7S3044C33v22Ev");}
void  S3044C3 ::v23(){vfunc_called(this, "_ZN7S3044C33v23Ev");}
void  S3044C3 ::v24(){vfunc_called(this, "_ZN7S3044C33v24Ev");}
void  S3044C3 ::v25(){vfunc_called(this, "_ZN7S3044C33v25Ev");}
void  S3044C3 ::v26(){vfunc_called(this, "_ZN7S3044C33v26Ev");}
void  S3044C3 ::v27(){vfunc_called(this, "_ZN7S3044C33v27Ev");}
void  S3044C3 ::v28(){vfunc_called(this, "_ZN7S3044C33v28Ev");}
void  S3044C3 ::v29(){vfunc_called(this, "_ZN7S3044C33v29Ev");}
void  S3044C3 ::v30(){vfunc_called(this, "_ZN7S3044C33v30Ev");}
void  S3044C3 ::v31(){vfunc_called(this, "_ZN7S3044C33v31Ev");}
void  S3044C3 ::v32(){vfunc_called(this, "_ZN7S3044C33v32Ev");}
void  S3044C3 ::v33(){vfunc_called(this, "_ZN7S3044C33v33Ev");}
void  S3044C3 ::v34(){vfunc_called(this, "_ZN7S3044C33v34Ev");}
void  S3044C3 ::v35(){vfunc_called(this, "_ZN7S3044C33v35Ev");}
void  S3044C3 ::v36(){vfunc_called(this, "_ZN7S3044C33v36Ev");}
void  S3044C3 ::v37(){vfunc_called(this, "_ZN7S3044C33v37Ev");}
void  S3044C3 ::v38(){vfunc_called(this, "_ZN7S3044C33v38Ev");}
void  S3044C3 ::v39(){vfunc_called(this, "_ZN7S3044C33v39Ev");}
void  S3044C3 ::v40(){vfunc_called(this, "_ZN7S3044C33v40Ev");}
void  S3044C3 ::v41(){vfunc_called(this, "_ZN7S3044C33v41Ev");}
void  S3044C3 ::v42(){vfunc_called(this, "_ZN7S3044C33v42Ev");}
void  S3044C3 ::v43(){vfunc_called(this, "_ZN7S3044C33v43Ev");}
void  S3044C3 ::v44(){vfunc_called(this, "_ZN7S3044C33v44Ev");}
void  S3044C3 ::v45(){vfunc_called(this, "_ZN7S3044C33v45Ev");}
void  S3044C3 ::v46(){vfunc_called(this, "_ZN7S3044C33v46Ev");}
void  S3044C3 ::v47(){vfunc_called(this, "_ZN7S3044C33v47Ev");}
void  S3044C3 ::v48(){vfunc_called(this, "_ZN7S3044C33v48Ev");}
void  S3044C3 ::v49(){vfunc_called(this, "_ZN7S3044C33v49Ev");}
void  S3044C3 ::v50(){vfunc_called(this, "_ZN7S3044C33v50Ev");}
void  S3044C3 ::v51(){vfunc_called(this, "_ZN7S3044C33v51Ev");}
void  S3044C3 ::v52(){vfunc_called(this, "_ZN7S3044C33v52Ev");}
void  S3044C3 ::v53(){vfunc_called(this, "_ZN7S3044C33v53Ev");}
void  S3044C3 ::v54(){vfunc_called(this, "_ZN7S3044C33v54Ev");}
void  S3044C3 ::v55(){vfunc_called(this, "_ZN7S3044C33v55Ev");}
void  S3044C3 ::v56(){vfunc_called(this, "_ZN7S3044C33v56Ev");}
void  S3044C3 ::v57(){vfunc_called(this, "_ZN7S3044C33v57Ev");}
void  S3044C3 ::v58(){vfunc_called(this, "_ZN7S3044C33v58Ev");}
void  S3044C3 ::v59(){vfunc_called(this, "_ZN7S3044C33v59Ev");}
void  S3044C3 ::v60(){vfunc_called(this, "_ZN7S3044C33v60Ev");}
void  S3044C3 ::v61(){vfunc_called(this, "_ZN7S3044C33v61Ev");}
void  S3044C3 ::v62(){vfunc_called(this, "_ZN7S3044C33v62Ev");}
void  S3044C3 ::v63(){vfunc_called(this, "_ZN7S3044C33v63Ev");}
void  S3044C3 ::v64(){vfunc_called(this, "_ZN7S3044C33v64Ev");}
void  S3044C3 ::v65(){vfunc_called(this, "_ZN7S3044C33v65Ev");}
void  S3044C3 ::v66(){vfunc_called(this, "_ZN7S3044C33v66Ev");}
void  S3044C3 ::v67(){vfunc_called(this, "_ZN7S3044C33v67Ev");}
void  S3044C3 ::v68(){vfunc_called(this, "_ZN7S3044C33v68Ev");}
void  S3044C3 ::v69(){vfunc_called(this, "_ZN7S3044C33v69Ev");}
void  S3044C3 ::v70(){vfunc_called(this, "_ZN7S3044C33v70Ev");}
void  S3044C3 ::v71(){vfunc_called(this, "_ZN7S3044C33v71Ev");}
void  S3044C3 ::v72(){vfunc_called(this, "_ZN7S3044C33v72Ev");}
void  S3044C3 ::v73(){vfunc_called(this, "_ZN7S3044C33v73Ev");}
void  S3044C3 ::v74(){vfunc_called(this, "_ZN7S3044C33v74Ev");}
void  S3044C3 ::v75(){vfunc_called(this, "_ZN7S3044C33v75Ev");}
void  S3044C3 ::v76(){vfunc_called(this, "_ZN7S3044C33v76Ev");}
void  S3044C3 ::v77(){vfunc_called(this, "_ZN7S3044C33v77Ev");}
void  S3044C3 ::v78(){vfunc_called(this, "_ZN7S3044C33v78Ev");}
void  S3044C3 ::v79(){vfunc_called(this, "_ZN7S3044C33v79Ev");}
void  S3044C3 ::v80(){vfunc_called(this, "_ZN7S3044C33v80Ev");}
S3044C3 ::S3044C3(){ note_ctor("S3044C3", this);} // tgen

static void Test_S3044C3()
{
  extern Class_Descriptor cd_S3044C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3044C3, buf);
    S3044C3 *dp, &lv = *(dp=new (buf) S3044C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3044C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3044C3)");
    check_field_offset(lv, s3044c3f0, ABISELECT(8,4), "S3044C3.s3044c3f0");
    check_field_offset(lv, s3044c3f1, ABISELECT(16,8), "S3044C3.s3044c3f1");
    check_field_offset(lv, s3044c3f2, ABISELECT(24,16), "S3044C3.s3044c3f2");
    check_field_offset(lv, s3044c3f3, ABISELECT(56,32), "S3044C3.s3044c3f3");
    check_field_offset(lv, s3044c3f4, ABISELECT(64,40), "S3044C3.s3044c3f4");
    check_field_offset(lv, s3044c3f5, ABISELECT(72,44), "S3044C3.s3044c3f5");
    check_field_offset(lv, s3044c3f6, ABISELECT(80,52), "S3044C3.s3044c3f6");
    test_class_info(&lv, &cd_S3044C3);
    dp->~S3044C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3044C3(Test_S3044C3, "S3044C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3044C3C1Ev();
extern void _ZN7S3044C3D1Ev();
Name_Map name_map_S3044C3[] = {
  NSPAIR(_ZN7S3044C3C1Ev),
  NSPAIR(_ZN7S3044C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3044C3[];
extern void _ZN7S3044C3D1Ev();
extern void _ZN7S3044C3D0Ev();
extern void _ZN7S3044C33v17Ev();
extern void _ZN7S3044C33v18Ev();
extern void _ZN7S3044C33v19Ev();
extern void _ZN7S3044C33v20Ev();
extern void _ZN7S3044C33v21Ev();
extern void _ZN7S3044C33v22Ev();
extern void _ZN7S3044C33v23Ev();
extern void _ZN7S3044C33v24Ev();
extern void _ZN7S3044C33v25Ev();
extern void _ZN7S3044C33v26Ev();
extern void _ZN7S3044C33v27Ev();
extern void _ZN7S3044C33v28Ev();
extern void _ZN7S3044C33v29Ev();
extern void _ZN7S3044C33v30Ev();
extern void _ZN7S3044C33v31Ev();
extern void _ZN7S3044C33v32Ev();
extern void _ZN7S3044C33v33Ev();
extern void _ZN7S3044C33v34Ev();
extern void _ZN7S3044C33v35Ev();
extern void _ZN7S3044C33v36Ev();
extern void _ZN7S3044C33v37Ev();
extern void _ZN7S3044C33v38Ev();
extern void _ZN7S3044C33v39Ev();
extern void _ZN7S3044C33v40Ev();
extern void _ZN7S3044C33v41Ev();
extern void _ZN7S3044C33v42Ev();
extern void _ZN7S3044C33v43Ev();
extern void _ZN7S3044C33v44Ev();
extern void _ZN7S3044C33v45Ev();
extern void _ZN7S3044C33v46Ev();
extern void _ZN7S3044C33v47Ev();
extern void _ZN7S3044C33v48Ev();
extern void _ZN7S3044C33v49Ev();
extern void _ZN7S3044C33v50Ev();
extern void _ZN7S3044C33v51Ev();
extern void _ZN7S3044C33v52Ev();
extern void _ZN7S3044C33v53Ev();
extern void _ZN7S3044C33v54Ev();
extern void _ZN7S3044C33v55Ev();
extern void _ZN7S3044C33v56Ev();
extern void _ZN7S3044C33v57Ev();
extern void _ZN7S3044C33v58Ev();
extern void _ZN7S3044C33v59Ev();
extern void _ZN7S3044C33v60Ev();
extern void _ZN7S3044C33v61Ev();
extern void _ZN7S3044C33v62Ev();
extern void _ZN7S3044C33v63Ev();
extern void _ZN7S3044C33v64Ev();
extern void _ZN7S3044C33v65Ev();
extern void _ZN7S3044C33v66Ev();
extern void _ZN7S3044C33v67Ev();
extern void _ZN7S3044C33v68Ev();
extern void _ZN7S3044C33v69Ev();
extern void _ZN7S3044C33v70Ev();
extern void _ZN7S3044C33v71Ev();
extern void _ZN7S3044C33v72Ev();
extern void _ZN7S3044C33v73Ev();
extern void _ZN7S3044C33v74Ev();
extern void _ZN7S3044C33v75Ev();
extern void _ZN7S3044C33v76Ev();
extern void _ZN7S3044C33v77Ev();
extern void _ZN7S3044C33v78Ev();
extern void _ZN7S3044C33v79Ev();
extern void _ZN7S3044C33v80Ev();
static  VTBL_ENTRY vtc_S3044C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3044C3[0]),
  (VTBL_ENTRY)&_ZN7S3044C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3044C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v74Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v75Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v76Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v77Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v78Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v79Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v80Ev,
};
extern VTBL_ENTRY _ZTI7S3044C3[];
extern  VTBL_ENTRY _ZTV7S3044C3[];
Class_Descriptor cd_S3044C3 = {  "S3044C3", // class name
  0,0,//no base classes
  &(vtc_S3044C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3044C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3044C3),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  S3044C5  {
  virtual void  v81(); // _ZN7S3044C53v81Ev
  virtual void  v82(); // _ZN7S3044C53v82Ev
  virtual void  v83(); // _ZN7S3044C53v83Ev
  virtual void  v84(); // _ZN7S3044C53v84Ev
  virtual void  v85(); // _ZN7S3044C53v85Ev
  virtual void  v86(); // _ZN7S3044C53v86Ev
  virtual void  v87(); // _ZN7S3044C53v87Ev
  virtual void  v88(); // _ZN7S3044C53v88Ev
  virtual void  v89(); // _ZN7S3044C53v89Ev
  virtual void  v90(); // _ZN7S3044C53v90Ev
  virtual void  v91(); // _ZN7S3044C53v91Ev
  virtual void  v92(); // _ZN7S3044C53v92Ev
  virtual void  v93(); // _ZN7S3044C53v93Ev
  virtual void  v94(); // _ZN7S3044C53v94Ev
  virtual void  v95(); // _ZN7S3044C53v95Ev
  virtual void  v96(); // _ZN7S3044C53v96Ev
  ~S3044C5(); // tgen
  S3044C5(); // tgen
};
//SIG(-1 S3044C5) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16}


void  S3044C5 ::v81(){vfunc_called(this, "_ZN7S3044C53v81Ev");}
void  S3044C5 ::v82(){vfunc_called(this, "_ZN7S3044C53v82Ev");}
void  S3044C5 ::v83(){vfunc_called(this, "_ZN7S3044C53v83Ev");}
void  S3044C5 ::v84(){vfunc_called(this, "_ZN7S3044C53v84Ev");}
void  S3044C5 ::v85(){vfunc_called(this, "_ZN7S3044C53v85Ev");}
void  S3044C5 ::v86(){vfunc_called(this, "_ZN7S3044C53v86Ev");}
void  S3044C5 ::v87(){vfunc_called(this, "_ZN7S3044C53v87Ev");}
void  S3044C5 ::v88(){vfunc_called(this, "_ZN7S3044C53v88Ev");}
void  S3044C5 ::v89(){vfunc_called(this, "_ZN7S3044C53v89Ev");}
void  S3044C5 ::v90(){vfunc_called(this, "_ZN7S3044C53v90Ev");}
void  S3044C5 ::v91(){vfunc_called(this, "_ZN7S3044C53v91Ev");}
void  S3044C5 ::v92(){vfunc_called(this, "_ZN7S3044C53v92Ev");}
void  S3044C5 ::v93(){vfunc_called(this, "_ZN7S3044C53v93Ev");}
void  S3044C5 ::v94(){vfunc_called(this, "_ZN7S3044C53v94Ev");}
void  S3044C5 ::v95(){vfunc_called(this, "_ZN7S3044C53v95Ev");}
void  S3044C5 ::v96(){vfunc_called(this, "_ZN7S3044C53v96Ev");}
S3044C5 ::~S3044C5(){ note_dtor("S3044C5", this);} // tgen
S3044C5 ::S3044C5(){ note_ctor("S3044C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3044C5C1Ev();
extern void _ZN7S3044C5D1Ev();
Name_Map name_map_S3044C5[] = {
  NSPAIR(_ZN7S3044C5C1Ev),
  NSPAIR(_ZN7S3044C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3044C5[];
extern void _ZN7S3044C53v81Ev();
extern void _ZN7S3044C53v82Ev();
extern void _ZN7S3044C53v83Ev();
extern void _ZN7S3044C53v84Ev();
extern void _ZN7S3044C53v85Ev();
extern void _ZN7S3044C53v86Ev();
extern void _ZN7S3044C53v87Ev();
extern void _ZN7S3044C53v88Ev();
extern void _ZN7S3044C53v89Ev();
extern void _ZN7S3044C53v90Ev();
extern void _ZN7S3044C53v91Ev();
extern void _ZN7S3044C53v92Ev();
extern void _ZN7S3044C53v93Ev();
extern void _ZN7S3044C53v94Ev();
extern void _ZN7S3044C53v95Ev();
extern void _ZN7S3044C53v96Ev();
static  VTBL_ENTRY vtc_S3044C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3044C5[0]),
  (VTBL_ENTRY)&_ZN7S3044C53v81Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v82Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v83Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v84Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v85Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v86Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v87Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v88Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v89Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v90Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v91Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v92Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v93Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v94Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v95Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v96Ev,
};
extern VTBL_ENTRY _ZTI7S3044C5[];
extern  VTBL_ENTRY _ZTV7S3044C5[];
Class_Descriptor cd_S3044C5 = {  "S3044C5", // class name
  0,0,//no base classes
  &(vtc_S3044C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3044C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3044C5),18, //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  S3044C6  {
  virtual void  v97(); // _ZN7S3044C63v97Ev
  virtual void  v98(); // _ZN7S3044C63v98Ev
  virtual void  v99(); // _ZN7S3044C63v99Ev
  virtual void  v100(); // _ZN7S3044C64v100Ev
  virtual void  v101(); // _ZN7S3044C64v101Ev
  virtual void  v102(); // _ZN7S3044C64v102Ev
  virtual void  v103(); // _ZN7S3044C64v103Ev
  virtual void  v104(); // _ZN7S3044C64v104Ev
  virtual void  v105(); // _ZN7S3044C64v105Ev
  ~S3044C6(); // tgen
  S3044C6(); // tgen
};
//SIG(-1 S3044C6) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S3044C6 ::v97(){vfunc_called(this, "_ZN7S3044C63v97Ev");}
void  S3044C6 ::v98(){vfunc_called(this, "_ZN7S3044C63v98Ev");}
void  S3044C6 ::v99(){vfunc_called(this, "_ZN7S3044C63v99Ev");}
void  S3044C6 ::v100(){vfunc_called(this, "_ZN7S3044C64v100Ev");}
void  S3044C6 ::v101(){vfunc_called(this, "_ZN7S3044C64v101Ev");}
void  S3044C6 ::v102(){vfunc_called(this, "_ZN7S3044C64v102Ev");}
void  S3044C6 ::v103(){vfunc_called(this, "_ZN7S3044C64v103Ev");}
void  S3044C6 ::v104(){vfunc_called(this, "_ZN7S3044C64v104Ev");}
void  S3044C6 ::v105(){vfunc_called(this, "_ZN7S3044C64v105Ev");}
S3044C6 ::~S3044C6(){ note_dtor("S3044C6", this);} // tgen
S3044C6 ::S3044C6(){ note_ctor("S3044C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3044C6C1Ev();
extern void _ZN7S3044C6D1Ev();
Name_Map name_map_S3044C6[] = {
  NSPAIR(_ZN7S3044C6C1Ev),
  NSPAIR(_ZN7S3044C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3044C6[];
extern void _ZN7S3044C63v97Ev();
extern void _ZN7S3044C63v98Ev();
extern void _ZN7S3044C63v99Ev();
extern void _ZN7S3044C64v100Ev();
extern void _ZN7S3044C64v101Ev();
extern void _ZN7S3044C64v102Ev();
extern void _ZN7S3044C64v103Ev();
extern void _ZN7S3044C64v104Ev();
extern void _ZN7S3044C64v105Ev();
static  VTBL_ENTRY vtc_S3044C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3044C6[0]),
  (VTBL_ENTRY)&_ZN7S3044C63v97Ev,
  (VTBL_ENTRY)&_ZN7S3044C63v98Ev,
  (VTBL_ENTRY)&_ZN7S3044C63v99Ev,
  (VTBL_ENTRY)&_ZN7S3044C64v100Ev,
  (VTBL_ENTRY)&_ZN7S3044C64v101Ev,
  (VTBL_ENTRY)&_ZN7S3044C64v102Ev,
  (VTBL_ENTRY)&_ZN7S3044C64v103Ev,
  (VTBL_ENTRY)&_ZN7S3044C64v104Ev,
  (VTBL_ENTRY)&_ZN7S3044C64v105Ev,
};
extern VTBL_ENTRY _ZTI7S3044C6[];
extern  VTBL_ENTRY _ZTV7S3044C6[];
Class_Descriptor cd_S3044C6 = {  "S3044C6", // class name
  0,0,//no base classes
  &(vtc_S3044C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3044C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3044C6),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  S3044C2  : S3044C3 , S3044C5 , S3044C6 {
  void *s3044c2f0;
  ::S79C39_nt s3044c2f1;
  unsigned int s3044c2f2:1;
  unsigned int s3044c2f3:1;
  unsigned int s3044c2f4:1;
  unsigned int s3044c2f5:1;
  virtual  ~S3044C2(); // _ZN7S3044C2D1Ev
  virtual void  v106(); // _ZN7S3044C24v106Ev
  virtual void  v107(); // _ZN7S3044C24v107Ev
  virtual void  v108(); // _ZN7S3044C24v108Ev
  virtual void  v109(); // _ZN7S3044C24v109Ev
  virtual void  v110(); // _ZN7S3044C24v110Ev
  virtual void  v111(); // _ZN7S3044C24v111Ev
  virtual void  v112(); // _ZN7S3044C24v112Ev
  virtual void  v113(); // _ZN7S3044C24v113Ev
  virtual void  v114(); // _ZN7S3044C24v114Ev
  virtual void  v115(); // _ZN7S3044C24v115Ev
  virtual void  v116(); // _ZN7S3044C24v116Ev
  virtual void  v117(); // _ZN7S3044C24v117Ev
  virtual void  v118(); // _ZN7S3044C24v118Ev
  virtual void  v119(); // _ZN7S3044C24v119Ev
  virtual void  v120(); // _ZN7S3044C24v120Ev
  virtual void  v121(); // _ZN7S3044C24v121Ev
  virtual void  v122(); // _ZN7S3044C24v122Ev
  virtual void  v123(); // _ZN7S3044C24v123Ev
  virtual void  v124(); // _ZN7S3044C24v124Ev
  virtual void  v125(); // _ZN7S3044C24v125Ev
  virtual void  v126(); // _ZN7S3044C24v126Ev
  virtual void  v127(); // _ZN7S3044C24v127Ev
  virtual void  v128(); // _ZN7S3044C24v128Ev
  virtual void  v129(); // _ZN7S3044C24v129Ev
  S3044C2(); // tgen
};
//SIG(-1 S3044C2) C1{ BC2{ vd 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 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} BC4{ v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104} BC5{ v105 v106 v107 v108 v109 v110 v111 v112 v113} 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 Fp FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1}


 S3044C2 ::~S3044C2(){ note_dtor("S3044C2", this);}
void  S3044C2 ::v106(){vfunc_called(this, "_ZN7S3044C24v106Ev");}
void  S3044C2 ::v107(){vfunc_called(this, "_ZN7S3044C24v107Ev");}
void  S3044C2 ::v108(){vfunc_called(this, "_ZN7S3044C24v108Ev");}
void  S3044C2 ::v109(){vfunc_called(this, "_ZN7S3044C24v109Ev");}
void  S3044C2 ::v110(){vfunc_called(this, "_ZN7S3044C24v110Ev");}
void  S3044C2 ::v111(){vfunc_called(this, "_ZN7S3044C24v111Ev");}
void  S3044C2 ::v112(){vfunc_called(this, "_ZN7S3044C24v112Ev");}
void  S3044C2 ::v113(){vfunc_called(this, "_ZN7S3044C24v113Ev");}
void  S3044C2 ::v114(){vfunc_called(this, "_ZN7S3044C24v114Ev");}
void  S3044C2 ::v115(){vfunc_called(this, "_ZN7S3044C24v115Ev");}
void  S3044C2 ::v116(){vfunc_called(this, "_ZN7S3044C24v116Ev");}
void  S3044C2 ::v117(){vfunc_called(this, "_ZN7S3044C24v117Ev");}
void  S3044C2 ::v118(){vfunc_called(this, "_ZN7S3044C24v118Ev");}
void  S3044C2 ::v119(){vfunc_called(this, "_ZN7S3044C24v119Ev");}
void  S3044C2 ::v120(){vfunc_called(this, "_ZN7S3044C24v120Ev");}
void  S3044C2 ::v121(){vfunc_called(this, "_ZN7S3044C24v121Ev");}
void  S3044C2 ::v122(){vfunc_called(this, "_ZN7S3044C24v122Ev");}
void  S3044C2 ::v123(){vfunc_called(this, "_ZN7S3044C24v123Ev");}
void  S3044C2 ::v124(){vfunc_called(this, "_ZN7S3044C24v124Ev");}
void  S3044C2 ::v125(){vfunc_called(this, "_ZN7S3044C24v125Ev");}
void  S3044C2 ::v126(){vfunc_called(this, "_ZN7S3044C24v126Ev");}
void  S3044C2 ::v127(){vfunc_called(this, "_ZN7S3044C24v127Ev");}
void  S3044C2 ::v128(){vfunc_called(this, "_ZN7S3044C24v128Ev");}
void  S3044C2 ::v129(){vfunc_called(this, "_ZN7S3044C24v129Ev");}
S3044C2 ::S3044C2(){ note_ctor("S3044C2", this);} // tgen

static void Test_S3044C2()
{
  extern Class_Descriptor cd_S3044C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,23)];
    init_test(&cd_S3044C2, buf);
    S3044C2 *dp, &lv = *(dp=new (buf) S3044C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S3044C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3044C2)");
    check_base_class_offset(lv, (S3044C3*), 0, "S3044C2");
    check_base_class_offset(lv, (S3044C5*), ABISELECT(96,60), "S3044C2");
    check_base_class_offset(lv, (S3044C6*), ABISELECT(104,64), "S3044C2");
    check_field_offset(lv, s3044c2f0, ABISELECT(112,68), "S3044C2.s3044c2f0");
    check_field_offset(lv, s3044c2f1, ABISELECT(120,72), "S3044C2.s3044c2f1");
    set_bf_and_test(lv, s3044c2f2, ABISELECT(136,84), 0, 1, 1, "S3044C2");
    set_bf_and_test(lv, s3044c2f3, ABISELECT(136,84), 1, 1, 1, "S3044C2");
    set_bf_and_test(lv, s3044c2f4, ABISELECT(136,84), 2, 1, 1, "S3044C2");
    set_bf_and_test(lv, s3044c2f5, ABISELECT(136,84), 3, 1, 1, "S3044C2");
    test_class_info(&lv, &cd_S3044C2);
    dp->~S3044C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3044C2(Test_S3044C2, "S3044C2", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN7S3044C2C1Ev();
extern void _ZN7S3044C2D1Ev();
Name_Map name_map_S3044C2[] = {
  NSPAIR(_ZN7S3044C2C1Ev),
  NSPAIR(_ZN7S3044C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3044C3;
extern VTBL_ENTRY _ZTI7S3044C3[];
extern  VTBL_ENTRY _ZTV7S3044C3[];
extern Class_Descriptor cd_S3044C5;
extern VTBL_ENTRY _ZTI7S3044C5[];
extern  VTBL_ENTRY _ZTV7S3044C5[];
extern Class_Descriptor cd_S3044C6;
extern VTBL_ENTRY _ZTI7S3044C6[];
extern  VTBL_ENTRY _ZTV7S3044C6[];
static Base_Class bases_S3044C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3044C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3044C5,    ABISELECT(96,60), //bcp->offset
    92, //bcp->virtual_function_table_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_S3044C6,    ABISELECT(104,64), //bcp->offset
    110, //bcp->virtual_function_table_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 _ZTI7S3044C2[];
extern void _ZN7S3044C2D1Ev();
extern void _ZN7S3044C2D0Ev();
extern void _ZN7S3044C33v17Ev();
extern void _ZN7S3044C33v18Ev();
extern void _ZN7S3044C33v19Ev();
extern void _ZN7S3044C33v20Ev();
extern void _ZN7S3044C33v21Ev();
extern void _ZN7S3044C33v22Ev();
extern void _ZN7S3044C33v23Ev();
extern void _ZN7S3044C33v24Ev();
extern void _ZN7S3044C33v25Ev();
extern void _ZN7S3044C33v26Ev();
extern void _ZN7S3044C33v27Ev();
extern void _ZN7S3044C33v28Ev();
extern void _ZN7S3044C33v29Ev();
extern void _ZN7S3044C33v30Ev();
extern void _ZN7S3044C33v31Ev();
extern void _ZN7S3044C33v32Ev();
extern void _ZN7S3044C33v33Ev();
extern void _ZN7S3044C33v34Ev();
extern void _ZN7S3044C33v35Ev();
extern void _ZN7S3044C33v36Ev();
extern void _ZN7S3044C33v37Ev();
extern void _ZN7S3044C33v38Ev();
extern void _ZN7S3044C33v39Ev();
extern void _ZN7S3044C33v40Ev();
extern void _ZN7S3044C33v41Ev();
extern void _ZN7S3044C33v42Ev();
extern void _ZN7S3044C33v43Ev();
extern void _ZN7S3044C33v44Ev();
extern void _ZN7S3044C33v45Ev();
extern void _ZN7S3044C33v46Ev();
extern void _ZN7S3044C33v47Ev();
extern void _ZN7S3044C33v48Ev();
extern void _ZN7S3044C33v49Ev();
extern void _ZN7S3044C33v50Ev();
extern void _ZN7S3044C33v51Ev();
extern void _ZN7S3044C33v52Ev();
extern void _ZN7S3044C33v53Ev();
extern void _ZN7S3044C33v54Ev();
extern void _ZN7S3044C33v55Ev();
extern void _ZN7S3044C33v56Ev();
extern void _ZN7S3044C33v57Ev();
extern void _ZN7S3044C33v58Ev();
extern void _ZN7S3044C33v59Ev();
extern void _ZN7S3044C33v60Ev();
extern void _ZN7S3044C33v61Ev();
extern void _ZN7S3044C33v62Ev();
extern void _ZN7S3044C33v63Ev();
extern void _ZN7S3044C33v64Ev();
extern void _ZN7S3044C33v65Ev();
extern void _ZN7S3044C33v66Ev();
extern void _ZN7S3044C33v67Ev();
extern void _ZN7S3044C33v68Ev();
extern void _ZN7S3044C33v69Ev();
extern void _ZN7S3044C33v70Ev();
extern void _ZN7S3044C33v71Ev();
extern void _ZN7S3044C33v72Ev();
extern void _ZN7S3044C33v73Ev();
extern void _ZN7S3044C33v74Ev();
extern void _ZN7S3044C33v75Ev();
extern void _ZN7S3044C33v76Ev();
extern void _ZN7S3044C33v77Ev();
extern void _ZN7S3044C33v78Ev();
extern void _ZN7S3044C33v79Ev();
extern void _ZN7S3044C33v80Ev();
extern void _ZN7S3044C24v106Ev();
extern void _ZN7S3044C24v107Ev();
extern void _ZN7S3044C24v108Ev();
extern void _ZN7S3044C24v109Ev();
extern void _ZN7S3044C24v110Ev();
extern void _ZN7S3044C24v111Ev();
extern void _ZN7S3044C24v112Ev();
extern void _ZN7S3044C24v113Ev();
extern void _ZN7S3044C24v114Ev();
extern void _ZN7S3044C24v115Ev();
extern void _ZN7S3044C24v116Ev();
extern void _ZN7S3044C24v117Ev();
extern void _ZN7S3044C24v118Ev();
extern void _ZN7S3044C24v119Ev();
extern void _ZN7S3044C24v120Ev();
extern void _ZN7S3044C24v121Ev();
extern void _ZN7S3044C24v122Ev();
extern void _ZN7S3044C24v123Ev();
extern void _ZN7S3044C24v124Ev();
extern void _ZN7S3044C24v125Ev();
extern void _ZN7S3044C24v126Ev();
extern void _ZN7S3044C24v127Ev();
extern void _ZN7S3044C24v128Ev();
extern void _ZN7S3044C24v129Ev();
extern void _ZN7S3044C53v81Ev();
extern void _ZN7S3044C53v82Ev();
extern void _ZN7S3044C53v83Ev();
extern void _ZN7S3044C53v84Ev();
extern void _ZN7S3044C53v85Ev();
extern void _ZN7S3044C53v86Ev();
extern void _ZN7S3044C53v87Ev();
extern void _ZN7S3044C53v88Ev();
extern void _ZN7S3044C53v89Ev();
extern void _ZN7S3044C53v90Ev();
extern void _ZN7S3044C53v91Ev();
extern void _ZN7S3044C53v92Ev();
extern void _ZN7S3044C53v93Ev();
extern void _ZN7S3044C53v94Ev();
extern void _ZN7S3044C53v95Ev();
extern void _ZN7S3044C53v96Ev();
extern void _ZN7S3044C63v97Ev();
extern void _ZN7S3044C63v98Ev();
extern void _ZN7S3044C63v99Ev();
extern void _ZN7S3044C64v100Ev();
extern void _ZN7S3044C64v101Ev();
extern void _ZN7S3044C64v102Ev();
extern void _ZN7S3044C64v103Ev();
extern void _ZN7S3044C64v104Ev();
extern void _ZN7S3044C64v105Ev();
static  VTBL_ENTRY vtc_S3044C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3044C2[0]),
  (VTBL_ENTRY)&_ZN7S3044C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3044C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v74Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v75Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v76Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v77Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v78Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v79Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v80Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v106Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v107Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v108Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v109Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v110Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v111Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v112Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v113Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v114Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v115Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v116Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v117Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v118Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v119Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v120Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v121Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v122Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v123Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v124Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v125Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v126Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v127Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v128Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v129Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S3044C2[0]),
  (VTBL_ENTRY)&_ZN7S3044C53v81Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v82Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v83Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v84Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v85Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v86Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v87Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v88Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v89Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v90Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v91Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v92Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v93Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v94Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v95Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v96Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S3044C2[0]),
  (VTBL_ENTRY)&_ZN7S3044C63v97Ev,
  (VTBL_ENTRY)&_ZN7S3044C63v98Ev,
  (VTBL_ENTRY)&_ZN7S3044C63v99Ev,
  (VTBL_ENTRY)&_ZN7S3044C64v100Ev,
  (VTBL_ENTRY)&_ZN7S3044C64v101Ev,
  (VTBL_ENTRY)&_ZN7S3044C64v102Ev,
  (VTBL_ENTRY)&_ZN7S3044C64v103Ev,
  (VTBL_ENTRY)&_ZN7S3044C64v104Ev,
  (VTBL_ENTRY)&_ZN7S3044C64v105Ev,
};
extern VTBL_ENTRY _ZTI7S3044C2[];
extern  VTBL_ENTRY _ZTV7S3044C2[];
Class_Descriptor cd_S3044C2 = {  "S3044C2", // class name
  bases_S3044C2, 3,
  &(vtc_S3044C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI7S3044C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3044C2),121, //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  S3044C1  : S3044C2 {
  ::S79C44 s3044c1f0;
  unsigned int s3044c1f1:1;
  unsigned int s3044c1f2:1;
  virtual  ~S3044C1(); // _ZN7S3044C1D1Ev
  virtual void  v1(); // _ZN7S3044C12v1Ev
  virtual void  v2(); // _ZN7S3044C12v2Ev
  virtual void  v3(); // _ZN7S3044C12v3Ev
  virtual void  v4(); // _ZN7S3044C12v4Ev
  virtual void  v5(); // _ZN7S3044C12v5Ev
  virtual void  v6(); // _ZN7S3044C12v6Ev
  virtual void  v7(); // _ZN7S3044C12v7Ev
  virtual void  v8(); // _ZN7S3044C12v8Ev
  virtual void  v9(); // _ZN7S3044C12v9Ev
  virtual void  v10(); // _ZN7S3044C13v10Ev
  virtual void  v11(); // _ZN7S3044C13v11Ev
  virtual void  v12(); // _ZN7S3044C13v12Ev
  virtual void  v13(); // _ZN7S3044C13v13Ev
  virtual void  v14(); // _ZN7S3044C13v14Ev
  virtual void  v15(); // _ZN7S3044C13v15Ev
  virtual void  v16(); // _ZN7S3044C13v16Ev
  S3044C1(); // tgen
};
//SIG(1 S3044C1) C1{ BC2{ BC3{ vd 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 v79 v80 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} BC5{ v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96} BC6{ v97 v98 v99 v100 v101 v102 v103 v104 v105} vd v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 Fp FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 FC11{ BC12{ BC10}} Fi:1 Fi:1}


 S3044C1 ::~S3044C1(){ note_dtor("S3044C1", this);}
void  S3044C1 ::v1(){vfunc_called(this, "_ZN7S3044C12v1Ev");}
void  S3044C1 ::v2(){vfunc_called(this, "_ZN7S3044C12v2Ev");}
void  S3044C1 ::v3(){vfunc_called(this, "_ZN7S3044C12v3Ev");}
void  S3044C1 ::v4(){vfunc_called(this, "_ZN7S3044C12v4Ev");}
void  S3044C1 ::v5(){vfunc_called(this, "_ZN7S3044C12v5Ev");}
void  S3044C1 ::v6(){vfunc_called(this, "_ZN7S3044C12v6Ev");}
void  S3044C1 ::v7(){vfunc_called(this, "_ZN7S3044C12v7Ev");}
void  S3044C1 ::v8(){vfunc_called(this, "_ZN7S3044C12v8Ev");}
void  S3044C1 ::v9(){vfunc_called(this, "_ZN7S3044C12v9Ev");}
void  S3044C1 ::v10(){vfunc_called(this, "_ZN7S3044C13v10Ev");}
void  S3044C1 ::v11(){vfunc_called(this, "_ZN7S3044C13v11Ev");}
void  S3044C1 ::v12(){vfunc_called(this, "_ZN7S3044C13v12Ev");}
void  S3044C1 ::v13(){vfunc_called(this, "_ZN7S3044C13v13Ev");}
void  S3044C1 ::v14(){vfunc_called(this, "_ZN7S3044C13v14Ev");}
void  S3044C1 ::v15(){vfunc_called(this, "_ZN7S3044C13v15Ev");}
void  S3044C1 ::v16(){vfunc_called(this, "_ZN7S3044C13v16Ev");}
S3044C1 ::S3044C1(){ note_ctor("S3044C1", this);} // tgen

static void Test_S3044C1()
{
  extern Class_Descriptor cd_S3044C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,27)];
    init_test(&cd_S3044C1, buf);
    S3044C1 *dp, &lv = *(dp=new (buf) S3044C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,104), "sizeof(S3044C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3044C1)");
    check_base_class_offset(lv, (S3044C3*)(S3044C2*), 0, "S3044C1");
    check_base_class_offset(lv, (S3044C5*)(S3044C2*), ABISELECT(96,60), "S3044C1");
    check_base_class_offset(lv, (S3044C6*)(S3044C2*), ABISELECT(104,64), "S3044C1");
    check_base_class_offset(lv, (S3044C2*), 0, "S3044C1");
    check_field_offset(lv, s3044c1f0, ABISELECT(144,88), "S3044C1.s3044c1f0");
    set_bf_and_test(lv, s3044c1f1, ABISELECT(160,100), 0, 1, 1, "S3044C1");
    set_bf_and_test(lv, s3044c1f2, ABISELECT(160,100), 1, 1, 1, "S3044C1");
    test_class_info(&lv, &cd_S3044C1);
    dp->~S3044C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3044C1(Test_S3044C1, "S3044C1", ABISELECT(168,104));

#else // __cplusplus

extern void _ZN7S3044C1C1Ev();
extern void _ZN7S3044C1D1Ev();
Name_Map name_map_S3044C1[] = {
  NSPAIR(_ZN7S3044C1C1Ev),
  NSPAIR(_ZN7S3044C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3044C3;
extern VTBL_ENTRY _ZTI7S3044C3[];
extern  VTBL_ENTRY _ZTV7S3044C3[];
extern Class_Descriptor cd_S3044C5;
extern VTBL_ENTRY _ZTI7S3044C5[];
extern  VTBL_ENTRY _ZTV7S3044C5[];
extern Class_Descriptor cd_S3044C6;
extern VTBL_ENTRY _ZTI7S3044C6[];
extern  VTBL_ENTRY _ZTV7S3044C6[];
extern Class_Descriptor cd_S3044C2;
extern VTBL_ENTRY _ZTI7S3044C2[];
extern  VTBL_ENTRY _ZTV7S3044C2[];
static Base_Class bases_S3044C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3044C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3044C5,    ABISELECT(96,60), //bcp->offset
    108, //bcp->virtual_function_table_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_S3044C6,    ABISELECT(104,64), //bcp->offset
    126, //bcp->virtual_function_table_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_S3044C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3044C1[];
extern void _ZN7S3044C1D1Ev();
extern void _ZN7S3044C1D0Ev();
extern void _ZN7S3044C33v17Ev();
extern void _ZN7S3044C33v18Ev();
extern void _ZN7S3044C33v19Ev();
extern void _ZN7S3044C33v20Ev();
extern void _ZN7S3044C33v21Ev();
extern void _ZN7S3044C33v22Ev();
extern void _ZN7S3044C33v23Ev();
extern void _ZN7S3044C33v24Ev();
extern void _ZN7S3044C33v25Ev();
extern void _ZN7S3044C33v26Ev();
extern void _ZN7S3044C33v27Ev();
extern void _ZN7S3044C33v28Ev();
extern void _ZN7S3044C33v29Ev();
extern void _ZN7S3044C33v30Ev();
extern void _ZN7S3044C33v31Ev();
extern void _ZN7S3044C33v32Ev();
extern void _ZN7S3044C33v33Ev();
extern void _ZN7S3044C33v34Ev();
extern void _ZN7S3044C33v35Ev();
extern void _ZN7S3044C33v36Ev();
extern void _ZN7S3044C33v37Ev();
extern void _ZN7S3044C33v38Ev();
extern void _ZN7S3044C33v39Ev();
extern void _ZN7S3044C33v40Ev();
extern void _ZN7S3044C33v41Ev();
extern void _ZN7S3044C33v42Ev();
extern void _ZN7S3044C33v43Ev();
extern void _ZN7S3044C33v44Ev();
extern void _ZN7S3044C33v45Ev();
extern void _ZN7S3044C33v46Ev();
extern void _ZN7S3044C33v47Ev();
extern void _ZN7S3044C33v48Ev();
extern void _ZN7S3044C33v49Ev();
extern void _ZN7S3044C33v50Ev();
extern void _ZN7S3044C33v51Ev();
extern void _ZN7S3044C33v52Ev();
extern void _ZN7S3044C33v53Ev();
extern void _ZN7S3044C33v54Ev();
extern void _ZN7S3044C33v55Ev();
extern void _ZN7S3044C33v56Ev();
extern void _ZN7S3044C33v57Ev();
extern void _ZN7S3044C33v58Ev();
extern void _ZN7S3044C33v59Ev();
extern void _ZN7S3044C33v60Ev();
extern void _ZN7S3044C33v61Ev();
extern void _ZN7S3044C33v62Ev();
extern void _ZN7S3044C33v63Ev();
extern void _ZN7S3044C33v64Ev();
extern void _ZN7S3044C33v65Ev();
extern void _ZN7S3044C33v66Ev();
extern void _ZN7S3044C33v67Ev();
extern void _ZN7S3044C33v68Ev();
extern void _ZN7S3044C33v69Ev();
extern void _ZN7S3044C33v70Ev();
extern void _ZN7S3044C33v71Ev();
extern void _ZN7S3044C33v72Ev();
extern void _ZN7S3044C33v73Ev();
extern void _ZN7S3044C33v74Ev();
extern void _ZN7S3044C33v75Ev();
extern void _ZN7S3044C33v76Ev();
extern void _ZN7S3044C33v77Ev();
extern void _ZN7S3044C33v78Ev();
extern void _ZN7S3044C33v79Ev();
extern void _ZN7S3044C33v80Ev();
extern void _ZN7S3044C24v106Ev();
extern void _ZN7S3044C24v107Ev();
extern void _ZN7S3044C24v108Ev();
extern void _ZN7S3044C24v109Ev();
extern void _ZN7S3044C24v110Ev();
extern void _ZN7S3044C24v111Ev();
extern void _ZN7S3044C24v112Ev();
extern void _ZN7S3044C24v113Ev();
extern void _ZN7S3044C24v114Ev();
extern void _ZN7S3044C24v115Ev();
extern void _ZN7S3044C24v116Ev();
extern void _ZN7S3044C24v117Ev();
extern void _ZN7S3044C24v118Ev();
extern void _ZN7S3044C24v119Ev();
extern void _ZN7S3044C24v120Ev();
extern void _ZN7S3044C24v121Ev();
extern void _ZN7S3044C24v122Ev();
extern void _ZN7S3044C24v123Ev();
extern void _ZN7S3044C24v124Ev();
extern void _ZN7S3044C24v125Ev();
extern void _ZN7S3044C24v126Ev();
extern void _ZN7S3044C24v127Ev();
extern void _ZN7S3044C24v128Ev();
extern void _ZN7S3044C24v129Ev();
extern void _ZN7S3044C12v1Ev();
extern void _ZN7S3044C12v2Ev();
extern void _ZN7S3044C12v3Ev();
extern void _ZN7S3044C12v4Ev();
extern void _ZN7S3044C12v5Ev();
extern void _ZN7S3044C12v6Ev();
extern void _ZN7S3044C12v7Ev();
extern void _ZN7S3044C12v8Ev();
extern void _ZN7S3044C12v9Ev();
extern void _ZN7S3044C13v10Ev();
extern void _ZN7S3044C13v11Ev();
extern void _ZN7S3044C13v12Ev();
extern void _ZN7S3044C13v13Ev();
extern void _ZN7S3044C13v14Ev();
extern void _ZN7S3044C13v15Ev();
extern void _ZN7S3044C13v16Ev();
extern void _ZN7S3044C53v81Ev();
extern void _ZN7S3044C53v82Ev();
extern void _ZN7S3044C53v83Ev();
extern void _ZN7S3044C53v84Ev();
extern void _ZN7S3044C53v85Ev();
extern void _ZN7S3044C53v86Ev();
extern void _ZN7S3044C53v87Ev();
extern void _ZN7S3044C53v88Ev();
extern void _ZN7S3044C53v89Ev();
extern void _ZN7S3044C53v90Ev();
extern void _ZN7S3044C53v91Ev();
extern void _ZN7S3044C53v92Ev();
extern void _ZN7S3044C53v93Ev();
extern void _ZN7S3044C53v94Ev();
extern void _ZN7S3044C53v95Ev();
extern void _ZN7S3044C53v96Ev();
extern void _ZN7S3044C63v97Ev();
extern void _ZN7S3044C63v98Ev();
extern void _ZN7S3044C63v99Ev();
extern void _ZN7S3044C64v100Ev();
extern void _ZN7S3044C64v101Ev();
extern void _ZN7S3044C64v102Ev();
extern void _ZN7S3044C64v103Ev();
extern void _ZN7S3044C64v104Ev();
extern void _ZN7S3044C64v105Ev();
static  VTBL_ENTRY vtc_S3044C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3044C1[0]),
  (VTBL_ENTRY)&_ZN7S3044C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3044C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v74Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v75Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v76Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v77Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v78Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v79Ev,
  (VTBL_ENTRY)&_ZN7S3044C33v80Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v106Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v107Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v108Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v109Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v110Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v111Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v112Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v113Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v114Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v115Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v116Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v117Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v118Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v119Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v120Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v121Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v122Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v123Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v124Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v125Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v126Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v127Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v128Ev,
  (VTBL_ENTRY)&_ZN7S3044C24v129Ev,
  (VTBL_ENTRY)&_ZN7S3044C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3044C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3044C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3044C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3044C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3044C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3044C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3044C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3044C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3044C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3044C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3044C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3044C13v13Ev,
  (VTBL_ENTRY)&_ZN7S3044C13v14Ev,
  (VTBL_ENTRY)&_ZN7S3044C13v15Ev,
  (VTBL_ENTRY)&_ZN7S3044C13v16Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S3044C1[0]),
  (VTBL_ENTRY)&_ZN7S3044C53v81Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v82Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v83Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v84Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v85Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v86Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v87Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v88Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v89Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v90Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v91Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v92Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v93Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v94Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v95Ev,
  (VTBL_ENTRY)&_ZN7S3044C53v96Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S3044C1[0]),
  (VTBL_ENTRY)&_ZN7S3044C63v97Ev,
  (VTBL_ENTRY)&_ZN7S3044C63v98Ev,
  (VTBL_ENTRY)&_ZN7S3044C63v99Ev,
  (VTBL_ENTRY)&_ZN7S3044C64v100Ev,
  (VTBL_ENTRY)&_ZN7S3044C64v101Ev,
  (VTBL_ENTRY)&_ZN7S3044C64v102Ev,
  (VTBL_ENTRY)&_ZN7S3044C64v103Ev,
  (VTBL_ENTRY)&_ZN7S3044C64v104Ev,
  (VTBL_ENTRY)&_ZN7S3044C64v105Ev,
};
extern VTBL_ENTRY _ZTI7S3044C1[];
extern  VTBL_ENTRY _ZTV7S3044C1[];
Class_Descriptor cd_S3044C1 = {  "S3044C1", // class name
  bases_S3044C1, 4,
  &(vtc_S3044C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,104), // object size
  NSPAIRA(_ZTI7S3044C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3044C1),137, //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  S3031C3  {
  int s3031c3f0;
  __tsi64 s3031c3f1;
  void *s3031c3f2[4];
  int s3031c3f3[2];
  void *s3031c3f4;
  ::S79C8_nt s3031c3f5;
  void *s3031c3f6[2];
  virtual  ~S3031C3(); // _ZN7S3031C3D1Ev
  virtual void  v15(); // _ZN7S3031C33v15Ev
  virtual void  v16(); // _ZN7S3031C33v16Ev
  virtual void  v17(); // _ZN7S3031C33v17Ev
  virtual void  v18(); // _ZN7S3031C33v18Ev
  virtual void  v19(); // _ZN7S3031C33v19Ev
  virtual void  v20(); // _ZN7S3031C33v20Ev
  virtual void  v21(); // _ZN7S3031C33v21Ev
  virtual void  v22(); // _ZN7S3031C33v22Ev
  virtual void  v23(); // _ZN7S3031C33v23Ev
  virtual void  v24(); // _ZN7S3031C33v24Ev
  virtual void  v25(); // _ZN7S3031C33v25Ev
  virtual void  v26(); // _ZN7S3031C33v26Ev
  virtual void  v27(); // _ZN7S3031C33v27Ev
  virtual void  v28(); // _ZN7S3031C33v28Ev
  virtual void  v29(); // _ZN7S3031C33v29Ev
  virtual void  v30(); // _ZN7S3031C33v30Ev
  virtual void  v31(); // _ZN7S3031C33v31Ev
  virtual void  v32(); // _ZN7S3031C33v32Ev
  virtual void  v33(); // _ZN7S3031C33v33Ev
  virtual void  v34(); // _ZN7S3031C33v34Ev
  virtual void  v35(); // _ZN7S3031C33v35Ev
  virtual void  v36(); // _ZN7S3031C33v36Ev
  virtual void  v37(); // _ZN7S3031C33v37Ev
  virtual void  v38(); // _ZN7S3031C33v38Ev
  virtual void  v39(); // _ZN7S3031C33v39Ev
  virtual void  v40(); // _ZN7S3031C33v40Ev
  virtual void  v41(); // _ZN7S3031C33v41Ev
  virtual void  v42(); // _ZN7S3031C33v42Ev
  virtual void  v43(); // _ZN7S3031C33v43Ev
  virtual void  v44(); // _ZN7S3031C33v44Ev
  virtual void  v45(); // _ZN7S3031C33v45Ev
  virtual void  v46(); // _ZN7S3031C33v46Ev
  virtual void  v47(); // _ZN7S3031C33v47Ev
  virtual void  v48(); // _ZN7S3031C33v48Ev
  virtual void  v49(); // _ZN7S3031C33v49Ev
  virtual void  v50(); // _ZN7S3031C33v50Ev
  virtual void  v51(); // _ZN7S3031C33v51Ev
  virtual void  v52(); // _ZN7S3031C33v52Ev
  virtual void  v53(); // _ZN7S3031C33v53Ev
  virtual void  v54(); // _ZN7S3031C33v54Ev
  virtual void  v55(); // _ZN7S3031C33v55Ev
  virtual void  v56(); // _ZN7S3031C33v56Ev
  virtual void  v57(); // _ZN7S3031C33v57Ev
  virtual void  v58(); // _ZN7S3031C33v58Ev
  virtual void  v59(); // _ZN7S3031C33v59Ev
  virtual void  v60(); // _ZN7S3031C33v60Ev
  virtual void  v61(); // _ZN7S3031C33v61Ev
  virtual void  v62(); // _ZN7S3031C33v62Ev
  virtual void  v63(); // _ZN7S3031C33v63Ev
  virtual void  v64(); // _ZN7S3031C33v64Ev
  virtual void  v65(); // _ZN7S3031C33v65Ev
  virtual void  v66(); // _ZN7S3031C33v66Ev
  virtual void  v67(); // _ZN7S3031C33v67Ev
  virtual void  v68(); // _ZN7S3031C33v68Ev
  virtual void  v69(); // _ZN7S3031C33v69Ev
  virtual void  v70(); // _ZN7S3031C33v70Ev
  virtual void  v71(); // _ZN7S3031C33v71Ev
  virtual void  v72(); // _ZN7S3031C33v72Ev
  virtual void  v73(); // _ZN7S3031C33v73Ev
  virtual void  v74(); // _ZN7S3031C33v74Ev
  virtual void  v75(); // _ZN7S3031C33v75Ev
  virtual void  v76(); // _ZN7S3031C33v76Ev
  virtual void  v77(); // _ZN7S3031C33v77Ev
  virtual void  v78(); // _ZN7S3031C33v78Ev
  S3031C3(); // tgen
};
//SIG(-1 S3031C3) 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]}


 S3031C3 ::~S3031C3(){ note_dtor("S3031C3", this);}
void  S3031C3 ::v15(){vfunc_called(this, "_ZN7S3031C33v15Ev");}
void  S3031C3 ::v16(){vfunc_called(this, "_ZN7S3031C33v16Ev");}
void  S3031C3 ::v17(){vfunc_called(this, "_ZN7S3031C33v17Ev");}
void  S3031C3 ::v18(){vfunc_called(this, "_ZN7S3031C33v18Ev");}
void  S3031C3 ::v19(){vfunc_called(this, "_ZN7S3031C33v19Ev");}
void  S3031C3 ::v20(){vfunc_called(this, "_ZN7S3031C33v20Ev");}
void  S3031C3 ::v21(){vfunc_called(this, "_ZN7S3031C33v21Ev");}
void  S3031C3 ::v22(){vfunc_called(this, "_ZN7S3031C33v22Ev");}
void  S3031C3 ::v23(){vfunc_called(this, "_ZN7S3031C33v23Ev");}
void  S3031C3 ::v24(){vfunc_called(this, "_ZN7S3031C33v24Ev");}
void  S3031C3 ::v25(){vfunc_called(this, "_ZN7S3031C33v25Ev");}
void  S3031C3 ::v26(){vfunc_called(this, "_ZN7S3031C33v26Ev");}
void  S3031C3 ::v27(){vfunc_called(this, "_ZN7S3031C33v27Ev");}
void  S3031C3 ::v28(){vfunc_called(this, "_ZN7S3031C33v28Ev");}
void  S3031C3 ::v29(){vfunc_called(this, "_ZN7S3031C33v29Ev");}
void  S3031C3 ::v30(){vfunc_called(this, "_ZN7S3031C33v30Ev");}
void  S3031C3 ::v31(){vfunc_called(this, "_ZN7S3031C33v31Ev");}
void  S3031C3 ::v32(){vfunc_called(this, "_ZN7S3031C33v32Ev");}
void  S3031C3 ::v33(){vfunc_called(this, "_ZN7S3031C33v33Ev");}
void  S3031C3 ::v34(){vfunc_called(this, "_ZN7S3031C33v34Ev");}
void  S3031C3 ::v35(){vfunc_called(this, "_ZN7S3031C33v35Ev");}
void  S3031C3 ::v36(){vfunc_called(this, "_ZN7S3031C33v36Ev");}
void  S3031C3 ::v37(){vfunc_called(this, "_ZN7S3031C33v37Ev");}
void  S3031C3 ::v38(){vfunc_called(this, "_ZN7S3031C33v38Ev");}
void  S3031C3 ::v39(){vfunc_called(this, "_ZN7S3031C33v39Ev");}
void  S3031C3 ::v40(){vfunc_called(this, "_ZN7S3031C33v40Ev");}
void  S3031C3 ::v41(){vfunc_called(this, "_ZN7S3031C33v41Ev");}
void  S3031C3 ::v42(){vfunc_called(this, "_ZN7S3031C33v42Ev");}
void  S3031C3 ::v43(){vfunc_called(this, "_ZN7S3031C33v43Ev");}
void  S3031C3 ::v44(){vfunc_called(this, "_ZN7S3031C33v44Ev");}
void  S3031C3 ::v45(){vfunc_called(this, "_ZN7S3031C33v45Ev");}
void  S3031C3 ::v46(){vfunc_called(this, "_ZN7S3031C33v46Ev");}
void  S3031C3 ::v47(){vfunc_called(this, "_ZN7S3031C33v47Ev");}
void  S3031C3 ::v48(){vfunc_called(this, "_ZN7S3031C33v48Ev");}
void  S3031C3 ::v49(){vfunc_called(this, "_ZN7S3031C33v49Ev");}
void  S3031C3 ::v50(){vfunc_called(this, "_ZN7S3031C33v50Ev");}
void  S3031C3 ::v51(){vfunc_called(this, "_ZN7S3031C33v51Ev");}
void  S3031C3 ::v52(){vfunc_called(this, "_ZN7S3031C33v52Ev");}
void  S3031C3 ::v53(){vfunc_called(this, "_ZN7S3031C33v53Ev");}
void  S3031C3 ::v54(){vfunc_called(this, "_ZN7S3031C33v54Ev");}
void  S3031C3 ::v55(){vfunc_called(this, "_ZN7S3031C33v55Ev");}
void  S3031C3 ::v56(){vfunc_called(this, "_ZN7S3031C33v56Ev");}
void  S3031C3 ::v57(){vfunc_called(this, "_ZN7S3031C33v57Ev");}
void  S3031C3 ::v58(){vfunc_called(this, "_ZN7S3031C33v58Ev");}
void  S3031C3 ::v59(){vfunc_called(this, "_ZN7S3031C33v59Ev");}
void  S3031C3 ::v60(){vfunc_called(this, "_ZN7S3031C33v60Ev");}
void  S3031C3 ::v61(){vfunc_called(this, "_ZN7S3031C33v61Ev");}
void  S3031C3 ::v62(){vfunc_called(this, "_ZN7S3031C33v62Ev");}
void  S3031C3 ::v63(){vfunc_called(this, "_ZN7S3031C33v63Ev");}
void  S3031C3 ::v64(){vfunc_called(this, "_ZN7S3031C33v64Ev");}
void  S3031C3 ::v65(){vfunc_called(this, "_ZN7S3031C33v65Ev");}
void  S3031C3 ::v66(){vfunc_called(this, "_ZN7S3031C33v66Ev");}
void  S3031C3 ::v67(){vfunc_called(this, "_ZN7S3031C33v67Ev");}
void  S3031C3 ::v68(){vfunc_called(this, "_ZN7S3031C33v68Ev");}
void  S3031C3 ::v69(){vfunc_called(this, "_ZN7S3031C33v69Ev");}
void  S3031C3 ::v70(){vfunc_called(this, "_ZN7S3031C33v70Ev");}
void  S3031C3 ::v71(){vfunc_called(this, "_ZN7S3031C33v71Ev");}
void  S3031C3 ::v72(){vfunc_called(this, "_ZN7S3031C33v72Ev");}
void  S3031C3 ::v73(){vfunc_called(this, "_ZN7S3031C33v73Ev");}
void  S3031C3 ::v74(){vfunc_called(this, "_ZN7S3031C33v74Ev");}
void  S3031C3 ::v75(){vfunc_called(this, "_ZN7S3031C33v75Ev");}
void  S3031C3 ::v76(){vfunc_called(this, "_ZN7S3031C33v76Ev");}
void  S3031C3 ::v77(){vfunc_called(this, "_ZN7S3031C33v77Ev");}
void  S3031C3 ::v78(){vfunc_called(this, "_ZN7S3031C33v78Ev");}
S3031C3 ::S3031C3(){ note_ctor("S3031C3", this);} // tgen

static void Test_S3031C3()
{
  extern Class_Descriptor cd_S3031C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3031C3, buf);
    S3031C3 *dp, &lv = *(dp=new (buf) S3031C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3031C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3031C3)");
    check_field_offset(lv, s3031c3f0, ABISELECT(8,4), "S3031C3.s3031c3f0");
    check_field_offset(lv, s3031c3f1, ABISELECT(16,8), "S3031C3.s3031c3f1");
    check_field_offset(lv, s3031c3f2, ABISELECT(24,16), "S3031C3.s3031c3f2");
    check_field_offset(lv, s3031c3f3, ABISELECT(56,32), "S3031C3.s3031c3f3");
    check_field_offset(lv, s3031c3f4, ABISELECT(64,40), "S3031C3.s3031c3f4");
    check_field_offset(lv, s3031c3f5, ABISELECT(72,44), "S3031C3.s3031c3f5");
    check_field_offset(lv, s3031c3f6, ABISELECT(80,52), "S3031C3.s3031c3f6");
    test_class_info(&lv, &cd_S3031C3);
    dp->~S3031C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3031C3(Test_S3031C3, "S3031C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3031C3C1Ev();
extern void _ZN7S3031C3D1Ev();
Name_Map name_map_S3031C3[] = {
  NSPAIR(_ZN7S3031C3C1Ev),
  NSPAIR(_ZN7S3031C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3031C3[];
extern void _ZN7S3031C3D1Ev();
extern void _ZN7S3031C3D0Ev();
extern void _ZN7S3031C33v15Ev();
extern void _ZN7S3031C33v16Ev();
extern void _ZN7S3031C33v17Ev();
extern void _ZN7S3031C33v18Ev();
extern void _ZN7S3031C33v19Ev();
extern void _ZN7S3031C33v20Ev();
extern void _ZN7S3031C33v21Ev();
extern void _ZN7S3031C33v22Ev();
extern void _ZN7S3031C33v23Ev();
extern void _ZN7S3031C33v24Ev();
extern void _ZN7S3031C33v25Ev();
extern void _ZN7S3031C33v26Ev();
extern void _ZN7S3031C33v27Ev();
extern void _ZN7S3031C33v28Ev();
extern void _ZN7S3031C33v29Ev();
extern void _ZN7S3031C33v30Ev();
extern void _ZN7S3031C33v31Ev();
extern void _ZN7S3031C33v32Ev();
extern void _ZN7S3031C33v33Ev();
extern void _ZN7S3031C33v34Ev();
extern void _ZN7S3031C33v35Ev();
extern void _ZN7S3031C33v36Ev();
extern void _ZN7S3031C33v37Ev();
extern void _ZN7S3031C33v38Ev();
extern void _ZN7S3031C33v39Ev();
extern void _ZN7S3031C33v40Ev();
extern void _ZN7S3031C33v41Ev();
extern void _ZN7S3031C33v42Ev();
extern void _ZN7S3031C33v43Ev();
extern void _ZN7S3031C33v44Ev();
extern void _ZN7S3031C33v45Ev();
extern void _ZN7S3031C33v46Ev();
extern void _ZN7S3031C33v47Ev();
extern void _ZN7S3031C33v48Ev();
extern void _ZN7S3031C33v49Ev();
extern void _ZN7S3031C33v50Ev();
extern void _ZN7S3031C33v51Ev();
extern void _ZN7S3031C33v52Ev();
extern void _ZN7S3031C33v53Ev();
extern void _ZN7S3031C33v54Ev();
extern void _ZN7S3031C33v55Ev();
extern void _ZN7S3031C33v56Ev();
extern void _ZN7S3031C33v57Ev();
extern void _ZN7S3031C33v58Ev();
extern void _ZN7S3031C33v59Ev();
extern void _ZN7S3031C33v60Ev();
extern void _ZN7S3031C33v61Ev();
extern void _ZN7S3031C33v62Ev();
extern void _ZN7S3031C33v63Ev();
extern void _ZN7S3031C33v64Ev();
extern void _ZN7S3031C33v65Ev();
extern void _ZN7S3031C33v66Ev();
extern void _ZN7S3031C33v67Ev();
extern void _ZN7S3031C33v68Ev();
extern void _ZN7S3031C33v69Ev();
extern void _ZN7S3031C33v70Ev();
extern void _ZN7S3031C33v71Ev();
extern void _ZN7S3031C33v72Ev();
extern void _ZN7S3031C33v73Ev();
extern void _ZN7S3031C33v74Ev();
extern void _ZN7S3031C33v75Ev();
extern void _ZN7S3031C33v76Ev();
extern void _ZN7S3031C33v77Ev();
extern void _ZN7S3031C33v78Ev();
static  VTBL_ENTRY vtc_S3031C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3031C3[0]),
  (VTBL_ENTRY)&_ZN7S3031C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3031C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v74Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v75Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v76Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v77Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v78Ev,
};
extern VTBL_ENTRY _ZTI7S3031C3[];
extern  VTBL_ENTRY _ZTV7S3031C3[];
Class_Descriptor cd_S3031C3 = {  "S3031C3", // class name
  0,0,//no base classes
  &(vtc_S3031C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3031C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3031C3),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  S3031C5  {
  virtual void  v79(); // _ZN7S3031C53v79Ev
  virtual void  v80(); // _ZN7S3031C53v80Ev
  virtual void  v81(); // _ZN7S3031C53v81Ev
  virtual void  v82(); // _ZN7S3031C53v82Ev
  virtual void  v83(); // _ZN7S3031C53v83Ev
  virtual void  v84(); // _ZN7S3031C53v84Ev
  virtual void  v85(); // _ZN7S3031C53v85Ev
  virtual void  v86(); // _ZN7S3031C53v86Ev
  virtual void  v87(); // _ZN7S3031C53v87Ev
  virtual void  v88(); // _ZN7S3031C53v88Ev
  virtual void  v89(); // _ZN7S3031C53v89Ev
  virtual void  v90(); // _ZN7S3031C53v90Ev
  virtual void  v91(); // _ZN7S3031C53v91Ev
  virtual void  v92(); // _ZN7S3031C53v92Ev
  virtual void  v93(); // _ZN7S3031C53v93Ev
  virtual void  v94(); // _ZN7S3031C53v94Ev
  ~S3031C5(); // tgen
  S3031C5(); // tgen
};
//SIG(-1 S3031C5) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16}


void  S3031C5 ::v79(){vfunc_called(this, "_ZN7S3031C53v79Ev");}
void  S3031C5 ::v80(){vfunc_called(this, "_ZN7S3031C53v80Ev");}
void  S3031C5 ::v81(){vfunc_called(this, "_ZN7S3031C53v81Ev");}
void  S3031C5 ::v82(){vfunc_called(this, "_ZN7S3031C53v82Ev");}
void  S3031C5 ::v83(){vfunc_called(this, "_ZN7S3031C53v83Ev");}
void  S3031C5 ::v84(){vfunc_called(this, "_ZN7S3031C53v84Ev");}
void  S3031C5 ::v85(){vfunc_called(this, "_ZN7S3031C53v85Ev");}
void  S3031C5 ::v86(){vfunc_called(this, "_ZN7S3031C53v86Ev");}
void  S3031C5 ::v87(){vfunc_called(this, "_ZN7S3031C53v87Ev");}
void  S3031C5 ::v88(){vfunc_called(this, "_ZN7S3031C53v88Ev");}
void  S3031C5 ::v89(){vfunc_called(this, "_ZN7S3031C53v89Ev");}
void  S3031C5 ::v90(){vfunc_called(this, "_ZN7S3031C53v90Ev");}
void  S3031C5 ::v91(){vfunc_called(this, "_ZN7S3031C53v91Ev");}
void  S3031C5 ::v92(){vfunc_called(this, "_ZN7S3031C53v92Ev");}
void  S3031C5 ::v93(){vfunc_called(this, "_ZN7S3031C53v93Ev");}
void  S3031C5 ::v94(){vfunc_called(this, "_ZN7S3031C53v94Ev");}
S3031C5 ::~S3031C5(){ note_dtor("S3031C5", this);} // tgen
S3031C5 ::S3031C5(){ note_ctor("S3031C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3031C5C1Ev();
extern void _ZN7S3031C5D1Ev();
Name_Map name_map_S3031C5[] = {
  NSPAIR(_ZN7S3031C5C1Ev),
  NSPAIR(_ZN7S3031C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3031C5[];
extern void _ZN7S3031C53v79Ev();
extern void _ZN7S3031C53v80Ev();
extern void _ZN7S3031C53v81Ev();
extern void _ZN7S3031C53v82Ev();
extern void _ZN7S3031C53v83Ev();
extern void _ZN7S3031C53v84Ev();
extern void _ZN7S3031C53v85Ev();
extern void _ZN7S3031C53v86Ev();
extern void _ZN7S3031C53v87Ev();
extern void _ZN7S3031C53v88Ev();
extern void _ZN7S3031C53v89Ev();
extern void _ZN7S3031C53v90Ev();
extern void _ZN7S3031C53v91Ev();
extern void _ZN7S3031C53v92Ev();
extern void _ZN7S3031C53v93Ev();
extern void _ZN7S3031C53v94Ev();
static  VTBL_ENTRY vtc_S3031C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3031C5[0]),
  (VTBL_ENTRY)&_ZN7S3031C53v79Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v80Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v81Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v82Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v83Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v84Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v85Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v86Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v87Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v88Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v89Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v90Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v91Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v92Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v93Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v94Ev,
};
extern VTBL_ENTRY _ZTI7S3031C5[];
extern  VTBL_ENTRY _ZTV7S3031C5[];
Class_Descriptor cd_S3031C5 = {  "S3031C5", // class name
  0,0,//no base classes
  &(vtc_S3031C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3031C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3031C5),18, //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  S3031C6  {
  virtual void  v95(); // _ZN7S3031C63v95Ev
  virtual void  v96(); // _ZN7S3031C63v96Ev
  virtual void  v97(); // _ZN7S3031C63v97Ev
  virtual void  v98(); // _ZN7S3031C63v98Ev
  virtual void  v99(); // _ZN7S3031C63v99Ev
  virtual void  v100(); // _ZN7S3031C64v100Ev
  virtual void  v101(); // _ZN7S3031C64v101Ev
  virtual void  v102(); // _ZN7S3031C64v102Ev
  virtual void  v103(); // _ZN7S3031C64v103Ev
  ~S3031C6(); // tgen
  S3031C6(); // tgen
};
//SIG(-1 S3031C6) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S3031C6 ::v95(){vfunc_called(this, "_ZN7S3031C63v95Ev");}
void  S3031C6 ::v96(){vfunc_called(this, "_ZN7S3031C63v96Ev");}
void  S3031C6 ::v97(){vfunc_called(this, "_ZN7S3031C63v97Ev");}
void  S3031C6 ::v98(){vfunc_called(this, "_ZN7S3031C63v98Ev");}
void  S3031C6 ::v99(){vfunc_called(this, "_ZN7S3031C63v99Ev");}
void  S3031C6 ::v100(){vfunc_called(this, "_ZN7S3031C64v100Ev");}
void  S3031C6 ::v101(){vfunc_called(this, "_ZN7S3031C64v101Ev");}
void  S3031C6 ::v102(){vfunc_called(this, "_ZN7S3031C64v102Ev");}
void  S3031C6 ::v103(){vfunc_called(this, "_ZN7S3031C64v103Ev");}
S3031C6 ::~S3031C6(){ note_dtor("S3031C6", this);} // tgen
S3031C6 ::S3031C6(){ note_ctor("S3031C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3031C6C1Ev();
extern void _ZN7S3031C6D1Ev();
Name_Map name_map_S3031C6[] = {
  NSPAIR(_ZN7S3031C6C1Ev),
  NSPAIR(_ZN7S3031C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3031C6[];
extern void _ZN7S3031C63v95Ev();
extern void _ZN7S3031C63v96Ev();
extern void _ZN7S3031C63v97Ev();
extern void _ZN7S3031C63v98Ev();
extern void _ZN7S3031C63v99Ev();
extern void _ZN7S3031C64v100Ev();
extern void _ZN7S3031C64v101Ev();
extern void _ZN7S3031C64v102Ev();
extern void _ZN7S3031C64v103Ev();
static  VTBL_ENTRY vtc_S3031C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3031C6[0]),
  (VTBL_ENTRY)&_ZN7S3031C63v95Ev,
  (VTBL_ENTRY)&_ZN7S3031C63v96Ev,
  (VTBL_ENTRY)&_ZN7S3031C63v97Ev,
  (VTBL_ENTRY)&_ZN7S3031C63v98Ev,
  (VTBL_ENTRY)&_ZN7S3031C63v99Ev,
  (VTBL_ENTRY)&_ZN7S3031C64v100Ev,
  (VTBL_ENTRY)&_ZN7S3031C64v101Ev,
  (VTBL_ENTRY)&_ZN7S3031C64v102Ev,
  (VTBL_ENTRY)&_ZN7S3031C64v103Ev,
};
extern VTBL_ENTRY _ZTI7S3031C6[];
extern  VTBL_ENTRY _ZTV7S3031C6[];
Class_Descriptor cd_S3031C6 = {  "S3031C6", // class name
  0,0,//no base classes
  &(vtc_S3031C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3031C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3031C6),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  S3031C2  : S3031C3 , S3031C5 , S3031C6 {
  void *s3031c2f0;
  ::S79C39_nt s3031c2f1;
  unsigned int s3031c2f2:1;
  unsigned int s3031c2f3:1;
  unsigned int s3031c2f4:1;
  unsigned int s3031c2f5:1;
  virtual  ~S3031C2(); // _ZN7S3031C2D1Ev
  virtual void  v104(); // _ZN7S3031C24v104Ev
  virtual void  v105(); // _ZN7S3031C24v105Ev
  virtual void  v106(); // _ZN7S3031C24v106Ev
  virtual void  v107(); // _ZN7S3031C24v107Ev
  virtual void  v108(); // _ZN7S3031C24v108Ev
  virtual void  v109(); // _ZN7S3031C24v109Ev
  virtual void  v110(); // _ZN7S3031C24v110Ev
  virtual void  v111(); // _ZN7S3031C24v111Ev
  virtual void  v112(); // _ZN7S3031C24v112Ev
  virtual void  v113(); // _ZN7S3031C24v113Ev
  virtual void  v114(); // _ZN7S3031C24v114Ev
  virtual void  v115(); // _ZN7S3031C24v115Ev
  virtual void  v116(); // _ZN7S3031C24v116Ev
  virtual void  v117(); // _ZN7S3031C24v117Ev
  virtual void  v118(); // _ZN7S3031C24v118Ev
  virtual void  v119(); // _ZN7S3031C24v119Ev
  virtual void  v120(); // _ZN7S3031C24v120Ev
  virtual void  v121(); // _ZN7S3031C24v121Ev
  virtual void  v122(); // _ZN7S3031C24v122Ev
  virtual void  v123(); // _ZN7S3031C24v123Ev
  virtual void  v124(); // _ZN7S3031C24v124Ev
  virtual void  v125(); // _ZN7S3031C24v125Ev
  virtual void  v126(); // _ZN7S3031C24v126Ev
  virtual void  v127(); // _ZN7S3031C24v127Ev
  S3031C2(); // tgen
};
//SIG(-1 S3031C2) C1{ BC2{ vd 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 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} BC4{ v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104} BC5{ v105 v106 v107 v108 v109 v110 v111 v112 v113} 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 Fp FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1}


 S3031C2 ::~S3031C2(){ note_dtor("S3031C2", this);}
void  S3031C2 ::v104(){vfunc_called(this, "_ZN7S3031C24v104Ev");}
void  S3031C2 ::v105(){vfunc_called(this, "_ZN7S3031C24v105Ev");}
void  S3031C2 ::v106(){vfunc_called(this, "_ZN7S3031C24v106Ev");}
void  S3031C2 ::v107(){vfunc_called(this, "_ZN7S3031C24v107Ev");}
void  S3031C2 ::v108(){vfunc_called(this, "_ZN7S3031C24v108Ev");}
void  S3031C2 ::v109(){vfunc_called(this, "_ZN7S3031C24v109Ev");}
void  S3031C2 ::v110(){vfunc_called(this, "_ZN7S3031C24v110Ev");}
void  S3031C2 ::v111(){vfunc_called(this, "_ZN7S3031C24v111Ev");}
void  S3031C2 ::v112(){vfunc_called(this, "_ZN7S3031C24v112Ev");}
void  S3031C2 ::v113(){vfunc_called(this, "_ZN7S3031C24v113Ev");}
void  S3031C2 ::v114(){vfunc_called(this, "_ZN7S3031C24v114Ev");}
void  S3031C2 ::v115(){vfunc_called(this, "_ZN7S3031C24v115Ev");}
void  S3031C2 ::v116(){vfunc_called(this, "_ZN7S3031C24v116Ev");}
void  S3031C2 ::v117(){vfunc_called(this, "_ZN7S3031C24v117Ev");}
void  S3031C2 ::v118(){vfunc_called(this, "_ZN7S3031C24v118Ev");}
void  S3031C2 ::v119(){vfunc_called(this, "_ZN7S3031C24v119Ev");}
void  S3031C2 ::v120(){vfunc_called(this, "_ZN7S3031C24v120Ev");}
void  S3031C2 ::v121(){vfunc_called(this, "_ZN7S3031C24v121Ev");}
void  S3031C2 ::v122(){vfunc_called(this, "_ZN7S3031C24v122Ev");}
void  S3031C2 ::v123(){vfunc_called(this, "_ZN7S3031C24v123Ev");}
void  S3031C2 ::v124(){vfunc_called(this, "_ZN7S3031C24v124Ev");}
void  S3031C2 ::v125(){vfunc_called(this, "_ZN7S3031C24v125Ev");}
void  S3031C2 ::v126(){vfunc_called(this, "_ZN7S3031C24v126Ev");}
void  S3031C2 ::v127(){vfunc_called(this, "_ZN7S3031C24v127Ev");}
S3031C2 ::S3031C2(){ note_ctor("S3031C2", this);} // tgen

static void Test_S3031C2()
{
  extern Class_Descriptor cd_S3031C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,23)];
    init_test(&cd_S3031C2, buf);
    S3031C2 *dp, &lv = *(dp=new (buf) S3031C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S3031C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3031C2)");
    check_base_class_offset(lv, (S3031C3*), 0, "S3031C2");
    check_base_class_offset(lv, (S3031C5*), ABISELECT(96,60), "S3031C2");
    check_base_class_offset(lv, (S3031C6*), ABISELECT(104,64), "S3031C2");
    check_field_offset(lv, s3031c2f0, ABISELECT(112,68), "S3031C2.s3031c2f0");
    check_field_offset(lv, s3031c2f1, ABISELECT(120,72), "S3031C2.s3031c2f1");
    set_bf_and_test(lv, s3031c2f2, ABISELECT(136,84), 0, 1, 1, "S3031C2");
    set_bf_and_test(lv, s3031c2f3, ABISELECT(136,84), 1, 1, 1, "S3031C2");
    set_bf_and_test(lv, s3031c2f4, ABISELECT(136,84), 2, 1, 1, "S3031C2");
    set_bf_and_test(lv, s3031c2f5, ABISELECT(136,84), 3, 1, 1, "S3031C2");
    test_class_info(&lv, &cd_S3031C2);
    dp->~S3031C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3031C2(Test_S3031C2, "S3031C2", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN7S3031C2C1Ev();
extern void _ZN7S3031C2D1Ev();
Name_Map name_map_S3031C2[] = {
  NSPAIR(_ZN7S3031C2C1Ev),
  NSPAIR(_ZN7S3031C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3031C3;
extern VTBL_ENTRY _ZTI7S3031C3[];
extern  VTBL_ENTRY _ZTV7S3031C3[];
extern Class_Descriptor cd_S3031C5;
extern VTBL_ENTRY _ZTI7S3031C5[];
extern  VTBL_ENTRY _ZTV7S3031C5[];
extern Class_Descriptor cd_S3031C6;
extern VTBL_ENTRY _ZTI7S3031C6[];
extern  VTBL_ENTRY _ZTV7S3031C6[];
static Base_Class bases_S3031C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3031C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3031C5,    ABISELECT(96,60), //bcp->offset
    92, //bcp->virtual_function_table_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_S3031C6,    ABISELECT(104,64), //bcp->offset
    110, //bcp->virtual_function_table_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 _ZTI7S3031C2[];
extern void _ZN7S3031C2D1Ev();
extern void _ZN7S3031C2D0Ev();
extern void _ZN7S3031C33v15Ev();
extern void _ZN7S3031C33v16Ev();
extern void _ZN7S3031C33v17Ev();
extern void _ZN7S3031C33v18Ev();
extern void _ZN7S3031C33v19Ev();
extern void _ZN7S3031C33v20Ev();
extern void _ZN7S3031C33v21Ev();
extern void _ZN7S3031C33v22Ev();
extern void _ZN7S3031C33v23Ev();
extern void _ZN7S3031C33v24Ev();
extern void _ZN7S3031C33v25Ev();
extern void _ZN7S3031C33v26Ev();
extern void _ZN7S3031C33v27Ev();
extern void _ZN7S3031C33v28Ev();
extern void _ZN7S3031C33v29Ev();
extern void _ZN7S3031C33v30Ev();
extern void _ZN7S3031C33v31Ev();
extern void _ZN7S3031C33v32Ev();
extern void _ZN7S3031C33v33Ev();
extern void _ZN7S3031C33v34Ev();
extern void _ZN7S3031C33v35Ev();
extern void _ZN7S3031C33v36Ev();
extern void _ZN7S3031C33v37Ev();
extern void _ZN7S3031C33v38Ev();
extern void _ZN7S3031C33v39Ev();
extern void _ZN7S3031C33v40Ev();
extern void _ZN7S3031C33v41Ev();
extern void _ZN7S3031C33v42Ev();
extern void _ZN7S3031C33v43Ev();
extern void _ZN7S3031C33v44Ev();
extern void _ZN7S3031C33v45Ev();
extern void _ZN7S3031C33v46Ev();
extern void _ZN7S3031C33v47Ev();
extern void _ZN7S3031C33v48Ev();
extern void _ZN7S3031C33v49Ev();
extern void _ZN7S3031C33v50Ev();
extern void _ZN7S3031C33v51Ev();
extern void _ZN7S3031C33v52Ev();
extern void _ZN7S3031C33v53Ev();
extern void _ZN7S3031C33v54Ev();
extern void _ZN7S3031C33v55Ev();
extern void _ZN7S3031C33v56Ev();
extern void _ZN7S3031C33v57Ev();
extern void _ZN7S3031C33v58Ev();
extern void _ZN7S3031C33v59Ev();
extern void _ZN7S3031C33v60Ev();
extern void _ZN7S3031C33v61Ev();
extern void _ZN7S3031C33v62Ev();
extern void _ZN7S3031C33v63Ev();
extern void _ZN7S3031C33v64Ev();
extern void _ZN7S3031C33v65Ev();
extern void _ZN7S3031C33v66Ev();
extern void _ZN7S3031C33v67Ev();
extern void _ZN7S3031C33v68Ev();
extern void _ZN7S3031C33v69Ev();
extern void _ZN7S3031C33v70Ev();
extern void _ZN7S3031C33v71Ev();
extern void _ZN7S3031C33v72Ev();
extern void _ZN7S3031C33v73Ev();
extern void _ZN7S3031C33v74Ev();
extern void _ZN7S3031C33v75Ev();
extern void _ZN7S3031C33v76Ev();
extern void _ZN7S3031C33v77Ev();
extern void _ZN7S3031C33v78Ev();
extern void _ZN7S3031C24v104Ev();
extern void _ZN7S3031C24v105Ev();
extern void _ZN7S3031C24v106Ev();
extern void _ZN7S3031C24v107Ev();
extern void _ZN7S3031C24v108Ev();
extern void _ZN7S3031C24v109Ev();
extern void _ZN7S3031C24v110Ev();
extern void _ZN7S3031C24v111Ev();
extern void _ZN7S3031C24v112Ev();
extern void _ZN7S3031C24v113Ev();
extern void _ZN7S3031C24v114Ev();
extern void _ZN7S3031C24v115Ev();
extern void _ZN7S3031C24v116Ev();
extern void _ZN7S3031C24v117Ev();
extern void _ZN7S3031C24v118Ev();
extern void _ZN7S3031C24v119Ev();
extern void _ZN7S3031C24v120Ev();
extern void _ZN7S3031C24v121Ev();
extern void _ZN7S3031C24v122Ev();
extern void _ZN7S3031C24v123Ev();
extern void _ZN7S3031C24v124Ev();
extern void _ZN7S3031C24v125Ev();
extern void _ZN7S3031C24v126Ev();
extern void _ZN7S3031C24v127Ev();
extern void _ZN7S3031C53v79Ev();
extern void _ZN7S3031C53v80Ev();
extern void _ZN7S3031C53v81Ev();
extern void _ZN7S3031C53v82Ev();
extern void _ZN7S3031C53v83Ev();
extern void _ZN7S3031C53v84Ev();
extern void _ZN7S3031C53v85Ev();
extern void _ZN7S3031C53v86Ev();
extern void _ZN7S3031C53v87Ev();
extern void _ZN7S3031C53v88Ev();
extern void _ZN7S3031C53v89Ev();
extern void _ZN7S3031C53v90Ev();
extern void _ZN7S3031C53v91Ev();
extern void _ZN7S3031C53v92Ev();
extern void _ZN7S3031C53v93Ev();
extern void _ZN7S3031C53v94Ev();
extern void _ZN7S3031C63v95Ev();
extern void _ZN7S3031C63v96Ev();
extern void _ZN7S3031C63v97Ev();
extern void _ZN7S3031C63v98Ev();
extern void _ZN7S3031C63v99Ev();
extern void _ZN7S3031C64v100Ev();
extern void _ZN7S3031C64v101Ev();
extern void _ZN7S3031C64v102Ev();
extern void _ZN7S3031C64v103Ev();
static  VTBL_ENTRY vtc_S3031C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3031C2[0]),
  (VTBL_ENTRY)&_ZN7S3031C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3031C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v74Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v75Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v76Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v77Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v78Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v104Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v105Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v106Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v107Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v108Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v109Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v110Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v111Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v112Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v113Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v114Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v115Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v116Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v117Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v118Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v119Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v120Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v121Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v122Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v123Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v124Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v125Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v126Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v127Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S3031C2[0]),
  (VTBL_ENTRY)&_ZN7S3031C53v79Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v80Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v81Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v82Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v83Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v84Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v85Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v86Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v87Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v88Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v89Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v90Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v91Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v92Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v93Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v94Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S3031C2[0]),
  (VTBL_ENTRY)&_ZN7S3031C63v95Ev,
  (VTBL_ENTRY)&_ZN7S3031C63v96Ev,
  (VTBL_ENTRY)&_ZN7S3031C63v97Ev,
  (VTBL_ENTRY)&_ZN7S3031C63v98Ev,
  (VTBL_ENTRY)&_ZN7S3031C63v99Ev,
  (VTBL_ENTRY)&_ZN7S3031C64v100Ev,
  (VTBL_ENTRY)&_ZN7S3031C64v101Ev,
  (VTBL_ENTRY)&_ZN7S3031C64v102Ev,
  (VTBL_ENTRY)&_ZN7S3031C64v103Ev,
};
extern VTBL_ENTRY _ZTI7S3031C2[];
extern  VTBL_ENTRY _ZTV7S3031C2[];
Class_Descriptor cd_S3031C2 = {  "S3031C2", // class name
  bases_S3031C2, 3,
  &(vtc_S3031C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI7S3031C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3031C2),121, //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  S3031C1  : S3031C2 {
  ::S79C44 s3031c1f0;
  virtual  ~S3031C1(); // _ZN7S3031C1D1Ev
  virtual void  v1(); // _ZN7S3031C12v1Ev
  virtual void  v2(); // _ZN7S3031C12v2Ev
  virtual void  v3(); // _ZN7S3031C12v3Ev
  virtual void  v4(); // _ZN7S3031C12v4Ev
  virtual void  v5(); // _ZN7S3031C12v5Ev
  virtual void  v6(); // _ZN7S3031C12v6Ev
  virtual void  v7(); // _ZN7S3031C12v7Ev
  virtual void  v8(); // _ZN7S3031C12v8Ev
  virtual void  v9(); // _ZN7S3031C12v9Ev
  virtual void  v10(); // _ZN7S3031C13v10Ev
  virtual void  v11(); // _ZN7S3031C13v11Ev
  virtual void  v12(); // _ZN7S3031C13v12Ev
  virtual void  v13(); // _ZN7S3031C13v13Ev
  virtual void  v14(); // _ZN7S3031C13v14Ev
  S3031C1(); // tgen
};
//SIG(1 S3031C1) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} BC5{ v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94} BC6{ v95 v96 v97 v98 v99 v100 v101 v102 v103} vd v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 Fp FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 FC11{ BC12{ BC10}}}


 S3031C1 ::~S3031C1(){ note_dtor("S3031C1", this);}
void  S3031C1 ::v1(){vfunc_called(this, "_ZN7S3031C12v1Ev");}
void  S3031C1 ::v2(){vfunc_called(this, "_ZN7S3031C12v2Ev");}
void  S3031C1 ::v3(){vfunc_called(this, "_ZN7S3031C12v3Ev");}
void  S3031C1 ::v4(){vfunc_called(this, "_ZN7S3031C12v4Ev");}
void  S3031C1 ::v5(){vfunc_called(this, "_ZN7S3031C12v5Ev");}
void  S3031C1 ::v6(){vfunc_called(this, "_ZN7S3031C12v6Ev");}
void  S3031C1 ::v7(){vfunc_called(this, "_ZN7S3031C12v7Ev");}
void  S3031C1 ::v8(){vfunc_called(this, "_ZN7S3031C12v8Ev");}
void  S3031C1 ::v9(){vfunc_called(this, "_ZN7S3031C12v9Ev");}
void  S3031C1 ::v10(){vfunc_called(this, "_ZN7S3031C13v10Ev");}
void  S3031C1 ::v11(){vfunc_called(this, "_ZN7S3031C13v11Ev");}
void  S3031C1 ::v12(){vfunc_called(this, "_ZN7S3031C13v12Ev");}
void  S3031C1 ::v13(){vfunc_called(this, "_ZN7S3031C13v13Ev");}
void  S3031C1 ::v14(){vfunc_called(this, "_ZN7S3031C13v14Ev");}
S3031C1 ::S3031C1(){ note_ctor("S3031C1", this);} // tgen

static void Test_S3031C1()
{
  extern Class_Descriptor cd_S3031C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,26)];
    init_test(&cd_S3031C1, buf);
    S3031C1 *dp, &lv = *(dp=new (buf) S3031C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,100), "sizeof(S3031C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3031C1)");
    check_base_class_offset(lv, (S3031C3*)(S3031C2*), 0, "S3031C1");
    check_base_class_offset(lv, (S3031C5*)(S3031C2*), ABISELECT(96,60), "S3031C1");
    check_base_class_offset(lv, (S3031C6*)(S3031C2*), ABISELECT(104,64), "S3031C1");
    check_base_class_offset(lv, (S3031C2*), 0, "S3031C1");
    check_field_offset(lv, s3031c1f0, ABISELECT(144,88), "S3031C1.s3031c1f0");
    test_class_info(&lv, &cd_S3031C1);
    dp->~S3031C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3031C1(Test_S3031C1, "S3031C1", ABISELECT(160,100));

#else // __cplusplus

extern void _ZN7S3031C1C1Ev();
extern void _ZN7S3031C1D1Ev();
Name_Map name_map_S3031C1[] = {
  NSPAIR(_ZN7S3031C1C1Ev),
  NSPAIR(_ZN7S3031C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3031C3;
extern VTBL_ENTRY _ZTI7S3031C3[];
extern  VTBL_ENTRY _ZTV7S3031C3[];
extern Class_Descriptor cd_S3031C5;
extern VTBL_ENTRY _ZTI7S3031C5[];
extern  VTBL_ENTRY _ZTV7S3031C5[];
extern Class_Descriptor cd_S3031C6;
extern VTBL_ENTRY _ZTI7S3031C6[];
extern  VTBL_ENTRY _ZTV7S3031C6[];
extern Class_Descriptor cd_S3031C2;
extern VTBL_ENTRY _ZTI7S3031C2[];
extern  VTBL_ENTRY _ZTV7S3031C2[];
static Base_Class bases_S3031C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3031C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3031C5,    ABISELECT(96,60), //bcp->offset
    106, //bcp->virtual_function_table_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_S3031C6,    ABISELECT(104,64), //bcp->offset
    124, //bcp->virtual_function_table_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_S3031C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3031C1[];
extern void _ZN7S3031C1D1Ev();
extern void _ZN7S3031C1D0Ev();
extern void _ZN7S3031C33v15Ev();
extern void _ZN7S3031C33v16Ev();
extern void _ZN7S3031C33v17Ev();
extern void _ZN7S3031C33v18Ev();
extern void _ZN7S3031C33v19Ev();
extern void _ZN7S3031C33v20Ev();
extern void _ZN7S3031C33v21Ev();
extern void _ZN7S3031C33v22Ev();
extern void _ZN7S3031C33v23Ev();
extern void _ZN7S3031C33v24Ev();
extern void _ZN7S3031C33v25Ev();
extern void _ZN7S3031C33v26Ev();
extern void _ZN7S3031C33v27Ev();
extern void _ZN7S3031C33v28Ev();
extern void _ZN7S3031C33v29Ev();
extern void _ZN7S3031C33v30Ev();
extern void _ZN7S3031C33v31Ev();
extern void _ZN7S3031C33v32Ev();
extern void _ZN7S3031C33v33Ev();
extern void _ZN7S3031C33v34Ev();
extern void _ZN7S3031C33v35Ev();
extern void _ZN7S3031C33v36Ev();
extern void _ZN7S3031C33v37Ev();
extern void _ZN7S3031C33v38Ev();
extern void _ZN7S3031C33v39Ev();
extern void _ZN7S3031C33v40Ev();
extern void _ZN7S3031C33v41Ev();
extern void _ZN7S3031C33v42Ev();
extern void _ZN7S3031C33v43Ev();
extern void _ZN7S3031C33v44Ev();
extern void _ZN7S3031C33v45Ev();
extern void _ZN7S3031C33v46Ev();
extern void _ZN7S3031C33v47Ev();
extern void _ZN7S3031C33v48Ev();
extern void _ZN7S3031C33v49Ev();
extern void _ZN7S3031C33v50Ev();
extern void _ZN7S3031C33v51Ev();
extern void _ZN7S3031C33v52Ev();
extern void _ZN7S3031C33v53Ev();
extern void _ZN7S3031C33v54Ev();
extern void _ZN7S3031C33v55Ev();
extern void _ZN7S3031C33v56Ev();
extern void _ZN7S3031C33v57Ev();
extern void _ZN7S3031C33v58Ev();
extern void _ZN7S3031C33v59Ev();
extern void _ZN7S3031C33v60Ev();
extern void _ZN7S3031C33v61Ev();
extern void _ZN7S3031C33v62Ev();
extern void _ZN7S3031C33v63Ev();
extern void _ZN7S3031C33v64Ev();
extern void _ZN7S3031C33v65Ev();
extern void _ZN7S3031C33v66Ev();
extern void _ZN7S3031C33v67Ev();
extern void _ZN7S3031C33v68Ev();
extern void _ZN7S3031C33v69Ev();
extern void _ZN7S3031C33v70Ev();
extern void _ZN7S3031C33v71Ev();
extern void _ZN7S3031C33v72Ev();
extern void _ZN7S3031C33v73Ev();
extern void _ZN7S3031C33v74Ev();
extern void _ZN7S3031C33v75Ev();
extern void _ZN7S3031C33v76Ev();
extern void _ZN7S3031C33v77Ev();
extern void _ZN7S3031C33v78Ev();
extern void _ZN7S3031C24v104Ev();
extern void _ZN7S3031C24v105Ev();
extern void _ZN7S3031C24v106Ev();
extern void _ZN7S3031C24v107Ev();
extern void _ZN7S3031C24v108Ev();
extern void _ZN7S3031C24v109Ev();
extern void _ZN7S3031C24v110Ev();
extern void _ZN7S3031C24v111Ev();
extern void _ZN7S3031C24v112Ev();
extern void _ZN7S3031C24v113Ev();
extern void _ZN7S3031C24v114Ev();
extern void _ZN7S3031C24v115Ev();
extern void _ZN7S3031C24v116Ev();
extern void _ZN7S3031C24v117Ev();
extern void _ZN7S3031C24v118Ev();
extern void _ZN7S3031C24v119Ev();
extern void _ZN7S3031C24v120Ev();
extern void _ZN7S3031C24v121Ev();
extern void _ZN7S3031C24v122Ev();
extern void _ZN7S3031C24v123Ev();
extern void _ZN7S3031C24v124Ev();
extern void _ZN7S3031C24v125Ev();
extern void _ZN7S3031C24v126Ev();
extern void _ZN7S3031C24v127Ev();
extern void _ZN7S3031C12v1Ev();
extern void _ZN7S3031C12v2Ev();
extern void _ZN7S3031C12v3Ev();
extern void _ZN7S3031C12v4Ev();
extern void _ZN7S3031C12v5Ev();
extern void _ZN7S3031C12v6Ev();
extern void _ZN7S3031C12v7Ev();
extern void _ZN7S3031C12v8Ev();
extern void _ZN7S3031C12v9Ev();
extern void _ZN7S3031C13v10Ev();
extern void _ZN7S3031C13v11Ev();
extern void _ZN7S3031C13v12Ev();
extern void _ZN7S3031C13v13Ev();
extern void _ZN7S3031C13v14Ev();
extern void _ZN7S3031C53v79Ev();
extern void _ZN7S3031C53v80Ev();
extern void _ZN7S3031C53v81Ev();
extern void _ZN7S3031C53v82Ev();
extern void _ZN7S3031C53v83Ev();
extern void _ZN7S3031C53v84Ev();
extern void _ZN7S3031C53v85Ev();
extern void _ZN7S3031C53v86Ev();
extern void _ZN7S3031C53v87Ev();
extern void _ZN7S3031C53v88Ev();
extern void _ZN7S3031C53v89Ev();
extern void _ZN7S3031C53v90Ev();
extern void _ZN7S3031C53v91Ev();
extern void _ZN7S3031C53v92Ev();
extern void _ZN7S3031C53v93Ev();
extern void _ZN7S3031C53v94Ev();
extern void _ZN7S3031C63v95Ev();
extern void _ZN7S3031C63v96Ev();
extern void _ZN7S3031C63v97Ev();
extern void _ZN7S3031C63v98Ev();
extern void _ZN7S3031C63v99Ev();
extern void _ZN7S3031C64v100Ev();
extern void _ZN7S3031C64v101Ev();
extern void _ZN7S3031C64v102Ev();
extern void _ZN7S3031C64v103Ev();
static  VTBL_ENTRY vtc_S3031C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3031C1[0]),
  (VTBL_ENTRY)&_ZN7S3031C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3031C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v74Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v75Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v76Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v77Ev,
  (VTBL_ENTRY)&_ZN7S3031C33v78Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v104Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v105Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v106Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v107Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v108Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v109Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v110Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v111Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v112Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v113Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v114Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v115Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v116Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v117Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v118Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v119Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v120Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v121Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v122Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v123Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v124Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v125Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v126Ev,
  (VTBL_ENTRY)&_ZN7S3031C24v127Ev,
  (VTBL_ENTRY)&_ZN7S3031C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3031C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3031C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3031C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3031C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3031C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3031C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3031C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3031C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3031C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3031C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3031C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3031C13v13Ev,
  (VTBL_ENTRY)&_ZN7S3031C13v14Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S3031C1[0]),
  (VTBL_ENTRY)&_ZN7S3031C53v79Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v80Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v81Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v82Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v83Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v84Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v85Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v86Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v87Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v88Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v89Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v90Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v91Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v92Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v93Ev,
  (VTBL_ENTRY)&_ZN7S3031C53v94Ev,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S3031C1[0]),
  (VTBL_ENTRY)&_ZN7S3031C63v95Ev,
  (VTBL_ENTRY)&_ZN7S3031C63v96Ev,
  (VTBL_ENTRY)&_ZN7S3031C63v97Ev,
  (VTBL_ENTRY)&_ZN7S3031C63v98Ev,
  (VTBL_ENTRY)&_ZN7S3031C63v99Ev,
  (VTBL_ENTRY)&_ZN7S3031C64v100Ev,
  (VTBL_ENTRY)&_ZN7S3031C64v101Ev,
  (VTBL_ENTRY)&_ZN7S3031C64v102Ev,
  (VTBL_ENTRY)&_ZN7S3031C64v103Ev,
};
extern VTBL_ENTRY _ZTI7S3031C1[];
extern  VTBL_ENTRY _ZTV7S3031C1[];
Class_Descriptor cd_S3031C1 = {  "S3031C1", // class name
  bases_S3031C1, 4,
  &(vtc_S3031C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,100), // object size
  NSPAIRA(_ZTI7S3031C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3031C1),135, //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  S6795C2  {
  virtual  ~S6795C2(); // _ZN7S6795C2D1Ev
  virtual void  v34(); // _ZN7S6795C23v34Ev
  virtual void  v35(); // _ZN7S6795C23v35Ev
  virtual void  v36(); // _ZN7S6795C23v36Ev
  virtual void  v37(); // _ZN7S6795C23v37Ev
  virtual void  v38(); // _ZN7S6795C23v38Ev
  virtual void  v39(); // _ZN7S6795C23v39Ev
  virtual void  v40(); // _ZN7S6795C23v40Ev
  virtual void  v41(); // _ZN7S6795C23v41Ev
  virtual void  v42(); // _ZN7S6795C23v42Ev
  virtual void  v43(); // _ZN7S6795C23v43Ev
  virtual void  v44(); // _ZN7S6795C23v44Ev
  virtual void  v45(); // _ZN7S6795C23v45Ev
  virtual void  v46(); // _ZN7S6795C23v46Ev
  virtual void  v47(); // _ZN7S6795C23v47Ev
  virtual void  v48(); // _ZN7S6795C23v48Ev
  virtual void  v49(); // _ZN7S6795C23v49Ev
  virtual void  v50(); // _ZN7S6795C23v50Ev
  virtual void  v51(); // _ZN7S6795C23v51Ev
  virtual void  v52(); // _ZN7S6795C23v52Ev
  virtual void  v53(); // _ZN7S6795C23v53Ev
  virtual void  v54(); // _ZN7S6795C23v54Ev
  virtual void  v55(); // _ZN7S6795C23v55Ev
  virtual void  v56(); // _ZN7S6795C23v56Ev
  virtual void  v57(); // _ZN7S6795C23v57Ev
  virtual void  v58(); // _ZN7S6795C23v58Ev
  virtual void  v59(); // _ZN7S6795C23v59Ev
  virtual void  v60(); // _ZN7S6795C23v60Ev
  virtual void  v61(); // _ZN7S6795C23v61Ev
  virtual void  v62(); // _ZN7S6795C23v62Ev
  virtual void  v63(); // _ZN7S6795C23v63Ev
  S6795C2(); // tgen
};
//SIG(-1 S6795C2) 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}


 S6795C2 ::~S6795C2(){ note_dtor("S6795C2", this);}
void  S6795C2 ::v34(){vfunc_called(this, "_ZN7S6795C23v34Ev");}
void  S6795C2 ::v35(){vfunc_called(this, "_ZN7S6795C23v35Ev");}
void  S6795C2 ::v36(){vfunc_called(this, "_ZN7S6795C23v36Ev");}
void  S6795C2 ::v37(){vfunc_called(this, "_ZN7S6795C23v37Ev");}
void  S6795C2 ::v38(){vfunc_called(this, "_ZN7S6795C23v38Ev");}
void  S6795C2 ::v39(){vfunc_called(this, "_ZN7S6795C23v39Ev");}
void  S6795C2 ::v40(){vfunc_called(this, "_ZN7S6795C23v40Ev");}
void  S6795C2 ::v41(){vfunc_called(this, "_ZN7S6795C23v41Ev");}
void  S6795C2 ::v42(){vfunc_called(this, "_ZN7S6795C23v42Ev");}
void  S6795C2 ::v43(){vfunc_called(this, "_ZN7S6795C23v43Ev");}
void  S6795C2 ::v44(){vfunc_called(this, "_ZN7S6795C23v44Ev");}
void  S6795C2 ::v45(){vfunc_called(this, "_ZN7S6795C23v45Ev");}
void  S6795C2 ::v46(){vfunc_called(this, "_ZN7S6795C23v46Ev");}
void  S6795C2 ::v47(){vfunc_called(this, "_ZN7S6795C23v47Ev");}
void  S6795C2 ::v48(){vfunc_called(this, "_ZN7S6795C23v48Ev");}
void  S6795C2 ::v49(){vfunc_called(this, "_ZN7S6795C23v49Ev");}
void  S6795C2 ::v50(){vfunc_called(this, "_ZN7S6795C23v50Ev");}
void  S6795C2 ::v51(){vfunc_called(this, "_ZN7S6795C23v51Ev");}
void  S6795C2 ::v52(){vfunc_called(this, "_ZN7S6795C23v52Ev");}
void  S6795C2 ::v53(){vfunc_called(this, "_ZN7S6795C23v53Ev");}
void  S6795C2 ::v54(){vfunc_called(this, "_ZN7S6795C23v54Ev");}
void  S6795C2 ::v55(){vfunc_called(this, "_ZN7S6795C23v55Ev");}
void  S6795C2 ::v56(){vfunc_called(this, "_ZN7S6795C23v56Ev");}
void  S6795C2 ::v57(){vfunc_called(this, "_ZN7S6795C23v57Ev");}
void  S6795C2 ::v58(){vfunc_called(this, "_ZN7S6795C23v58Ev");}
void  S6795C2 ::v59(){vfunc_called(this, "_ZN7S6795C23v59Ev");}
void  S6795C2 ::v60(){vfunc_called(this, "_ZN7S6795C23v60Ev");}
void  S6795C2 ::v61(){vfunc_called(this, "_ZN7S6795C23v61Ev");}
void  S6795C2 ::v62(){vfunc_called(this, "_ZN7S6795C23v62Ev");}
void  S6795C2 ::v63(){vfunc_called(this, "_ZN7S6795C23v63Ev");}
S6795C2 ::S6795C2(){ note_ctor("S6795C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6795C2C1Ev();
extern void _ZN7S6795C2D1Ev();
Name_Map name_map_S6795C2[] = {
  NSPAIR(_ZN7S6795C2C1Ev),
  NSPAIR(_ZN7S6795C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6795C2[];
extern void _ZN7S6795C2D1Ev();
extern void _ZN7S6795C2D0Ev();
extern void _ZN7S6795C23v34Ev();
extern void _ZN7S6795C23v35Ev();
extern void _ZN7S6795C23v36Ev();
extern void _ZN7S6795C23v37Ev();
extern void _ZN7S6795C23v38Ev();
extern void _ZN7S6795C23v39Ev();
extern void _ZN7S6795C23v40Ev();
extern void _ZN7S6795C23v41Ev();
extern void _ZN7S6795C23v42Ev();
extern void _ZN7S6795C23v43Ev();
extern void _ZN7S6795C23v44Ev();
extern void _ZN7S6795C23v45Ev();
extern void _ZN7S6795C23v46Ev();
extern void _ZN7S6795C23v47Ev();
extern void _ZN7S6795C23v48Ev();
extern void _ZN7S6795C23v49Ev();
extern void _ZN7S6795C23v50Ev();
extern void _ZN7S6795C23v51Ev();
extern void _ZN7S6795C23v52Ev();
extern void _ZN7S6795C23v53Ev();
extern void _ZN7S6795C23v54Ev();
extern void _ZN7S6795C23v55Ev();
extern void _ZN7S6795C23v56Ev();
extern void _ZN7S6795C23v57Ev();
extern void _ZN7S6795C23v58Ev();
extern void _ZN7S6795C23v59Ev();
extern void _ZN7S6795C23v60Ev();
extern void _ZN7S6795C23v61Ev();
extern void _ZN7S6795C23v62Ev();
extern void _ZN7S6795C23v63Ev();
static  VTBL_ENTRY vtc_S6795C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6795C2[0]),
  (VTBL_ENTRY)&_ZN7S6795C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6795C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v34Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v35Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v36Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v37Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v38Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v39Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v40Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v41Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v42Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v43Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v44Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v45Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v46Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v47Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v48Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v49Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v50Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v51Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v52Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v53Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v54Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v55Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v56Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v57Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v58Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v59Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v60Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v61Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v62Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v63Ev,
};
extern VTBL_ENTRY _ZTI7S6795C2[];
extern  VTBL_ENTRY _ZTV7S6795C2[];
Class_Descriptor cd_S6795C2 = {  "S6795C2", // class name
  0,0,//no base classes
  &(vtc_S6795C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6795C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6795C2),34, //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  S6795C6_nt  {
  void *s6795c6f0;
  int s6795c6f1;
  void *s6795c6f2;
  void  mf6795c6(); // _ZN10S6795C6_nt8mf6795c6Ev
};
//SIG(-1 S6795C6_nt) C1{ m Fp Fi Fp}


void  S6795C6_nt ::mf6795c6(){}

//skip512 S6795C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6795C7  {
  __tsi64 s6795c7f0;
  int s6795c7f1[5];
  char s6795c7f2[128];
};
//SIG(-1 S6795C7) C1{ FL Fi[5] Fc[128]}



static void Test_S6795C7()
{
  {
    init_simple_test("S6795C7");
    S6795C7 lv;
    check2(sizeof(lv), ABISELECT(160,156), "sizeof(S6795C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6795C7)");
    check_field_offset(lv, s6795c7f0, 0, "S6795C7.s6795c7f0");
    check_field_offset(lv, s6795c7f1, 8, "S6795C7.s6795c7f1");
    check_field_offset(lv, s6795c7f2, 28, "S6795C7.s6795c7f2");
  }
}
static Arrange_To_Call_Me vS6795C7(Test_S6795C7, "S6795C7", ABISELECT(160,156));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6795C8_nt  {
  void *s6795c8f0;
  void  mf6795c8(); // _ZN10S6795C8_nt8mf6795c8Ev
  virtual  ~S6795C8_nt(); // _ZN10S6795C8_ntD1Ev
  S6795C8_nt(); // tgen
};
//SIG(-1 S6795C8_nt) C1{ vd m Fp}


void  S6795C8_nt ::mf6795c8(){}
 S6795C8_nt ::~S6795C8_nt(){ note_dtor("S6795C8_nt", this);}
S6795C8_nt ::S6795C8_nt(){ note_ctor("S6795C8_nt", this);} // tgen

//skip512 S6795C8_nt

#else // __cplusplus

extern void _ZN10S6795C8_ntC1Ev();
extern void _ZN10S6795C8_ntD1Ev();
Name_Map name_map_S6795C8_nt[] = {
  NSPAIR(_ZN10S6795C8_ntC1Ev),
  NSPAIR(_ZN10S6795C8_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S6795C8_nt[];
extern void _ZN10S6795C8_ntD1Ev();
extern void _ZN10S6795C8_ntD0Ev();
static  VTBL_ENTRY vtc_S6795C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S6795C8_nt[0]),
  (VTBL_ENTRY)&_ZN10S6795C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S6795C8_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S6795C8_nt[];
VTBL_ENTRY *P__ZTI10S6795C8_nt = _ZTI10S6795C8_nt; 
extern  VTBL_ENTRY _ZTV10S6795C8_nt[];
Class_Descriptor cd_S6795C8_nt = {  "S6795C8_nt", // class name
  0,0,//no base classes
  &(vtc_S6795C8_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S6795C8_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S6795C8_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  S6795C10_nt  {
  int s6795c10f0[4];
};
//SIG(-1 S6795C10_nt) C1{ Fi[4]}



//skip512 S6795C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6795C1  : S6795C2 {
  void *s6795c1f0[5];
  ::S5266C25 s6795c1f1;
  void *s6795c1f2;
  ::S6795C6_nt s6795c1f3;
  void *s6795c1f4[2];
  int s6795c1f5;
  ::S6795C7 s6795c1f6;
  void *s6795c1f7;
  ::S6795C8_nt s6795c1f8;
  ::S79C38_nt s6795c1f9;
  void *s6795c1f10;
  int s6795c1f11;
  char s6795c1f12[5];
  void *s6795c1f13[4];
  int s6795c1f14;
  void *s6795c1f15;
  char s6795c1f16;
  ::S6795C10_nt s6795c1f17;
  void *s6795c1f18;
  virtual  ~S6795C1(); // _ZN7S6795C1D1Ev
  virtual void  v1(); // _ZN7S6795C12v1Ev
  virtual void  v2(); // _ZN7S6795C12v2Ev
  virtual void  v3(); // _ZN7S6795C12v3Ev
  virtual void  v4(); // _ZN7S6795C12v4Ev
  virtual void  v5(); // _ZN7S6795C12v5Ev
  virtual void  v6(); // _ZN7S6795C12v6Ev
  virtual void  v7(); // _ZN7S6795C12v7Ev
  virtual void  v8(); // _ZN7S6795C12v8Ev
  virtual void  v9(); // _ZN7S6795C12v9Ev
  virtual void  v10(); // _ZN7S6795C13v10Ev
  virtual void  v11(); // _ZN7S6795C13v11Ev
  virtual void  v12(); // _ZN7S6795C13v12Ev
  virtual void  v13(); // _ZN7S6795C13v13Ev
  virtual void  v14(); // _ZN7S6795C13v14Ev
  virtual void  v15(); // _ZN7S6795C13v15Ev
  virtual void  v16(); // _ZN7S6795C13v16Ev
  virtual void  v17(); // _ZN7S6795C13v17Ev
  virtual void  v18(); // _ZN7S6795C13v18Ev
  virtual void  v19(); // _ZN7S6795C13v19Ev
  virtual void  v20(); // _ZN7S6795C13v20Ev
  virtual void  v21(); // _ZN7S6795C13v21Ev
  virtual void  v22(); // _ZN7S6795C13v22Ev
  virtual void  v23(); // _ZN7S6795C13v23Ev
  virtual void  v24(); // _ZN7S6795C13v24Ev
  virtual void  v25(); // _ZN7S6795C13v25Ev
  virtual void  v26(); // _ZN7S6795C13v26Ev
  virtual void  v27(); // _ZN7S6795C13v27Ev
  virtual void  v28(); // _ZN7S6795C13v28Ev
  virtual void  v29(); // _ZN7S6795C13v29Ev
  virtual void  v30(); // _ZN7S6795C13v30Ev
  virtual void  v31(); // _ZN7S6795C13v31Ev
  virtual void  v32(); // _ZN7S6795C13v32Ev
  virtual void  v33(); // _ZN7S6795C13v33Ev
  S6795C1(); // tgen
};
//SIG(1 S6795C1) C1{ BC2{ vd 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} 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 Fp[5] FC3{ m Fp Fi FC4{ m} FC4} Fp FC5{ m Fp Fi Fp} Fp[2] Fi FC6{ FL Fi[5] Fc[128]} Fp FC7{ vd m Fp} FC8{ m Fp[2]} Fp Fi Fc[5] Fp[4] Fi Fp Fc FC9{ Fi[4]} Fp}


 S6795C1 ::~S6795C1(){ note_dtor("S6795C1", this);}
void  S6795C1 ::v1(){vfunc_called(this, "_ZN7S6795C12v1Ev");}
void  S6795C1 ::v2(){vfunc_called(this, "_ZN7S6795C12v2Ev");}
void  S6795C1 ::v3(){vfunc_called(this, "_ZN7S6795C12v3Ev");}
void  S6795C1 ::v4(){vfunc_called(this, "_ZN7S6795C12v4Ev");}
void  S6795C1 ::v5(){vfunc_called(this, "_ZN7S6795C12v5Ev");}
void  S6795C1 ::v6(){vfunc_called(this, "_ZN7S6795C12v6Ev");}
void  S6795C1 ::v7(){vfunc_called(this, "_ZN7S6795C12v7Ev");}
void  S6795C1 ::v8(){vfunc_called(this, "_ZN7S6795C12v8Ev");}
void  S6795C1 ::v9(){vfunc_called(this, "_ZN7S6795C12v9Ev");}
void  S6795C1 ::v10(){vfunc_called(this, "_ZN7S6795C13v10Ev");}
void  S6795C1 ::v11(){vfunc_called(this, "_ZN7S6795C13v11Ev");}
void  S6795C1 ::v12(){vfunc_called(this, "_ZN7S6795C13v12Ev");}
void  S6795C1 ::v13(){vfunc_called(this, "_ZN7S6795C13v13Ev");}
void  S6795C1 ::v14(){vfunc_called(this, "_ZN7S6795C13v14Ev");}
void  S6795C1 ::v15(){vfunc_called(this, "_ZN7S6795C13v15Ev");}
void  S6795C1 ::v16(){vfunc_called(this, "_ZN7S6795C13v16Ev");}
void  S6795C1 ::v17(){vfunc_called(this, "_ZN7S6795C13v17Ev");}
void  S6795C1 ::v18(){vfunc_called(this, "_ZN7S6795C13v18Ev");}
void  S6795C1 ::v19(){vfunc_called(this, "_ZN7S6795C13v19Ev");}
void  S6795C1 ::v20(){vfunc_called(this, "_ZN7S6795C13v20Ev");}
void  S6795C1 ::v21(){vfunc_called(this, "_ZN7S6795C13v21Ev");}
void  S6795C1 ::v22(){vfunc_called(this, "_ZN7S6795C13v22Ev");}
void  S6795C1 ::v23(){vfunc_called(this, "_ZN7S6795C13v23Ev");}
void  S6795C1 ::v24(){vfunc_called(this, "_ZN7S6795C13v24Ev");}
void  S6795C1 ::v25(){vfunc_called(this, "_ZN7S6795C13v25Ev");}
void  S6795C1 ::v26(){vfunc_called(this, "_ZN7S6795C13v26Ev");}
void  S6795C1 ::v27(){vfunc_called(this, "_ZN7S6795C13v27Ev");}
void  S6795C1 ::v28(){vfunc_called(this, "_ZN7S6795C13v28Ev");}
void  S6795C1 ::v29(){vfunc_called(this, "_ZN7S6795C13v29Ev");}
void  S6795C1 ::v30(){vfunc_called(this, "_ZN7S6795C13v30Ev");}
void  S6795C1 ::v31(){vfunc_called(this, "_ZN7S6795C13v31Ev");}
void  S6795C1 ::v32(){vfunc_called(this, "_ZN7S6795C13v32Ev");}
void  S6795C1 ::v33(){vfunc_called(this, "_ZN7S6795C13v33Ev");}
S6795C1 ::S6795C1(){ note_ctor("S6795C1", this);} // tgen

static void Test_S6795C1()
{
  extern Class_Descriptor cd_S6795C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(54,77)];
    init_test(&cd_S6795C1, buf);
    S6795C1 *dp, &lv = *(dp=new (buf) S6795C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(424,304), "sizeof(S6795C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6795C1)");
    check_base_class_offset(lv, (S6795C2*), 0, "S6795C1");
    check_field_offset(lv, s6795c1f0, ABISELECT(8,4), "S6795C1.s6795c1f0");
    check_field_offset(lv, s6795c1f1, ABISELECT(48,24), "S6795C1.s6795c1f1");
    check_field_offset(lv, s6795c1f2, ABISELECT(64,36), "S6795C1.s6795c1f2");
    check_field_offset(lv, s6795c1f3, ABISELECT(72,40), "S6795C1.s6795c1f3");
    check_field_offset(lv, s6795c1f4, ABISELECT(96,52), "S6795C1.s6795c1f4");
    check_field_offset(lv, s6795c1f5, ABISELECT(112,60), "S6795C1.s6795c1f5");
    check_field_offset(lv, s6795c1f6, ABISELECT(120,64), "S6795C1.s6795c1f6");
    check_field_offset(lv, s6795c1f7, ABISELECT(280,220), "S6795C1.s6795c1f7");
    check_field_offset(lv, s6795c1f8, ABISELECT(288,224), "S6795C1.s6795c1f8");
    check_field_offset(lv, s6795c1f9, ABISELECT(304,232), "S6795C1.s6795c1f9");
    check_field_offset(lv, s6795c1f10, ABISELECT(320,240), "S6795C1.s6795c1f10");
    check_field_offset(lv, s6795c1f11, ABISELECT(328,244), "S6795C1.s6795c1f11");
    check_field_offset(lv, s6795c1f12, ABISELECT(332,248), "S6795C1.s6795c1f12");
    check_field_offset(lv, s6795c1f13, ABISELECT(344,256), "S6795C1.s6795c1f13");
    check_field_offset(lv, s6795c1f14, ABISELECT(376,272), "S6795C1.s6795c1f14");
    check_field_offset(lv, s6795c1f15, ABISELECT(384,276), "S6795C1.s6795c1f15");
    check_field_offset(lv, s6795c1f16, ABISELECT(392,280), "S6795C1.s6795c1f16");
    check_field_offset(lv, s6795c1f17, ABISELECT(396,284), "S6795C1.s6795c1f17");
    check_field_offset(lv, s6795c1f18, ABISELECT(416,300), "S6795C1.s6795c1f18");
    test_class_info(&lv, &cd_S6795C1);
    dp->~S6795C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6795C1(Test_S6795C1, "S6795C1", ABISELECT(424,304));

#else // __cplusplus

extern void _ZN7S6795C1C1Ev();
extern void _ZN7S6795C1D1Ev();
Name_Map name_map_S6795C1[] = {
  NSPAIR(_ZN7S6795C1C1Ev),
  NSPAIR(_ZN7S6795C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6795C2;
extern VTBL_ENTRY _ZTI7S6795C2[];
extern  VTBL_ENTRY _ZTV7S6795C2[];
static Base_Class bases_S6795C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6795C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S6795C1[];
extern void _ZN7S6795C1D1Ev();
extern void _ZN7S6795C1D0Ev();
extern void _ZN7S6795C23v34Ev();
extern void _ZN7S6795C23v35Ev();
extern void _ZN7S6795C23v36Ev();
extern void _ZN7S6795C23v37Ev();
extern void _ZN7S6795C23v38Ev();
extern void _ZN7S6795C23v39Ev();
extern void _ZN7S6795C23v40Ev();
extern void _ZN7S6795C23v41Ev();
extern void _ZN7S6795C23v42Ev();
extern void _ZN7S6795C23v43Ev();
extern void _ZN7S6795C23v44Ev();
extern void _ZN7S6795C23v45Ev();
extern void _ZN7S6795C23v46Ev();
extern void _ZN7S6795C23v47Ev();
extern void _ZN7S6795C23v48Ev();
extern void _ZN7S6795C23v49Ev();
extern void _ZN7S6795C23v50Ev();
extern void _ZN7S6795C23v51Ev();
extern void _ZN7S6795C23v52Ev();
extern void _ZN7S6795C23v53Ev();
extern void _ZN7S6795C23v54Ev();
extern void _ZN7S6795C23v55Ev();
extern void _ZN7S6795C23v56Ev();
extern void _ZN7S6795C23v57Ev();
extern void _ZN7S6795C23v58Ev();
extern void _ZN7S6795C23v59Ev();
extern void _ZN7S6795C23v60Ev();
extern void _ZN7S6795C23v61Ev();
extern void _ZN7S6795C23v62Ev();
extern void _ZN7S6795C23v63Ev();
extern void _ZN7S6795C12v1Ev();
extern void _ZN7S6795C12v2Ev();
extern void _ZN7S6795C12v3Ev();
extern void _ZN7S6795C12v4Ev();
extern void _ZN7S6795C12v5Ev();
extern void _ZN7S6795C12v6Ev();
extern void _ZN7S6795C12v7Ev();
extern void _ZN7S6795C12v8Ev();
extern void _ZN7S6795C12v9Ev();
extern void _ZN7S6795C13v10Ev();
extern void _ZN7S6795C13v11Ev();
extern void _ZN7S6795C13v12Ev();
extern void _ZN7S6795C13v13Ev();
extern void _ZN7S6795C13v14Ev();
extern void _ZN7S6795C13v15Ev();
extern void _ZN7S6795C13v16Ev();
extern void _ZN7S6795C13v17Ev();
extern void _ZN7S6795C13v18Ev();
extern void _ZN7S6795C13v19Ev();
extern void _ZN7S6795C13v20Ev();
extern void _ZN7S6795C13v21Ev();
extern void _ZN7S6795C13v22Ev();
extern void _ZN7S6795C13v23Ev();
extern void _ZN7S6795C13v24Ev();
extern void _ZN7S6795C13v25Ev();
extern void _ZN7S6795C13v26Ev();
extern void _ZN7S6795C13v27Ev();
extern void _ZN7S6795C13v28Ev();
extern void _ZN7S6795C13v29Ev();
extern void _ZN7S6795C13v30Ev();
extern void _ZN7S6795C13v31Ev();
extern void _ZN7S6795C13v32Ev();
extern void _ZN7S6795C13v33Ev();
static  VTBL_ENTRY vtc_S6795C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6795C1[0]),
  (VTBL_ENTRY)&_ZN7S6795C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6795C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v34Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v35Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v36Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v37Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v38Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v39Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v40Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v41Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v42Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v43Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v44Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v45Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v46Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v47Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v48Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v49Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v50Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v51Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v52Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v53Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v54Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v55Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v56Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v57Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v58Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v59Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v60Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v61Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v62Ev,
  (VTBL_ENTRY)&_ZN7S6795C23v63Ev,
  (VTBL_ENTRY)&_ZN7S6795C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6795C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6795C12v3Ev,
  (VTBL_ENTRY)&_ZN7S6795C12v4Ev,
  (VTBL_ENTRY)&_ZN7S6795C12v5Ev,
  (VTBL_ENTRY)&_ZN7S6795C12v6Ev,
  (VTBL_ENTRY)&_ZN7S6795C12v7Ev,
  (VTBL_ENTRY)&_ZN7S6795C12v8Ev,
  (VTBL_ENTRY)&_ZN7S6795C12v9Ev,
  (VTBL_ENTRY)&_ZN7S6795C13v10Ev,
  (VTBL_ENTRY)&_ZN7S6795C13v11Ev,
  (VTBL_ENTRY)&_ZN7S6795C13v12Ev,
  (VTBL_ENTRY)&_ZN7S6795C13v13Ev,
  (VTBL_ENTRY)&_ZN7S6795C13v14Ev,
  (VTBL_ENTRY)&_ZN7S6795C13v15Ev,
  (VTBL_ENTRY)&_ZN7S6795C13v16Ev,
  (VTBL_ENTRY)&_ZN7S6795C13v17Ev,
  (VTBL_ENTRY)&_ZN7S6795C13v18Ev,
  (VTBL_ENTRY)&_ZN7S6795C13v19Ev,
  (VTBL_ENTRY)&_ZN7S6795C13v20Ev,
  (VTBL_ENTRY)&_ZN7S6795C13v21Ev,
  (VTBL_ENTRY)&_ZN7S6795C13v22Ev,
  (VTBL_ENTRY)&_ZN7S6795C13v23Ev,
  (VTBL_ENTRY)&_ZN7S6795C13v24Ev,
  (VTBL_ENTRY)&_ZN7S6795C13v25Ev,
  (VTBL_ENTRY)&_ZN7S6795C13v26Ev,
  (VTBL_ENTRY)&_ZN7S6795C13v27Ev,
  (VTBL_ENTRY)&_ZN7S6795C13v28Ev,
  (VTBL_ENTRY)&_ZN7S6795C13v29Ev,
  (VTBL_ENTRY)&_ZN7S6795C13v30Ev,
  (VTBL_ENTRY)&_ZN7S6795C13v31Ev,
  (VTBL_ENTRY)&_ZN7S6795C13v32Ev,
  (VTBL_ENTRY)&_ZN7S6795C13v33Ev,
};
extern VTBL_ENTRY _ZTI7S6795C1[];
extern  VTBL_ENTRY _ZTV7S6795C1[];
Class_Descriptor cd_S6795C1 = {  "S6795C1", // class name
  bases_S6795C1, 1,
  &(vtc_S6795C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(424,304), // object size
  NSPAIRA(_ZTI7S6795C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6795C1),67, //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  S6794C2  {
  virtual  ~S6794C2(); // _ZN7S6794C2D1Ev
  virtual void  v34(); // _ZN7S6794C23v34Ev
  virtual void  v35(); // _ZN7S6794C23v35Ev
  virtual void  v36(); // _ZN7S6794C23v36Ev
  virtual void  v37(); // _ZN7S6794C23v37Ev
  virtual void  v38(); // _ZN7S6794C23v38Ev
  virtual void  v39(); // _ZN7S6794C23v39Ev
  virtual void  v40(); // _ZN7S6794C23v40Ev
  virtual void  v41(); // _ZN7S6794C23v41Ev
  virtual void  v42(); // _ZN7S6794C23v42Ev
  virtual void  v43(); // _ZN7S6794C23v43Ev
  virtual void  v44(); // _ZN7S6794C23v44Ev
  virtual void  v45(); // _ZN7S6794C23v45Ev
  virtual void  v46(); // _ZN7S6794C23v46Ev
  virtual void  v47(); // _ZN7S6794C23v47Ev
  virtual void  v48(); // _ZN7S6794C23v48Ev
  virtual void  v49(); // _ZN7S6794C23v49Ev
  virtual void  v50(); // _ZN7S6794C23v50Ev
  virtual void  v51(); // _ZN7S6794C23v51Ev
  virtual void  v52(); // _ZN7S6794C23v52Ev
  virtual void  v53(); // _ZN7S6794C23v53Ev
  virtual void  v54(); // _ZN7S6794C23v54Ev
  virtual void  v55(); // _ZN7S6794C23v55Ev
  virtual void  v56(); // _ZN7S6794C23v56Ev
  virtual void  v57(); // _ZN7S6794C23v57Ev
  virtual void  v58(); // _ZN7S6794C23v58Ev
  virtual void  v59(); // _ZN7S6794C23v59Ev
  virtual void  v60(); // _ZN7S6794C23v60Ev
  virtual void  v61(); // _ZN7S6794C23v61Ev
  virtual void  v62(); // _ZN7S6794C23v62Ev
  virtual void  v63(); // _ZN7S6794C23v63Ev
  S6794C2(); // tgen
};
//SIG(-1 S6794C2) 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}


 S6794C2 ::~S6794C2(){ note_dtor("S6794C2", this);}
void  S6794C2 ::v34(){vfunc_called(this, "_ZN7S6794C23v34Ev");}
void  S6794C2 ::v35(){vfunc_called(this, "_ZN7S6794C23v35Ev");}
void  S6794C2 ::v36(){vfunc_called(this, "_ZN7S6794C23v36Ev");}
void  S6794C2 ::v37(){vfunc_called(this, "_ZN7S6794C23v37Ev");}
void  S6794C2 ::v38(){vfunc_called(this, "_ZN7S6794C23v38Ev");}
void  S6794C2 ::v39(){vfunc_called(this, "_ZN7S6794C23v39Ev");}
void  S6794C2 ::v40(){vfunc_called(this, "_ZN7S6794C23v40Ev");}
void  S6794C2 ::v41(){vfunc_called(this, "_ZN7S6794C23v41Ev");}
void  S6794C2 ::v42(){vfunc_called(this, "_ZN7S6794C23v42Ev");}
void  S6794C2 ::v43(){vfunc_called(this, "_ZN7S6794C23v43Ev");}
void  S6794C2 ::v44(){vfunc_called(this, "_ZN7S6794C23v44Ev");}
void  S6794C2 ::v45(){vfunc_called(this, "_ZN7S6794C23v45Ev");}
void  S6794C2 ::v46(){vfunc_called(this, "_ZN7S6794C23v46Ev");}
void  S6794C2 ::v47(){vfunc_called(this, "_ZN7S6794C23v47Ev");}
void  S6794C2 ::v48(){vfunc_called(this, "_ZN7S6794C23v48Ev");}
void  S6794C2 ::v49(){vfunc_called(this, "_ZN7S6794C23v49Ev");}
void  S6794C2 ::v50(){vfunc_called(this, "_ZN7S6794C23v50Ev");}
void  S6794C2 ::v51(){vfunc_called(this, "_ZN7S6794C23v51Ev");}
void  S6794C2 ::v52(){vfunc_called(this, "_ZN7S6794C23v52Ev");}
void  S6794C2 ::v53(){vfunc_called(this, "_ZN7S6794C23v53Ev");}
void  S6794C2 ::v54(){vfunc_called(this, "_ZN7S6794C23v54Ev");}
void  S6794C2 ::v55(){vfunc_called(this, "_ZN7S6794C23v55Ev");}
void  S6794C2 ::v56(){vfunc_called(this, "_ZN7S6794C23v56Ev");}
void  S6794C2 ::v57(){vfunc_called(this, "_ZN7S6794C23v57Ev");}
void  S6794C2 ::v58(){vfunc_called(this, "_ZN7S6794C23v58Ev");}
void  S6794C2 ::v59(){vfunc_called(this, "_ZN7S6794C23v59Ev");}
void  S6794C2 ::v60(){vfunc_called(this, "_ZN7S6794C23v60Ev");}
void  S6794C2 ::v61(){vfunc_called(this, "_ZN7S6794C23v61Ev");}
void  S6794C2 ::v62(){vfunc_called(this, "_ZN7S6794C23v62Ev");}
void  S6794C2 ::v63(){vfunc_called(this, "_ZN7S6794C23v63Ev");}
S6794C2 ::S6794C2(){ note_ctor("S6794C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6794C2C1Ev();
extern void _ZN7S6794C2D1Ev();
Name_Map name_map_S6794C2[] = {
  NSPAIR(_ZN7S6794C2C1Ev),
  NSPAIR(_ZN7S6794C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6794C2[];
extern void _ZN7S6794C2D1Ev();
extern void _ZN7S6794C2D0Ev();
extern void _ZN7S6794C23v34Ev();
extern void _ZN7S6794C23v35Ev();
extern void _ZN7S6794C23v36Ev();
extern void _ZN7S6794C23v37Ev();
extern void _ZN7S6794C23v38Ev();
extern void _ZN7S6794C23v39Ev();
extern void _ZN7S6794C23v40Ev();
extern void _ZN7S6794C23v41Ev();
extern void _ZN7S6794C23v42Ev();
extern void _ZN7S6794C23v43Ev();
extern void _ZN7S6794C23v44Ev();
extern void _ZN7S6794C23v45Ev();
extern void _ZN7S6794C23v46Ev();
extern void _ZN7S6794C23v47Ev();
extern void _ZN7S6794C23v48Ev();
extern void _ZN7S6794C23v49Ev();
extern void _ZN7S6794C23v50Ev();
extern void _ZN7S6794C23v51Ev();
extern void _ZN7S6794C23v52Ev();
extern void _ZN7S6794C23v53Ev();
extern void _ZN7S6794C23v54Ev();
extern void _ZN7S6794C23v55Ev();
extern void _ZN7S6794C23v56Ev();
extern void _ZN7S6794C23v57Ev();
extern void _ZN7S6794C23v58Ev();
extern void _ZN7S6794C23v59Ev();
extern void _ZN7S6794C23v60Ev();
extern void _ZN7S6794C23v61Ev();
extern void _ZN7S6794C23v62Ev();
extern void _ZN7S6794C23v63Ev();
static  VTBL_ENTRY vtc_S6794C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6794C2[0]),
  (VTBL_ENTRY)&_ZN7S6794C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6794C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v34Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v35Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v36Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v37Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v38Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v39Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v40Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v41Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v42Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v43Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v44Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v45Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v46Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v47Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v48Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v49Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v50Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v51Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v52Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v53Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v54Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v55Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v56Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v57Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v58Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v59Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v60Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v61Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v62Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v63Ev,
};
extern VTBL_ENTRY _ZTI7S6794C2[];
extern  VTBL_ENTRY _ZTV7S6794C2[];
Class_Descriptor cd_S6794C2 = {  "S6794C2", // class name
  0,0,//no base classes
  &(vtc_S6794C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6794C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6794C2),34, //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  S6794C7  {
  long s6794c7f0;
  int s6794c7f1[5];
  char s6794c7f2[128];
};
//SIG(-1 S6794C7) C1{ Fl Fi[5] Fc[128]}



static void Test_S6794C7()
{
  {
    init_simple_test("S6794C7");
    S6794C7 lv;
    check2(sizeof(lv), ABISELECT(160,152), "sizeof(S6794C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6794C7)");
    check_field_offset(lv, s6794c7f0, 0, "S6794C7.s6794c7f0");
    check_field_offset(lv, s6794c7f1, ABISELECT(8,4), "S6794C7.s6794c7f1");
    check_field_offset(lv, s6794c7f2, ABISELECT(28,24), "S6794C7.s6794c7f2");
  }
}
static Arrange_To_Call_Me vS6794C7(Test_S6794C7, "S6794C7", ABISELECT(160,152));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6794C1  : S6794C2 {
  void *s6794c1f0[5];
  ::S5266C25 s6794c1f1;
  void *s6794c1f2;
  ::S6795C6_nt s6794c1f3;
  void *s6794c1f4[2];
  int s6794c1f5;
  ::S6794C7 s6794c1f6;
  void *s6794c1f7;
  ::S6795C8_nt s6794c1f8;
  ::S79C38_nt s6794c1f9;
  void *s6794c1f10;
  int s6794c1f11;
  char s6794c1f12[5];
  void *s6794c1f13[4];
  int s6794c1f14;
  void *s6794c1f15;
  char s6794c1f16;
  ::S6795C10_nt s6794c1f17;
  void *s6794c1f18;
  virtual  ~S6794C1(); // _ZN7S6794C1D1Ev
  virtual void  v1(); // _ZN7S6794C12v1Ev
  virtual void  v2(); // _ZN7S6794C12v2Ev
  virtual void  v3(); // _ZN7S6794C12v3Ev
  virtual void  v4(); // _ZN7S6794C12v4Ev
  virtual void  v5(); // _ZN7S6794C12v5Ev
  virtual void  v6(); // _ZN7S6794C12v6Ev
  virtual void  v7(); // _ZN7S6794C12v7Ev
  virtual void  v8(); // _ZN7S6794C12v8Ev
  virtual void  v9(); // _ZN7S6794C12v9Ev
  virtual void  v10(); // _ZN7S6794C13v10Ev
  virtual void  v11(); // _ZN7S6794C13v11Ev
  virtual void  v12(); // _ZN7S6794C13v12Ev
  virtual void  v13(); // _ZN7S6794C13v13Ev
  virtual void  v14(); // _ZN7S6794C13v14Ev
  virtual void  v15(); // _ZN7S6794C13v15Ev
  virtual void  v16(); // _ZN7S6794C13v16Ev
  virtual void  v17(); // _ZN7S6794C13v17Ev
  virtual void  v18(); // _ZN7S6794C13v18Ev
  virtual void  v19(); // _ZN7S6794C13v19Ev
  virtual void  v20(); // _ZN7S6794C13v20Ev
  virtual void  v21(); // _ZN7S6794C13v21Ev
  virtual void  v22(); // _ZN7S6794C13v22Ev
  virtual void  v23(); // _ZN7S6794C13v23Ev
  virtual void  v24(); // _ZN7S6794C13v24Ev
  virtual void  v25(); // _ZN7S6794C13v25Ev
  virtual void  v26(); // _ZN7S6794C13v26Ev
  virtual void  v27(); // _ZN7S6794C13v27Ev
  virtual void  v28(); // _ZN7S6794C13v28Ev
  virtual void  v29(); // _ZN7S6794C13v29Ev
  virtual void  v30(); // _ZN7S6794C13v30Ev
  virtual void  v31(); // _ZN7S6794C13v31Ev
  virtual void  v32(); // _ZN7S6794C13v32Ev
  virtual void  v33(); // _ZN7S6794C13v33Ev
  S6794C1(); // tgen
};
//SIG(1 S6794C1) C1{ BC2{ vd 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} 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 Fp[5] FC3{ m Fp Fi FC4{ m} FC4} Fp FC5{ m Fp Fi Fp} Fp[2] Fi FC6{ Fl Fi[5] Fc[128]} Fp FC7{ vd m Fp} FC8{ m Fp[2]} Fp Fi Fc[5] Fp[4] Fi Fp Fc FC9{ Fi[4]} Fp}


 S6794C1 ::~S6794C1(){ note_dtor("S6794C1", this);}
void  S6794C1 ::v1(){vfunc_called(this, "_ZN7S6794C12v1Ev");}
void  S6794C1 ::v2(){vfunc_called(this, "_ZN7S6794C12v2Ev");}
void  S6794C1 ::v3(){vfunc_called(this, "_ZN7S6794C12v3Ev");}
void  S6794C1 ::v4(){vfunc_called(this, "_ZN7S6794C12v4Ev");}
void  S6794C1 ::v5(){vfunc_called(this, "_ZN7S6794C12v5Ev");}
void  S6794C1 ::v6(){vfunc_called(this, "_ZN7S6794C12v6Ev");}
void  S6794C1 ::v7(){vfunc_called(this, "_ZN7S6794C12v7Ev");}
void  S6794C1 ::v8(){vfunc_called(this, "_ZN7S6794C12v8Ev");}
void  S6794C1 ::v9(){vfunc_called(this, "_ZN7S6794C12v9Ev");}
void  S6794C1 ::v10(){vfunc_called(this, "_ZN7S6794C13v10Ev");}
void  S6794C1 ::v11(){vfunc_called(this, "_ZN7S6794C13v11Ev");}
void  S6794C1 ::v12(){vfunc_called(this, "_ZN7S6794C13v12Ev");}
void  S6794C1 ::v13(){vfunc_called(this, "_ZN7S6794C13v13Ev");}
void  S6794C1 ::v14(){vfunc_called(this, "_ZN7S6794C13v14Ev");}
void  S6794C1 ::v15(){vfunc_called(this, "_ZN7S6794C13v15Ev");}
void  S6794C1 ::v16(){vfunc_called(this, "_ZN7S6794C13v16Ev");}
void  S6794C1 ::v17(){vfunc_called(this, "_ZN7S6794C13v17Ev");}
void  S6794C1 ::v18(){vfunc_called(this, "_ZN7S6794C13v18Ev");}
void  S6794C1 ::v19(){vfunc_called(this, "_ZN7S6794C13v19Ev");}
void  S6794C1 ::v20(){vfunc_called(this, "_ZN7S6794C13v20Ev");}
void  S6794C1 ::v21(){vfunc_called(this, "_ZN7S6794C13v21Ev");}
void  S6794C1 ::v22(){vfunc_called(this, "_ZN7S6794C13v22Ev");}
void  S6794C1 ::v23(){vfunc_called(this, "_ZN7S6794C13v23Ev");}
void  S6794C1 ::v24(){vfunc_called(this, "_ZN7S6794C13v24Ev");}
void  S6794C1 ::v25(){vfunc_called(this, "_ZN7S6794C13v25Ev");}
void  S6794C1 ::v26(){vfunc_called(this, "_ZN7S6794C13v26Ev");}
void  S6794C1 ::v27(){vfunc_called(this, "_ZN7S6794C13v27Ev");}
void  S6794C1 ::v28(){vfunc_called(this, "_ZN7S6794C13v28Ev");}
void  S6794C1 ::v29(){vfunc_called(this, "_ZN7S6794C13v29Ev");}
void  S6794C1 ::v30(){vfunc_called(this, "_ZN7S6794C13v30Ev");}
void  S6794C1 ::v31(){vfunc_called(this, "_ZN7S6794C13v31Ev");}
void  S6794C1 ::v32(){vfunc_called(this, "_ZN7S6794C13v32Ev");}
void  S6794C1 ::v33(){vfunc_called(this, "_ZN7S6794C13v33Ev");}
S6794C1 ::S6794C1(){ note_ctor("S6794C1", this);} // tgen

static void Test_S6794C1()
{
  extern Class_Descriptor cd_S6794C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(54,76)];
    init_test(&cd_S6794C1, buf);
    S6794C1 *dp, &lv = *(dp=new (buf) S6794C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(424,300), "sizeof(S6794C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6794C1)");
    check_base_class_offset(lv, (S6794C2*), 0, "S6794C1");
    check_field_offset(lv, s6794c1f0, ABISELECT(8,4), "S6794C1.s6794c1f0");
    check_field_offset(lv, s6794c1f1, ABISELECT(48,24), "S6794C1.s6794c1f1");
    check_field_offset(lv, s6794c1f2, ABISELECT(64,36), "S6794C1.s6794c1f2");
    check_field_offset(lv, s6794c1f3, ABISELECT(72,40), "S6794C1.s6794c1f3");
    check_field_offset(lv, s6794c1f4, ABISELECT(96,52), "S6794C1.s6794c1f4");
    check_field_offset(lv, s6794c1f5, ABISELECT(112,60), "S6794C1.s6794c1f5");
    check_field_offset(lv, s6794c1f6, ABISELECT(120,64), "S6794C1.s6794c1f6");
    check_field_offset(lv, s6794c1f7, ABISELECT(280,216), "S6794C1.s6794c1f7");
    check_field_offset(lv, s6794c1f8, ABISELECT(288,220), "S6794C1.s6794c1f8");
    check_field_offset(lv, s6794c1f9, ABISELECT(304,228), "S6794C1.s6794c1f9");
    check_field_offset(lv, s6794c1f10, ABISELECT(320,236), "S6794C1.s6794c1f10");
    check_field_offset(lv, s6794c1f11, ABISELECT(328,240), "S6794C1.s6794c1f11");
    check_field_offset(lv, s6794c1f12, ABISELECT(332,244), "S6794C1.s6794c1f12");
    check_field_offset(lv, s6794c1f13, ABISELECT(344,252), "S6794C1.s6794c1f13");
    check_field_offset(lv, s6794c1f14, ABISELECT(376,268), "S6794C1.s6794c1f14");
    check_field_offset(lv, s6794c1f15, ABISELECT(384,272), "S6794C1.s6794c1f15");
    check_field_offset(lv, s6794c1f16, ABISELECT(392,276), "S6794C1.s6794c1f16");
    check_field_offset(lv, s6794c1f17, ABISELECT(396,280), "S6794C1.s6794c1f17");
    check_field_offset(lv, s6794c1f18, ABISELECT(416,296), "S6794C1.s6794c1f18");
    test_class_info(&lv, &cd_S6794C1);
    dp->~S6794C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6794C1(Test_S6794C1, "S6794C1", ABISELECT(424,300));

#else // __cplusplus

extern void _ZN7S6794C1C1Ev();
extern void _ZN7S6794C1D1Ev();
Name_Map name_map_S6794C1[] = {
  NSPAIR(_ZN7S6794C1C1Ev),
  NSPAIR(_ZN7S6794C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6794C2;
extern VTBL_ENTRY _ZTI7S6794C2[];
extern  VTBL_ENTRY _ZTV7S6794C2[];
static Base_Class bases_S6794C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6794C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S6794C1[];
extern void _ZN7S6794C1D1Ev();
extern void _ZN7S6794C1D0Ev();
extern void _ZN7S6794C23v34Ev();
extern void _ZN7S6794C23v35Ev();
extern void _ZN7S6794C23v36Ev();
extern void _ZN7S6794C23v37Ev();
extern void _ZN7S6794C23v38Ev();
extern void _ZN7S6794C23v39Ev();
extern void _ZN7S6794C23v40Ev();
extern void _ZN7S6794C23v41Ev();
extern void _ZN7S6794C23v42Ev();
extern void _ZN7S6794C23v43Ev();
extern void _ZN7S6794C23v44Ev();
extern void _ZN7S6794C23v45Ev();
extern void _ZN7S6794C23v46Ev();
extern void _ZN7S6794C23v47Ev();
extern void _ZN7S6794C23v48Ev();
extern void _ZN7S6794C23v49Ev();
extern void _ZN7S6794C23v50Ev();
extern void _ZN7S6794C23v51Ev();
extern void _ZN7S6794C23v52Ev();
extern void _ZN7S6794C23v53Ev();
extern void _ZN7S6794C23v54Ev();
extern void _ZN7S6794C23v55Ev();
extern void _ZN7S6794C23v56Ev();
extern void _ZN7S6794C23v57Ev();
extern void _ZN7S6794C23v58Ev();
extern void _ZN7S6794C23v59Ev();
extern void _ZN7S6794C23v60Ev();
extern void _ZN7S6794C23v61Ev();
extern void _ZN7S6794C23v62Ev();
extern void _ZN7S6794C23v63Ev();
extern void _ZN7S6794C12v1Ev();
extern void _ZN7S6794C12v2Ev();
extern void _ZN7S6794C12v3Ev();
extern void _ZN7S6794C12v4Ev();
extern void _ZN7S6794C12v5Ev();
extern void _ZN7S6794C12v6Ev();
extern void _ZN7S6794C12v7Ev();
extern void _ZN7S6794C12v8Ev();
extern void _ZN7S6794C12v9Ev();
extern void _ZN7S6794C13v10Ev();
extern void _ZN7S6794C13v11Ev();
extern void _ZN7S6794C13v12Ev();
extern void _ZN7S6794C13v13Ev();
extern void _ZN7S6794C13v14Ev();
extern void _ZN7S6794C13v15Ev();
extern void _ZN7S6794C13v16Ev();
extern void _ZN7S6794C13v17Ev();
extern void _ZN7S6794C13v18Ev();
extern void _ZN7S6794C13v19Ev();
extern void _ZN7S6794C13v20Ev();
extern void _ZN7S6794C13v21Ev();
extern void _ZN7S6794C13v22Ev();
extern void _ZN7S6794C13v23Ev();
extern void _ZN7S6794C13v24Ev();
extern void _ZN7S6794C13v25Ev();
extern void _ZN7S6794C13v26Ev();
extern void _ZN7S6794C13v27Ev();
extern void _ZN7S6794C13v28Ev();
extern void _ZN7S6794C13v29Ev();
extern void _ZN7S6794C13v30Ev();
extern void _ZN7S6794C13v31Ev();
extern void _ZN7S6794C13v32Ev();
extern void _ZN7S6794C13v33Ev();
static  VTBL_ENTRY vtc_S6794C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6794C1[0]),
  (VTBL_ENTRY)&_ZN7S6794C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6794C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v34Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v35Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v36Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v37Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v38Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v39Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v40Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v41Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v42Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v43Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v44Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v45Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v46Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v47Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v48Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v49Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v50Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v51Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v52Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v53Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v54Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v55Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v56Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v57Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v58Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v59Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v60Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v61Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v62Ev,
  (VTBL_ENTRY)&_ZN7S6794C23v63Ev,
  (VTBL_ENTRY)&_ZN7S6794C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6794C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6794C12v3Ev,
  (VTBL_ENTRY)&_ZN7S6794C12v4Ev,
  (VTBL_ENTRY)&_ZN7S6794C12v5Ev,
  (VTBL_ENTRY)&_ZN7S6794C12v6Ev,
  (VTBL_ENTRY)&_ZN7S6794C12v7Ev,
  (VTBL_ENTRY)&_ZN7S6794C12v8Ev,
  (VTBL_ENTRY)&_ZN7S6794C12v9Ev,
  (VTBL_ENTRY)&_ZN7S6794C13v10Ev,
  (VTBL_ENTRY)&_ZN7S6794C13v11Ev,
  (VTBL_ENTRY)&_ZN7S6794C13v12Ev,
  (VTBL_ENTRY)&_ZN7S6794C13v13Ev,
  (VTBL_ENTRY)&_ZN7S6794C13v14Ev,
  (VTBL_ENTRY)&_ZN7S6794C13v15Ev,
  (VTBL_ENTRY)&_ZN7S6794C13v16Ev,
  (VTBL_ENTRY)&_ZN7S6794C13v17Ev,
  (VTBL_ENTRY)&_ZN7S6794C13v18Ev,
  (VTBL_ENTRY)&_ZN7S6794C13v19Ev,
  (VTBL_ENTRY)&_ZN7S6794C13v20Ev,
  (VTBL_ENTRY)&_ZN7S6794C13v21Ev,
  (VTBL_ENTRY)&_ZN7S6794C13v22Ev,
  (VTBL_ENTRY)&_ZN7S6794C13v23Ev,
  (VTBL_ENTRY)&_ZN7S6794C13v24Ev,
  (VTBL_ENTRY)&_ZN7S6794C13v25Ev,
  (VTBL_ENTRY)&_ZN7S6794C13v26Ev,
  (VTBL_ENTRY)&_ZN7S6794C13v27Ev,
  (VTBL_ENTRY)&_ZN7S6794C13v28Ev,
  (VTBL_ENTRY)&_ZN7S6794C13v29Ev,
  (VTBL_ENTRY)&_ZN7S6794C13v30Ev,
  (VTBL_ENTRY)&_ZN7S6794C13v31Ev,
  (VTBL_ENTRY)&_ZN7S6794C13v32Ev,
  (VTBL_ENTRY)&_ZN7S6794C13v33Ev,
};
extern VTBL_ENTRY _ZTI7S6794C1[];
extern  VTBL_ENTRY _ZTV7S6794C1[];
Class_Descriptor cd_S6794C1 = {  "S6794C1", // class name
  bases_S6794C1, 1,
  &(vtc_S6794C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(424,300), // object size
  NSPAIRA(_ZTI7S6794C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6794C1),67, //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  S6850C2  {
  int s6850c2f0;
  __tsi64 s6850c2f1;
  void *s6850c2f2[4];
  int s6850c2f3[2];
  void *s6850c2f4;
  ::S79C8_nt s6850c2f5;
  void *s6850c2f6[2];
  virtual  ~S6850C2(); // _ZN7S6850C2D1Ev
  virtual void  v4(); // _ZN7S6850C22v4Ev
  virtual void  v5(); // _ZN7S6850C22v5Ev
  virtual void  v6(); // _ZN7S6850C22v6Ev
  virtual void  v7(); // _ZN7S6850C22v7Ev
  virtual void  v8(); // _ZN7S6850C22v8Ev
  virtual void  v9(); // _ZN7S6850C22v9Ev
  virtual void  v10(); // _ZN7S6850C23v10Ev
  virtual void  v11(); // _ZN7S6850C23v11Ev
  virtual void  v12(); // _ZN7S6850C23v12Ev
  virtual void  v13(); // _ZN7S6850C23v13Ev
  virtual void  v14(); // _ZN7S6850C23v14Ev
  virtual void  v15(); // _ZN7S6850C23v15Ev
  virtual void  v16(); // _ZN7S6850C23v16Ev
  virtual void  v17(); // _ZN7S6850C23v17Ev
  virtual void  v18(); // _ZN7S6850C23v18Ev
  virtual void  v19(); // _ZN7S6850C23v19Ev
  virtual void  v20(); // _ZN7S6850C23v20Ev
  virtual void  v21(); // _ZN7S6850C23v21Ev
  virtual void  v22(); // _ZN7S6850C23v22Ev
  virtual void  v23(); // _ZN7S6850C23v23Ev
  virtual void  v24(); // _ZN7S6850C23v24Ev
  virtual void  v25(); // _ZN7S6850C23v25Ev
  virtual void  v26(); // _ZN7S6850C23v26Ev
  virtual void  v27(); // _ZN7S6850C23v27Ev
  virtual void  v28(); // _ZN7S6850C23v28Ev
  virtual void  v29(); // _ZN7S6850C23v29Ev
  virtual void  v30(); // _ZN7S6850C23v30Ev
  virtual void  v31(); // _ZN7S6850C23v31Ev
  virtual void  v32(); // _ZN7S6850C23v32Ev
  virtual void  v33(); // _ZN7S6850C23v33Ev
  virtual void  v34(); // _ZN7S6850C23v34Ev
  virtual void  v35(); // _ZN7S6850C23v35Ev
  virtual void  v36(); // _ZN7S6850C23v36Ev
  virtual void  v37(); // _ZN7S6850C23v37Ev
  virtual void  v38(); // _ZN7S6850C23v38Ev
  virtual void  v39(); // _ZN7S6850C23v39Ev
  virtual void  v40(); // _ZN7S6850C23v40Ev
  virtual void  v41(); // _ZN7S6850C23v41Ev
  virtual void  v42(); // _ZN7S6850C23v42Ev
  virtual void  v43(); // _ZN7S6850C23v43Ev
  virtual void  v44(); // _ZN7S6850C23v44Ev
  virtual void  v45(); // _ZN7S6850C23v45Ev
  virtual void  v46(); // _ZN7S6850C23v46Ev
  virtual void  v47(); // _ZN7S6850C23v47Ev
  virtual void  v48(); // _ZN7S6850C23v48Ev
  virtual void  v49(); // _ZN7S6850C23v49Ev
  virtual void  v50(); // _ZN7S6850C23v50Ev
  virtual void  v51(); // _ZN7S6850C23v51Ev
  virtual void  v52(); // _ZN7S6850C23v52Ev
  virtual void  v53(); // _ZN7S6850C23v53Ev
  virtual void  v54(); // _ZN7S6850C23v54Ev
  virtual void  v55(); // _ZN7S6850C23v55Ev
  virtual void  v56(); // _ZN7S6850C23v56Ev
  virtual void  v57(); // _ZN7S6850C23v57Ev
  virtual void  v58(); // _ZN7S6850C23v58Ev
  virtual void  v59(); // _ZN7S6850C23v59Ev
  virtual void  v60(); // _ZN7S6850C23v60Ev
  virtual void  v61(); // _ZN7S6850C23v61Ev
  virtual void  v62(); // _ZN7S6850C23v62Ev
  virtual void  v63(); // _ZN7S6850C23v63Ev
  virtual void  v64(); // _ZN7S6850C23v64Ev
  virtual void  v65(); // _ZN7S6850C23v65Ev
  virtual void  v66(); // _ZN7S6850C23v66Ev
  virtual void  v67(); // _ZN7S6850C23v67Ev
  S6850C2(); // tgen
};
//SIG(-1 S6850C2) 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]}


 S6850C2 ::~S6850C2(){ note_dtor("S6850C2", this);}
void  S6850C2 ::v4(){vfunc_called(this, "_ZN7S6850C22v4Ev");}
void  S6850C2 ::v5(){vfunc_called(this, "_ZN7S6850C22v5Ev");}
void  S6850C2 ::v6(){vfunc_called(this, "_ZN7S6850C22v6Ev");}
void  S6850C2 ::v7(){vfunc_called(this, "_ZN7S6850C22v7Ev");}
void  S6850C2 ::v8(){vfunc_called(this, "_ZN7S6850C22v8Ev");}
void  S6850C2 ::v9(){vfunc_called(this, "_ZN7S6850C22v9Ev");}
void  S6850C2 ::v10(){vfunc_called(this, "_ZN7S6850C23v10Ev");}
void  S6850C2 ::v11(){vfunc_called(this, "_ZN7S6850C23v11Ev");}
void  S6850C2 ::v12(){vfunc_called(this, "_ZN7S6850C23v12Ev");}
void  S6850C2 ::v13(){vfunc_called(this, "_ZN7S6850C23v13Ev");}
void  S6850C2 ::v14(){vfunc_called(this, "_ZN7S6850C23v14Ev");}
void  S6850C2 ::v15(){vfunc_called(this, "_ZN7S6850C23v15Ev");}
void  S6850C2 ::v16(){vfunc_called(this, "_ZN7S6850C23v16Ev");}
void  S6850C2 ::v17(){vfunc_called(this, "_ZN7S6850C23v17Ev");}
void  S6850C2 ::v18(){vfunc_called(this, "_ZN7S6850C23v18Ev");}
void  S6850C2 ::v19(){vfunc_called(this, "_ZN7S6850C23v19Ev");}
void  S6850C2 ::v20(){vfunc_called(this, "_ZN7S6850C23v20Ev");}
void  S6850C2 ::v21(){vfunc_called(this, "_ZN7S6850C23v21Ev");}
void  S6850C2 ::v22(){vfunc_called(this, "_ZN7S6850C23v22Ev");}
void  S6850C2 ::v23(){vfunc_called(this, "_ZN7S6850C23v23Ev");}
void  S6850C2 ::v24(){vfunc_called(this, "_ZN7S6850C23v24Ev");}
void  S6850C2 ::v25(){vfunc_called(this, "_ZN7S6850C23v25Ev");}
void  S6850C2 ::v26(){vfunc_called(this, "_ZN7S6850C23v26Ev");}
void  S6850C2 ::v27(){vfunc_called(this, "_ZN7S6850C23v27Ev");}
void  S6850C2 ::v28(){vfunc_called(this, "_ZN7S6850C23v28Ev");}
void  S6850C2 ::v29(){vfunc_called(this, "_ZN7S6850C23v29Ev");}
void  S6850C2 ::v30(){vfunc_called(this, "_ZN7S6850C23v30Ev");}
void  S6850C2 ::v31(){vfunc_called(this, "_ZN7S6850C23v31Ev");}
void  S6850C2 ::v32(){vfunc_called(this, "_ZN7S6850C23v32Ev");}
void  S6850C2 ::v33(){vfunc_called(this, "_ZN7S6850C23v33Ev");}
void  S6850C2 ::v34(){vfunc_called(this, "_ZN7S6850C23v34Ev");}
void  S6850C2 ::v35(){vfunc_called(this, "_ZN7S6850C23v35Ev");}
void  S6850C2 ::v36(){vfunc_called(this, "_ZN7S6850C23v36Ev");}
void  S6850C2 ::v37(){vfunc_called(this, "_ZN7S6850C23v37Ev");}
void  S6850C2 ::v38(){vfunc_called(this, "_ZN7S6850C23v38Ev");}
void  S6850C2 ::v39(){vfunc_called(this, "_ZN7S6850C23v39Ev");}
void  S6850C2 ::v40(){vfunc_called(this, "_ZN7S6850C23v40Ev");}
void  S6850C2 ::v41(){vfunc_called(this, "_ZN7S6850C23v41Ev");}
void  S6850C2 ::v42(){vfunc_called(this, "_ZN7S6850C23v42Ev");}
void  S6850C2 ::v43(){vfunc_called(this, "_ZN7S6850C23v43Ev");}
void  S6850C2 ::v44(){vfunc_called(this, "_ZN7S6850C23v44Ev");}
void  S6850C2 ::v45(){vfunc_called(this, "_ZN7S6850C23v45Ev");}
void  S6850C2 ::v46(){vfunc_called(this, "_ZN7S6850C23v46Ev");}
void  S6850C2 ::v47(){vfunc_called(this, "_ZN7S6850C23v47Ev");}
void  S6850C2 ::v48(){vfunc_called(this, "_ZN7S6850C23v48Ev");}
void  S6850C2 ::v49(){vfunc_called(this, "_ZN7S6850C23v49Ev");}
void  S6850C2 ::v50(){vfunc_called(this, "_ZN7S6850C23v50Ev");}
void  S6850C2 ::v51(){vfunc_called(this, "_ZN7S6850C23v51Ev");}
void  S6850C2 ::v52(){vfunc_called(this, "_ZN7S6850C23v52Ev");}
void  S6850C2 ::v53(){vfunc_called(this, "_ZN7S6850C23v53Ev");}
void  S6850C2 ::v54(){vfunc_called(this, "_ZN7S6850C23v54Ev");}
void  S6850C2 ::v55(){vfunc_called(this, "_ZN7S6850C23v55Ev");}
void  S6850C2 ::v56(){vfunc_called(this, "_ZN7S6850C23v56Ev");}
void  S6850C2 ::v57(){vfunc_called(this, "_ZN7S6850C23v57Ev");}
void  S6850C2 ::v58(){vfunc_called(this, "_ZN7S6850C23v58Ev");}
void  S6850C2 ::v59(){vfunc_called(this, "_ZN7S6850C23v59Ev");}
void  S6850C2 ::v60(){vfunc_called(this, "_ZN7S6850C23v60Ev");}
void  S6850C2 ::v61(){vfunc_called(this, "_ZN7S6850C23v61Ev");}
void  S6850C2 ::v62(){vfunc_called(this, "_ZN7S6850C23v62Ev");}
void  S6850C2 ::v63(){vfunc_called(this, "_ZN7S6850C23v63Ev");}
void  S6850C2 ::v64(){vfunc_called(this, "_ZN7S6850C23v64Ev");}
void  S6850C2 ::v65(){vfunc_called(this, "_ZN7S6850C23v65Ev");}
void  S6850C2 ::v66(){vfunc_called(this, "_ZN7S6850C23v66Ev");}
void  S6850C2 ::v67(){vfunc_called(this, "_ZN7S6850C23v67Ev");}
S6850C2 ::S6850C2(){ note_ctor("S6850C2", this);} // tgen

static void Test_S6850C2()
{
  extern Class_Descriptor cd_S6850C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S6850C2, buf);
    S6850C2 *dp, &lv = *(dp=new (buf) S6850C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S6850C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6850C2)");
    check_field_offset(lv, s6850c2f0, ABISELECT(8,4), "S6850C2.s6850c2f0");
    check_field_offset(lv, s6850c2f1, ABISELECT(16,8), "S6850C2.s6850c2f1");
    check_field_offset(lv, s6850c2f2, ABISELECT(24,16), "S6850C2.s6850c2f2");
    check_field_offset(lv, s6850c2f3, ABISELECT(56,32), "S6850C2.s6850c2f3");
    check_field_offset(lv, s6850c2f4, ABISELECT(64,40), "S6850C2.s6850c2f4");
    check_field_offset(lv, s6850c2f5, ABISELECT(72,44), "S6850C2.s6850c2f5");
    check_field_offset(lv, s6850c2f6, ABISELECT(80,52), "S6850C2.s6850c2f6");
    test_class_info(&lv, &cd_S6850C2);
    dp->~S6850C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6850C2(Test_S6850C2, "S6850C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S6850C2C1Ev();
extern void _ZN7S6850C2D1Ev();
Name_Map name_map_S6850C2[] = {
  NSPAIR(_ZN7S6850C2C1Ev),
  NSPAIR(_ZN7S6850C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6850C2[];
extern void _ZN7S6850C2D1Ev();
extern void _ZN7S6850C2D0Ev();
extern void _ZN7S6850C22v4Ev();
extern void _ZN7S6850C22v5Ev();
extern void _ZN7S6850C22v6Ev();
extern void _ZN7S6850C22v7Ev();
extern void _ZN7S6850C22v8Ev();
extern void _ZN7S6850C22v9Ev();
extern void _ZN7S6850C23v10Ev();
extern void _ZN7S6850C23v11Ev();
extern void _ZN7S6850C23v12Ev();
extern void _ZN7S6850C23v13Ev();
extern void _ZN7S6850C23v14Ev();
extern void _ZN7S6850C23v15Ev();
extern void _ZN7S6850C23v16Ev();
extern void _ZN7S6850C23v17Ev();
extern void _ZN7S6850C23v18Ev();
extern void _ZN7S6850C23v19Ev();
extern void _ZN7S6850C23v20Ev();
extern void _ZN7S6850C23v21Ev();
extern void _ZN7S6850C23v22Ev();
extern void _ZN7S6850C23v23Ev();
extern void _ZN7S6850C23v24Ev();
extern void _ZN7S6850C23v25Ev();
extern void _ZN7S6850C23v26Ev();
extern void _ZN7S6850C23v27Ev();
extern void _ZN7S6850C23v28Ev();
extern void _ZN7S6850C23v29Ev();
extern void _ZN7S6850C23v30Ev();
extern void _ZN7S6850C23v31Ev();
extern void _ZN7S6850C23v32Ev();
extern void _ZN7S6850C23v33Ev();
extern void _ZN7S6850C23v34Ev();
extern void _ZN7S6850C23v35Ev();
extern void _ZN7S6850C23v36Ev();
extern void _ZN7S6850C23v37Ev();
extern void _ZN7S6850C23v38Ev();
extern void _ZN7S6850C23v39Ev();
extern void _ZN7S6850C23v40Ev();
extern void _ZN7S6850C23v41Ev();
extern void _ZN7S6850C23v42Ev();
extern void _ZN7S6850C23v43Ev();
extern void _ZN7S6850C23v44Ev();
extern void _ZN7S6850C23v45Ev();
extern void _ZN7S6850C23v46Ev();
extern void _ZN7S6850C23v47Ev();
extern void _ZN7S6850C23v48Ev();
extern void _ZN7S6850C23v49Ev();
extern void _ZN7S6850C23v50Ev();
extern void _ZN7S6850C23v51Ev();
extern void _ZN7S6850C23v52Ev();
extern void _ZN7S6850C23v53Ev();
extern void _ZN7S6850C23v54Ev();
extern void _ZN7S6850C23v55Ev();
extern void _ZN7S6850C23v56Ev();
extern void _ZN7S6850C23v57Ev();
extern void _ZN7S6850C23v58Ev();
extern void _ZN7S6850C23v59Ev();
extern void _ZN7S6850C23v60Ev();
extern void _ZN7S6850C23v61Ev();
extern void _ZN7S6850C23v62Ev();
extern void _ZN7S6850C23v63Ev();
extern void _ZN7S6850C23v64Ev();
extern void _ZN7S6850C23v65Ev();
extern void _ZN7S6850C23v66Ev();
extern void _ZN7S6850C23v67Ev();
static  VTBL_ENTRY vtc_S6850C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6850C2[0]),
  (VTBL_ENTRY)&_ZN7S6850C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6850C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6850C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6850C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6850C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6850C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6850C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6850C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v12Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v13Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v14Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v15Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v16Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v17Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v18Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v19Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v20Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v21Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v22Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v23Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v24Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v25Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v26Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v27Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v28Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v29Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v30Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v31Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v32Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v33Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v34Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v35Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v36Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v37Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v38Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v39Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v40Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v41Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v42Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v43Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v44Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v45Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v46Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v47Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v48Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v49Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v50Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v51Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v52Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v53Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v54Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v55Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v56Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v57Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v58Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v59Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v60Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v61Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v62Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v63Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v64Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v65Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v66Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v67Ev,
};
extern VTBL_ENTRY _ZTI7S6850C2[];
extern  VTBL_ENTRY _ZTV7S6850C2[];
Class_Descriptor cd_S6850C2 = {  "S6850C2", // class name
  0,0,//no base classes
  &(vtc_S6850C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S6850C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6850C2),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  S6850C1  : S6850C2 {
  int s6850c1f0[5];
  ::S79C8_nt s6850c1f1;
  int s6850c1f2[2];
  ::S79C23_nt s6850c1f3;
  int s6850c1f4;
  ::S79C45 s6850c1f5;
  int s6850c1f6;
  ::S79C41 s6850c1f7;
  ::S79C8_nt s6850c1f8;
  int s6850c1f9;
  void *s6850c1f10;
  virtual  ~S6850C1(); // _ZN7S6850C1D1Ev
  virtual void  v1(); // _ZN7S6850C12v1Ev
  virtual void  v2(); // _ZN7S6850C12v2Ev
  virtual void  v3(); // _ZN7S6850C12v3Ev
  S6850C1(); // tgen
};
//SIG(1 S6850C1) C1{ BC2{ vd 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 Fi[5] FC3 Fi[2] FC4{ m Fi[4]} Fi FC5{ BC6{ m Fp Fi[2]}} Fi FC7{ BC6} FC3 Fi Fp}


 S6850C1 ::~S6850C1(){ note_dtor("S6850C1", this);}
void  S6850C1 ::v1(){vfunc_called(this, "_ZN7S6850C12v1Ev");}
void  S6850C1 ::v2(){vfunc_called(this, "_ZN7S6850C12v2Ev");}
void  S6850C1 ::v3(){vfunc_called(this, "_ZN7S6850C12v3Ev");}
S6850C1 ::S6850C1(){ note_ctor("S6850C1", this);} // tgen

static void Test_S6850C1()
{
  extern Class_Descriptor cd_S6850C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,41)];
    init_test(&cd_S6850C1, buf);
    S6850C1 *dp, &lv = *(dp=new (buf) S6850C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,160), "sizeof(S6850C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6850C1)");
    check_base_class_offset(lv, (S6850C2*), 0, "S6850C1");
    check_field_offset(lv, s6850c1f0, ABISELECT(96,60), "S6850C1.s6850c1f0");
    check_field_offset(lv, s6850c1f1, ABISELECT(116,80), "S6850C1.s6850c1f1");
    check_field_offset(lv, s6850c1f2, ABISELECT(124,88), "S6850C1.s6850c1f2");
    check_field_offset(lv, s6850c1f3, ABISELECT(132,96), "S6850C1.s6850c1f3");
    check_field_offset(lv, s6850c1f4, ABISELECT(148,112), "S6850C1.s6850c1f4");
    check_field_offset(lv, s6850c1f5, ABISELECT(152,116), "S6850C1.s6850c1f5");
    check_field_offset(lv, s6850c1f6, ABISELECT(168,128), "S6850C1.s6850c1f6");
    check_field_offset(lv, s6850c1f7, ABISELECT(176,132), "S6850C1.s6850c1f7");
    check_field_offset(lv, s6850c1f8, ABISELECT(192,144), "S6850C1.s6850c1f8");
    check_field_offset(lv, s6850c1f9, ABISELECT(200,152), "S6850C1.s6850c1f9");
    check_field_offset(lv, s6850c1f10, ABISELECT(208,156), "S6850C1.s6850c1f10");
    test_class_info(&lv, &cd_S6850C1);
    dp->~S6850C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6850C1(Test_S6850C1, "S6850C1", ABISELECT(216,160));

#else // __cplusplus

extern void _ZN7S6850C1C1Ev();
extern void _ZN7S6850C1D1Ev();
Name_Map name_map_S6850C1[] = {
  NSPAIR(_ZN7S6850C1C1Ev),
  NSPAIR(_ZN7S6850C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6850C2;
extern VTBL_ENTRY _ZTI7S6850C2[];
extern  VTBL_ENTRY _ZTV7S6850C2[];
static Base_Class bases_S6850C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6850C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S6850C1[];
extern void _ZN7S6850C1D1Ev();
extern void _ZN7S6850C1D0Ev();
extern void _ZN7S6850C22v4Ev();
extern void _ZN7S6850C22v5Ev();
extern void _ZN7S6850C22v6Ev();
extern void _ZN7S6850C22v7Ev();
extern void _ZN7S6850C22v8Ev();
extern void _ZN7S6850C22v9Ev();
extern void _ZN7S6850C23v10Ev();
extern void _ZN7S6850C23v11Ev();
extern void _ZN7S6850C23v12Ev();
extern void _ZN7S6850C23v13Ev();
extern void _ZN7S6850C23v14Ev();
extern void _ZN7S6850C23v15Ev();
extern void _ZN7S6850C23v16Ev();
extern void _ZN7S6850C23v17Ev();
extern void _ZN7S6850C23v18Ev();
extern void _ZN7S6850C23v19Ev();
extern void _ZN7S6850C23v20Ev();
extern void _ZN7S6850C23v21Ev();
extern void _ZN7S6850C23v22Ev();
extern void _ZN7S6850C23v23Ev();
extern void _ZN7S6850C23v24Ev();
extern void _ZN7S6850C23v25Ev();
extern void _ZN7S6850C23v26Ev();
extern void _ZN7S6850C23v27Ev();
extern void _ZN7S6850C23v28Ev();
extern void _ZN7S6850C23v29Ev();
extern void _ZN7S6850C23v30Ev();
extern void _ZN7S6850C23v31Ev();
extern void _ZN7S6850C23v32Ev();
extern void _ZN7S6850C23v33Ev();
extern void _ZN7S6850C23v34Ev();
extern void _ZN7S6850C23v35Ev();
extern void _ZN7S6850C23v36Ev();
extern void _ZN7S6850C23v37Ev();
extern void _ZN7S6850C23v38Ev();
extern void _ZN7S6850C23v39Ev();
extern void _ZN7S6850C23v40Ev();
extern void _ZN7S6850C23v41Ev();
extern void _ZN7S6850C23v42Ev();
extern void _ZN7S6850C23v43Ev();
extern void _ZN7S6850C23v44Ev();
extern void _ZN7S6850C23v45Ev();
extern void _ZN7S6850C23v46Ev();
extern void _ZN7S6850C23v47Ev();
extern void _ZN7S6850C23v48Ev();
extern void _ZN7S6850C23v49Ev();
extern void _ZN7S6850C23v50Ev();
extern void _ZN7S6850C23v51Ev();
extern void _ZN7S6850C23v52Ev();
extern void _ZN7S6850C23v53Ev();
extern void _ZN7S6850C23v54Ev();
extern void _ZN7S6850C23v55Ev();
extern void _ZN7S6850C23v56Ev();
extern void _ZN7S6850C23v57Ev();
extern void _ZN7S6850C23v58Ev();
extern void _ZN7S6850C23v59Ev();
extern void _ZN7S6850C23v60Ev();
extern void _ZN7S6850C23v61Ev();
extern void _ZN7S6850C23v62Ev();
extern void _ZN7S6850C23v63Ev();
extern void _ZN7S6850C23v64Ev();
extern void _ZN7S6850C23v65Ev();
extern void _ZN7S6850C23v66Ev();
extern void _ZN7S6850C23v67Ev();
extern void _ZN7S6850C12v1Ev();
extern void _ZN7S6850C12v2Ev();
extern void _ZN7S6850C12v3Ev();
static  VTBL_ENTRY vtc_S6850C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6850C1[0]),
  (VTBL_ENTRY)&_ZN7S6850C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6850C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6850C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6850C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6850C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6850C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6850C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6850C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v12Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v13Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v14Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v15Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v16Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v17Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v18Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v19Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v20Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v21Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v22Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v23Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v24Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v25Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v26Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v27Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v28Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v29Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v30Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v31Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v32Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v33Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v34Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v35Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v36Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v37Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v38Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v39Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v40Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v41Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v42Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v43Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v44Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v45Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v46Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v47Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v48Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v49Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v50Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v51Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v52Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v53Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v54Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v55Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v56Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v57Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v58Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v59Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v60Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v61Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v62Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v63Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v64Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v65Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v66Ev,
  (VTBL_ENTRY)&_ZN7S6850C23v67Ev,
  (VTBL_ENTRY)&_ZN7S6850C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6850C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6850C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S6850C1[];
extern  VTBL_ENTRY _ZTV7S6850C1[];
Class_Descriptor cd_S6850C1 = {  "S6850C1", // class name
  bases_S6850C1, 1,
  &(vtc_S6850C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,160), // object size
  NSPAIRA(_ZTI7S6850C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6850C1),71, //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  S17777C5_nt  {
  void *s17777c5f0[3];
  void  mf17777c5(); // _ZN11S17777C5_nt9mf17777c5Ev
};
//SIG(-1 S17777C5_nt) C1{ m Fp[3]}


void  S17777C5_nt ::mf17777c5(){}

//skip512 S17777C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17777C4_nt  {
  ::S17777C5_nt s17777c4f0;
  unsigned int s17777c4f1:1;
  virtual  ~S17777C4_nt(); // _ZN11S17777C4_ntD1Ev
  virtual void  v5(); // _ZN11S17777C4_nt2v5Ev
  virtual void  v6(); // _ZN11S17777C4_nt2v6Ev
  virtual void  v7(); // _ZN11S17777C4_nt2v7Ev
  virtual void  v8(); // _ZN11S17777C4_nt2v8Ev
  virtual void  v9(); // _ZN11S17777C4_nt2v9Ev
  virtual void  v10(); // _ZN11S17777C4_nt3v10Ev
  virtual void  v11(); // _ZN11S17777C4_nt3v11Ev
  S17777C4_nt(); // tgen
};
//SIG(-1 S17777C4_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 FC2{ m Fp[3]} Fi:1}


 S17777C4_nt ::~S17777C4_nt(){ note_dtor("S17777C4_nt", this);}
void  S17777C4_nt ::v5(){vfunc_called(this, "_ZN11S17777C4_nt2v5Ev");}
void  S17777C4_nt ::v6(){vfunc_called(this, "_ZN11S17777C4_nt2v6Ev");}
void  S17777C4_nt ::v7(){vfunc_called(this, "_ZN11S17777C4_nt2v7Ev");}
void  S17777C4_nt ::v8(){vfunc_called(this, "_ZN11S17777C4_nt2v8Ev");}
void  S17777C4_nt ::v9(){vfunc_called(this, "_ZN11S17777C4_nt2v9Ev");}
void  S17777C4_nt ::v10(){vfunc_called(this, "_ZN11S17777C4_nt3v10Ev");}
void  S17777C4_nt ::v11(){vfunc_called(this, "_ZN11S17777C4_nt3v11Ev");}
S17777C4_nt ::S17777C4_nt(){ note_ctor("S17777C4_nt", this);} // tgen

//skip512 S17777C4_nt

#else // __cplusplus

extern void _ZN11S17777C4_ntC1Ev();
extern void _ZN11S17777C4_ntD1Ev();
Name_Map name_map_S17777C4_nt[] = {
  NSPAIR(_ZN11S17777C4_ntC1Ev),
  NSPAIR(_ZN11S17777C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S17777C4_nt[];
extern void _ZN11S17777C4_ntD1Ev();
extern void _ZN11S17777C4_ntD0Ev();
extern void _ZN11S17777C4_nt2v5Ev();
extern void _ZN11S17777C4_nt2v6Ev();
extern void _ZN11S17777C4_nt2v7Ev();
extern void _ZN11S17777C4_nt2v8Ev();
extern void _ZN11S17777C4_nt2v9Ev();
extern void _ZN11S17777C4_nt3v10Ev();
extern void _ZN11S17777C4_nt3v11Ev();
static  VTBL_ENTRY vtc_S17777C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S17777C4_nt[0]),
  (VTBL_ENTRY)&_ZN11S17777C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt3v11Ev,
};
extern VTBL_ENTRY _ZTI11S17777C4_nt[];
VTBL_ENTRY *P__ZTI11S17777C4_nt = _ZTI11S17777C4_nt; 
extern  VTBL_ENTRY _ZTV11S17777C4_nt[];
Class_Descriptor cd_S17777C4_nt = {  "S17777C4_nt", // class name
  0,0,//no base classes
  &(vtc_S17777C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI11S17777C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S17777C4_nt),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17777C6_nt  {
  void *s17777c6f0;
  void  mf17777c6(); // _ZN11S17777C6_nt9mf17777c6Ev
};
//SIG(-1 S17777C6_nt) C1{ m Fp}


void  S17777C6_nt ::mf17777c6(){}

//skip512 S17777C6_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S17777C6_nt[];
VTBL_ENTRY *P__ZTI11S17777C6_nt = _ZTI11S17777C6_nt; 
Class_Descriptor cd_S17777C6_nt = {  "S17777C6_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S17777C6_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  S17777C3_nt  : S17777C4_nt {
  ::S17777C6_nt s17777c3f0;
  virtual  ~S17777C3_nt(); // _ZN11S17777C3_ntD1Ev
  virtual void  v12(); // _ZN11S17777C3_nt3v12Ev
  virtual void  v13(); // _ZN11S17777C3_nt3v13Ev
  S17777C3_nt(); // tgen
};
//SIG(-1 S17777C3_nt) C1{ BC2{ vd v3 v4 v5 v6 v7 v8 v9 FC3{ m Fp[3]} Fi:1} vd v1 v2 FC4{ m Fp}}


 S17777C3_nt ::~S17777C3_nt(){ note_dtor("S17777C3_nt", this);}
void  S17777C3_nt ::v12(){vfunc_called(this, "_ZN11S17777C3_nt3v12Ev");}
void  S17777C3_nt ::v13(){vfunc_called(this, "_ZN11S17777C3_nt3v13Ev");}
S17777C3_nt ::S17777C3_nt(){ note_ctor("S17777C3_nt", this);} // tgen

//skip512 S17777C3_nt

#else // __cplusplus

extern void _ZN11S17777C3_ntC1Ev();
extern void _ZN11S17777C3_ntD1Ev();
Name_Map name_map_S17777C3_nt[] = {
  NSPAIR(_ZN11S17777C3_ntC1Ev),
  NSPAIR(_ZN11S17777C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S17777C4_nt;
extern VTBL_ENTRY _ZTI11S17777C4_nt[];
extern  VTBL_ENTRY _ZTV11S17777C4_nt[];
static Base_Class bases_S17777C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17777C4_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 _ZTI11S17777C3_nt[];
extern void _ZN11S17777C3_ntD1Ev();
extern void _ZN11S17777C3_ntD0Ev();
extern void _ZN11S17777C4_nt2v5Ev();
extern void _ZN11S17777C4_nt2v6Ev();
extern void _ZN11S17777C4_nt2v7Ev();
extern void _ZN11S17777C4_nt2v8Ev();
extern void _ZN11S17777C4_nt2v9Ev();
extern void _ZN11S17777C4_nt3v10Ev();
extern void _ZN11S17777C4_nt3v11Ev();
extern void _ZN11S17777C3_nt3v12Ev();
extern void _ZN11S17777C3_nt3v13Ev();
static  VTBL_ENTRY vtc_S17777C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S17777C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S17777C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S17777C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S17777C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S17777C3_nt3v13Ev,
};
extern VTBL_ENTRY _ZTI11S17777C3_nt[];
VTBL_ENTRY *P__ZTI11S17777C3_nt = _ZTI11S17777C3_nt; 
extern  VTBL_ENTRY _ZTV11S17777C3_nt[];
Class_Descriptor cd_S17777C3_nt = {  "S17777C3_nt", // class name
  bases_S17777C3_nt, 1,
  &(vtc_S17777C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI11S17777C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV11S17777C3_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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17777C10_nt  {
  void *s17777c10f0;
  int s17777c10f1[2];
};
//SIG(1 S17777C10_nt) C1{ Fp Fi[2]}



//skip512 S17777C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17777C9_nt  {
  ::S17777C10_nt s17777c9f0[16];
  int s17777c9f1;
  void  mf17777c9(); // _ZN11S17777C9_nt9mf17777c9Ev
};
//SIG(-1 S17777C9_nt) C1{ m FC2{ Fp Fi[2]}[16] Fi}


void  S17777C9_nt ::mf17777c9(){}

//skip512 S17777C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17777C13_nt  {
  char s17777c13f0[3];
  int s17777c13f1;
};
//SIG(-1 S17777C13_nt) C1{ Fc[3] Fi}



//skip512 S17777C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17777C12_nt  {
  ::S17777C13_nt s17777c12f0;
  int s17777c12f1[2];
  void  mf17777c12(); // _ZN12S17777C12_nt10mf17777c12Ev
};
//SIG(-1 S17777C12_nt) C1{ m FC2{ Fc[3] Fi} Fi[2]}


void  S17777C12_nt ::mf17777c12(){}

//skip512 S17777C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17777C8_nt  : S17777C4_nt {
  ::S17777C9_nt s17777c8f0;
  ::S17777C9_nt s17777c8f1;
  ::S17777C6_nt s17777c8f2;
  ::S17777C6_nt s17777c8f3;
  ::S17777C6_nt s17777c8f4;
  ::S17777C6_nt s17777c8f5;
  ::S17777C6_nt s17777c8f6;
  ::S17777C12_nt s17777c8f7;
  virtual void  v16(); // _ZN11S17777C8_nt3v16Ev
  virtual void  v17(); // _ZN11S17777C8_nt3v17Ev
  virtual void  v18(); // _ZN11S17777C8_nt3v18Ev
  ~S17777C8_nt(); // tgen
  S17777C8_nt(); // tgen
};
//SIG(-1 S17777C8_nt) C1{ BC2{ vd v4 v5 v6 v7 v8 v9 v10 FC3{ m Fp[3]} Fi:1} v1 v2 v3 FC4{ m FC5{ Fp Fi[2]}[16] Fi} FC4 FC6{ m Fp} FC6 FC6 FC6 FC6 FC7{ m FC8{ Fc[3] Fi} Fi[2]}}


void  S17777C8_nt ::v16(){vfunc_called(this, "_ZN11S17777C8_nt3v16Ev");}
void  S17777C8_nt ::v17(){vfunc_called(this, "_ZN11S17777C8_nt3v17Ev");}
void  S17777C8_nt ::v18(){vfunc_called(this, "_ZN11S17777C8_nt3v18Ev");}
S17777C8_nt ::~S17777C8_nt(){ note_dtor("S17777C8_nt", this);} // tgen
S17777C8_nt ::S17777C8_nt(){ note_ctor("S17777C8_nt", this);} // tgen

//skip512 S17777C8_nt

#else // __cplusplus

extern void _ZN11S17777C8_ntC1Ev();
extern void _ZN11S17777C8_ntD1Ev();
Name_Map name_map_S17777C8_nt[] = {
  NSPAIR(_ZN11S17777C8_ntC1Ev),
  NSPAIR(_ZN11S17777C8_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S17777C4_nt;
extern VTBL_ENTRY _ZTI11S17777C4_nt[];
extern  VTBL_ENTRY _ZTV11S17777C4_nt[];
static Base_Class bases_S17777C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17777C4_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 _ZTI11S17777C8_nt[];
extern void _ZN11S17777C8_ntD1Ev();
extern void _ZN11S17777C8_ntD0Ev();
extern void _ZN11S17777C4_nt2v5Ev();
extern void _ZN11S17777C4_nt2v6Ev();
extern void _ZN11S17777C4_nt2v7Ev();
extern void _ZN11S17777C4_nt2v8Ev();
extern void _ZN11S17777C4_nt2v9Ev();
extern void _ZN11S17777C4_nt3v10Ev();
extern void _ZN11S17777C4_nt3v11Ev();
extern void _ZN11S17777C8_nt3v16Ev();
extern void _ZN11S17777C8_nt3v17Ev();
extern void _ZN11S17777C8_nt3v18Ev();
static  VTBL_ENTRY vtc_S17777C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S17777C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S17777C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S17777C8_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S17777C8_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S17777C8_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S17777C8_nt3v18Ev,
};
extern VTBL_ENTRY _ZTI11S17777C8_nt[];
VTBL_ENTRY *P__ZTI11S17777C8_nt = _ZTI11S17777C8_nt; 
extern  VTBL_ENTRY _ZTV11S17777C8_nt[];
Class_Descriptor cd_S17777C8_nt = {  "S17777C8_nt", // class name
  bases_S17777C8_nt, 1,
  &(vtc_S17777C8_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(624,448), // object size
  NSPAIRA(_ZTI11S17777C8_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV11S17777C8_nt),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  S17777C15_nt  {
  void *s17777c15f0;
  char s17777c15f1[3];
  int s17777c15f2;
  void  mf17777c15(); // _ZN12S17777C15_nt10mf17777c15Ev
};
//SIG(-1 S17777C15_nt) C1{ m Fp Fc[3] Fi}


void  S17777C15_nt ::mf17777c15(){}

//skip512 S17777C15_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17777C14_nt  {
  ::S17777C15_nt s17777c14f0;
  ::S17777C15_nt s17777c14f1;
  int s17777c14f2;
  void  mf17777c14(); // _ZN12S17777C14_nt10mf17777c14Ev
};
//SIG(-1 S17777C14_nt) C1{ m FC2{ m Fp Fc[3] Fi} FC2 Fi}


void  S17777C14_nt ::mf17777c14(){}

//skip512 S17777C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17777C7_nt  : S17777C8_nt {
  ::S17777C14_nt s17777c7f0;
  virtual void  v14(); // _ZN11S17777C7_nt3v14Ev
  virtual void  v15(); // _ZN11S17777C7_nt3v15Ev
  ~S17777C7_nt(); // tgen
  S17777C7_nt(); // tgen
};
//SIG(-1 S17777C7_nt) C1{ BC2{ BC3{ vd v3 v4 v5 v6 v7 v8 v9 FC4{ m Fp[3]} Fi:1} v10 v11 v12 FC5{ m FC6{ Fp Fi[2]}[16] Fi} FC5 FC7{ m Fp} FC7 FC7 FC7 FC7 FC8{ m FC9{ Fc[3] Fi} Fi[2]}} v1 v2 FC10{ m FC11{ m Fp Fc[3] Fi} FC11 Fi}}


void  S17777C7_nt ::v14(){vfunc_called(this, "_ZN11S17777C7_nt3v14Ev");}
void  S17777C7_nt ::v15(){vfunc_called(this, "_ZN11S17777C7_nt3v15Ev");}
S17777C7_nt ::~S17777C7_nt(){ note_dtor("S17777C7_nt", this);} // tgen
S17777C7_nt ::S17777C7_nt(){ note_ctor("S17777C7_nt", this);} // tgen

//skip512 S17777C7_nt

#else // __cplusplus

extern void _ZN11S17777C7_ntC1Ev();
extern void _ZN11S17777C7_ntD1Ev();
Name_Map name_map_S17777C7_nt[] = {
  NSPAIR(_ZN11S17777C7_ntC1Ev),
  NSPAIR(_ZN11S17777C7_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S17777C4_nt;
extern VTBL_ENTRY _ZTI11S17777C4_nt[];
extern  VTBL_ENTRY _ZTV11S17777C4_nt[];
extern Class_Descriptor cd_S17777C8_nt;
extern VTBL_ENTRY _ZTI11S17777C8_nt[];
extern  VTBL_ENTRY _ZTV11S17777C8_nt[];
static Base_Class bases_S17777C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17777C4_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_S17777C8_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 _ZTI11S17777C7_nt[];
extern void _ZN11S17777C7_ntD1Ev();
extern void _ZN11S17777C7_ntD0Ev();
extern void _ZN11S17777C4_nt2v5Ev();
extern void _ZN11S17777C4_nt2v6Ev();
extern void _ZN11S17777C4_nt2v7Ev();
extern void _ZN11S17777C4_nt2v8Ev();
extern void _ZN11S17777C4_nt2v9Ev();
extern void _ZN11S17777C4_nt3v10Ev();
extern void _ZN11S17777C4_nt3v11Ev();
extern void _ZN11S17777C8_nt3v16Ev();
extern void _ZN11S17777C8_nt3v17Ev();
extern void _ZN11S17777C8_nt3v18Ev();
extern void _ZN11S17777C7_nt3v14Ev();
extern void _ZN11S17777C7_nt3v15Ev();
static  VTBL_ENTRY vtc_S17777C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S17777C7_nt[0]),
  (VTBL_ENTRY)&_ZN11S17777C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S17777C7_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S17777C8_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S17777C8_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S17777C8_nt3v18Ev,
  (VTBL_ENTRY)&_ZN11S17777C7_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S17777C7_nt3v15Ev,
};
extern VTBL_ENTRY _ZTI11S17777C7_nt[];
VTBL_ENTRY *P__ZTI11S17777C7_nt = _ZTI11S17777C7_nt; 
extern  VTBL_ENTRY _ZTV11S17777C7_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17777C2_nt  : S17777C3_nt {
  int s17777c2f0[2];
  ::S17777C7_nt s17777c2f1;
  virtual void  v1(); // _ZN11S17777C2_nt2v1Ev
  virtual void  v2(); // _ZN11S17777C2_nt2v2Ev
  virtual void  v3(); // _ZN11S17777C2_nt2v3Ev
  virtual void  v4(); // _ZN11S17777C2_nt2v4Ev
  ~S17777C2_nt(); // tgen
  S17777C2_nt(); // tgen
};
//SIG(-1 S17777C2_nt) C1{ BC2{ BC3{ vd v5 v6 v7 v8 v9 v10 v11 FC4{ m Fp[3]} Fi:1} vd v12 v13 FC5{ m Fp}} v1 v2 v3 v4 Fi[2] FC6{ BC7{ BC3 v16 v17 v18 FC8{ m FC9{ Fp Fi[2]}[16] Fi} FC8 FC5 FC5 FC5 FC5 FC5 FC10{ m FC11{ Fc[3] Fi} Fi[2]}} v14 v15 FC12{ m FC13{ m Fp Fc[3] Fi} FC13 Fi}}}


void  S17777C2_nt ::v1(){vfunc_called(this, "_ZN11S17777C2_nt2v1Ev");}
void  S17777C2_nt ::v2(){vfunc_called(this, "_ZN11S17777C2_nt2v2Ev");}
void  S17777C2_nt ::v3(){vfunc_called(this, "_ZN11S17777C2_nt2v3Ev");}
void  S17777C2_nt ::v4(){vfunc_called(this, "_ZN11S17777C2_nt2v4Ev");}
S17777C2_nt ::~S17777C2_nt(){ note_dtor("S17777C2_nt", this);} // tgen
S17777C2_nt ::S17777C2_nt(){ note_ctor("S17777C2_nt", this);} // tgen

//skip512 S17777C2_nt

#else // __cplusplus

extern void _ZN11S17777C2_ntC1Ev();
extern void _ZN11S17777C2_ntD1Ev();
Name_Map name_map_S17777C2_nt[] = {
  NSPAIR(_ZN11S17777C2_ntC1Ev),
  NSPAIR(_ZN11S17777C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S17777C4_nt;
extern VTBL_ENTRY _ZTI11S17777C4_nt[];
extern  VTBL_ENTRY _ZTV11S17777C4_nt[];
extern Class_Descriptor cd_S17777C3_nt;
extern VTBL_ENTRY _ZTI11S17777C3_nt[];
extern  VTBL_ENTRY _ZTV11S17777C3_nt[];
static Base_Class bases_S17777C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17777C4_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_S17777C3_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 _ZTI11S17777C2_nt[];
extern void _ZN11S17777C2_ntD1Ev();
extern void _ZN11S17777C2_ntD0Ev();
extern void _ZN11S17777C4_nt2v5Ev();
extern void _ZN11S17777C4_nt2v6Ev();
extern void _ZN11S17777C4_nt2v7Ev();
extern void _ZN11S17777C4_nt2v8Ev();
extern void _ZN11S17777C4_nt2v9Ev();
extern void _ZN11S17777C4_nt3v10Ev();
extern void _ZN11S17777C4_nt3v11Ev();
extern void _ZN11S17777C3_nt3v12Ev();
extern void _ZN11S17777C3_nt3v13Ev();
extern void _ZN11S17777C2_nt2v1Ev();
extern void _ZN11S17777C2_nt2v2Ev();
extern void _ZN11S17777C2_nt2v3Ev();
extern void _ZN11S17777C2_nt2v4Ev();
static  VTBL_ENTRY vtc_S17777C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S17777C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S17777C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S17777C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S17777C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S17777C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S17777C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S17777C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S17777C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S17777C2_nt2v4Ev,
};
extern VTBL_ENTRY _ZTI11S17777C2_nt[];
VTBL_ENTRY *P__ZTI11S17777C2_nt = _ZTI11S17777C2_nt; 
extern  VTBL_ENTRY _ZTV11S17777C2_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17777C16_nt  : S17777C3_nt {
  int s17777c16f0;
  void *s17777c16f1;
  virtual void  v19(); // _ZN12S17777C16_nt3v19Ev
  virtual void  v20(); // _ZN12S17777C16_nt3v20Ev
  virtual void  v21(); // _ZN12S17777C16_nt3v21Ev
  ~S17777C16_nt(); // tgen
  S17777C16_nt(); // tgen
};
//SIG(-1 S17777C16_nt) C1{ BC2{ BC3{ vd v4 v5 v6 v7 v8 v9 v10 FC4{ m Fp[3]} Fi:1} vd v11 v12 FC5{ m Fp}} v1 v2 v3 Fi Fp}


void  S17777C16_nt ::v19(){vfunc_called(this, "_ZN12S17777C16_nt3v19Ev");}
void  S17777C16_nt ::v20(){vfunc_called(this, "_ZN12S17777C16_nt3v20Ev");}
void  S17777C16_nt ::v21(){vfunc_called(this, "_ZN12S17777C16_nt3v21Ev");}
S17777C16_nt ::~S17777C16_nt(){ note_dtor("S17777C16_nt", this);} // tgen
S17777C16_nt ::S17777C16_nt(){ note_ctor("S17777C16_nt", this);} // tgen

//skip512 S17777C16_nt

#else // __cplusplus

extern void _ZN12S17777C16_ntC1Ev();
extern void _ZN12S17777C16_ntD1Ev();
Name_Map name_map_S17777C16_nt[] = {
  NSPAIR(_ZN12S17777C16_ntC1Ev),
  NSPAIR(_ZN12S17777C16_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S17777C4_nt;
extern VTBL_ENTRY _ZTI11S17777C4_nt[];
extern  VTBL_ENTRY _ZTV11S17777C4_nt[];
extern Class_Descriptor cd_S17777C3_nt;
extern VTBL_ENTRY _ZTI11S17777C3_nt[];
extern  VTBL_ENTRY _ZTV11S17777C3_nt[];
static Base_Class bases_S17777C16_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17777C4_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_S17777C3_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 _ZTI12S17777C16_nt[];
extern void _ZN12S17777C16_ntD1Ev();
extern void _ZN12S17777C16_ntD0Ev();
extern void _ZN11S17777C4_nt2v5Ev();
extern void _ZN11S17777C4_nt2v6Ev();
extern void _ZN11S17777C4_nt2v7Ev();
extern void _ZN11S17777C4_nt2v8Ev();
extern void _ZN11S17777C4_nt2v9Ev();
extern void _ZN11S17777C4_nt3v10Ev();
extern void _ZN11S17777C4_nt3v11Ev();
extern void _ZN11S17777C3_nt3v12Ev();
extern void _ZN11S17777C3_nt3v13Ev();
extern void _ZN12S17777C16_nt3v19Ev();
extern void _ZN12S17777C16_nt3v20Ev();
extern void _ZN12S17777C16_nt3v21Ev();
static  VTBL_ENTRY vtc_S17777C16_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S17777C16_nt[0]),
  (VTBL_ENTRY)&_ZN12S17777C16_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S17777C16_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S17777C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S17777C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S17777C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN12S17777C16_nt3v19Ev,
  (VTBL_ENTRY)&_ZN12S17777C16_nt3v20Ev,
  (VTBL_ENTRY)&_ZN12S17777C16_nt3v21Ev,
};
extern VTBL_ENTRY _ZTI12S17777C16_nt[];
VTBL_ENTRY *P__ZTI12S17777C16_nt = _ZTI12S17777C16_nt; 
extern  VTBL_ENTRY _ZTV12S17777C16_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17777C22  : S5266C29 {
  void *s17777c22f0;
};
//SIG(-1 S17777C22) C1{ BC2{ m} Fp}



static void Test_S17777C22()
{
  extern Class_Descriptor cd_S17777C22;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S17777C22, buf);
    S17777C22 &lv = *(new (buf) S17777C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S17777C22)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17777C22)");
    check_base_class_offset(lv, (S5266C29*), 0, "S17777C22");
    check_field_offset(lv, s17777c22f0, 0, "S17777C22.s17777c22f0");
    test_class_info(&lv, &cd_S17777C22);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS17777C22(Test_S17777C22, "S17777C22", ABISELECT(8,4));

#else // __cplusplus

extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
static Base_Class bases_S17777C22[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S17777C22 = {  "S17777C22", // class name
  bases_S17777C22, 1,
  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  S17777C1  {
  void *s17777c1f0;
  int s17777c1f1[2];
  ::S17777C2_nt s17777c1f2;
  ::S17777C16_nt s17777c1f3;
  ::S79C45 s17777c1f4;
  ::S79C41 s17777c1f5;
  ::S79C20 s17777c1f6;
  ::S79C16 s17777c1f7;
  ::S17777C22 s17777c1f8;
  ::S17777C22 s17777c1f9;
  void  mf17777c1(); // _ZN8S17777C19mf17777c1Ev
};
//SIG(1 S17777C1) C1{ m Fp Fi[2] FC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 FC5{ m Fp[3]} Fi:1} vd v12 v13 FC6{ m Fp}} v1 v2 v3 v4 Fi[2] FC7{ BC8{ BC4 v16 v17 v18 FC9{ m FC10{ Fp Fi[2]}[16] Fi} FC9 FC6 FC6 FC6 FC6 FC6 FC11{ m FC12{ Fc[3] Fi} Fi[2]}} v14 v15 FC13{ m FC14{ m Fp Fc[3] Fi} FC14 Fi}}} FC15{ BC3 v19 v20 v21 Fi Fp} FC16{ BC17{ m Fp Fi[2]}} FC18{ BC17} FC19{ BC17} FC20{ BC17} FC21{ BC22{ m} Fp} FC21}


void  S17777C1 ::mf17777c1(){}

static void Test_S17777C1()
{
  {
    init_simple_test("S17777C1");
    static S17777C1 lv;
    check2(sizeof(lv), ABISELECT(880,608), "sizeof(S17777C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17777C1)");
    check_field_offset(lv, s17777c1f0, 0, "S17777C1.s17777c1f0");
    check_field_offset(lv, s17777c1f1, ABISELECT(8,4), "S17777C1.s17777c1f1");
    check_field_offset(lv, s17777c1f2, ABISELECT(16,12), "S17777C1.s17777c1f2");
    check_field_offset(lv, s17777c1f3, ABISELECT(736,520), "S17777C1.s17777c1f3");
    check_field_offset(lv, s17777c1f4, ABISELECT(800,552), "S17777C1.s17777c1f4");
    check_field_offset(lv, s17777c1f5, ABISELECT(816,564), "S17777C1.s17777c1f5");
    check_field_offset(lv, s17777c1f6, ABISELECT(832,576), "S17777C1.s17777c1f6");
    check_field_offset(lv, s17777c1f7, ABISELECT(848,588), "S17777C1.s17777c1f7");
    check_field_offset(lv, s17777c1f8, ABISELECT(864,600), "S17777C1.s17777c1f8");
    check_field_offset(lv, s17777c1f9, ABISELECT(872,604), "S17777C1.s17777c1f9");
  }
}
static Arrange_To_Call_Me vS17777C1(Test_S17777C1, "S17777C1", ABISELECT(880,608));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19905C5_nt  {
  void  mf19905c5(); // _ZN11S19905C5_nt9mf19905c5Ev
  virtual  ~S19905C5_nt(); // _ZN11S19905C5_ntD1Ev
  S19905C5_nt(); // tgen
};
//SIG(-1 S19905C5_nt) C1{ vd m}


void  S19905C5_nt ::mf19905c5(){}
 S19905C5_nt ::~S19905C5_nt(){ note_dtor("S19905C5_nt", this);}
S19905C5_nt ::S19905C5_nt(){ note_ctor("S19905C5_nt", this);} // tgen

//skip512 S19905C5_nt

#else // __cplusplus

extern void _ZN11S19905C5_ntC1Ev();
extern void _ZN11S19905C5_ntD1Ev();
Name_Map name_map_S19905C5_nt[] = {
  NSPAIR(_ZN11S19905C5_ntC1Ev),
  NSPAIR(_ZN11S19905C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern void _ZN11S19905C5_ntD1Ev();
extern void _ZN11S19905C5_ntD0Ev();
static  VTBL_ENTRY vtc_S19905C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S19905C5_nt[0]),
  (VTBL_ENTRY)&_ZN11S19905C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19905C5_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
VTBL_ENTRY *P__ZTI11S19905C5_nt = _ZTI11S19905C5_nt; 
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
Class_Descriptor cd_S19905C5_nt = {  "S19905C5_nt", // class name
  0,0,//no base classes
  &(vtc_S19905C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S19905C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S19905C5_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  S19905C7  : virtual S19905C5_nt {
  long double s19905c7f0;
  char s19905c7f1;
  short s19905c7f2[4];
  ~S19905C7(); // tgen
  S19905C7(); // tgen
};
//SIG(-1 S19905C7) C1{ VBC2{ vd m} FD Fc Fs[4]}


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

static void Test_S19905C7()
{
  extern Class_Descriptor cd_S19905C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,8)];
    init_test(&cd_S19905C7, buf);
    S19905C7 *dp, &lv = *(dp=new (buf) S19905C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S19905C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19905C7)");
    check_base_class_offset(lv, (S19905C5_nt*), 0, "S19905C7");
    check_field_offset(lv, s19905c7f0, ABISELECT(16,4), "S19905C7.s19905c7f0");
    check_field_offset(lv, s19905c7f1, ABISELECT(32,16), "S19905C7.s19905c7f1");
    check_field_offset(lv, s19905c7f2, ABISELECT(34,18), "S19905C7.s19905c7f2");
    test_class_info(&lv, &cd_S19905C7);
    dp->~S19905C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19905C7(Test_S19905C7, "S19905C7", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S19905C7C1Ev();
extern void _ZN8S19905C7D1Ev();
Name_Map name_map_S19905C7[] = {
  NSPAIR(_ZN8S19905C7C1Ev),
  NSPAIR(_ZN8S19905C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
static Base_Class bases_S19905C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C5_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 _ZTI8S19905C7[];
extern void _ZN8S19905C7D1Ev();
extern void _ZN8S19905C7D0Ev();
static  VTBL_ENTRY vtc_S19905C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&_ZN8S19905C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19905C7D0Ev,
};
extern VTBL_ENTRY _ZTV8S19905C7[];
static  VTT_ENTRY vtt_S19905C7[] = {
  {&(_ZTV8S19905C7[4]),  4,6},
  {&(_ZTV8S19905C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
Class_Descriptor cd_S19905C7 = {  "S19905C7", // class name
  bases_S19905C7, 1,
  &(vtc_S19905C7[0]), // expected_vtbl_contents
  &(vtt_S19905C7[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S19905C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19905C7),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19905C7),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19905C6  : virtual S19905C5_nt , virtual S19905C7 {
  int s19905c6f0;
  virtual  ~S19905C6(); // _ZN8S19905C6D2Ev
  S19905C6(); // tgen
};
//SIG(-1 S19905C6) C1{ VBC2{ vd m} VBC3{ VBC2 FD Fc Fs[4]} vd Fi}


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

static void Test_S19905C6()
{
  extern Class_Descriptor cd_S19905C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,10)];
    init_test(&cd_S19905C6, buf);
    S19905C6 *dp, &lv = *(dp=new (buf) S19905C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S19905C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19905C6)");
    check_base_class_offset(lv, (S19905C5_nt*), 0, "S19905C6");
    check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*), 0, "S19905C6");
    check_base_class_offset(lv, (S19905C7*), ABISELECT(16,8), "S19905C6");
    check_field_offset(lv, s19905c6f0, ABISELECT(8,4), "S19905C6.s19905c6f0");
    test_class_info(&lv, &cd_S19905C6);
    dp->~S19905C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19905C6(Test_S19905C6, "S19905C6", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S19905C6C1Ev();
extern void _ZN8S19905C6D2Ev();
Name_Map name_map_S19905C6[] = {
  NSPAIR(_ZN8S19905C6C1Ev),
  NSPAIR(_ZN8S19905C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
static Base_Class bases_S19905C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C5_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},
  {&cd_S19905C7,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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 _ZTI8S19905C6[];
extern void _ZN8S19905C6D1Ev();
extern void _ZN8S19905C6D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZThn16_N8S19905C6D1Ev,_ZThn8_N8S19905C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void ABISELECT(_ZThn16_N8S19905C6D0Ev,_ZThn8_N8S19905C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19905C6[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&_ZN8S19905C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19905C6D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern VTBL_ENTRY _ZTV8S19905C6[];
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C6[] = {
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C7__8S19905C6[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
static  VTT_ENTRY vtt_S19905C6[] = {
  {&(_ZTV8S19905C6[5]),  5,13},
  {&(_ZTV8S19905C6[5]),  5,13},
  {&(_ZTV8S19905C6[11]),  11,13},
  {&(_tg__ZTV8S19905C7__8S19905C6[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C7__8S19905C6[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19905C6[];
extern  VTBL_ENTRY _ZTV8S19905C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C6[];
static VTBL_ENTRY alt_thunk_names1[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C6D0Ev,_ZThn8_N8S19905C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C6D1Ev,_ZThn8_N8S19905C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19905C6 = {  "S19905C6", // class name
  bases_S19905C6, 2,
  &(vtc_S19905C6[0]), // expected_vtbl_contents
  &(vtt_S19905C6[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S19905C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19905C6),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19905C6),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names1,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19905C4  : virtual S19905C5_nt , S19905C6 , S17777C6_nt {
  short s19905c4f0;
  __tsi64 s19905c4f1;
  void *s19905c4f2;
  __tsi64 s19905c4f3;
  virtual  ~S19905C4(); // _ZN8S19905C4D2Ev
  S19905C4(); // tgen
};
//SIG(-1 S19905C4) C1{ VBC2{ vd m} BC3{ VBC2 VBC4{ VBC2 FD Fc Fs[4]} vd Fi} BC5{ m Fp} vd Fs FL Fp FL}


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

static void Test_S19905C4()
{
  extern Class_Descriptor cd_S19905C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,17)];
    init_test(&cd_S19905C4, buf);
    S19905C4 *dp, &lv = *(dp=new (buf) S19905C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S19905C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19905C4)");
    check_base_class_offset(lv, (S19905C5_nt*), 0, "S19905C4");
    check_base_class_offset(lv, (S19905C5_nt*)(S19905C6*), 0, "S19905C4");
    check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*), 0, "S19905C4");
    check_base_class_offset(lv, (S19905C7*)(S19905C6*), ABISELECT(64,36), "S19905C4");
    check_base_class_offset(lv, (S19905C6*), 0, "S19905C4");
    check_base_class_offset(lv, (S17777C6_nt*), ABISELECT(16,8), "S19905C4");
    check_field_offset(lv, s19905c4f0, ABISELECT(24,12), "S19905C4.s19905c4f0");
    check_field_offset(lv, s19905c4f1, ABISELECT(32,16), "S19905C4.s19905c4f1");
    check_field_offset(lv, s19905c4f2, ABISELECT(40,24), "S19905C4.s19905c4f2");
    check_field_offset(lv, s19905c4f3, ABISELECT(48,28), "S19905C4.s19905c4f3");
    test_class_info(&lv, &cd_S19905C4);
    dp->~S19905C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19905C4(Test_S19905C4, "S19905C4", ABISELECT(112,64));

#else // __cplusplus

extern void _ZN8S19905C4C1Ev();
extern void _ZN8S19905C4D2Ev();
Name_Map name_map_S19905C4[] = {
  NSPAIR(_ZN8S19905C4C1Ev),
  NSPAIR(_ZN8S19905C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C6;
extern VTBL_ENTRY _ZTI8S19905C6[];
extern  VTBL_ENTRY _ZTV8S19905C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
static Base_Class bases_S19905C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C5_nt,    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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19905C7,    ABISELECT(64,36), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19905C6,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S17777C6_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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19905C4[];
extern void _ZN8S19905C4D1Ev();
extern void _ZN8S19905C4D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZThn64_N8S19905C4D1Ev,_ZThn36_N8S19905C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void ABISELECT(_ZThn64_N8S19905C4D0Ev,_ZThn36_N8S19905C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19905C4[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&_ZN8S19905C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19905C4D0Ev,
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S19905C4[];
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void _ZN8S19905C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void _ZN8S19905C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C6__8S19905C4[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S19905C6D1Ev,_ZThn36_N8S19905C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S19905C6D0Ev,_ZThn36_N8S19905C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C6__8S19905C4[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C4[] = {
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C7__8S19905C4[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
static  VTT_ENTRY vtt_S19905C4[] = {
  {&(_ZTV8S19905C4[5]),  5,13},
  {&(_tg__ZTV8S19905C6__8S19905C4[5]),  5,7},
  {&(_tg__ZTV8S19905C6__8S19905C4[5]),  5,7},
  {&(_tg__ZTV8S19905C7__8S19905C6__8S19905C4[4]),  4,6},
  {&(_ZTV8S19905C4[5]),  5,13},
  {&(_ZTV8S19905C4[11]),  11,13},
  {&(_tg__ZTV8S19905C7__8S19905C4[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C7__8S19905C4[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19905C4[];
extern  VTBL_ENTRY _ZTV8S19905C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C4[];
static VTBL_ENTRY alt_thunk_names2[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C6D0Ev,_ZThn36_N8S19905C6D0Ev),
  (VTBL_ENTRY)_ZN8S19905C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C6D1Ev,_ZThn36_N8S19905C6D1Ev),
  (VTBL_ENTRY)_ZN8S19905C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C4D0Ev,_ZThn36_N8S19905C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C4D1Ev,_ZThn36_N8S19905C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19905C4 = {  "S19905C4", // class name
  bases_S19905C4, 4,
  &(vtc_S19905C4[0]), // expected_vtbl_contents
  &(vtt_S19905C4[0]), // expected_vtt_contents
  ABISELECT(112,64), // object size
  NSPAIRA(_ZTI8S19905C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19905C4),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19905C4),8, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names2,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19905C3  : virtual S19905C4 , S17777C6_nt , S19905C5_nt , S19905C7 {
  int s19905c3f0;
  virtual  ~S19905C3(); // _ZN8S19905C3D2Ev
  S19905C3(); // tgen
};
//SIG(-1 S19905C3) C1{ VBC2{ VBC3{ vd m} BC4{ VBC3 VBC5{ VBC3 FD Fc Fs[4]} vd Fi} BC6{ m Fp} vd Fs FL Fp FL} BC6 BC3 BC5 vd Fi}


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

static void Test_S19905C3()
{
  extern Class_Descriptor cd_S19905C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,27)];
    init_test(&cd_S19905C3, buf);
    S19905C3 *dp, &lv = *(dp=new (buf) S19905C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,104), "sizeof(S19905C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19905C3)");
    check_base_class_offset(lv, (S19905C5_nt*)(S19905C4*), ABISELECT(64,40), "S19905C3");
    check_base_class_offset(lv, (S19905C5_nt*)(S19905C6*)(S19905C4*), ABISELECT(64,40), "S19905C3");
    /*is_ambiguous_... S19905C3::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*), ABISELECT(64,40), "S19905C3");
    /*is_ambiguous_... S19905C3::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*), ABISELECT(64,40), "S19905C3");
    check_base_class_offset(lv, (S19905C7*)(S19905C6*)(S19905C4*), ABISELECT(128,76), "S19905C3");
    check_base_class_offset(lv, (S19905C6*)(S19905C4*), ABISELECT(64,40), "S19905C3");
    check_base_class_offset(lv, (S17777C6_nt*)(S19905C4*), ABISELECT(80,48), "S19905C3");
    check_base_class_offset(lv, (S19905C4*), ABISELECT(64,40), "S19905C3");
    /*is_ambiguous_... S19905C3::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*), ABISELECT(8,4), "S19905C3");
    /*is_ambiguous_... S19905C3::S19905C5_nt */ AMB_check_base_class_offset(lv, (S19905C5_nt*), 0, "S19905C3");
    /*is_ambiguous_... S19905C3::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*), ABISELECT(16,8), "S19905C3");
    check_field_offset(lv, s19905c3f0, ABISELECT(60,36), "S19905C3.s19905c3f0");
    test_class_info(&lv, &cd_S19905C3);
    dp->~S19905C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19905C3(Test_S19905C3, "S19905C3", ABISELECT(176,104));

#else // __cplusplus

extern void _ZN8S19905C3C1Ev();
extern void _ZN8S19905C3D2Ev();
Name_Map name_map_S19905C3[] = {
  NSPAIR(_ZN8S19905C3C1Ev),
  NSPAIR(_ZN8S19905C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C6;
extern VTBL_ENTRY _ZTI8S19905C6[];
extern  VTBL_ENTRY _ZTV8S19905C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C4;
extern VTBL_ENTRY _ZTI8S19905C4[];
extern  VTBL_ENTRY _ZTV8S19905C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C4[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
static Base_Class bases_S19905C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C5_nt,    ABISELECT(64,40), //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_S19905C7,    ABISELECT(128,76), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19905C6,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    4, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(80,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
    4, //immediately_derived
  0, 0},
  {&cd_S19905C4,    ABISELECT(64,40), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //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},
  {&cd_S17777C6_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, 0},
  {&cd_S19905C5_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_S19905C7,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //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 _ZTI8S19905C3[];
extern void _ZN8S19905C3D1Ev();
extern void _ZN8S19905C3D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19905C3D1Ev,_ZThn8_N8S19905C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19905C3D0Ev,_ZThn8_N8S19905C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S19905C3D1Ev,_ZThn40_N8S19905C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
extern void ABISELECT(_ZThn64_N8S19905C3D0Ev,_ZThn40_N8S19905C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZThn128_N8S19905C3D1Ev,_ZThn76_N8S19905C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
extern void ABISELECT(_ZThn128_N8S19905C3D0Ev,_ZThn76_N8S19905C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19905C3[] = {
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&_ZN8S19905C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19905C3D0Ev,
  ABISELECT(48,32),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
  ABISELECT(64,36),
  0,
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern VTBL_ENTRY _ZTV8S19905C3[];
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__A__8S19905C3[] = {
  ABISELECT(48,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZThn48_N8S19905C7D1Ev,_ZThn32_N8S19905C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void ABISELECT(_ZThn48_N8S19905C7D0Ev,_ZThn32_N8S19905C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C7__A__8S19905C3[] = {
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void _ZN8S19905C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void _ZN8S19905C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__8S19905C3[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void _ZN8S19905C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void _ZN8S19905C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C68S19905C4__8S19905C3[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S19905C6D1Ev,_ZThn36_N8S19905C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S19905C6D0Ev,_ZThn36_N8S19905C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C68S19905C4__8S19905C3[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZThn64_N8S19905C4D1Ev,_ZThn36_N8S19905C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void ABISELECT(_ZThn64_N8S19905C4D0Ev,_ZThn36_N8S19905C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C4__8S19905C3[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C3[] = {
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C7__8S19905C3[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
static  VTT_ENTRY vtt_S19905C3[] = {
  {&(_ZTV8S19905C3[5]),  5,26},
  {&(_tg__ZTV8S19905C7__A__8S19905C3[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C7__A__8S19905C3[3]),  3,5},
  {&(_ZTV8S19905C3[18]),  18,26},
  {&(_ZTV8S19905C3[18]),  18,26},
  {&(_ZTV8S19905C3[24]),  24,26},
  {&(_ZTV8S19905C3[11]),  11,26},
  {&(_tg__ZTV8S19905C4__8S19905C3[5]),  5,7},
  {&(_tg__ZTV8S19905C68S19905C4__8S19905C3[5]),  5,7},
  {&(_tg__ZTV8S19905C68S19905C4__8S19905C3[5]),  5,7},
  {&(_tg__ZTV8S19905C7__8S19905C68S19905C4__8S19905C3[4]),  4,6},
  {&(_tg__ZTV8S19905C4__8S19905C3[5]),  5,7},
  {&(_tg__ZTV8S19905C7__8S19905C4__8S19905C3[4]),  4,6},
  {&(_tg__ZTV8S19905C7__8S19905C3[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C7__8S19905C3[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19905C3[];
extern  VTBL_ENTRY _ZTV8S19905C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C3[];
static VTBL_ENTRY alt_thunk_names3[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C6D0Ev,_ZThn36_N8S19905C6D0Ev),
  (VTBL_ENTRY)_ZN8S19905C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C6D1Ev,_ZThn36_N8S19905C6D1Ev),
  (VTBL_ENTRY)_ZN8S19905C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C4D0Ev,_ZThn36_N8S19905C4D0Ev),
  (VTBL_ENTRY)_ZN8S19905C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C4D1Ev,_ZThn36_N8S19905C4D1Ev),
  (VTBL_ENTRY)_ZN8S19905C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19905C7D0Ev,_ZThn32_N8S19905C7D0Ev),
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19905C7D1Ev,_ZThn32_N8S19905C7D1Ev),
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19905C3D0Ev,_ZThn76_N8S19905C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C3D0Ev,_ZThn40_N8S19905C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C3D0Ev,_ZThn8_N8S19905C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19905C3D1Ev,_ZThn76_N8S19905C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C3D1Ev,_ZThn40_N8S19905C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C3D1Ev,_ZThn8_N8S19905C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19905C3 = {  "S19905C3", // class name
  bases_S19905C3, 8,
  &(vtc_S19905C3[0]), // expected_vtbl_contents
  &(vtt_S19905C3[0]), // expected_vtt_contents
  ABISELECT(176,104), // object size
  NSPAIRA(_ZTI8S19905C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19905C3),26, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19905C3),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names3,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19905C12  : virtual S5266C29 , virtual S19905C3 , S19905C7 {
  short s19905c12f0;
  virtual  ~S19905C12(); // _ZN9S19905C12D2Ev
  S19905C12(); // tgen
};
//SIG(-1 S19905C12) C1{ VBC2{ m} VBC3{ VBC4{ VBC5{ vd m} BC6{ VBC5 VBC7{ VBC5 FD Fc Fs[4]} vd Fi} BC8{ m Fp} vd Fs FL Fp FL} BC8 BC5 BC7 vd Fi} BC7 vd Fs}


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

static void Test_S19905C12()
{
  extern Class_Descriptor cd_S19905C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,34)];
    init_test(&cd_S19905C12, buf);
    S19905C12 *dp, &lv = *(dp=new (buf) S19905C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,132), "sizeof(S19905C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19905C12)");
    check_base_class_offset(lv, (S5266C29*), 0, "S19905C12");
    check_base_class_offset(lv, (S19905C5_nt*)(S19905C4*), ABISELECT(112,68), "S19905C12");
    check_base_class_offset(lv, (S19905C5_nt*)(S19905C6*)(S19905C4*), ABISELECT(112,68), "S19905C12");
    /*is_ambiguous_... S19905C12::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*), ABISELECT(112,68), "S19905C12");
    /*is_ambiguous_... S19905C3::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*)(S19905C3*), ABISELECT(112,68), "S19905C12");
    /*is_ambiguous_... S19905C12::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*), ABISELECT(112,68), "S19905C12");
    check_base_class_offset(lv, (S19905C7*)(S19905C6*)(S19905C4*), ABISELECT(176,104), "S19905C12");
    check_base_class_offset(lv, (S19905C6*)(S19905C4*), ABISELECT(112,68), "S19905C12");
    check_base_class_offset(lv, (S17777C6_nt*)(S19905C4*), ABISELECT(128,76), "S19905C12");
    check_base_class_offset(lv, (S19905C4*)(S19905C3*), ABISELECT(112,68), "S19905C12");
    /*is_ambiguous_... S19905C3::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C3*), ABISELECT(56,32), "S19905C12");
    /*is_ambiguous_... S19905C3::S19905C5_nt */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C3*), ABISELECT(48,28), "S19905C12");
    /*is_ambiguous_... S19905C3::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C3*), ABISELECT(64,36), "S19905C12");
    check_base_class_offset(lv, (S19905C3*), ABISELECT(48,28), "S19905C12");
    /*is_ambiguous_... S19905C12::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*), 0, "S19905C12");
    check_field_offset(lv, s19905c12f0, ABISELECT(42,26), "S19905C12.s19905c12f0");
    test_class_info(&lv, &cd_S19905C12);
    dp->~S19905C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19905C12(Test_S19905C12, "S19905C12", ABISELECT(224,132));

#else // __cplusplus

extern void _ZN9S19905C12C1Ev();
extern void _ZN9S19905C12D2Ev();
Name_Map name_map_S19905C12[] = {
  NSPAIR(_ZN9S19905C12C1Ev),
  NSPAIR(_ZN9S19905C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C6;
extern VTBL_ENTRY _ZTI8S19905C6[];
extern  VTBL_ENTRY _ZTV8S19905C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C4;
extern VTBL_ENTRY _ZTI8S19905C4[];
extern  VTBL_ENTRY _ZTV8S19905C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C4[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C3;
extern VTBL_ENTRY _ZTI8S19905C3[];
extern  VTBL_ENTRY _ZTV8S19905C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C3[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
static Base_Class bases_S19905C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19905C5_nt,    ABISELECT(112,68), //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
    2, //immediately_derived
  0, 1},
  {&cd_S19905C7,    ABISELECT(176,104), //bcp->offset
    31, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19905C6,    ABISELECT(112,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(128,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
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19905C4,    ABISELECT(112,68), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19905C5_nt,    ABISELECT(48,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
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19905C7,    ABISELECT(64,36), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19905C3,    ABISELECT(48,28), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19905C7,    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 _ZTI9S19905C12[];
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void _ZN9S19905C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
extern void _ZN9S19905C12D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19905C12D1Ev,_ZTv0_n24_N9S19905C12D1Ev)();
extern void ABISELECT(_ZThn48_N9S19905C12D1Ev,_ZThn28_N9S19905C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19905C12D0Ev,_ZTv0_n24_N9S19905C12D0Ev)();
extern void ABISELECT(_ZThn48_N9S19905C12D0Ev,_ZThn28_N9S19905C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void ABISELECT(_ZThn64_N9S19905C12D1Ev,_ZThn36_N9S19905C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
extern void ABISELECT(_ZThn64_N9S19905C12D0Ev,_ZThn36_N9S19905C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void ABISELECT(_ZThn112_N9S19905C12D1Ev,_ZThn68_N9S19905C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
extern void ABISELECT(_ZThn112_N9S19905C12D0Ev,_ZThn68_N9S19905C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void ABISELECT(_ZThn176_N9S19905C12D1Ev,_ZThn104_N9S19905C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
extern void ABISELECT(_ZThn176_N9S19905C12D0Ev,_ZThn104_N9S19905C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19905C12[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  0,
  ABISELECT(112,68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C12D1Ev,_ZTv0_n24_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C12D0Ev,_ZTv0_n24_N9S19905C12D0Ev),
  ABISELECT(48,32),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
  ABISELECT(64,36),
  0,
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S19905C12[];
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__A__9S19905C12[] = {
  ABISELECT(112,68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZThn112_N8S19905C7D1Ev,_ZThn68_N8S19905C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void ABISELECT(_ZThn112_N8S19905C7D0Ev,_ZThn68_N8S19905C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C7__A__9S19905C12[] = {
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void _ZN8S19905C3D1Ev();
extern void _ZN8S19905C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19905C3__9S19905C12[] = {
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&_ZN8S19905C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19905C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C3__A1__9S19905C12[] = {
  ABISELECT(48,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZThn48_N8S19905C7D1Ev,_ZThn32_N8S19905C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void ABISELECT(_ZThn48_N8S19905C7D0Ev,_ZThn32_N8S19905C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C78S19905C3__A1__9S19905C12[] = {
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S19905C3D1Ev,_ZThn40_N8S19905C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
extern void ABISELECT(_ZThn64_N8S19905C3D0Ev,_ZThn40_N8S19905C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__8S19905C3__9S19905C12[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZThn128_N8S19905C3D1Ev,_ZThn76_N8S19905C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
extern void ABISELECT(_ZThn128_N8S19905C3D0Ev,_ZThn76_N8S19905C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C3__9S19905C12[] = {
  ABISELECT(-64,-36),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19905C3D1Ev,_ZThn8_N8S19905C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19905C3D0Ev,_ZThn8_N8S19905C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__A__8S19905C3__9S19905C12[] = {
  ABISELECT(48,32),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void _ZN8S19905C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void _ZN8S19905C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C12[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void _ZN8S19905C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void _ZN8S19905C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C68S19905C4__9S19905C12[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S19905C6D1Ev,_ZThn36_N8S19905C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S19905C6D0Ev,_ZThn36_N8S19905C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C68S19905C4__9S19905C12[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZThn64_N8S19905C4D1Ev,_ZThn36_N8S19905C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void ABISELECT(_ZThn64_N8S19905C4D0Ev,_ZThn36_N8S19905C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C4__9S19905C12[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__9S19905C12[] = {
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C7__9S19905C12[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
static  VTT_ENTRY vtt_S19905C12[] = {
  {&(_ZTV9S19905C12[8]),  8,37},
  {&(_tg__ZTV8S19905C7__A__9S19905C12[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C7__A__9S19905C12[3]),  3,5},
  {&(_ZTV9S19905C12[16]),  16,37},
  {&(_ZTV9S19905C12[29]),  29,37},
  {&(_ZTV9S19905C12[29]),  29,37},
  {&(_ZTV9S19905C12[35]),  35,37},
  {&(_ZTV9S19905C12[22]),  22,37},
  {&(_tg__ZTV8S19905C3__9S19905C12[5]),  5,7},
  {&(_tg__ZTV8S19905C78S19905C3__A1__9S19905C12[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C78S19905C3__A1__9S19905C12[3]),  3,5},
  {&(_tg__ZTV8S19905C4__8S19905C3__9S19905C12[5]),  5,7},
  {&(_tg__ZTV8S19905C4__8S19905C3__9S19905C12[5]),  5,7},
  {&(_tg__ZTV8S19905C7__8S19905C3__9S19905C12[4]),  4,6},
  {&(_tg__ZTV8S19905C7__A__8S19905C3__9S19905C12[4]),  4,6},
  {&(_tg__ZTV8S19905C4__9S19905C12[5]),  5,7},
  {&(_tg__ZTV8S19905C68S19905C4__9S19905C12[5]),  5,7},
  {&(_tg__ZTV8S19905C68S19905C4__9S19905C12[5]),  5,7},
  {&(_tg__ZTV8S19905C7__8S19905C68S19905C4__9S19905C12[4]),  4,6},
  {&(_tg__ZTV8S19905C4__9S19905C12[5]),  5,7},
  {&(_tg__ZTV8S19905C7__8S19905C4__9S19905C12[4]),  4,6},
  {&(_tg__ZTV8S19905C7__9S19905C12[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C7__9S19905C12[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19905C12[];
extern  VTBL_ENTRY _ZTV9S19905C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C12[];
static VTBL_ENTRY alt_thunk_names4[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C6D0Ev,_ZThn36_N8S19905C6D0Ev),
  (VTBL_ENTRY)_ZN8S19905C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C6D1Ev,_ZThn36_N8S19905C6D1Ev),
  (VTBL_ENTRY)_ZN8S19905C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C4D0Ev,_ZThn36_N8S19905C4D0Ev),
  (VTBL_ENTRY)_ZN8S19905C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C4D1Ev,_ZThn36_N8S19905C4D1Ev),
  (VTBL_ENTRY)_ZN8S19905C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C3D0Ev,_ZThn8_N8S19905C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19905C3D0Ev,_ZThn76_N8S19905C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C3D0Ev,_ZThn40_N8S19905C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C3D1Ev,_ZThn8_N8S19905C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19905C3D1Ev,_ZThn76_N8S19905C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C3D1Ev,_ZThn40_N8S19905C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19905C7D0Ev,_ZThn32_N8S19905C7D0Ev),
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19905C7D0Ev,_ZThn68_N8S19905C7D0Ev),
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19905C7D1Ev,_ZThn32_N8S19905C7D1Ev),
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19905C7D1Ev,_ZThn68_N8S19905C7D1Ev),
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19905C12D0Ev,_ZTv0_n24_N9S19905C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19905C12D0Ev,_ZThn28_N9S19905C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19905C12D1Ev,_ZTv0_n24_N9S19905C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19905C12D1Ev,_ZThn28_N9S19905C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S19905C12D0Ev,_ZThn104_N9S19905C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19905C12D0Ev,_ZThn68_N9S19905C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19905C12D0Ev,_ZThn36_N9S19905C12D0Ev),
  (VTBL_ENTRY)_ZN9S19905C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S19905C12D1Ev,_ZThn104_N9S19905C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19905C12D1Ev,_ZThn68_N9S19905C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19905C12D1Ev,_ZThn36_N9S19905C12D1Ev),
  (VTBL_ENTRY)_ZN9S19905C12D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19905C12 = {  "S19905C12", // class name
  bases_S19905C12, 11,
  &(vtc_S19905C12[0]), // expected_vtbl_contents
  &(vtt_S19905C12[0]), // expected_vtt_contents
  ABISELECT(224,132), // object size
  NSPAIRA(_ZTI9S19905C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19905C12),37, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19905C12),23, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names4,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19905C10  : virtual S19905C7 , virtual S19905C6 , virtual S5266C26 , virtual S19905C12 , S19905C4 {
  ::S19905C3 s19905c10f0;
  int s19905c10f1;
  short s19905c10f2;
  virtual  ~S19905C10(); // _ZN9S19905C10D2Ev
  S19905C10(); // tgen
};
//SIG(-1 S19905C10) C1{ VBC2{ VBC3{ vd m} FD Fc Fs[4]} VBC4{ VBC3 VBC2 vd Fi} VBC5{ m} VBC6{ VBC7{ m} VBC8{ VBC9{ VBC3 BC4 BC10{ m Fp} vd Fs FL Fp FL} BC10 BC3 BC2 vd Fi} BC2 vd Fs} BC9 vd FC8 Fi Fs}


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

static void Test_S19905C10()
{
  extern Class_Descriptor cd_S19905C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(32,73)];
    init_test(&cd_S19905C10, buf);
    S19905C10 *dp, &lv = *(dp=new (buf) S19905C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(496,288), "sizeof(S19905C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19905C10)");
    /*is_ambiguous_... S19905C10::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*), ABISELECT(256,148), "S19905C10");
    /*is_ambiguous_... S19905C10::S19905C6 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C6*), ABISELECT(256,148), "S19905C10");
    /*is_ambiguous_... S19905C10::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C4*), ABISELECT(256,148), "S19905C10");
    /*is_ambiguous_... S19905C10::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C6*)(S19905C4*), ABISELECT(256,148), "S19905C10");
    /*is_ambiguous_... S19905C3::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*)(S19905C3*), ABISELECT(256,148), "S19905C10");
    /*is_ambiguous_... S19905C12::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*)(S19905C12*), ABISELECT(256,148), "S19905C10");
    /*is_ambiguous_... S19905C10::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C4*), ABISELECT(256,148), "S19905C10");
    /*is_ambiguous_... S19905C10::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C6*)(S19905C4*), ABISELECT(256,148), "S19905C10");
    /*is_ambiguous_... S19905C10::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*), ABISELECT(256,148), "S19905C10");
    /*is_ambiguous_... S19905C10::S19905C6 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C6*), ABISELECT(256,148), "S19905C10");
    /*is_ambiguous_... S19905C10::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C6*)(S19905C4*), ABISELECT(256,148), "S19905C10");
    /*is_ambiguous_... S19905C10::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C6*)(S19905C4*), ABISELECT(256,148), "S19905C10");
    /*is_ambiguous_... S19905C10::S19905C6 */ AMB_check_base_class_offset(lv, (S19905C6*), ABISELECT(304,176), "S19905C10");
    check_base_class_offset(lv, (S5266C26*), 0, "S19905C10");
    check_base_class_offset(lv, (S5266C29*)(S19905C12*), 0, "S19905C10");
    /*is_ambiguous_... S19905C10::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C6*)(S19905C4*), ABISELECT(432,252), "S19905C10");
    /*is_ambiguous_... S19905C10::S19905C4 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C4*), ABISELECT(448,260), "S19905C10");
    check_base_class_offset(lv, (S19905C4*)(S19905C3*), ABISELECT(432,252), "S19905C10");
    /*is_ambiguous_... S19905C3::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C3*), ABISELECT(376,216), "S19905C10");
    /*is_ambiguous_... S19905C3::S19905C5_nt */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C3*), ABISELECT(368,212), "S19905C10");
    /*is_ambiguous_... S19905C3::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C3*), ABISELECT(384,220), "S19905C10");
    check_base_class_offset(lv, (S19905C3*)(S19905C12*), ABISELECT(368,212), "S19905C10");
    /*is_ambiguous_... S19905C12::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C12*), ABISELECT(320,184), "S19905C10");
    check_base_class_offset(lv, (S19905C12*), ABISELECT(320,184), "S19905C10");
    /*is_ambiguous_... S19905C10::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C6*)(S19905C4*), 0, "S19905C10");
    /*is_ambiguous_... S19905C10::S19905C4 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C4*), ABISELECT(16,8), "S19905C10");
    /*is_ambiguous_... S19905C10::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C4*), 0, "S19905C10");
    check_field_offset(lv, s19905c10f0, ABISELECT(64,36), "S19905C10.s19905c10f0");
    check_field_offset(lv, s19905c10f1, ABISELECT(240,140), "S19905C10.s19905c10f1");
    check_field_offset(lv, s19905c10f2, ABISELECT(244,144), "S19905C10.s19905c10f2");
    test_class_info(&lv, &cd_S19905C10);
    dp->~S19905C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19905C10(Test_S19905C10, "S19905C10", ABISELECT(496,288));

#else // __cplusplus

extern void _ZN9S19905C10C1Ev();
extern void _ZN9S19905C10D2Ev();
Name_Map name_map_S19905C10[] = {
  NSPAIR(_ZN9S19905C10C1Ev),
  NSPAIR(_ZN9S19905C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C6;
extern VTBL_ENTRY _ZTI8S19905C6[];
extern  VTBL_ENTRY _ZTV8S19905C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C6[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19905C6;
extern VTBL_ENTRY _ZTI8S19905C6[];
extern  VTBL_ENTRY _ZTV8S19905C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C4;
extern VTBL_ENTRY _ZTI8S19905C4[];
extern  VTBL_ENTRY _ZTV8S19905C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C4[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C3;
extern VTBL_ENTRY _ZTI8S19905C3[];
extern  VTBL_ENTRY _ZTV8S19905C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C3[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C12;
extern VTBL_ENTRY _ZTI9S19905C12[];
extern  VTBL_ENTRY _ZTV9S19905C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C12[];
extern Class_Descriptor cd_S19905C6;
extern VTBL_ENTRY _ZTI8S19905C6[];
extern  VTBL_ENTRY _ZTV8S19905C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C4;
extern VTBL_ENTRY _ZTI8S19905C4[];
extern  VTBL_ENTRY _ZTV8S19905C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C4[];
static Base_Class bases_S19905C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C5_nt,    ABISELECT(256,148), //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
    1, //immediately_derived
  0, 1},
  {&cd_S19905C7,    ABISELECT(256,148), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19905C6,    ABISELECT(304,176), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19905C6,    ABISELECT(432,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(448,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19905C4,    ABISELECT(432,252), //bcp->offset
    50, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(376,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
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19905C5_nt,    ABISELECT(368,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
    6, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19905C7,    ABISELECT(384,220), //bcp->offset
    44, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19905C3,    ABISELECT(368,212), //bcp->offset
    36, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19905C7,    ABISELECT(320,184), //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
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19905C12,    ABISELECT(320,184), //bcp->offset
    26, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19905C6,    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
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S17777C6_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
    16, //immediately_derived
  0, 0},
  {&cd_S19905C4,    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},
  {0}};
extern VTBL_ENTRY _ZTI9S19905C10[];
extern void ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev)();
extern void _ZN9S19905C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev)();
extern void _ZN9S19905C10D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev)();
extern void ABISELECT(_ZThn256_N9S19905C10D1Ev,_ZThn148_N9S19905C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev)();
extern void ABISELECT(_ZThn256_N9S19905C10D0Ev,_ZThn148_N9S19905C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev)();
extern void ABISELECT(_ZThn304_N9S19905C10D1Ev,_ZThn176_N9S19905C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev)();
extern void ABISELECT(_ZThn304_N9S19905C10D0Ev,_ZThn176_N9S19905C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev)();
extern void ABISELECT(_ZThn320_N9S19905C10D1Ev,_ZThn184_N9S19905C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev)();
extern void ABISELECT(_ZThn320_N9S19905C10D0Ev,_ZThn184_N9S19905C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19905C10D1Ev,_ZTv0_n24_N9S19905C10D1Ev)();
extern void ABISELECT(_ZThn368_N9S19905C10D1Ev,_ZThn212_N9S19905C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19905C10D0Ev,_ZTv0_n24_N9S19905C10D0Ev)();
extern void ABISELECT(_ZThn368_N9S19905C10D0Ev,_ZThn212_N9S19905C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev)();
extern void ABISELECT(_ZThn384_N9S19905C10D1Ev,_ZThn220_N9S19905C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev)();
extern void ABISELECT(_ZThn384_N9S19905C10D0Ev,_ZThn220_N9S19905C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev)();
extern void ABISELECT(_ZThn432_N9S19905C10D1Ev,_ZThn252_N9S19905C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev)();
extern void ABISELECT(_ZThn432_N9S19905C10D0Ev,_ZThn252_N9S19905C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19905C10[] = {
  ABISELECT(432,252),
  ABISELECT(368,212),
  0,
  ABISELECT(320,184),
  0,
  ABISELECT(304,176),
  ABISELECT(256,148),
  ABISELECT(256,148),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev),
  0,
  ABISELECT(-256,-148),
  ABISELECT(-256,-148),
  (VTBL_ENTRY)&(_ZTI9S19905C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-304,-176),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI9S19905C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-320,-184),
  ABISELECT(-64,-36),
  ABISELECT(-320,-184),
  ABISELECT(-320,-184),
  (VTBL_ENTRY)&(_ZTI9S19905C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev),
  ABISELECT(-368,-212),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  ABISELECT(64,40),
  ABISELECT(-368,-212),
  (VTBL_ENTRY)&(_ZTI9S19905C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C10D1Ev,_ZTv0_n24_N9S19905C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C10D0Ev,_ZTv0_n24_N9S19905C10D0Ev),
  ABISELECT(-128,-72),
  ABISELECT(-384,-220),
  ABISELECT(-384,-220),
  (VTBL_ENTRY)&(_ZTI9S19905C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  ABISELECT(-432,-252),
  ABISELECT(-432,-252),
  (VTBL_ENTRY)&(_ZTI9S19905C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S19905C10[];
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void _ZN8S19905C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void _ZN8S19905C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__A__9S19905C10[] = {
  ABISELECT(256,148),
  ABISELECT(256,148),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void _ZN8S19905C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void _ZN8S19905C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C68S19905C4__A2__9S19905C10[] = {
  ABISELECT(256,148),
  ABISELECT(256,148),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZThn256_N8S19905C6D1Ev,_ZThn148_N8S19905C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void ABISELECT(_ZThn256_N8S19905C6D0Ev,_ZThn148_N8S19905C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C68S19905C4__A2__9S19905C10[] = {
  0,
  ABISELECT(-256,-148),
  ABISELECT(-256,-148),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZThn256_N8S19905C4D1Ev,_ZThn148_N8S19905C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void ABISELECT(_ZThn256_N8S19905C4D0Ev,_ZThn148_N8S19905C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C4__A__9S19905C10[] = {
  0,
  ABISELECT(-256,-148),
  ABISELECT(-256,-148),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__9S19905C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void _ZN8S19905C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void _ZN8S19905C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C6__9S19905C10[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C6__9S19905C10[] = {
  0,
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void _ZN9S19905C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
extern void _ZN9S19905C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C12__9S19905C10[] = {
  ABISELECT(-64,-36),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-320,-184),
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C79S19905C12__A2__9S19905C10[] = {
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C79S19905C12__A2__9S19905C10[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19905C12D1Ev,_ZTv0_n24_N9S19905C12D1Ev)();
extern void ABISELECT(_ZThn48_N9S19905C12D1Ev,_ZThn28_N9S19905C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19905C12D0Ev,_ZTv0_n24_N9S19905C12D0Ev)();
extern void ABISELECT(_ZThn48_N9S19905C12D0Ev,_ZThn28_N9S19905C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C3__9S19905C12__9S19905C10[] = {
  ABISELECT(-48,-28),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  ABISELECT(64,40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C12D1Ev,_ZTv0_n24_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C12D0Ev,_ZTv0_n24_N9S19905C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void ABISELECT(_ZThn112_N9S19905C12D1Ev,_ZThn68_N9S19905C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
extern void ABISELECT(_ZThn112_N9S19905C12D0Ev,_ZThn68_N9S19905C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C12__9S19905C10[] = {
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__9S19905C12__9S19905C10[] = {
  0,
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void ABISELECT(_ZThn64_N9S19905C12D1Ev,_ZThn36_N9S19905C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
extern void ABISELECT(_ZThn64_N9S19905C12D0Ev,_ZThn36_N9S19905C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C3__A1__9S19905C12__9S19905C10[] = {
  ABISELECT(-128,-72),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
};
extern void _ZN8S19905C3D1Ev();
extern void _ZN8S19905C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19905C3__9S19905C10[] = {
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&_ZN8S19905C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19905C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C3__A1__9S19905C10[] = {
  ABISELECT(-128,-72),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C78S19905C3__A1__9S19905C10[] = {
  ABISELECT(128,72),
  ABISELECT(128,72),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S19905C3D1Ev,_ZThn40_N8S19905C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
extern void ABISELECT(_ZThn64_N8S19905C3D0Ev,_ZThn40_N8S19905C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__8S19905C3__9S19905C10[] = {
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C3__9S19905C10[] = {
  0,
  ABISELECT(112,64),
  ABISELECT(112,64),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19905C3D1Ev,_ZThn8_N8S19905C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19905C3D0Ev,_ZThn8_N8S19905C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__A__8S19905C3__9S19905C10[] = {
  ABISELECT(-128,-72),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void _ZN8S19905C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void _ZN8S19905C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C10[] = {
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void _ZN8S19905C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void _ZN8S19905C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C68S19905C4__A1__9S19905C10[] = {
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C68S19905C4__A1__9S19905C10[] = {
  0,
  ABISELECT(176,104),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C4__9S19905C10[] = {
  0,
  ABISELECT(176,104),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
static  VTT_ENTRY vtt_S19905C10[] = {
  {&(_ZTV9S19905C10[11]),  11,57},
  {&(_tg__ZTV8S19905C4__A__9S19905C10[5]),  5,7},
  {&(_tg__ZTV8S19905C68S19905C4__A2__9S19905C10[5]),  5,7},
  {&(_tg__ZTV8S19905C7__8S19905C68S19905C4__A2__9S19905C10[4]),  4,6},
  {&(_tg__ZTV8S19905C7__8S19905C68S19905C4__A2__9S19905C10[4]),  4,6},
  {&(_tg__ZTV8S19905C7__8S19905C4__A__9S19905C10[4]),  4,6},
  {&(_tg__ZTV8S19905C7__8S19905C4__A__9S19905C10[4]),  4,6},
  {&(_ZTV9S19905C10[17]),  17,57},
  {&(_ZTV9S19905C10[17]),  17,57},
  {&(_ZTV9S19905C10[24]),  24,57},
  {&(_ZTV9S19905C10[34]),  34,57},
  {&(_ZTV9S19905C10[42]),  42,57},
  {&(_ZTV9S19905C10[55]),  55,57},
  {&(_ZTV9S19905C10[48]),  48,57},
  {&(_tg__ZTV8S19905C7__9S19905C10[4]),  4,6},
  {&(_tg__ZTV8S19905C7__9S19905C10[4]),  4,6},
  {&(_tg__ZTV8S19905C6__9S19905C10[5]),  5,7},
  {&(_tg__ZTV8S19905C7__8S19905C6__9S19905C10[4]),  4,6},
  {&(_tg__ZTV8S19905C7__8S19905C6__9S19905C10[4]),  4,6},
  {&(_tg__ZTV9S19905C12__9S19905C10[8]),  8,10},
  {&(_tg__ZTV8S19905C79S19905C12__A2__9S19905C10[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C79S19905C12__A2__9S19905C10[3]),  3,5},
  {&(_tg__ZTV8S19905C3__9S19905C12__9S19905C10[6]),  6,8},
  {&(_tg__ZTV8S19905C4__9S19905C12__9S19905C10[5]),  5,7},
  {&(_tg__ZTV8S19905C7__9S19905C12__9S19905C10[4]),  4,6},
  {&(_tg__ZTV8S19905C7__9S19905C12__9S19905C10[4]),  4,6},
  {&(_tg__ZTV8S19905C78S19905C3__A1__9S19905C12__9S19905C10[4]),  4,6},
  {&(_tg__ZTV8S19905C3__9S19905C10[5]),  5,7},
  {&(_tg__ZTV8S19905C78S19905C3__A1__9S19905C10[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C78S19905C3__A1__9S19905C10[3]),  3,5},
  {&(_tg__ZTV8S19905C4__8S19905C3__9S19905C10[5]),  5,7},
  {&(_tg__ZTV8S19905C7__8S19905C3__9S19905C10[4]),  4,6},
  {&(_tg__ZTV8S19905C7__8S19905C3__9S19905C10[4]),  4,6},
  {&(_tg__ZTV8S19905C7__A__8S19905C3__9S19905C10[4]),  4,6},
  {&(_tg__ZTV8S19905C4__9S19905C10[5]),  5,7},
  {&(_tg__ZTV8S19905C68S19905C4__A1__9S19905C10[5]),  5,7},
  {&(_tg__ZTV8S19905C7__8S19905C68S19905C4__A1__9S19905C10[4]),  4,6},
  {&(_tg__ZTV8S19905C7__8S19905C68S19905C4__A1__9S19905C10[4]),  4,6},
  {&(_tg__ZTV8S19905C7__8S19905C4__9S19905C10[4]),  4,6},
  {&(_tg__ZTV8S19905C7__8S19905C4__9S19905C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19905C10[];
extern  VTBL_ENTRY _ZTV9S19905C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C10[];
static VTBL_ENTRY alt_thunk_names5[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C3D0Ev,_ZThn8_N8S19905C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C3D0Ev,_ZThn40_N8S19905C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C3D1Ev,_ZThn8_N8S19905C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C3D1Ev,_ZThn40_N8S19905C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19905C12D0Ev,_ZTv0_n24_N9S19905C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19905C12D0Ev,_ZThn28_N9S19905C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19905C12D1Ev,_ZTv0_n24_N9S19905C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19905C12D1Ev,_ZThn28_N9S19905C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19905C12D0Ev,_ZThn36_N9S19905C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19905C12D0Ev,_ZThn68_N9S19905C12D0Ev),
  (VTBL_ENTRY)_ZN9S19905C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19905C12D1Ev,_ZThn36_N9S19905C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19905C12D1Ev,_ZThn68_N9S19905C12D1Ev),
  (VTBL_ENTRY)_ZN9S19905C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev), // 
  (VTBL_ENTRY)_ZN8S19905C6D0Ev,
  (VTBL_ENTRY)_ZN8S19905C6D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19905C6D0Ev,_ZThn148_N8S19905C6D0Ev),
  (VTBL_ENTRY)_ZN8S19905C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev), // 
  (VTBL_ENTRY)_ZN8S19905C6D1Ev,
  (VTBL_ENTRY)_ZN8S19905C6D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19905C6D1Ev,_ZThn148_N8S19905C6D1Ev),
  (VTBL_ENTRY)_ZN8S19905C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19905C4D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19905C4D0Ev,_ZThn148_N8S19905C4D0Ev),
  (VTBL_ENTRY)_ZN8S19905C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19905C4D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19905C4D1Ev,_ZThn148_N8S19905C4D1Ev),
  (VTBL_ENTRY)_ZN8S19905C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19905C10D0Ev,_ZTv0_n24_N9S19905C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S19905C10D0Ev,_ZThn212_N9S19905C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19905C10D1Ev,_ZTv0_n24_N9S19905C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S19905C10D1Ev,_ZThn212_N9S19905C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S19905C10D0Ev,_ZThn252_N9S19905C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S19905C10D0Ev,_ZThn220_N9S19905C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S19905C10D0Ev,_ZThn184_N9S19905C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19905C10D0Ev,_ZThn176_N9S19905C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19905C10D0Ev,_ZThn148_N9S19905C10D0Ev),
  (VTBL_ENTRY)_ZN9S19905C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S19905C10D1Ev,_ZThn252_N9S19905C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S19905C10D1Ev,_ZThn220_N9S19905C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S19905C10D1Ev,_ZThn184_N9S19905C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19905C10D1Ev,_ZThn176_N9S19905C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19905C10D1Ev,_ZThn148_N9S19905C10D1Ev),
  (VTBL_ENTRY)_ZN9S19905C10D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19905C10 = {  "S19905C10", // class name
  bases_S19905C10, 17,
  &(vtc_S19905C10[0]), // expected_vtbl_contents
  &(vtt_S19905C10[0]), // expected_vtt_contents
  ABISELECT(496,288), // object size
  NSPAIRA(_ZTI9S19905C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19905C10),57, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19905C10),40, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names5,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19905C15  : virtual S19905C5_nt , S19905C7 , virtual S19905C12 , S19905C4 {
  void *s19905c15f0;
  ~S19905C15(); // tgen
  S19905C15(); // tgen
};
//SIG(-1 S19905C15) C1{ VBC2{ vd m} BC3{ VBC2 FD Fc Fs[4]} VBC4{ VBC5{ m} VBC6{ VBC7{ VBC2 BC8{ VBC2 VBC3 vd Fi} BC9{ m Fp} vd Fs FL Fp FL} BC9 BC2 BC3 vd Fi} BC3 vd Fs} BC7 Fp}


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

static void Test_S19905C15()
{
  extern Class_Descriptor cd_S19905C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,51)];
    init_test(&cd_S19905C15, buf);
    S19905C15 *dp, &lv = *(dp=new (buf) S19905C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,200), "sizeof(S19905C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19905C15)");
    /*is_ambiguous_... S19905C15::S19905C5_nt */ AMB_check_base_class_offset(lv, (S19905C5_nt*), 0, "S19905C15");
    /*is_ambiguous_... S19905C15::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*), 0, "S19905C15");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C4*), 0, "S19905C15");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C6*)(S19905C4*), 0, "S19905C15");
    /*is_ambiguous_... S19905C15::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*), 0, "S19905C15");
    /*is_ambiguous_... S19905C3::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*)(S19905C3*), 0, "S19905C15");
    /*is_ambiguous_... S19905C12::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*)(S19905C12*), 0, "S19905C15");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C4*), 0, "S19905C15");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C6*)(S19905C4*), 0, "S19905C15");
    /*is_ambiguous_... S19905C15::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*), 0, "S19905C15");
    check_base_class_offset(lv, (S5266C29*)(S19905C12*), 0, "S19905C15");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C6*)(S19905C4*), ABISELECT(288,172), "S19905C15");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C6*)(S19905C4*), ABISELECT(288,172), "S19905C15");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C6*)(S19905C4*), ABISELECT(224,136), "S19905C15");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C4*), ABISELECT(240,144), "S19905C15");
    check_base_class_offset(lv, (S19905C4*)(S19905C3*), ABISELECT(224,136), "S19905C15");
    /*is_ambiguous_... S19905C3::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C3*), ABISELECT(168,100), "S19905C15");
    /*is_ambiguous_... S19905C3::S19905C5_nt */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C3*), ABISELECT(160,96), "S19905C15");
    /*is_ambiguous_... S19905C3::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C3*), ABISELECT(176,104), "S19905C15");
    check_base_class_offset(lv, (S19905C3*)(S19905C12*), ABISELECT(160,96), "S19905C15");
    /*is_ambiguous_... S19905C12::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C12*), ABISELECT(112,68), "S19905C15");
    check_base_class_offset(lv, (S19905C12*), ABISELECT(112,68), "S19905C15");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C6*)(S19905C4*), ABISELECT(48,28), "S19905C15");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C4*), ABISELECT(64,36), "S19905C15");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C4*), ABISELECT(48,28), "S19905C15");
    check_field_offset(lv, s19905c15f0, ABISELECT(104,64), "S19905C15.s19905c15f0");
    test_class_info(&lv, &cd_S19905C15);
    dp->~S19905C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19905C15(Test_S19905C15, "S19905C15", ABISELECT(336,200));

#else // __cplusplus

extern void _ZN9S19905C15C1Ev();
extern void _ZN9S19905C15D1Ev();
Name_Map name_map_S19905C15[] = {
  NSPAIR(_ZN9S19905C15C1Ev),
  NSPAIR(_ZN9S19905C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C6;
extern VTBL_ENTRY _ZTI8S19905C6[];
extern  VTBL_ENTRY _ZTV8S19905C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C4;
extern VTBL_ENTRY _ZTI8S19905C4[];
extern  VTBL_ENTRY _ZTV8S19905C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C4[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C3;
extern VTBL_ENTRY _ZTI8S19905C3[];
extern  VTBL_ENTRY _ZTV8S19905C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C3[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C12;
extern VTBL_ENTRY _ZTI9S19905C12[];
extern  VTBL_ENTRY _ZTV9S19905C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C12[];
extern Class_Descriptor cd_S19905C6;
extern VTBL_ENTRY _ZTI8S19905C6[];
extern  VTBL_ENTRY _ZTV8S19905C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C4;
extern VTBL_ENTRY _ZTI8S19905C4[];
extern  VTBL_ENTRY _ZTV8S19905C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C4[];
static Base_Class bases_S19905C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C5_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
  1, 1},
  {&cd_S19905C7,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19905C7,    ABISELECT(288,172), //bcp->offset
    49, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19905C6,    ABISELECT(224,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(240,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19905C4,    ABISELECT(224,136), //bcp->offset
    42, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19905C5_nt,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S19905C7,    ABISELECT(176,104), //bcp->offset
    36, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19905C3,    ABISELECT(160,96), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19905C7,    ABISELECT(112,68), //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
    12, //immediately_derived
  0, 0},
  {&cd_S19905C12,    ABISELECT(112,68), //bcp->offset
    18, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19905C6,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S17777C6_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
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19905C4,    ABISELECT(48,28), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19905C15[];
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void _ZN9S19905C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
extern void _ZN9S19905C15D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void ABISELECT(_ZThn48_N9S19905C15D1Ev,_ZThn28_N9S19905C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
extern void ABISELECT(_ZThn48_N9S19905C15D0Ev,_ZThn28_N9S19905C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void ABISELECT(_ZThn112_N9S19905C15D1Ev,_ZThn68_N9S19905C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
extern void ABISELECT(_ZThn112_N9S19905C15D0Ev,_ZThn68_N9S19905C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19905C15D1Ev,_ZTv0_n24_N9S19905C15D1Ev)();
extern void ABISELECT(_ZThn160_N9S19905C15D1Ev,_ZThn96_N9S19905C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19905C15D0Ev,_ZTv0_n24_N9S19905C15D0Ev)();
extern void ABISELECT(_ZThn160_N9S19905C15D0Ev,_ZThn96_N9S19905C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void ABISELECT(_ZThn176_N9S19905C15D1Ev,_ZThn104_N9S19905C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
extern void ABISELECT(_ZThn176_N9S19905C15D0Ev,_ZThn104_N9S19905C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void ABISELECT(_ZThn224_N9S19905C15D1Ev,_ZThn136_N9S19905C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
extern void ABISELECT(_ZThn224_N9S19905C15D0Ev,_ZThn136_N9S19905C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void ABISELECT(_ZThn288_N9S19905C15D1Ev,_ZThn172_N9S19905C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
extern void ABISELECT(_ZThn288_N9S19905C15D0Ev,_ZThn172_N9S19905C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19905C15[] = {
  ABISELECT(288,172),
  ABISELECT(224,136),
  ABISELECT(160,96),
  0,
  ABISELECT(112,68),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
  ABISELECT(240,144),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
  ABISELECT(-160,-96),
  ABISELECT(128,76),
  ABISELECT(-160,-96),
  ABISELECT(64,40),
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C15D1Ev,_ZTv0_n24_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C15D0Ev,_ZTv0_n24_N9S19905C15D0Ev),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
  ABISELECT(64,36),
  ABISELECT(-224,-136),
  ABISELECT(-224,-136),
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
  ABISELECT(-288,-172),
  ABISELECT(-288,-172),
  ABISELECT(-288,-172),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S19905C15[];
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__A__9S19905C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void _ZN8S19905C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void _ZN8S19905C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__A__9S19905C15[] = {
  ABISELECT(240,144),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void _ZN8S19905C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void _ZN8S19905C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C68S19905C4__A1__9S19905C15[] = {
  ABISELECT(240,144),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C68S19905C4__A1__9S19905C15[] = {
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZThn240_N8S19905C6D1Ev,_ZThn144_N8S19905C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void ABISELECT(_ZThn240_N8S19905C6D0Ev,_ZThn144_N8S19905C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C68S19905C4__A1__9S19905C15[] = {
  ABISELECT(-288,-172),
  ABISELECT(-240,-144),
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C4__A__9S19905C15[] = {
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZThn240_N8S19905C4D1Ev,_ZThn144_N8S19905C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void ABISELECT(_ZThn240_N8S19905C4D0Ev,_ZThn144_N8S19905C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C4__A__9S19905C15[] = {
  ABISELECT(-288,-172),
  ABISELECT(-240,-144),
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void _ZN9S19905C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
extern void _ZN9S19905C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C12__9S19905C15[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C79S19905C12__A3__9S19905C15[] = {
  ABISELECT(-112,-68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C79S19905C12__A3__9S19905C15[] = {
  ABISELECT(112,68),
  ABISELECT(112,68),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19905C12D1Ev,_ZTv0_n24_N9S19905C12D1Ev)();
extern void ABISELECT(_ZThn48_N9S19905C12D1Ev,_ZThn28_N9S19905C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19905C12D0Ev,_ZTv0_n24_N9S19905C12D0Ev)();
extern void ABISELECT(_ZThn48_N9S19905C12D0Ev,_ZThn28_N9S19905C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C3__9S19905C12__9S19905C15[] = {
  ABISELECT(-48,-28),
  ABISELECT(128,76),
  ABISELECT(-160,-96),
  ABISELECT(64,40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C12D1Ev,_ZTv0_n24_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C12D0Ev,_ZTv0_n24_N9S19905C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void ABISELECT(_ZThn112_N9S19905C12D1Ev,_ZThn68_N9S19905C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
extern void ABISELECT(_ZThn112_N9S19905C12D0Ev,_ZThn68_N9S19905C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C12__9S19905C15[] = {
  ABISELECT(64,36),
  ABISELECT(-224,-136),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__9S19905C12__9S19905C15[] = {
  ABISELECT(112,68),
  ABISELECT(112,68),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void ABISELECT(_ZThn176_N9S19905C12D1Ev,_ZThn104_N9S19905C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
extern void ABISELECT(_ZThn176_N9S19905C12D0Ev,_ZThn104_N9S19905C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__9S19905C12__9S19905C15[] = {
  ABISELECT(-288,-172),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void ABISELECT(_ZThn64_N9S19905C12D1Ev,_ZThn36_N9S19905C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
extern void ABISELECT(_ZThn64_N9S19905C12D0Ev,_ZThn36_N9S19905C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C3__A1__9S19905C12__9S19905C15[] = {
  ABISELECT(-176,-104),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
};
extern void _ZN8S19905C3D1Ev();
extern void _ZN8S19905C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19905C3__9S19905C15[] = {
  ABISELECT(128,76),
  ABISELECT(-160,-96),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&_ZN8S19905C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19905C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C3__A2__9S19905C15[] = {
  ABISELECT(-176,-104),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C78S19905C3__A2__9S19905C15[] = {
  ABISELECT(176,104),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S19905C3D1Ev,_ZThn40_N8S19905C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
extern void ABISELECT(_ZThn64_N8S19905C3D0Ev,_ZThn40_N8S19905C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__8S19905C3__9S19905C15[] = {
  ABISELECT(64,36),
  ABISELECT(-224,-136),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C3__9S19905C15[] = {
  ABISELECT(160,96),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZThn128_N8S19905C3D1Ev,_ZThn76_N8S19905C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
extern void ABISELECT(_ZThn128_N8S19905C3D0Ev,_ZThn76_N8S19905C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C3__9S19905C15[] = {
  ABISELECT(-288,-172),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19905C3D1Ev,_ZThn8_N8S19905C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19905C3D0Ev,_ZThn8_N8S19905C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__A__8S19905C3__9S19905C15[] = {
  ABISELECT(-176,-104),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void _ZN8S19905C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void _ZN8S19905C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C15[] = {
  ABISELECT(64,36),
  ABISELECT(-224,-136),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void _ZN8S19905C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void _ZN8S19905C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C68S19905C4__9S19905C15[] = {
  ABISELECT(64,36),
  ABISELECT(-224,-136),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C68S19905C4__9S19905C15[] = {
  ABISELECT(224,136),
  ABISELECT(224,136),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S19905C6D1Ev,_ZThn36_N8S19905C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S19905C6D0Ev,_ZThn36_N8S19905C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C68S19905C4__9S19905C15[] = {
  ABISELECT(-288,-172),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C4__9S19905C15[] = {
  ABISELECT(224,136),
  ABISELECT(224,136),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZThn64_N8S19905C4D1Ev,_ZThn36_N8S19905C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void ABISELECT(_ZThn64_N8S19905C4D0Ev,_ZThn36_N8S19905C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C4__9S19905C15[] = {
  ABISELECT(-288,-172),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__A1__9S19905C15[] = {
  ABISELECT(-288,-172),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C7__A1__9S19905C15[] = {
  ABISELECT(288,172),
  ABISELECT(288,172),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
static  VTT_ENTRY vtt_S19905C15[] = {
  {&(_ZTV9S19905C15[9]),  9,55},
  {&(_tg__ZTV8S19905C7__A__9S19905C15[4]),  4,6},
  {&(_tg__ZTV8S19905C7__A__9S19905C15[4]),  4,6},
  {&(_tg__ZTV8S19905C4__A__9S19905C15[5]),  5,7},
  {&(_tg__ZTV8S19905C68S19905C4__A1__9S19905C15[5]),  5,7},
  {&(_tg__ZTV11S19905C5_nt__8S19905C68S19905C4__A1__9S19905C15[3]),  3,5},
  {&(_tg__ZTV8S19905C7__8S19905C68S19905C4__A1__9S19905C15[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C4__A__9S19905C15[3]),  3,5},
  {&(_tg__ZTV8S19905C7__8S19905C4__A__9S19905C15[4]),  4,6},
  {&(_ZTV9S19905C15[9]),  9,55},
  {&(_ZTV9S19905C15[26]),  26,55},
  {&(_ZTV9S19905C15[34]),  34,55},
  {&(_ZTV9S19905C15[47]),  47,55},
  {&(_ZTV9S19905C15[53]),  53,55},
  {&(_ZTV9S19905C15[40]),  40,55},
  {&(_ZTV9S19905C15[16]),  16,55},
  {&(_tg__ZTV9S19905C12__9S19905C15[8]),  8,10},
  {&(_tg__ZTV8S19905C79S19905C12__A3__9S19905C15[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C79S19905C12__A3__9S19905C15[3]),  3,5},
  {&(_tg__ZTV8S19905C3__9S19905C12__9S19905C15[6]),  6,8},
  {&(_tg__ZTV8S19905C4__9S19905C12__9S19905C15[5]),  5,7},
  {&(_tg__ZTV11S19905C5_nt__9S19905C12__9S19905C15[3]),  3,5},
  {&(_tg__ZTV8S19905C7__9S19905C12__9S19905C15[4]),  4,6},
  {&(_tg__ZTV8S19905C78S19905C3__A1__9S19905C12__9S19905C15[4]),  4,6},
  {&(_tg__ZTV8S19905C3__9S19905C15[5]),  5,7},
  {&(_tg__ZTV8S19905C78S19905C3__A2__9S19905C15[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C78S19905C3__A2__9S19905C15[3]),  3,5},
  {&(_tg__ZTV8S19905C4__8S19905C3__9S19905C15[5]),  5,7},
  {&(_tg__ZTV11S19905C5_nt__8S19905C3__9S19905C15[3]),  3,5},
  {&(_tg__ZTV8S19905C7__8S19905C3__9S19905C15[4]),  4,6},
  {&(_tg__ZTV8S19905C7__A__8S19905C3__9S19905C15[4]),  4,6},
  {&(_tg__ZTV8S19905C4__9S19905C15[5]),  5,7},
  {&(_tg__ZTV8S19905C68S19905C4__9S19905C15[5]),  5,7},
  {&(_tg__ZTV11S19905C5_nt__8S19905C68S19905C4__9S19905C15[3]),  3,5},
  {&(_tg__ZTV8S19905C7__8S19905C68S19905C4__9S19905C15[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C4__9S19905C15[3]),  3,5},
  {&(_tg__ZTV8S19905C7__8S19905C4__9S19905C15[4]),  4,6},
  {&(_tg__ZTV8S19905C7__A1__9S19905C15[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C7__A1__9S19905C15[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19905C15[];
extern  VTBL_ENTRY _ZTV9S19905C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C15[];
static VTBL_ENTRY alt_thunk_names6[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C3D0Ev,_ZThn8_N8S19905C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19905C3D0Ev,_ZThn76_N8S19905C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C3D0Ev,_ZThn40_N8S19905C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C3D1Ev,_ZThn8_N8S19905C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19905C3D1Ev,_ZThn76_N8S19905C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C3D1Ev,_ZThn40_N8S19905C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19905C12D0Ev,_ZTv0_n24_N9S19905C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19905C12D0Ev,_ZThn28_N9S19905C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19905C12D1Ev,_ZTv0_n24_N9S19905C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19905C12D1Ev,_ZThn28_N9S19905C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19905C12D0Ev,_ZThn36_N9S19905C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S19905C12D0Ev,_ZThn104_N9S19905C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19905C12D0Ev,_ZThn68_N9S19905C12D0Ev),
  (VTBL_ENTRY)_ZN9S19905C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19905C12D1Ev,_ZThn36_N9S19905C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S19905C12D1Ev,_ZThn104_N9S19905C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19905C12D1Ev,_ZThn68_N9S19905C12D1Ev),
  (VTBL_ENTRY)_ZN9S19905C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C6D0Ev,_ZThn36_N8S19905C6D0Ev),
  (VTBL_ENTRY)_ZN8S19905C6D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19905C6D0Ev,_ZThn144_N8S19905C6D0Ev),
  (VTBL_ENTRY)_ZN8S19905C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C6D1Ev,_ZThn36_N8S19905C6D1Ev),
  (VTBL_ENTRY)_ZN8S19905C6D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19905C6D1Ev,_ZThn144_N8S19905C6D1Ev),
  (VTBL_ENTRY)_ZN8S19905C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C4D0Ev,_ZThn36_N8S19905C4D0Ev),
  (VTBL_ENTRY)_ZN8S19905C4D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19905C4D0Ev,_ZThn144_N8S19905C4D0Ev),
  (VTBL_ENTRY)_ZN8S19905C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C4D1Ev,_ZThn36_N8S19905C4D1Ev),
  (VTBL_ENTRY)_ZN8S19905C4D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19905C4D1Ev,_ZThn144_N8S19905C4D1Ev),
  (VTBL_ENTRY)_ZN8S19905C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19905C15D0Ev,_ZTv0_n24_N9S19905C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19905C15D0Ev,_ZThn96_N9S19905C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19905C15D1Ev,_ZTv0_n24_N9S19905C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19905C15D1Ev,_ZThn96_N9S19905C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S19905C15D0Ev,_ZThn172_N9S19905C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19905C15D0Ev,_ZThn136_N9S19905C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S19905C15D0Ev,_ZThn104_N9S19905C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19905C15D0Ev,_ZThn68_N9S19905C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19905C15D0Ev,_ZThn28_N9S19905C15D0Ev),
  (VTBL_ENTRY)_ZN9S19905C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S19905C15D1Ev,_ZThn172_N9S19905C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19905C15D1Ev,_ZThn136_N9S19905C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S19905C15D1Ev,_ZThn104_N9S19905C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19905C15D1Ev,_ZThn68_N9S19905C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19905C15D1Ev,_ZThn28_N9S19905C15D1Ev),
  (VTBL_ENTRY)_ZN9S19905C15D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19905C15 = {  "S19905C15", // class name
  bases_S19905C15, 16,
  &(vtc_S19905C15[0]), // expected_vtbl_contents
  &(vtt_S19905C15[0]), // expected_vtt_contents
  ABISELECT(336,200), // object size
  NSPAIRA(_ZTI9S19905C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19905C15),55, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19905C15),39, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names6,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19905C16  : S5266C26 , virtual S19905C4 , S17777C6_nt , virtual S5266C29 {
  ::S19905C6 s19905c16f0;
  short s19905c16f1;
  virtual  ~S19905C16(); // _ZN9S19905C16D2Ev
  S19905C16(); // tgen
};
//SIG(-1 S19905C16) C1{ BC2{ m} VBC3{ VBC4{ vd m} BC5{ VBC4 VBC6{ VBC4 FD Fc Fs[4]} vd Fi} BC7{ m Fp} vd Fs FL Fp FL} BC7 VBC8{ m} vd FC5 Fs}


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

static void Test_S19905C16()
{
  extern Class_Descriptor cd_S19905C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,29)];
    init_test(&cd_S19905C16, buf);
    S19905C16 *dp, &lv = *(dp=new (buf) S19905C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,112), "sizeof(S19905C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19905C16)");
    check_base_class_offset(lv, (S5266C26*), 0, "S19905C16");
    check_base_class_offset(lv, (S19905C5_nt*)(S19905C4*), 0, "S19905C16");
    check_base_class_offset(lv, (S19905C5_nt*)(S19905C6*)(S19905C4*), 0, "S19905C16");
    check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*), 0, "S19905C16");
    check_base_class_offset(lv, (S19905C7*)(S19905C6*)(S19905C4*), ABISELECT(144,84), "S19905C16");
    check_base_class_offset(lv, (S19905C6*)(S19905C4*), ABISELECT(88,48), "S19905C16");
    check_base_class_offset(lv, (S17777C6_nt*)(S19905C4*), ABISELECT(104,56), "S19905C16");
    check_base_class_offset(lv, (S19905C4*), ABISELECT(88,48), "S19905C16");
    /*is_ambiguous_... S19905C16::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*), ABISELECT(8,4), "S19905C16");
    check_base_class_offset(lv, (S5266C29*), 0, "S19905C16");
    check_field_offset(lv, s19905c16f0, ABISELECT(16,8), "S19905C16.s19905c16f0");
    check_field_offset(lv, s19905c16f1, ABISELECT(80,44), "S19905C16.s19905c16f1");
    test_class_info(&lv, &cd_S19905C16);
    dp->~S19905C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19905C16(Test_S19905C16, "S19905C16", ABISELECT(192,112));

#else // __cplusplus

extern void _ZN9S19905C16C1Ev();
extern void _ZN9S19905C16D2Ev();
Name_Map name_map_S19905C16[] = {
  NSPAIR(_ZN9S19905C16C1Ev),
  NSPAIR(_ZN9S19905C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C6;
extern VTBL_ENTRY _ZTI8S19905C6[];
extern  VTBL_ENTRY _ZTV8S19905C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C4;
extern VTBL_ENTRY _ZTI8S19905C4[];
extern  VTBL_ENTRY _ZTV8S19905C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C4[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
static Base_Class bases_S19905C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19905C5_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
    2, //immediately_derived
  0, 1},
  {&cd_S19905C7,    ABISELECT(144,84), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19905C6,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(104,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
    5, //immediately_derived
  0, 0},
  {&cd_S19905C4,    ABISELECT(88,48), //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S17777C6_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, 0},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S19905C16[];
extern void _ZN9S19905C16D1Ev();
extern void _ZN9S19905C16D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev)();
extern void ABISELECT(_ZThn88_N9S19905C16D1Ev,_ZThn48_N9S19905C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev)();
extern void ABISELECT(_ZThn88_N9S19905C16D0Ev,_ZThn48_N9S19905C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev)();
extern void ABISELECT(_ZThn144_N9S19905C16D1Ev,_ZThn84_N9S19905C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev)();
extern void ABISELECT(_ZThn144_N9S19905C16D0Ev,_ZThn84_N9S19905C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19905C16[] = {
  0,
  ABISELECT(144,84),
  0,
  ABISELECT(88,48),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C16[0]),
  (VTBL_ENTRY)&_ZN9S19905C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19905C16D0Ev,
  ABISELECT(56,36),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI9S19905C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev),
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19905C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S19905C16[];
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void _ZN8S19905C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void _ZN8S19905C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C16[] = {
  ABISELECT(56,36),
  ABISELECT(-88,-48),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void _ZN8S19905C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void _ZN8S19905C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C68S19905C4__9S19905C16[] = {
  ABISELECT(56,36),
  ABISELECT(-88,-48),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C68S19905C4__9S19905C16[] = {
  ABISELECT(88,48),
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZThn56_N8S19905C6D1Ev,_ZThn36_N8S19905C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void ABISELECT(_ZThn56_N8S19905C6D0Ev,_ZThn36_N8S19905C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C68S19905C4__9S19905C16[] = {
  ABISELECT(-144,-84),
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C4__9S19905C16[] = {
  ABISELECT(88,48),
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZThn56_N8S19905C4D1Ev,_ZThn36_N8S19905C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void ABISELECT(_ZThn56_N8S19905C4D0Ev,_ZThn36_N8S19905C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C4__9S19905C16[] = {
  ABISELECT(-144,-84),
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__9S19905C16[] = {
  ABISELECT(-144,-84),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C7__9S19905C16[] = {
  ABISELECT(144,84),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
static  VTT_ENTRY vtt_S19905C16[] = {
  {&(_ZTV9S19905C16[7]),  7,22},
  {&(_ZTV9S19905C16[14]),  14,22},
  {&(_ZTV9S19905C16[7]),  7,22},
  {&(_ZTV9S19905C16[20]),  20,22},
  {&(_tg__ZTV8S19905C4__9S19905C16[5]),  5,7},
  {&(_tg__ZTV8S19905C68S19905C4__9S19905C16[5]),  5,7},
  {&(_tg__ZTV11S19905C5_nt__8S19905C68S19905C4__9S19905C16[3]),  3,5},
  {&(_tg__ZTV8S19905C7__8S19905C68S19905C4__9S19905C16[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C4__9S19905C16[3]),  3,5},
  {&(_tg__ZTV8S19905C7__8S19905C4__9S19905C16[4]),  4,6},
  {&(_tg__ZTV8S19905C7__9S19905C16[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C7__9S19905C16[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19905C16[];
extern  VTBL_ENTRY _ZTV9S19905C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C16[];
static VTBL_ENTRY alt_thunk_names7[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19905C6D0Ev,_ZThn36_N8S19905C6D0Ev),
  (VTBL_ENTRY)_ZN8S19905C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19905C6D1Ev,_ZThn36_N8S19905C6D1Ev),
  (VTBL_ENTRY)_ZN8S19905C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19905C4D0Ev,_ZThn36_N8S19905C4D0Ev),
  (VTBL_ENTRY)_ZN8S19905C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19905C4D1Ev,_ZThn36_N8S19905C4D1Ev),
  (VTBL_ENTRY)_ZN8S19905C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19905C16D0Ev,_ZThn84_N9S19905C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19905C16D0Ev,_ZThn48_N9S19905C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19905C16D1Ev,_ZThn84_N9S19905C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19905C16D1Ev,_ZThn48_N9S19905C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19905C16 = {  "S19905C16", // class name
  bases_S19905C16, 8,
  &(vtc_S19905C16[0]), // expected_vtbl_contents
  &(vtt_S19905C16[0]), // expected_vtt_contents
  ABISELECT(192,112), // object size
  NSPAIRA(_ZTI9S19905C16),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19905C16),22, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19905C16),12, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names7,
};
#endif // __cplusplus

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

#ifdef __cplusplus

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



//skip512 S19905C17_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19905C14  : virtual S19905C7 , virtual S19905C15 , virtual S17777C6_nt , S19905C16 {
  int s19905c14f0;
  ::S19905C17_nt s19905c14f1;
  virtual  ~S19905C14(); // _ZN9S19905C14D2Ev
  S19905C14(); // tgen
};
//SIG(-1 S19905C14) C1{ VBC2{ VBC3{ vd m} FD Fc Fs[4]} VBC4{ VBC3 BC2 VBC5{ VBC6{ m} VBC7{ VBC8{ VBC3 BC9{ VBC3 VBC2 vd Fi} BC10{ m Fp} vd Fs FL Fp FL} BC10 BC3 BC2 vd Fi} BC2 vd Fs} BC8 Fp} VBC10 BC11{ BC12{ m} VBC8 BC10 VBC6 vd FC9 Fs} vd Fi FC13{}}


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

static void Test_S19905C14()
{
  extern Class_Descriptor cd_S19905C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,66)];
    init_test(&cd_S19905C14, buf);
    S19905C14 *dp, &lv = *(dp=new (buf) S19905C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,260), "sizeof(S19905C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19905C14)");
    /*is_ambiguous_... S19905C14::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*), ABISELECT(96,56), "S19905C14");
    /*is_ambiguous_... S19905C15::S19905C5_nt */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C15*), ABISELECT(96,56), "S19905C14");
    /*is_ambiguous_... S19905C15::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*)(S19905C15*), ABISELECT(96,56), "S19905C14");
    /*is_ambiguous_... S19905C14::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C4*), ABISELECT(96,56), "S19905C14");
    /*is_ambiguous_... S19905C14::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C6*)(S19905C4*), ABISELECT(96,56), "S19905C14");
    /*is_ambiguous_... S19905C3::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*)(S19905C3*), ABISELECT(96,56), "S19905C14");
    /*is_ambiguous_... S19905C12::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*)(S19905C12*), ABISELECT(96,56), "S19905C14");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C4*)(S19905C15*), ABISELECT(96,56), "S19905C14");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C6*)(S19905C4*)(S19905C15*), ABISELECT(96,56), "S19905C14");
    /*is_ambiguous_... S19905C14::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*), ABISELECT(96,56), "S19905C14");
    /*is_ambiguous_... S19905C14::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C6*)(S19905C4*), ABISELECT(96,56), "S19905C14");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C6*)(S19905C4*)(S19905C15*), ABISELECT(96,56), "S19905C14");
    /*is_ambiguous_... S19905C15::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C15*), ABISELECT(144,84), "S19905C14");
    check_base_class_offset(lv, (S5266C29*)(S19905C12*), 0, "S19905C14");
    check_base_class_offset(lv, (S5266C29*)(S19905C16*), 0, "S19905C14");
    /*is_ambiguous_... S19905C14::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C6*)(S19905C4*), ABISELECT(368,220), "S19905C14");
    /*is_ambiguous_... S19905C14::S19905C4 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C4*), ABISELECT(384,228), "S19905C14");
    check_base_class_offset(lv, (S19905C4*)(S19905C3*), ABISELECT(368,220), "S19905C14");
    check_base_class_offset(lv, (S19905C4*)(S19905C16*), ABISELECT(368,220), "S19905C14");
    /*is_ambiguous_... S19905C3::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C3*), ABISELECT(312,184), "S19905C14");
    /*is_ambiguous_... S19905C3::S19905C5_nt */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C3*), ABISELECT(304,180), "S19905C14");
    /*is_ambiguous_... S19905C3::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C3*), ABISELECT(320,188), "S19905C14");
    check_base_class_offset(lv, (S19905C3*)(S19905C12*), ABISELECT(304,180), "S19905C14");
    /*is_ambiguous_... S19905C12::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C12*), ABISELECT(256,152), "S19905C14");
    check_base_class_offset(lv, (S19905C12*)(S19905C15*), ABISELECT(256,152), "S19905C14");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C6*)(S19905C4*)(S19905C15*), ABISELECT(192,112), "S19905C14");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C4*)(S19905C15*), ABISELECT(208,120), "S19905C14");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C4*)(S19905C15*), ABISELECT(192,112), "S19905C14");
    check_base_class_offset(lv, (S19905C15*), ABISELECT(144,84), "S19905C14");
    /*is_ambiguous_... S19905C14::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*), ABISELECT(424,256), "S19905C14");
    check_base_class_offset(lv, (S5266C26*)(S19905C16*), 0, "S19905C14");
    /*is_ambiguous_... S19905C16::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C16*), ABISELECT(8,4), "S19905C14");
    check_base_class_offset(lv, (S19905C16*), 0, "S19905C14");
    check_field_offset(lv, s19905c14f0, ABISELECT(84,48), "S19905C14.s19905c14f0");
    check_field_offset(lv, s19905c14f1, ABISELECT(88,52), "S19905C14.s19905c14f1");
    test_class_info(&lv, &cd_S19905C14);
    dp->~S19905C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19905C14(Test_S19905C14, "S19905C14", ABISELECT(432,260));

#else // __cplusplus

extern void _ZN9S19905C14C1Ev();
extern void _ZN9S19905C14D2Ev();
Name_Map name_map_S19905C14[] = {
  NSPAIR(_ZN9S19905C14C1Ev),
  NSPAIR(_ZN9S19905C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19905C6;
extern VTBL_ENTRY _ZTI8S19905C6[];
extern  VTBL_ENTRY _ZTV8S19905C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C4;
extern VTBL_ENTRY _ZTI8S19905C4[];
extern  VTBL_ENTRY _ZTV8S19905C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C4[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C3;
extern VTBL_ENTRY _ZTI8S19905C3[];
extern  VTBL_ENTRY _ZTV8S19905C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C3[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C12;
extern VTBL_ENTRY _ZTI9S19905C12[];
extern  VTBL_ENTRY _ZTV9S19905C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C12[];
extern Class_Descriptor cd_S19905C6;
extern VTBL_ENTRY _ZTI8S19905C6[];
extern  VTBL_ENTRY _ZTV8S19905C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C4;
extern VTBL_ENTRY _ZTI8S19905C4[];
extern  VTBL_ENTRY _ZTV8S19905C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C4[];
extern Class_Descriptor cd_S19905C15;
extern VTBL_ENTRY _ZTI9S19905C15[];
extern  VTBL_ENTRY _ZTV9S19905C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C15[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C16;
extern VTBL_ENTRY _ZTI9S19905C16[];
extern  VTBL_ENTRY _ZTV9S19905C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C16[];
static Base_Class bases_S19905C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C5_nt,    ABISELECT(96,56), //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
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19905C7,    ABISELECT(96,56), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19905C7,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19905C6,    ABISELECT(368,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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_S17777C6_nt,    ABISELECT(384,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
    6, //immediately_derived
  0, 0},
  {&cd_S19905C4,    ABISELECT(368,220), //bcp->offset
    61, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(312,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
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19905C5_nt,    ABISELECT(304,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
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19905C7,    ABISELECT(320,188), //bcp->offset
    55, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19905C3,    ABISELECT(304,180), //bcp->offset
    47, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19905C7,    ABISELECT(256,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19905C12,    ABISELECT(256,152), //bcp->offset
    37, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19905C6,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S17777C6_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
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19905C4,    ABISELECT(192,112), //bcp->offset
    30, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19905C15,    ABISELECT(144,84), //bcp->offset
    19, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S17777C6_nt,    ABISELECT(424,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S17777C6_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
    20, //immediately_derived
  0, 0},
  {&cd_S19905C16,    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
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19905C14[];
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void _ZN9S19905C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
extern void _ZN9S19905C14D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void ABISELECT(_ZThn96_N9S19905C14D1Ev,_ZThn56_N9S19905C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
extern void ABISELECT(_ZThn96_N9S19905C14D0Ev,_ZThn56_N9S19905C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void ABISELECT(_ZThn144_N9S19905C14D1Ev,_ZThn84_N9S19905C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
extern void ABISELECT(_ZThn144_N9S19905C14D0Ev,_ZThn84_N9S19905C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void ABISELECT(_ZThn192_N9S19905C14D1Ev,_ZThn112_N9S19905C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
extern void ABISELECT(_ZThn192_N9S19905C14D0Ev,_ZThn112_N9S19905C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void ABISELECT(_ZThn256_N9S19905C14D1Ev,_ZThn152_N9S19905C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
extern void ABISELECT(_ZThn256_N9S19905C14D0Ev,_ZThn152_N9S19905C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19905C14D1Ev,_ZTv0_n24_N9S19905C14D1Ev)();
extern void ABISELECT(_ZThn304_N9S19905C14D1Ev,_ZThn180_N9S19905C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19905C14D0Ev,_ZTv0_n24_N9S19905C14D0Ev)();
extern void ABISELECT(_ZThn304_N9S19905C14D0Ev,_ZThn180_N9S19905C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void ABISELECT(_ZThn320_N9S19905C14D1Ev,_ZThn188_N9S19905C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
extern void ABISELECT(_ZThn320_N9S19905C14D0Ev,_ZThn188_N9S19905C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void ABISELECT(_ZThn368_N9S19905C14D1Ev,_ZThn220_N9S19905C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
extern void ABISELECT(_ZThn368_N9S19905C14D0Ev,_ZThn220_N9S19905C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19905C14[] = {
  ABISELECT(424,256),
  ABISELECT(304,180),
  ABISELECT(256,152),
  ABISELECT(144,84),
  0,
  ABISELECT(96,56),
  ABISELECT(96,56),
  ABISELECT(368,220),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
  0,
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(224,136),
  ABISELECT(160,96),
  ABISELECT(-144,-84),
  ABISELECT(112,68),
  ABISELECT(-48,-28),
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
  ABISELECT(-160,-96),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-256,-152),
  ABISELECT(-160,-96),
  ABISELECT(-256,-152),
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
  ABISELECT(-304,-180),
  ABISELECT(-208,-124),
  ABISELECT(-208,-124),
  ABISELECT(64,40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C14D1Ev,_ZTv0_n24_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C14D0Ev,_ZTv0_n24_N9S19905C14D0Ev),
  ABISELECT(-224,-132),
  ABISELECT(-320,-188),
  ABISELECT(-320,-188),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-368,-220),
  ABISELECT(-368,-220),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
};
extern VTBL_ENTRY _ZTV9S19905C14[];
extern void ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev)();
extern void _ZN9S19905C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev)();
extern void _ZN9S19905C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C16__9S19905C14[] = {
  0,
  ABISELECT(96,56),
  ABISELECT(96,56),
  ABISELECT(368,220),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev)();
extern void ABISELECT(_ZThn368_N9S19905C16D1Ev,_ZThn220_N9S19905C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev)();
extern void ABISELECT(_ZThn368_N9S19905C16D0Ev,_ZThn220_N9S19905C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C16__9S19905C14[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-368,-220),
  ABISELECT(-368,-220),
  (VTBL_ENTRY)&(_ZTI9S19905C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev)();
extern void ABISELECT(_ZThn96_N9S19905C16D1Ev,_ZThn56_N9S19905C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev)();
extern void ABISELECT(_ZThn96_N9S19905C16D0Ev,_ZThn56_N9S19905C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__9S19905C16__9S19905C14[] = {
  0,
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S19905C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__9S19905C14[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void _ZN9S19905C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
extern void _ZN9S19905C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C15__9S19905C14[] = {
  ABISELECT(-48,-28),
  ABISELECT(224,136),
  ABISELECT(160,96),
  ABISELECT(-144,-84),
  ABISELECT(112,68),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C79S19905C15__A1__9S19905C14[] = {
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C79S19905C15__A1__9S19905C14[] = {
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void _ZN8S19905C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void _ZN8S19905C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C49S19905C15__A1__9S19905C14[] = {
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void _ZN8S19905C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void _ZN8S19905C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C68S19905C49S19905C15__A1__9S19905C14[] = {
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C68S19905C49S19905C15__A1__9S19905C14[] = {
  0,
  ABISELECT(96,56),
  ABISELECT(96,56),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C49S19905C15__A1__9S19905C14[] = {
  0,
  ABISELECT(96,56),
  ABISELECT(96,56),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__A1__9S19905C15__9S19905C14[] = {
  0,
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void ABISELECT(_ZThn112_N9S19905C15D1Ev,_ZThn68_N9S19905C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
extern void ABISELECT(_ZThn112_N9S19905C15D0Ev,_ZThn68_N9S19905C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C12__9S19905C15__9S19905C14[] = {
  ABISELECT(-160,-96),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-256,-152),
  ABISELECT(-160,-96),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19905C15D1Ev,_ZTv0_n24_N9S19905C15D1Ev)();
extern void ABISELECT(_ZThn160_N9S19905C15D1Ev,_ZThn96_N9S19905C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19905C15D0Ev,_ZTv0_n24_N9S19905C15D0Ev)();
extern void ABISELECT(_ZThn160_N9S19905C15D0Ev,_ZThn96_N9S19905C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C3__9S19905C15__9S19905C14[] = {
  ABISELECT(-160,-96),
  ABISELECT(-208,-124),
  ABISELECT(-208,-124),
  ABISELECT(64,40),
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C15D1Ev,_ZTv0_n24_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C15D0Ev,_ZTv0_n24_N9S19905C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void ABISELECT(_ZThn224_N9S19905C15D1Ev,_ZThn136_N9S19905C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
extern void ABISELECT(_ZThn224_N9S19905C15D0Ev,_ZThn136_N9S19905C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C15__9S19905C14[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-224,-136),
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void ABISELECT(_ZThn176_N9S19905C15D1Ev,_ZThn104_N9S19905C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
extern void ABISELECT(_ZThn176_N9S19905C15D0Ev,_ZThn104_N9S19905C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C3__A2__9S19905C15__9S19905C14[] = {
  ABISELECT(-224,-132),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void ABISELECT(_ZThn48_N9S19905C15D1Ev,_ZThn28_N9S19905C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
extern void ABISELECT(_ZThn48_N9S19905C15D0Ev,_ZThn28_N9S19905C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__A__9S19905C15__9S19905C14[] = {
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void _ZN9S19905C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
extern void _ZN9S19905C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C12__9S19905C14[] = {
  ABISELECT(-160,-96),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-256,-152),
  ABISELECT(-160,-96),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C79S19905C12__A3__9S19905C14[] = {
  ABISELECT(-160,-96),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C79S19905C12__A3__9S19905C14[] = {
  ABISELECT(160,96),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19905C12D1Ev,_ZTv0_n24_N9S19905C12D1Ev)();
extern void ABISELECT(_ZThn48_N9S19905C12D1Ev,_ZThn28_N9S19905C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19905C12D0Ev,_ZTv0_n24_N9S19905C12D0Ev)();
extern void ABISELECT(_ZThn48_N9S19905C12D0Ev,_ZThn28_N9S19905C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C3__9S19905C12__9S19905C14[] = {
  ABISELECT(-48,-28),
  ABISELECT(-208,-124),
  ABISELECT(-208,-124),
  ABISELECT(64,40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C12D1Ev,_ZTv0_n24_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C12D0Ev,_ZTv0_n24_N9S19905C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void ABISELECT(_ZThn112_N9S19905C12D1Ev,_ZThn68_N9S19905C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
extern void ABISELECT(_ZThn112_N9S19905C12D0Ev,_ZThn68_N9S19905C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C12__9S19905C14[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__9S19905C12__9S19905C14[] = {
  0,
  ABISELECT(160,96),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void ABISELECT(_ZThn64_N9S19905C12D1Ev,_ZThn36_N9S19905C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
extern void ABISELECT(_ZThn64_N9S19905C12D0Ev,_ZThn36_N9S19905C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C3__A1__9S19905C12__9S19905C14[] = {
  ABISELECT(-224,-132),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
};
extern void _ZN8S19905C3D1Ev();
extern void _ZN8S19905C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19905C3__9S19905C14[] = {
  ABISELECT(-208,-124),
  ABISELECT(-208,-124),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&_ZN8S19905C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19905C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C3__A2__9S19905C14[] = {
  ABISELECT(-224,-132),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C78S19905C3__A2__9S19905C14[] = {
  ABISELECT(224,132),
  ABISELECT(224,132),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S19905C3D1Ev,_ZThn40_N8S19905C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
extern void ABISELECT(_ZThn64_N8S19905C3D0Ev,_ZThn40_N8S19905C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__8S19905C3__9S19905C14[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C3__9S19905C14[] = {
  0,
  ABISELECT(208,124),
  ABISELECT(208,124),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19905C3D1Ev,_ZThn8_N8S19905C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19905C3D0Ev,_ZThn8_N8S19905C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__A__8S19905C3__9S19905C14[] = {
  ABISELECT(-224,-132),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void _ZN8S19905C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void _ZN8S19905C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C14[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void _ZN8S19905C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void _ZN8S19905C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C68S19905C4__9S19905C14[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C68S19905C4__9S19905C14[] = {
  0,
  ABISELECT(272,164),
  ABISELECT(272,164),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C4__9S19905C14[] = {
  0,
  ABISELECT(272,164),
  ABISELECT(272,164),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
static  VTT_ENTRY vtt_S19905C14[] = {
  {&(_ZTV9S19905C14[11]),  11,68},
  {&(_tg__ZTV9S19905C16__9S19905C14[7]),  7,9},
  {&(_tg__ZTV8S19905C4__9S19905C16__9S19905C14[5]),  5,7},
  {&(_tg__ZTV8S19905C7__9S19905C16__9S19905C14[4]),  4,6},
  {&(_tg__ZTV8S19905C7__9S19905C16__9S19905C14[4]),  4,6},
  {&(_ZTV9S19905C14[17]),  17,68},
  {&(_ZTV9S19905C14[17]),  17,68},
  {&(_ZTV9S19905C14[28]),  28,68},
  {&(_ZTV9S19905C14[45]),  45,68},
  {&(_ZTV9S19905C14[53]),  53,68},
  {&(_ZTV9S19905C14[66]),  66,68},
  {&(_ZTV9S19905C14[59]),  59,68},
  {&(_ZTV9S19905C14[35]),  35,68},
  {&(_tg__ZTV8S19905C7__9S19905C14[4]),  4,6},
  {&(_tg__ZTV8S19905C7__9S19905C14[4]),  4,6},
  {&(_tg__ZTV9S19905C15__9S19905C14[9]),  9,11},
  {&(_tg__ZTV8S19905C79S19905C15__A1__9S19905C14[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C79S19905C15__A1__9S19905C14[3]),  3,5},
  {&(_tg__ZTV8S19905C49S19905C15__A1__9S19905C14[5]),  5,7},
  {&(_tg__ZTV8S19905C68S19905C49S19905C15__A1__9S19905C14[5]),  5,7},
  {&(_tg__ZTV8S19905C7__8S19905C68S19905C49S19905C15__A1__9S19905C14[4]),  4,6},
  {&(_tg__ZTV8S19905C7__8S19905C68S19905C49S19905C15__A1__9S19905C14[4]),  4,6},
  {&(_tg__ZTV8S19905C7__8S19905C49S19905C15__A1__9S19905C14[4]),  4,6},
  {&(_tg__ZTV8S19905C7__8S19905C49S19905C15__A1__9S19905C14[4]),  4,6},
  {&(_tg__ZTV8S19905C7__A1__9S19905C15__9S19905C14[4]),  4,6},
  {&(_tg__ZTV9S19905C12__9S19905C15__9S19905C14[8]),  8,10},
  {&(_tg__ZTV8S19905C3__9S19905C15__9S19905C14[6]),  6,8},
  {&(_tg__ZTV8S19905C4__9S19905C15__9S19905C14[5]),  5,7},
  {&(_tg__ZTV8S19905C7__A1__9S19905C15__9S19905C14[4]),  4,6},
  {&(_tg__ZTV8S19905C78S19905C3__A2__9S19905C15__9S19905C14[4]),  4,6},
  {&(_tg__ZTV8S19905C4__A__9S19905C15__9S19905C14[5]),  5,7},
  {&(_tg__ZTV9S19905C12__9S19905C14[8]),  8,10},
  {&(_tg__ZTV8S19905C79S19905C12__A3__9S19905C14[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C79S19905C12__A3__9S19905C14[3]),  3,5},
  {&(_tg__ZTV8S19905C3__9S19905C12__9S19905C14[6]),  6,8},
  {&(_tg__ZTV8S19905C4__9S19905C12__9S19905C14[5]),  5,7},
  {&(_tg__ZTV8S19905C7__9S19905C12__9S19905C14[4]),  4,6},
  {&(_tg__ZTV8S19905C7__9S19905C12__9S19905C14[4]),  4,6},
  {&(_tg__ZTV8S19905C78S19905C3__A1__9S19905C12__9S19905C14[4]),  4,6},
  {&(_tg__ZTV8S19905C3__9S19905C14[5]),  5,7},
  {&(_tg__ZTV8S19905C78S19905C3__A2__9S19905C14[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C78S19905C3__A2__9S19905C14[3]),  3,5},
  {&(_tg__ZTV8S19905C4__8S19905C3__9S19905C14[5]),  5,7},
  {&(_tg__ZTV8S19905C7__8S19905C3__9S19905C14[4]),  4,6},
  {&(_tg__ZTV8S19905C7__8S19905C3__9S19905C14[4]),  4,6},
  {&(_tg__ZTV8S19905C7__A__8S19905C3__9S19905C14[4]),  4,6},
  {&(_tg__ZTV8S19905C4__9S19905C14[5]),  5,7},
  {&(_tg__ZTV8S19905C68S19905C4__9S19905C14[5]),  5,7},
  {&(_tg__ZTV8S19905C7__8S19905C68S19905C4__9S19905C14[4]),  4,6},
  {&(_tg__ZTV8S19905C7__8S19905C68S19905C4__9S19905C14[4]),  4,6},
  {&(_tg__ZTV8S19905C7__8S19905C4__9S19905C14[4]),  4,6},
  {&(_tg__ZTV8S19905C7__8S19905C4__9S19905C14[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19905C14[];
extern  VTBL_ENTRY _ZTV9S19905C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C14[];
static VTBL_ENTRY alt_thunk_names8[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C3D0Ev,_ZThn8_N8S19905C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C3D0Ev,_ZThn40_N8S19905C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C3D1Ev,_ZThn8_N8S19905C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C3D1Ev,_ZThn40_N8S19905C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19905C12D0Ev,_ZTv0_n24_N9S19905C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19905C12D0Ev,_ZThn28_N9S19905C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19905C12D1Ev,_ZTv0_n24_N9S19905C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19905C12D1Ev,_ZThn28_N9S19905C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19905C12D0Ev,_ZThn36_N9S19905C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19905C12D0Ev,_ZThn68_N9S19905C12D0Ev),
  (VTBL_ENTRY)_ZN9S19905C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19905C12D1Ev,_ZThn36_N9S19905C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19905C12D1Ev,_ZThn68_N9S19905C12D1Ev),
  (VTBL_ENTRY)_ZN9S19905C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19905C15D0Ev,_ZTv0_n24_N9S19905C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19905C15D0Ev,_ZThn96_N9S19905C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19905C15D1Ev,_ZTv0_n24_N9S19905C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19905C15D1Ev,_ZThn96_N9S19905C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev), // 
  (VTBL_ENTRY)_ZN8S19905C6D0Ev,
  (VTBL_ENTRY)_ZN8S19905C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev), // 
  (VTBL_ENTRY)_ZN8S19905C6D1Ev,
  (VTBL_ENTRY)_ZN8S19905C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19905C4D0Ev,
  (VTBL_ENTRY)_ZN8S19905C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19905C4D1Ev,
  (VTBL_ENTRY)_ZN8S19905C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19905C15D0Ev,_ZThn28_N9S19905C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S19905C15D0Ev,_ZThn104_N9S19905C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19905C15D0Ev,_ZThn136_N9S19905C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19905C15D0Ev,_ZThn68_N9S19905C15D0Ev),
  (VTBL_ENTRY)_ZN9S19905C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19905C15D1Ev,_ZThn28_N9S19905C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S19905C15D1Ev,_ZThn104_N9S19905C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19905C15D1Ev,_ZThn136_N9S19905C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19905C15D1Ev,_ZThn68_N9S19905C15D1Ev),
  (VTBL_ENTRY)_ZN9S19905C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19905C16D0Ev,_ZThn56_N9S19905C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S19905C16D0Ev,_ZThn220_N9S19905C16D0Ev),
  (VTBL_ENTRY)_ZN9S19905C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19905C16D1Ev,_ZThn56_N9S19905C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S19905C16D1Ev,_ZThn220_N9S19905C16D1Ev),
  (VTBL_ENTRY)_ZN9S19905C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19905C14D0Ev,_ZTv0_n24_N9S19905C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19905C14D0Ev,_ZThn180_N9S19905C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19905C14D1Ev,_ZTv0_n24_N9S19905C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19905C14D1Ev,_ZThn180_N9S19905C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S19905C14D0Ev,_ZThn220_N9S19905C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S19905C14D0Ev,_ZThn188_N9S19905C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19905C14D0Ev,_ZThn152_N9S19905C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S19905C14D0Ev,_ZThn112_N9S19905C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19905C14D0Ev,_ZThn84_N9S19905C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19905C14D0Ev,_ZThn56_N9S19905C14D0Ev),
  (VTBL_ENTRY)_ZN9S19905C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S19905C14D1Ev,_ZThn220_N9S19905C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S19905C14D1Ev,_ZThn188_N9S19905C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19905C14D1Ev,_ZThn152_N9S19905C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S19905C14D1Ev,_ZThn112_N9S19905C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19905C14D1Ev,_ZThn84_N9S19905C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19905C14D1Ev,_ZThn56_N9S19905C14D1Ev),
  (VTBL_ENTRY)_ZN9S19905C14D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19905C14 = {  "S19905C14", // class name
  bases_S19905C14, 21,
  &(vtc_S19905C14[0]), // expected_vtbl_contents
  &(vtt_S19905C14[0]), // expected_vtt_contents
  ABISELECT(432,260), // object size
  NSPAIRA(_ZTI9S19905C14),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19905C14),68, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19905C14),52, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names8,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19905C13  : virtual S5266C26 , S19905C14 , S5266C29 {
  virtual  ~S19905C13(); // _ZN9S19905C13D2Ev
  S19905C13(); // tgen
};
//SIG(-1 S19905C13) C1{ VBC2{ m} BC3{ VBC4{ VBC5{ vd m} FD Fc Fs[4]} VBC6{ VBC5 BC4 VBC7{ VBC8{ m} VBC9{ VBC10{ VBC5 BC11{ VBC5 VBC4 vd Fi} BC12{ m Fp} vd Fs FL Fp FL} BC12 BC5 BC4 vd Fi} BC4 vd Fs} BC10 Fp} VBC12 BC13{ BC2 VBC10 BC12 VBC8 vd FC11 Fs} vd Fi FC14{}} BC8 vd}


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

static void Test_S19905C13()
{
  extern Class_Descriptor cd_S19905C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,66)];
    init_test(&cd_S19905C13, buf);
    S19905C13 *dp, &lv = *(dp=new (buf) S19905C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,260), "sizeof(S19905C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19905C13)");
    /*is_ambiguous_... S19905C13::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*), ABISELECT(89,53), "S19905C13");
    /*is_ambiguous_... S19905C13::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*), ABISELECT(96,56), "S19905C13");
    /*is_ambiguous_... S19905C15::S19905C5_nt */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C15*), ABISELECT(96,56), "S19905C13");
    /*is_ambiguous_... S19905C15::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*)(S19905C15*), ABISELECT(96,56), "S19905C13");
    /*is_ambiguous_... S19905C13::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C4*), ABISELECT(96,56), "S19905C13");
    /*is_ambiguous_... S19905C13::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C6*)(S19905C4*), ABISELECT(96,56), "S19905C13");
    /*is_ambiguous_... S19905C3::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*)(S19905C3*), ABISELECT(96,56), "S19905C13");
    /*is_ambiguous_... S19905C12::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*)(S19905C12*), ABISELECT(96,56), "S19905C13");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C4*)(S19905C15*), ABISELECT(96,56), "S19905C13");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C6*)(S19905C4*)(S19905C15*), ABISELECT(96,56), "S19905C13");
    /*is_ambiguous_... S19905C14::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C14*), ABISELECT(96,56), "S19905C13");
    /*is_ambiguous_... S19905C13::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C6*)(S19905C4*), ABISELECT(96,56), "S19905C13");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C6*)(S19905C4*)(S19905C15*), ABISELECT(96,56), "S19905C13");
    /*is_ambiguous_... S19905C15::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C15*), ABISELECT(144,84), "S19905C13");
    check_base_class_offset(lv, (S5266C29*)(S19905C12*), ABISELECT(300,180), "S19905C13");
    check_base_class_offset(lv, (S5266C29*)(S19905C16*)(S19905C14*), ABISELECT(300,180), "S19905C13");
    /*is_ambiguous_... S19905C13::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C6*)(S19905C4*), ABISELECT(368,220), "S19905C13");
    /*is_ambiguous_... S19905C13::S19905C4 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C4*), ABISELECT(384,228), "S19905C13");
    check_base_class_offset(lv, (S19905C4*)(S19905C3*), ABISELECT(368,220), "S19905C13");
    check_base_class_offset(lv, (S19905C4*)(S19905C16*)(S19905C14*), ABISELECT(368,220), "S19905C13");
    /*is_ambiguous_... S19905C3::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C3*), ABISELECT(312,184), "S19905C13");
    /*is_ambiguous_... S19905C3::S19905C5_nt */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C3*), ABISELECT(304,180), "S19905C13");
    /*is_ambiguous_... S19905C3::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C3*), ABISELECT(320,188), "S19905C13");
    check_base_class_offset(lv, (S19905C3*)(S19905C12*), ABISELECT(304,180), "S19905C13");
    /*is_ambiguous_... S19905C12::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C12*), ABISELECT(256,152), "S19905C13");
    check_base_class_offset(lv, (S19905C12*)(S19905C15*), ABISELECT(256,152), "S19905C13");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C6*)(S19905C4*)(S19905C15*), ABISELECT(192,112), "S19905C13");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C4*)(S19905C15*), ABISELECT(208,120), "S19905C13");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C4*)(S19905C15*), ABISELECT(192,112), "S19905C13");
    check_base_class_offset(lv, (S19905C15*)(S19905C14*), ABISELECT(144,84), "S19905C13");
    /*is_ambiguous_... S19905C14::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C14*), ABISELECT(424,256), "S19905C13");
    check_base_class_offset(lv, (S5266C26*)(S19905C16*)(S19905C14*), 0, "S19905C13");
    /*is_ambiguous_... S19905C16::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C16*)(S19905C14*), ABISELECT(8,4), "S19905C13");
    check_base_class_offset(lv, (S19905C16*)(S19905C14*), 0, "S19905C13");
    check_base_class_offset(lv, (S19905C14*), 0, "S19905C13");
    /*is_ambiguous_... S19905C13::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*), 0, "S19905C13");
    test_class_info(&lv, &cd_S19905C13);
    dp->~S19905C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19905C13(Test_S19905C13, "S19905C13", ABISELECT(432,260));

#else // __cplusplus

extern void _ZN9S19905C13C1Ev();
extern void _ZN9S19905C13D2Ev();
Name_Map name_map_S19905C13[] = {
  NSPAIR(_ZN9S19905C13C1Ev),
  NSPAIR(_ZN9S19905C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19905C6;
extern VTBL_ENTRY _ZTI8S19905C6[];
extern  VTBL_ENTRY _ZTV8S19905C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C4;
extern VTBL_ENTRY _ZTI8S19905C4[];
extern  VTBL_ENTRY _ZTV8S19905C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C4[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C3;
extern VTBL_ENTRY _ZTI8S19905C3[];
extern  VTBL_ENTRY _ZTV8S19905C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C3[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C12;
extern VTBL_ENTRY _ZTI9S19905C12[];
extern  VTBL_ENTRY _ZTV9S19905C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C12[];
extern Class_Descriptor cd_S19905C6;
extern VTBL_ENTRY _ZTI8S19905C6[];
extern  VTBL_ENTRY _ZTV8S19905C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C4;
extern VTBL_ENTRY _ZTI8S19905C4[];
extern  VTBL_ENTRY _ZTV8S19905C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C4[];
extern Class_Descriptor cd_S19905C15;
extern VTBL_ENTRY _ZTI9S19905C15[];
extern  VTBL_ENTRY _ZTV9S19905C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C15[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C16;
extern VTBL_ENTRY _ZTI9S19905C16[];
extern  VTBL_ENTRY _ZTV9S19905C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C16[];
extern Class_Descriptor cd_S19905C14;
extern VTBL_ENTRY _ZTI9S19905C14[];
extern  VTBL_ENTRY _ZTV9S19905C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C14[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
static Base_Class bases_S19905C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C26,    ABISELECT(89,53), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19905C5_nt,    ABISELECT(96,56), //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
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19905C7,    ABISELECT(96,56), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19905C7,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S5266C29,    ABISELECT(300,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
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19905C6,    ABISELECT(368,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(384,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
    7, //immediately_derived
  0, 0},
  {&cd_S19905C4,    ABISELECT(368,220), //bcp->offset
    62, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(312,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
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19905C5_nt,    ABISELECT(304,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
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19905C7,    ABISELECT(320,188), //bcp->offset
    56, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19905C3,    ABISELECT(304,180), //bcp->offset
    48, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19905C7,    ABISELECT(256,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19905C12,    ABISELECT(256,152), //bcp->offset
    38, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19905C6,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S17777C6_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
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19905C4,    ABISELECT(192,112), //bcp->offset
    31, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19905C15,    ABISELECT(144,84), //bcp->offset
    20, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(424,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S17777C6_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
    21, //immediately_derived
  0, 0},
  {&cd_S19905C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19905C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S19905C13[];
extern void ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev)();
extern void _ZN9S19905C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev)();
extern void _ZN9S19905C13D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev)();
extern void ABISELECT(_ZThn96_N9S19905C13D1Ev,_ZThn56_N9S19905C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev)();
extern void ABISELECT(_ZThn96_N9S19905C13D0Ev,_ZThn56_N9S19905C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev)();
extern void ABISELECT(_ZThn144_N9S19905C13D1Ev,_ZThn84_N9S19905C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev)();
extern void ABISELECT(_ZThn144_N9S19905C13D0Ev,_ZThn84_N9S19905C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev)();
extern void ABISELECT(_ZThn192_N9S19905C13D1Ev,_ZThn112_N9S19905C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev)();
extern void ABISELECT(_ZThn192_N9S19905C13D0Ev,_ZThn112_N9S19905C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev)();
extern void ABISELECT(_ZThn256_N9S19905C13D1Ev,_ZThn152_N9S19905C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev)();
extern void ABISELECT(_ZThn256_N9S19905C13D0Ev,_ZThn152_N9S19905C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19905C13D1Ev,_ZTv0_n24_N9S19905C13D1Ev)();
extern void ABISELECT(_ZThn304_N9S19905C13D1Ev,_ZThn180_N9S19905C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19905C13D0Ev,_ZTv0_n24_N9S19905C13D0Ev)();
extern void ABISELECT(_ZThn304_N9S19905C13D0Ev,_ZThn180_N9S19905C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev)();
extern void ABISELECT(_ZThn320_N9S19905C13D1Ev,_ZThn188_N9S19905C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev)();
extern void ABISELECT(_ZThn320_N9S19905C13D0Ev,_ZThn188_N9S19905C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev)();
extern void ABISELECT(_ZThn368_N9S19905C13D1Ev,_ZThn220_N9S19905C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev)();
extern void ABISELECT(_ZThn368_N9S19905C13D0Ev,_ZThn220_N9S19905C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19905C13[] = {
  ABISELECT(89,53),
  ABISELECT(424,256),
  ABISELECT(304,180),
  ABISELECT(256,152),
  ABISELECT(144,84),
  ABISELECT(300,180),
  ABISELECT(96,56),
  ABISELECT(96,56),
  ABISELECT(368,220),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev),
  0,
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S19905C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(224,136),
  ABISELECT(160,96),
  ABISELECT(156,96),
  ABISELECT(112,68),
  ABISELECT(-48,-28),
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19905C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev),
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI9S19905C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev),
  ABISELECT(-160,-96),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(44,28),
  ABISELECT(-160,-96),
  ABISELECT(-256,-152),
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI9S19905C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev),
  ABISELECT(-304,-180),
  ABISELECT(-208,-124),
  ABISELECT(-208,-124),
  ABISELECT(64,40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI9S19905C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C13D1Ev,_ZTv0_n24_N9S19905C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C13D0Ev,_ZTv0_n24_N9S19905C13D0Ev),
  ABISELECT(-224,-132),
  ABISELECT(-320,-188),
  ABISELECT(-320,-188),
  (VTBL_ENTRY)&(_ZTI9S19905C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-368,-220),
  ABISELECT(-368,-220),
  (VTBL_ENTRY)&(_ZTI9S19905C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S19905C13[];
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void _ZN9S19905C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
extern void _ZN9S19905C14D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C14__9S19905C13[] = {
  ABISELECT(424,256),
  ABISELECT(304,180),
  ABISELECT(256,152),
  ABISELECT(144,84),
  ABISELECT(300,180),
  ABISELECT(96,56),
  ABISELECT(96,56),
  ABISELECT(368,220),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev)();
extern void _ZN9S19905C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev)();
extern void _ZN9S19905C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C169S19905C14__9S19905C13[] = {
  ABISELECT(300,180),
  ABISELECT(96,56),
  ABISELECT(96,56),
  ABISELECT(368,220),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev)();
extern void ABISELECT(_ZThn368_N9S19905C16D1Ev,_ZThn220_N9S19905C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev)();
extern void ABISELECT(_ZThn368_N9S19905C16D0Ev,_ZThn220_N9S19905C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C169S19905C14__9S19905C13[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-368,-220),
  ABISELECT(-368,-220),
  (VTBL_ENTRY)&(_ZTI9S19905C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev)();
extern void ABISELECT(_ZThn96_N9S19905C16D1Ev,_ZThn56_N9S19905C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev)();
extern void ABISELECT(_ZThn96_N9S19905C16D0Ev,_ZThn56_N9S19905C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__9S19905C169S19905C14__9S19905C13[] = {
  0,
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S19905C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void ABISELECT(_ZThn96_N9S19905C14D1Ev,_ZThn56_N9S19905C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
extern void ABISELECT(_ZThn96_N9S19905C14D0Ev,_ZThn56_N9S19905C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__9S19905C14__9S19905C13[] = {
  0,
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void ABISELECT(_ZThn144_N9S19905C14D1Ev,_ZThn84_N9S19905C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
extern void ABISELECT(_ZThn144_N9S19905C14D0Ev,_ZThn84_N9S19905C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C15__9S19905C14__9S19905C13[] = {
  ABISELECT(-48,-28),
  ABISELECT(224,136),
  ABISELECT(160,96),
  ABISELECT(156,96),
  ABISELECT(112,68),
  ABISELECT(-48,-28),
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void ABISELECT(_ZThn256_N9S19905C14D1Ev,_ZThn152_N9S19905C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
extern void ABISELECT(_ZThn256_N9S19905C14D0Ev,_ZThn152_N9S19905C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C12__9S19905C14__9S19905C13[] = {
  ABISELECT(-160,-96),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(44,28),
  ABISELECT(-160,-96),
  ABISELECT(-256,-152),
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19905C14D1Ev,_ZTv0_n24_N9S19905C14D1Ev)();
extern void ABISELECT(_ZThn304_N9S19905C14D1Ev,_ZThn180_N9S19905C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19905C14D0Ev,_ZTv0_n24_N9S19905C14D0Ev)();
extern void ABISELECT(_ZThn304_N9S19905C14D0Ev,_ZThn180_N9S19905C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C3__9S19905C14__9S19905C13[] = {
  ABISELECT(-304,-180),
  ABISELECT(-208,-124),
  ABISELECT(-208,-124),
  ABISELECT(64,40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C14D1Ev,_ZTv0_n24_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C14D0Ev,_ZTv0_n24_N9S19905C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void ABISELECT(_ZThn368_N9S19905C14D1Ev,_ZThn220_N9S19905C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
extern void ABISELECT(_ZThn368_N9S19905C14D0Ev,_ZThn220_N9S19905C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C14__9S19905C13[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-368,-220),
  ABISELECT(-368,-220),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void ABISELECT(_ZThn320_N9S19905C14D1Ev,_ZThn188_N9S19905C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
extern void ABISELECT(_ZThn320_N9S19905C14D0Ev,_ZThn188_N9S19905C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C3__A2__9S19905C14__9S19905C13[] = {
  ABISELECT(-224,-132),
  ABISELECT(-320,-188),
  ABISELECT(-320,-188),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void ABISELECT(_ZThn192_N9S19905C14D1Ev,_ZThn112_N9S19905C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
extern void ABISELECT(_ZThn192_N9S19905C14D0Ev,_ZThn112_N9S19905C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C49S19905C15__A1__9S19905C14__9S19905C13[] = {
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__9S19905C13[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void _ZN9S19905C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
extern void _ZN9S19905C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C15__9S19905C13[] = {
  ABISELECT(-48,-28),
  ABISELECT(224,136),
  ABISELECT(160,96),
  ABISELECT(156,96),
  ABISELECT(112,68),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C79S19905C15__A1__9S19905C13[] = {
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C79S19905C15__A1__9S19905C13[] = {
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void _ZN8S19905C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void _ZN8S19905C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C49S19905C15__A1__9S19905C13[] = {
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void _ZN8S19905C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void _ZN8S19905C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C68S19905C49S19905C15__A1__9S19905C13[] = {
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C68S19905C49S19905C15__A1__9S19905C13[] = {
  0,
  ABISELECT(96,56),
  ABISELECT(96,56),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C49S19905C15__A1__9S19905C13[] = {
  0,
  ABISELECT(96,56),
  ABISELECT(96,56),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__A1__9S19905C15__9S19905C13[] = {
  0,
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void ABISELECT(_ZThn112_N9S19905C15D1Ev,_ZThn68_N9S19905C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
extern void ABISELECT(_ZThn112_N9S19905C15D0Ev,_ZThn68_N9S19905C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C12__9S19905C15__9S19905C13[] = {
  ABISELECT(-160,-96),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(44,28),
  ABISELECT(-160,-96),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19905C15D1Ev,_ZTv0_n24_N9S19905C15D1Ev)();
extern void ABISELECT(_ZThn160_N9S19905C15D1Ev,_ZThn96_N9S19905C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19905C15D0Ev,_ZTv0_n24_N9S19905C15D0Ev)();
extern void ABISELECT(_ZThn160_N9S19905C15D0Ev,_ZThn96_N9S19905C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C3__9S19905C15__9S19905C13[] = {
  ABISELECT(-160,-96),
  ABISELECT(-208,-124),
  ABISELECT(-208,-124),
  ABISELECT(64,40),
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C15D1Ev,_ZTv0_n24_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C15D0Ev,_ZTv0_n24_N9S19905C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void ABISELECT(_ZThn224_N9S19905C15D1Ev,_ZThn136_N9S19905C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
extern void ABISELECT(_ZThn224_N9S19905C15D0Ev,_ZThn136_N9S19905C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C15__9S19905C13[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-224,-136),
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void ABISELECT(_ZThn176_N9S19905C15D1Ev,_ZThn104_N9S19905C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
extern void ABISELECT(_ZThn176_N9S19905C15D0Ev,_ZThn104_N9S19905C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C3__A2__9S19905C15__9S19905C13[] = {
  ABISELECT(-224,-132),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void ABISELECT(_ZThn48_N9S19905C15D1Ev,_ZThn28_N9S19905C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
extern void ABISELECT(_ZThn48_N9S19905C15D0Ev,_ZThn28_N9S19905C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__A__9S19905C15__9S19905C13[] = {
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void _ZN9S19905C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
extern void _ZN9S19905C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C12__9S19905C13[] = {
  ABISELECT(-160,-96),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(44,28),
  ABISELECT(-160,-96),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C79S19905C12__A3__9S19905C13[] = {
  ABISELECT(-160,-96),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C79S19905C12__A3__9S19905C13[] = {
  ABISELECT(160,96),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19905C12D1Ev,_ZTv0_n24_N9S19905C12D1Ev)();
extern void ABISELECT(_ZThn48_N9S19905C12D1Ev,_ZThn28_N9S19905C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19905C12D0Ev,_ZTv0_n24_N9S19905C12D0Ev)();
extern void ABISELECT(_ZThn48_N9S19905C12D0Ev,_ZThn28_N9S19905C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C3__9S19905C12__9S19905C13[] = {
  ABISELECT(-48,-28),
  ABISELECT(-208,-124),
  ABISELECT(-208,-124),
  ABISELECT(64,40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C12D1Ev,_ZTv0_n24_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C12D0Ev,_ZTv0_n24_N9S19905C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void ABISELECT(_ZThn112_N9S19905C12D1Ev,_ZThn68_N9S19905C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
extern void ABISELECT(_ZThn112_N9S19905C12D0Ev,_ZThn68_N9S19905C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C12__9S19905C13[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__9S19905C12__9S19905C13[] = {
  0,
  ABISELECT(160,96),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void ABISELECT(_ZThn64_N9S19905C12D1Ev,_ZThn36_N9S19905C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
extern void ABISELECT(_ZThn64_N9S19905C12D0Ev,_ZThn36_N9S19905C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C3__A1__9S19905C12__9S19905C13[] = {
  ABISELECT(-224,-132),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
};
extern void _ZN8S19905C3D1Ev();
extern void _ZN8S19905C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19905C3__9S19905C13[] = {
  ABISELECT(-208,-124),
  ABISELECT(-208,-124),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&_ZN8S19905C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19905C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C3__A2__9S19905C13[] = {
  ABISELECT(-224,-132),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C78S19905C3__A2__9S19905C13[] = {
  ABISELECT(224,132),
  ABISELECT(224,132),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S19905C3D1Ev,_ZThn40_N8S19905C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
extern void ABISELECT(_ZThn64_N8S19905C3D0Ev,_ZThn40_N8S19905C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__8S19905C3__9S19905C13[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C3__9S19905C13[] = {
  0,
  ABISELECT(208,124),
  ABISELECT(208,124),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19905C3D1Ev,_ZThn8_N8S19905C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19905C3D0Ev,_ZThn8_N8S19905C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__A__8S19905C3__9S19905C13[] = {
  ABISELECT(-224,-132),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void _ZN8S19905C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void _ZN8S19905C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C13[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void _ZN8S19905C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void _ZN8S19905C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C68S19905C4__9S19905C13[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C68S19905C4__9S19905C13[] = {
  0,
  ABISELECT(272,164),
  ABISELECT(272,164),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C4__9S19905C13[] = {
  0,
  ABISELECT(272,164),
  ABISELECT(272,164),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
static  VTT_ENTRY vtt_S19905C13[] = {
  {&(_ZTV9S19905C13[12]),  12,69},
  {&(_tg__ZTV9S19905C14__9S19905C13[11]),  11,13},
  {&(_tg__ZTV9S19905C169S19905C14__9S19905C13[7]),  7,9},
  {&(_tg__ZTV8S19905C4__9S19905C169S19905C14__9S19905C13[5]),  5,7},
  {&(_tg__ZTV8S19905C7__9S19905C169S19905C14__9S19905C13[4]),  4,6},
  {&(_tg__ZTV8S19905C7__9S19905C169S19905C14__9S19905C13[4]),  4,6},
  {&(_tg__ZTV8S19905C7__9S19905C14__9S19905C13[4]),  4,6},
  {&(_tg__ZTV8S19905C7__9S19905C14__9S19905C13[4]),  4,6},
  {&(_tg__ZTV9S19905C15__9S19905C14__9S19905C13[9]),  9,11},
  {&(_tg__ZTV9S19905C12__9S19905C14__9S19905C13[8]),  8,10},
  {&(_tg__ZTV8S19905C3__9S19905C14__9S19905C13[6]),  6,8},
  {&(_tg__ZTV8S19905C4__9S19905C14__9S19905C13[5]),  5,7},
  {&(_tg__ZTV8S19905C78S19905C3__A2__9S19905C14__9S19905C13[4]),  4,6},
  {&(_tg__ZTV8S19905C49S19905C15__A1__9S19905C14__9S19905C13[5]),  5,7},
  {&(_ZTV9S19905C13[18]),  18,69},
  {&(_ZTV9S19905C13[18]),  18,69},
  {&(_ZTV9S19905C13[29]),  29,69},
  {&(_ZTV9S19905C13[46]),  46,69},
  {&(_ZTV9S19905C13[54]),  54,69},
  {&(_ZTV9S19905C13[67]),  67,69},
  {&(_ZTV9S19905C13[60]),  60,69},
  {&(_ZTV9S19905C13[36]),  36,69},
  {&(_tg__ZTV8S19905C7__9S19905C13[4]),  4,6},
  {&(_tg__ZTV8S19905C7__9S19905C13[4]),  4,6},
  {&(_tg__ZTV9S19905C15__9S19905C13[9]),  9,11},
  {&(_tg__ZTV8S19905C79S19905C15__A1__9S19905C13[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C79S19905C15__A1__9S19905C13[3]),  3,5},
  {&(_tg__ZTV8S19905C49S19905C15__A1__9S19905C13[5]),  5,7},
  {&(_tg__ZTV8S19905C68S19905C49S19905C15__A1__9S19905C13[5]),  5,7},
  {&(_tg__ZTV8S19905C7__8S19905C68S19905C49S19905C15__A1__9S19905C13[4]),  4,6},
  {&(_tg__ZTV8S19905C7__8S19905C68S19905C49S19905C15__A1__9S19905C13[4]),  4,6},
  {&(_tg__ZTV8S19905C7__8S19905C49S19905C15__A1__9S19905C13[4]),  4,6},
  {&(_tg__ZTV8S19905C7__8S19905C49S19905C15__A1__9S19905C13[4]),  4,6},
  {&(_tg__ZTV8S19905C7__A1__9S19905C15__9S19905C13[4]),  4,6},
  {&(_tg__ZTV9S19905C12__9S19905C15__9S19905C13[8]),  8,10},
  {&(_tg__ZTV8S19905C3__9S19905C15__9S19905C13[6]),  6,8},
  {&(_tg__ZTV8S19905C4__9S19905C15__9S19905C13[5]),  5,7},
  {&(_tg__ZTV8S19905C7__A1__9S19905C15__9S19905C13[4]),  4,6},
  {&(_tg__ZTV8S19905C78S19905C3__A2__9S19905C15__9S19905C13[4]),  4,6},
  {&(_tg__ZTV8S19905C4__A__9S19905C15__9S19905C13[5]),  5,7},
  {&(_tg__ZTV9S19905C12__9S19905C13[8]),  8,10},
  {&(_tg__ZTV8S19905C79S19905C12__A3__9S19905C13[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C79S19905C12__A3__9S19905C13[3]),  3,5},
  {&(_tg__ZTV8S19905C3__9S19905C12__9S19905C13[6]),  6,8},
  {&(_tg__ZTV8S19905C4__9S19905C12__9S19905C13[5]),  5,7},
  {&(_tg__ZTV8S19905C7__9S19905C12__9S19905C13[4]),  4,6},
  {&(_tg__ZTV8S19905C7__9S19905C12__9S19905C13[4]),  4,6},
  {&(_tg__ZTV8S19905C78S19905C3__A1__9S19905C12__9S19905C13[4]),  4,6},
  {&(_tg__ZTV8S19905C3__9S19905C13[5]),  5,7},
  {&(_tg__ZTV8S19905C78S19905C3__A2__9S19905C13[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C78S19905C3__A2__9S19905C13[3]),  3,5},
  {&(_tg__ZTV8S19905C4__8S19905C3__9S19905C13[5]),  5,7},
  {&(_tg__ZTV8S19905C7__8S19905C3__9S19905C13[4]),  4,6},
  {&(_tg__ZTV8S19905C7__8S19905C3__9S19905C13[4]),  4,6},
  {&(_tg__ZTV8S19905C7__A__8S19905C3__9S19905C13[4]),  4,6},
  {&(_tg__ZTV8S19905C4__9S19905C13[5]),  5,7},
  {&(_tg__ZTV8S19905C68S19905C4__9S19905C13[5]),  5,7},
  {&(_tg__ZTV8S19905C7__8S19905C68S19905C4__9S19905C13[4]),  4,6},
  {&(_tg__ZTV8S19905C7__8S19905C68S19905C4__9S19905C13[4]),  4,6},
  {&(_tg__ZTV8S19905C7__8S19905C4__9S19905C13[4]),  4,6},
  {&(_tg__ZTV8S19905C7__8S19905C4__9S19905C13[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19905C13[];
extern  VTBL_ENTRY _ZTV9S19905C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C13[];
static VTBL_ENTRY alt_thunk_names9[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C3D0Ev,_ZThn8_N8S19905C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C3D0Ev,_ZThn40_N8S19905C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C3D1Ev,_ZThn8_N8S19905C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C3D1Ev,_ZThn40_N8S19905C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19905C12D0Ev,_ZTv0_n24_N9S19905C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19905C12D0Ev,_ZThn28_N9S19905C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19905C12D1Ev,_ZTv0_n24_N9S19905C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19905C12D1Ev,_ZThn28_N9S19905C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19905C12D0Ev,_ZThn36_N9S19905C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19905C12D0Ev,_ZThn68_N9S19905C12D0Ev),
  (VTBL_ENTRY)_ZN9S19905C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19905C12D1Ev,_ZThn36_N9S19905C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19905C12D1Ev,_ZThn68_N9S19905C12D1Ev),
  (VTBL_ENTRY)_ZN9S19905C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19905C15D0Ev,_ZTv0_n24_N9S19905C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19905C15D0Ev,_ZThn96_N9S19905C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19905C15D1Ev,_ZTv0_n24_N9S19905C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19905C15D1Ev,_ZThn96_N9S19905C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev), // 
  (VTBL_ENTRY)_ZN8S19905C6D0Ev,
  (VTBL_ENTRY)_ZN8S19905C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev), // 
  (VTBL_ENTRY)_ZN8S19905C6D1Ev,
  (VTBL_ENTRY)_ZN8S19905C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19905C4D0Ev,
  (VTBL_ENTRY)_ZN8S19905C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19905C4D1Ev,
  (VTBL_ENTRY)_ZN8S19905C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19905C15D0Ev,_ZThn28_N9S19905C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S19905C15D0Ev,_ZThn104_N9S19905C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19905C15D0Ev,_ZThn136_N9S19905C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19905C15D0Ev,_ZThn68_N9S19905C15D0Ev),
  (VTBL_ENTRY)_ZN9S19905C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19905C15D1Ev,_ZThn28_N9S19905C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S19905C15D1Ev,_ZThn104_N9S19905C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19905C15D1Ev,_ZThn136_N9S19905C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19905C15D1Ev,_ZThn68_N9S19905C15D1Ev),
  (VTBL_ENTRY)_ZN9S19905C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19905C14D0Ev,_ZTv0_n24_N9S19905C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19905C14D0Ev,_ZThn180_N9S19905C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19905C14D1Ev,_ZTv0_n24_N9S19905C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19905C14D1Ev,_ZThn180_N9S19905C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19905C16D0Ev,_ZThn56_N9S19905C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S19905C16D0Ev,_ZThn220_N9S19905C16D0Ev),
  (VTBL_ENTRY)_ZN9S19905C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19905C16D1Ev,_ZThn56_N9S19905C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S19905C16D1Ev,_ZThn220_N9S19905C16D1Ev),
  (VTBL_ENTRY)_ZN9S19905C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S19905C14D0Ev,_ZThn112_N9S19905C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S19905C14D0Ev,_ZThn188_N9S19905C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S19905C14D0Ev,_ZThn220_N9S19905C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19905C14D0Ev,_ZThn152_N9S19905C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19905C14D0Ev,_ZThn84_N9S19905C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19905C14D0Ev,_ZThn56_N9S19905C14D0Ev),
  (VTBL_ENTRY)_ZN9S19905C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S19905C14D1Ev,_ZThn112_N9S19905C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S19905C14D1Ev,_ZThn188_N9S19905C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S19905C14D1Ev,_ZThn220_N9S19905C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19905C14D1Ev,_ZThn152_N9S19905C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19905C14D1Ev,_ZThn84_N9S19905C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19905C14D1Ev,_ZThn56_N9S19905C14D1Ev),
  (VTBL_ENTRY)_ZN9S19905C14D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19905C13D0Ev,_ZTv0_n24_N9S19905C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19905C13D0Ev,_ZThn180_N9S19905C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19905C13D1Ev,_ZTv0_n24_N9S19905C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19905C13D1Ev,_ZThn180_N9S19905C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S19905C13D0Ev,_ZThn220_N9S19905C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S19905C13D0Ev,_ZThn188_N9S19905C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19905C13D0Ev,_ZThn152_N9S19905C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S19905C13D0Ev,_ZThn112_N9S19905C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19905C13D0Ev,_ZThn84_N9S19905C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19905C13D0Ev,_ZThn56_N9S19905C13D0Ev),
  (VTBL_ENTRY)_ZN9S19905C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S19905C13D1Ev,_ZThn220_N9S19905C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S19905C13D1Ev,_ZThn188_N9S19905C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19905C13D1Ev,_ZThn152_N9S19905C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S19905C13D1Ev,_ZThn112_N9S19905C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19905C13D1Ev,_ZThn84_N9S19905C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19905C13D1Ev,_ZThn56_N9S19905C13D1Ev),
  (VTBL_ENTRY)_ZN9S19905C13D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19905C13 = {  "S19905C13", // class name
  bases_S19905C13, 24,
  &(vtc_S19905C13[0]), // expected_vtbl_contents
  &(vtt_S19905C13[0]), // expected_vtt_contents
  ABISELECT(432,260), // object size
  NSPAIRA(_ZTI9S19905C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19905C13),69, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19905C13),61, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names9,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19905C9  : virtual S19905C5_nt , virtual S19905C10 , virtual S17777C6_nt , virtual S19905C13 , S5266C26 {
  ~S19905C9(); // tgen
  S19905C9(); // tgen
};
//SIG(-1 S19905C9) C1{ VBC2{ vd m} VBC3{ VBC4{ VBC2 FD Fc Fs[4]} VBC5{ VBC2 VBC4 vd Fi} VBC6{ m} VBC7{ VBC8{ m} VBC9{ VBC10{ VBC2 BC5 BC11{ m Fp} vd Fs FL Fp FL} BC11 BC2 BC4 vd Fi} BC4 vd Fs} BC10 vd FC9 Fi Fs} VBC11 VBC12{ VBC6 BC13{ VBC4 VBC14{ VBC2 BC4 VBC7 BC10 Fp} VBC11 BC15{ BC6 VBC10 BC11 VBC8 vd FC5 Fs} vd Fi FC16{}} BC8 vd} BC6}


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

static void Test_S19905C9()
{
  extern Class_Descriptor cd_S19905C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(46,106)];
    init_test(&cd_S19905C9, buf);
    S19905C9 *dp, &lv = *(dp=new (buf) S19905C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(720,420), "sizeof(S19905C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19905C9)");
    /*is_ambiguous_... S19905C9::S19905C5_nt */ AMB_check_base_class_offset(lv, (S19905C5_nt*), 0, "S19905C9");
    /*is_ambiguous_... S19905C9::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*), 0, "S19905C9");
    /*is_ambiguous_... S19905C9::S19905C6 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C6*), 0, "S19905C9");
    /*is_ambiguous_... S19905C9::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C4*), 0, "S19905C9");
    /*is_ambiguous_... S19905C9::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C6*)(S19905C4*), 0, "S19905C9");
    /*is_ambiguous_... S19905C3::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*)(S19905C3*), 0, "S19905C9");
    /*is_ambiguous_... S19905C12::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*)(S19905C12*), 0, "S19905C9");
    /*is_ambiguous_... S19905C10::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C4*)(S19905C10*), 0, "S19905C9");
    /*is_ambiguous_... S19905C10::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C6*)(S19905C4*)(S19905C10*), 0, "S19905C9");
    /*is_ambiguous_... S19905C15::S19905C5_nt */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C15*), 0, "S19905C9");
    /*is_ambiguous_... S19905C15::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*)(S19905C15*), 0, "S19905C9");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C4*)(S19905C15*), 0, "S19905C9");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C6*)(S19905C4*)(S19905C15*), 0, "S19905C9");
    /*is_ambiguous_... S19905C10::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C10*), ABISELECT(272,152), "S19905C9");
    /*is_ambiguous_... S19905C9::S19905C6 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C6*), ABISELECT(272,152), "S19905C9");
    /*is_ambiguous_... S19905C9::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C6*)(S19905C4*), ABISELECT(272,152), "S19905C9");
    /*is_ambiguous_... S19905C10::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C6*)(S19905C4*)(S19905C10*), ABISELECT(272,152), "S19905C9");
    /*is_ambiguous_... S19905C14::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C14*)(S19905C13*), ABISELECT(272,152), "S19905C9");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C6*)(S19905C4*)(S19905C15*), ABISELECT(272,152), "S19905C9");
    /*is_ambiguous_... S19905C10::S19905C6 */ AMB_check_base_class_offset(lv, (S19905C6*)(S19905C10*), ABISELECT(320,180), "S19905C9");
    check_base_class_offset(lv, (S5266C26*)(S19905C10*), ABISELECT(332,188), "S19905C9");
    /*is_ambiguous_... S19905C13::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S19905C13*), ABISELECT(332,188), "S19905C9");
    check_base_class_offset(lv, (S5266C29*)(S19905C12*), 0, "S19905C9");
    check_base_class_offset(lv, (S5266C29*)(S19905C16*)(S19905C14*)(S19905C13*), 0, "S19905C9");
    /*is_ambiguous_... S19905C9::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C6*)(S19905C4*), ABISELECT(448,256), "S19905C9");
    /*is_ambiguous_... S19905C9::S19905C4 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C4*), ABISELECT(464,264), "S19905C9");
    check_base_class_offset(lv, (S19905C4*)(S19905C3*), ABISELECT(448,256), "S19905C9");
    check_base_class_offset(lv, (S19905C4*)(S19905C16*)(S19905C14*)(S19905C13*), ABISELECT(448,256), "S19905C9");
    /*is_ambiguous_... S19905C3::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C3*), ABISELECT(392,220), "S19905C9");
    /*is_ambiguous_... S19905C3::S19905C5_nt */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C3*), ABISELECT(384,216), "S19905C9");
    /*is_ambiguous_... S19905C3::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C3*), ABISELECT(400,224), "S19905C9");
    check_base_class_offset(lv, (S19905C3*)(S19905C12*), ABISELECT(384,216), "S19905C9");
    /*is_ambiguous_... S19905C12::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C12*), ABISELECT(336,188), "S19905C9");
    check_base_class_offset(lv, (S19905C12*)(S19905C10*), ABISELECT(336,188), "S19905C9");
    check_base_class_offset(lv, (S19905C12*)(S19905C15*), ABISELECT(336,188), "S19905C9");
    /*is_ambiguous_... S19905C10::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C6*)(S19905C4*)(S19905C10*), ABISELECT(16,4), "S19905C9");
    /*is_ambiguous_... S19905C10::S19905C4 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C4*)(S19905C10*), ABISELECT(32,12), "S19905C9");
    /*is_ambiguous_... S19905C10::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C4*)(S19905C10*), ABISELECT(16,4), "S19905C9");
    check_base_class_offset(lv, (S19905C10*), ABISELECT(16,4), "S19905C9");
    /*is_ambiguous_... S19905C9::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*), ABISELECT(504,292), "S19905C9");
    /*is_ambiguous_... S19905C14::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C14*)(S19905C13*), ABISELECT(504,292), "S19905C9");
    /*is_ambiguous_... S19905C15::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C15*), ABISELECT(608,352), "S19905C9");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C6*)(S19905C4*)(S19905C15*), ABISELECT(656,380), "S19905C9");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C4*)(S19905C15*), ABISELECT(672,388), "S19905C9");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C4*)(S19905C15*), ABISELECT(656,380), "S19905C9");
    check_base_class_offset(lv, (S19905C15*)(S19905C14*)(S19905C13*), ABISELECT(608,352), "S19905C9");
    check_base_class_offset(lv, (S5266C26*)(S19905C16*)(S19905C14*)(S19905C13*), ABISELECT(512,296), "S19905C9");
    /*is_ambiguous_... S19905C16::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C16*)(S19905C14*)(S19905C13*), ABISELECT(520,300), "S19905C9");
    check_base_class_offset(lv, (S19905C16*)(S19905C14*)(S19905C13*), ABISELECT(512,296), "S19905C9");
    check_base_class_offset(lv, (S19905C14*)(S19905C13*), ABISELECT(512,296), "S19905C9");
    /*is_ambiguous_... S19905C13::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S19905C13*), ABISELECT(512,296), "S19905C9");
    check_base_class_offset(lv, (S19905C13*), ABISELECT(512,296), "S19905C9");
    /*is_ambiguous_... S19905C9::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*), 0, "S19905C9");
    test_class_info(&lv, &cd_S19905C9);
    dp->~S19905C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19905C9(Test_S19905C9, "S19905C9", ABISELECT(720,420));

#else // __cplusplus

extern void _ZN8S19905C9C1Ev();
extern void _ZN8S19905C9D1Ev();
Name_Map name_map_S19905C9[] = {
  NSPAIR(_ZN8S19905C9C1Ev),
  NSPAIR(_ZN8S19905C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C6;
extern VTBL_ENTRY _ZTI8S19905C6[];
extern  VTBL_ENTRY _ZTV8S19905C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C6[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19905C6;
extern VTBL_ENTRY _ZTI8S19905C6[];
extern  VTBL_ENTRY _ZTV8S19905C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C4;
extern VTBL_ENTRY _ZTI8S19905C4[];
extern  VTBL_ENTRY _ZTV8S19905C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C4[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C3;
extern VTBL_ENTRY _ZTI8S19905C3[];
extern  VTBL_ENTRY _ZTV8S19905C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C3[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C12;
extern VTBL_ENTRY _ZTI9S19905C12[];
extern  VTBL_ENTRY _ZTV9S19905C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C12[];
extern Class_Descriptor cd_S19905C6;
extern VTBL_ENTRY _ZTI8S19905C6[];
extern  VTBL_ENTRY _ZTV8S19905C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C4;
extern VTBL_ENTRY _ZTI8S19905C4[];
extern  VTBL_ENTRY _ZTV8S19905C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C4[];
extern Class_Descriptor cd_S19905C10;
extern VTBL_ENTRY _ZTI9S19905C10[];
extern  VTBL_ENTRY _ZTV9S19905C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C10[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C6;
extern VTBL_ENTRY _ZTI8S19905C6[];
extern  VTBL_ENTRY _ZTV8S19905C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C4;
extern VTBL_ENTRY _ZTI8S19905C4[];
extern  VTBL_ENTRY _ZTV8S19905C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C4[];
extern Class_Descriptor cd_S19905C15;
extern VTBL_ENTRY _ZTI9S19905C15[];
extern  VTBL_ENTRY _ZTV9S19905C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C15[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C16;
extern VTBL_ENTRY _ZTI9S19905C16[];
extern  VTBL_ENTRY _ZTV9S19905C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C16[];
extern Class_Descriptor cd_S19905C14;
extern VTBL_ENTRY _ZTI9S19905C14[];
extern  VTBL_ENTRY _ZTV9S19905C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C14[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19905C13;
extern VTBL_ENTRY _ZTI9S19905C13[];
extern  VTBL_ENTRY _ZTV9S19905C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C13[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
static Base_Class bases_S19905C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C5_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},
  {&cd_S19905C7,    ABISELECT(272,152), //bcp->offset
    30, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19905C6,    ABISELECT(320,180), //bcp->offset
    36, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S5266C26,    ABISELECT(332,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19905C6,    ABISELECT(448,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(464,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19905C4,    ABISELECT(448,256), //bcp->offset
    67, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(392,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19905C5_nt,    ABISELECT(384,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
    11, //immediately_derived
  0, 0},
  {&cd_S19905C7,    ABISELECT(400,224), //bcp->offset
    61, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19905C3,    ABISELECT(384,216), //bcp->offset
    53, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19905C7,    ABISELECT(336,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19905C12,    ABISELECT(336,188), //bcp->offset
    43, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19905C6,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(32,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
    16, //immediately_derived
  0, 0},
  {&cd_S19905C4,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19905C10,    ABISELECT(16,4), //bcp->offset
    17, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S17777C6_nt,    ABISELECT(504,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19905C7,    ABISELECT(608,352), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19905C6,    ABISELECT(656,380), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    79, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(672,388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19905C4,    ABISELECT(656,380), //bcp->offset
    99, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19905C15,    ABISELECT(608,352), //bcp->offset
    88, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    75, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S5266C26,    ABISELECT(512,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(520,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
    26, //immediately_derived
  0, 0},
  {&cd_S19905C16,    ABISELECT(512,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //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
    27, //immediately_derived
  0, 0},
  {&cd_S19905C14,    ABISELECT(512,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S5266C29,    ABISELECT(512,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19905C13,    ABISELECT(512,296), //bcp->offset
    74, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S19905C9[];
extern void ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev)();
extern void _ZN8S19905C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev)();
extern void _ZN8S19905C9D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19905C9D1Ev,_ZThn4_N8S19905C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19905C9D0Ev,_ZThn4_N8S19905C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev)();
extern void ABISELECT(_ZThn272_N8S19905C9D1Ev,_ZThn152_N8S19905C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev)();
extern void ABISELECT(_ZThn272_N8S19905C9D0Ev,_ZThn152_N8S19905C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev)();
extern void ABISELECT(_ZThn320_N8S19905C9D1Ev,_ZThn180_N8S19905C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev)();
extern void ABISELECT(_ZThn320_N8S19905C9D0Ev,_ZThn180_N8S19905C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev)();
extern void ABISELECT(_ZThn336_N8S19905C9D1Ev,_ZThn188_N8S19905C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev)();
extern void ABISELECT(_ZThn336_N8S19905C9D0Ev,_ZThn188_N8S19905C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19905C9D1Ev,_ZTv0_n24_N8S19905C9D1Ev)();
extern void ABISELECT(_ZThn384_N8S19905C9D1Ev,_ZThn216_N8S19905C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19905C9D0Ev,_ZTv0_n24_N8S19905C9D0Ev)();
extern void ABISELECT(_ZThn384_N8S19905C9D0Ev,_ZThn216_N8S19905C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev)();
extern void ABISELECT(_ZThn400_N8S19905C9D1Ev,_ZThn224_N8S19905C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev)();
extern void ABISELECT(_ZThn400_N8S19905C9D0Ev,_ZThn224_N8S19905C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev)();
extern void ABISELECT(_ZThn448_N8S19905C9D1Ev,_ZThn256_N8S19905C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev)();
extern void ABISELECT(_ZThn448_N8S19905C9D0Ev,_ZThn256_N8S19905C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev)();
extern void ABISELECT(_ZThn512_N8S19905C9D1Ev,_ZThn296_N8S19905C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev)();
extern void ABISELECT(_ZThn512_N8S19905C9D0Ev,_ZThn296_N8S19905C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev)();
extern void ABISELECT(_ZThn608_N8S19905C9D1Ev,_ZThn352_N8S19905C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev)();
extern void ABISELECT(_ZThn608_N8S19905C9D0Ev,_ZThn352_N8S19905C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev)();
extern void ABISELECT(_ZThn656_N8S19905C9D1Ev,_ZThn380_N8S19905C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev)();
extern void ABISELECT(_ZThn656_N8S19905C9D0Ev,_ZThn380_N8S19905C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19905C9[] = {
  ABISELECT(608,352),
  ABISELECT(512,296),
  ABISELECT(504,292),
  ABISELECT(448,256),
  ABISELECT(384,216),
  0,
  ABISELECT(336,188),
  ABISELECT(332,188),
  ABISELECT(320,180),
  ABISELECT(272,152),
  ABISELECT(16,4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev),
  ABISELECT(432,252),
  ABISELECT(368,212),
  ABISELECT(-16,-4),
  ABISELECT(320,184),
  ABISELECT(316,184),
  ABISELECT(304,176),
  ABISELECT(256,148),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S19905C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev),
  ABISELECT(-272,-152),
  ABISELECT(-272,-152),
  ABISELECT(-272,-152),
  (VTBL_ENTRY)&(_ZTI8S19905C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-320,-180),
  ABISELECT(-320,-180),
  ABISELECT(-320,-180),
  (VTBL_ENTRY)&(_ZTI8S19905C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-336,-188),
  ABISELECT(-336,-188),
  ABISELECT(-336,-188),
  ABISELECT(-336,-188),
  (VTBL_ENTRY)&(_ZTI8S19905C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev),
  ABISELECT(-384,-216),
  ABISELECT(-112,-64),
  ABISELECT(-384,-216),
  ABISELECT(64,40),
  ABISELECT(-384,-216),
  (VTBL_ENTRY)&(_ZTI8S19905C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19905C9D1Ev,_ZTv0_n24_N8S19905C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19905C9D0Ev,_ZTv0_n24_N8S19905C9D0Ev),
  ABISELECT(-400,-224),
  ABISELECT(-400,-224),
  ABISELECT(-400,-224),
  (VTBL_ENTRY)&(_ZTI8S19905C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev),
  ABISELECT(-176,-104),
  ABISELECT(-448,-256),
  ABISELECT(-448,-256),
  ABISELECT(-448,-256),
  (VTBL_ENTRY)&(_ZTI8S19905C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev),
  ABISELECT(-180,-108),
  ABISELECT(-8,-4),
  ABISELECT(-128,-80),
  ABISELECT(-176,-108),
  ABISELECT(96,56),
  ABISELECT(-512,-296),
  ABISELECT(-240,-144),
  ABISELECT(-512,-296),
  ABISELECT(-64,-40),
  ABISELECT(-512,-296),
  ABISELECT(-512,-296),
  (VTBL_ENTRY)&(_ZTI8S19905C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev),
  ABISELECT(-336,-200),
  ABISELECT(-160,-96),
  ABISELECT(-224,-136),
  ABISELECT(-608,-352),
  ABISELECT(-272,-164),
  ABISELECT(-608,-352),
  ABISELECT(-608,-352),
  ABISELECT(-608,-352),
  (VTBL_ENTRY)&(_ZTI8S19905C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev),
  ABISELECT(-384,-228),
  ABISELECT(-656,-380),
  ABISELECT(-656,-380),
  ABISELECT(-656,-380),
  (VTBL_ENTRY)&(_ZTI8S19905C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S19905C9[];
extern void ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev)();
extern void _ZN9S19905C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev)();
extern void _ZN9S19905C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C10__8S19905C9[] = {
  ABISELECT(432,252),
  ABISELECT(368,212),
  ABISELECT(-16,-4),
  ABISELECT(320,184),
  ABISELECT(316,184),
  ABISELECT(304,176),
  ABISELECT(256,148),
  ABISELECT(-16,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void _ZN8S19905C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void _ZN8S19905C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C49S19905C10__A1__8S19905C9[] = {
  ABISELECT(256,148),
  ABISELECT(-16,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void _ZN8S19905C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void _ZN8S19905C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C68S19905C49S19905C10__A2__8S19905C9[] = {
  ABISELECT(256,148),
  ABISELECT(-16,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C68S19905C49S19905C10__A2__8S19905C9[] = {
  ABISELECT(16,4),
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZThn256_N8S19905C6D1Ev,_ZThn148_N8S19905C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void ABISELECT(_ZThn256_N8S19905C6D0Ev,_ZThn148_N8S19905C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C68S19905C49S19905C10__A2__8S19905C9[] = {
  ABISELECT(-272,-152),
  ABISELECT(-256,-148),
  ABISELECT(-256,-148),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C49S19905C10__A1__8S19905C9[] = {
  ABISELECT(16,4),
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZThn256_N8S19905C4D1Ev,_ZThn148_N8S19905C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void ABISELECT(_ZThn256_N8S19905C4D0Ev,_ZThn148_N8S19905C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C49S19905C10__A1__8S19905C9[] = {
  ABISELECT(-272,-152),
  ABISELECT(-256,-148),
  ABISELECT(-256,-148),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev)();
extern void ABISELECT(_ZThn256_N9S19905C10D1Ev,_ZThn148_N9S19905C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev)();
extern void ABISELECT(_ZThn256_N9S19905C10D0Ev,_ZThn148_N9S19905C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__9S19905C10__8S19905C9[] = {
  ABISELECT(-272,-152),
  ABISELECT(-256,-148),
  ABISELECT(-256,-148),
  (VTBL_ENTRY)&(_ZTI9S19905C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__9S19905C10__8S19905C9[] = {
  ABISELECT(16,4),
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI9S19905C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev)();
extern void ABISELECT(_ZThn304_N9S19905C10D1Ev,_ZThn176_N9S19905C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev)();
extern void ABISELECT(_ZThn304_N9S19905C10D0Ev,_ZThn176_N9S19905C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C6__9S19905C10__8S19905C9[] = {
  ABISELECT(-48,-28),
  ABISELECT(-320,-180),
  ABISELECT(-304,-176),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI9S19905C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev)();
extern void ABISELECT(_ZThn320_N9S19905C10D1Ev,_ZThn184_N9S19905C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev)();
extern void ABISELECT(_ZThn320_N9S19905C10D0Ev,_ZThn184_N9S19905C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C12__9S19905C10__8S19905C9[] = {
  ABISELECT(-64,-36),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-336,-188),
  ABISELECT(-336,-188),
  ABISELECT(-320,-184),
  ABISELECT(-320,-184),
  (VTBL_ENTRY)&(_ZTI9S19905C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19905C10D1Ev,_ZTv0_n24_N9S19905C10D1Ev)();
extern void ABISELECT(_ZThn368_N9S19905C10D1Ev,_ZThn212_N9S19905C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19905C10D0Ev,_ZTv0_n24_N9S19905C10D0Ev)();
extern void ABISELECT(_ZThn368_N9S19905C10D0Ev,_ZThn212_N9S19905C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C3__9S19905C10__8S19905C9[] = {
  ABISELECT(-368,-212),
  ABISELECT(-112,-64),
  ABISELECT(-384,-216),
  ABISELECT(64,40),
  ABISELECT(-368,-212),
  (VTBL_ENTRY)&(_ZTI9S19905C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C10D1Ev,_ZTv0_n24_N9S19905C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C10D0Ev,_ZTv0_n24_N9S19905C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev)();
extern void ABISELECT(_ZThn432_N9S19905C10D1Ev,_ZThn252_N9S19905C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev)();
extern void ABISELECT(_ZThn432_N9S19905C10D0Ev,_ZThn252_N9S19905C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C10__8S19905C9[] = {
  ABISELECT(-176,-104),
  ABISELECT(-448,-256),
  ABISELECT(-432,-252),
  ABISELECT(-432,-252),
  (VTBL_ENTRY)&(_ZTI9S19905C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev)();
extern void ABISELECT(_ZThn384_N9S19905C10D1Ev,_ZThn220_N9S19905C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev)();
extern void ABISELECT(_ZThn384_N9S19905C10D0Ev,_ZThn220_N9S19905C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C3__A1__9S19905C10__8S19905C9[] = {
  ABISELECT(-400,-224),
  ABISELECT(-384,-220),
  ABISELECT(-384,-220),
  (VTBL_ENTRY)&(_ZTI9S19905C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C9[] = {
  ABISELECT(-272,-152),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C7__8S19905C9[] = {
  ABISELECT(272,152),
  ABISELECT(272,152),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void _ZN8S19905C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void _ZN8S19905C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C6__8S19905C9[] = {
  ABISELECT(-48,-28),
  ABISELECT(-320,-180),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C6__8S19905C9[] = {
  ABISELECT(320,180),
  ABISELECT(320,180),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C6__8S19905C9[] = {
  ABISELECT(-272,-152),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void _ZN9S19905C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
extern void _ZN9S19905C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C12__8S19905C9[] = {
  ABISELECT(-64,-36),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-336,-188),
  ABISELECT(-336,-188),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C79S19905C12__A2__8S19905C9[] = {
  ABISELECT(-336,-188),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C79S19905C12__A2__8S19905C9[] = {
  ABISELECT(336,188),
  ABISELECT(336,188),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19905C12D1Ev,_ZTv0_n24_N9S19905C12D1Ev)();
extern void ABISELECT(_ZThn48_N9S19905C12D1Ev,_ZThn28_N9S19905C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19905C12D0Ev,_ZTv0_n24_N9S19905C12D0Ev)();
extern void ABISELECT(_ZThn48_N9S19905C12D0Ev,_ZThn28_N9S19905C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C3__9S19905C12__8S19905C9[] = {
  ABISELECT(-48,-28),
  ABISELECT(-112,-64),
  ABISELECT(-384,-216),
  ABISELECT(64,40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C12D1Ev,_ZTv0_n24_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C12D0Ev,_ZTv0_n24_N9S19905C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void ABISELECT(_ZThn112_N9S19905C12D1Ev,_ZThn68_N9S19905C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
extern void ABISELECT(_ZThn112_N9S19905C12D0Ev,_ZThn68_N9S19905C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C12__8S19905C9[] = {
  ABISELECT(-176,-104),
  ABISELECT(-448,-256),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__9S19905C12__8S19905C9[] = {
  ABISELECT(336,188),
  ABISELECT(336,188),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__9S19905C12__8S19905C9[] = {
  ABISELECT(-272,-152),
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void ABISELECT(_ZThn64_N9S19905C12D1Ev,_ZThn36_N9S19905C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
extern void ABISELECT(_ZThn64_N9S19905C12D0Ev,_ZThn36_N9S19905C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C3__A1__9S19905C12__8S19905C9[] = {
  ABISELECT(-400,-224),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
};
extern void _ZN8S19905C3D1Ev();
extern void _ZN8S19905C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19905C3__8S19905C9[] = {
  ABISELECT(-112,-64),
  ABISELECT(-384,-216),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&_ZN8S19905C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19905C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C3__A1__8S19905C9[] = {
  ABISELECT(-400,-224),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C78S19905C3__A1__8S19905C9[] = {
  ABISELECT(400,224),
  ABISELECT(400,224),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S19905C3D1Ev,_ZThn40_N8S19905C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
extern void ABISELECT(_ZThn64_N8S19905C3D0Ev,_ZThn40_N8S19905C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__8S19905C3__8S19905C9[] = {
  ABISELECT(-176,-104),
  ABISELECT(-448,-256),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C3__8S19905C9[] = {
  ABISELECT(384,216),
  ABISELECT(384,216),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C3__8S19905C9[] = {
  ABISELECT(-272,-152),
  ABISELECT(112,64),
  ABISELECT(112,64),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19905C3D1Ev,_ZThn8_N8S19905C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19905C3D0Ev,_ZThn8_N8S19905C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__A__8S19905C3__8S19905C9[] = {
  ABISELECT(-400,-224),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void _ZN8S19905C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void _ZN8S19905C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__8S19905C9[] = {
  ABISELECT(-176,-104),
  ABISELECT(-448,-256),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void _ZN8S19905C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void _ZN8S19905C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C68S19905C4__A1__8S19905C9[] = {
  ABISELECT(-176,-104),
  ABISELECT(-448,-256),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C68S19905C4__A1__8S19905C9[] = {
  ABISELECT(448,256),
  ABISELECT(448,256),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C68S19905C4__A1__8S19905C9[] = {
  ABISELECT(-272,-152),
  ABISELECT(176,104),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C4__8S19905C9[] = {
  ABISELECT(448,256),
  ABISELECT(448,256),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C4__8S19905C9[] = {
  ABISELECT(-272,-152),
  ABISELECT(176,104),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev)();
extern void _ZN9S19905C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev)();
extern void _ZN9S19905C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C13__8S19905C9[] = {
  ABISELECT(-180,-108),
  ABISELECT(-8,-4),
  ABISELECT(-128,-80),
  ABISELECT(-176,-108),
  ABISELECT(96,56),
  ABISELECT(-512,-296),
  ABISELECT(-240,-144),
  ABISELECT(-512,-296),
  ABISELECT(-64,-40),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void _ZN9S19905C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
extern void _ZN9S19905C14D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C149S19905C13__8S19905C9[] = {
  ABISELECT(-8,-4),
  ABISELECT(-128,-80),
  ABISELECT(-176,-108),
  ABISELECT(96,56),
  ABISELECT(-512,-296),
  ABISELECT(-240,-144),
  ABISELECT(-512,-296),
  ABISELECT(-64,-40),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev)();
extern void _ZN9S19905C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev)();
extern void _ZN9S19905C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C169S19905C149S19905C13__8S19905C9[] = {
  ABISELECT(-512,-296),
  ABISELECT(-240,-144),
  ABISELECT(-512,-296),
  ABISELECT(-64,-40),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C169S19905C149S19905C13__8S19905C9[] = {
  ABISELECT(-176,-104),
  ABISELECT(-448,-256),
  ABISELECT(64,40),
  ABISELECT(64,40),
  (VTBL_ENTRY)&(_ZTI9S19905C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__9S19905C169S19905C149S19905C13__8S19905C9[] = {
  ABISELECT(512,296),
  ABISELECT(512,296),
  (VTBL_ENTRY)&(_ZTI9S19905C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__9S19905C169S19905C149S19905C13__8S19905C9[] = {
  ABISELECT(-272,-152),
  ABISELECT(240,144),
  ABISELECT(240,144),
  (VTBL_ENTRY)&(_ZTI9S19905C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__9S19905C149S19905C13__8S19905C9[] = {
  ABISELECT(-272,-152),
  ABISELECT(240,144),
  ABISELECT(240,144),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__9S19905C149S19905C13__8S19905C9[] = {
  ABISELECT(512,296),
  ABISELECT(512,296),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void ABISELECT(_ZThn96_N9S19905C14D1Ev,_ZThn56_N9S19905C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
extern void ABISELECT(_ZThn96_N9S19905C14D0Ev,_ZThn56_N9S19905C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C15__9S19905C149S19905C13__8S19905C9[] = {
  ABISELECT(-336,-200),
  ABISELECT(-160,-96),
  ABISELECT(-224,-136),
  ABISELECT(-608,-352),
  ABISELECT(-272,-164),
  ABISELECT(-608,-352),
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C12__9S19905C149S19905C13__8S19905C9[] = {
  ABISELECT(-64,-36),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-336,-188),
  ABISELECT(-336,-188),
  ABISELECT(176,108),
  ABISELECT(176,108),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19905C14D1Ev,_ZTv0_n24_N9S19905C14D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19905C14D0Ev,_ZTv0_n24_N9S19905C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C3__9S19905C149S19905C13__8S19905C9[] = {
  ABISELECT(128,80),
  ABISELECT(-112,-64),
  ABISELECT(-384,-216),
  ABISELECT(64,40),
  ABISELECT(128,80),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C14D1Ev,_ZTv0_n24_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C14D0Ev,_ZTv0_n24_N9S19905C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C149S19905C13__8S19905C9[] = {
  ABISELECT(-176,-104),
  ABISELECT(-448,-256),
  ABISELECT(64,40),
  ABISELECT(64,40),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C3__A2__9S19905C149S19905C13__8S19905C9[] = {
  ABISELECT(-400,-224),
  ABISELECT(112,72),
  ABISELECT(112,72),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void ABISELECT(_ZThn144_N9S19905C14D1Ev,_ZThn84_N9S19905C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
extern void ABISELECT(_ZThn144_N9S19905C14D0Ev,_ZThn84_N9S19905C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C49S19905C15__A1__9S19905C149S19905C13__8S19905C9[] = {
  ABISELECT(-384,-228),
  ABISELECT(-656,-380),
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__9S19905C13__8S19905C9[] = {
  ABISELECT(-272,-152),
  ABISELECT(240,144),
  ABISELECT(240,144),
  (VTBL_ENTRY)&(_ZTI9S19905C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__9S19905C13__8S19905C9[] = {
  ABISELECT(512,296),
  ABISELECT(512,296),
  (VTBL_ENTRY)&(_ZTI9S19905C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev)();
extern void ABISELECT(_ZThn96_N9S19905C13D1Ev,_ZThn56_N9S19905C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev)();
extern void ABISELECT(_ZThn96_N9S19905C13D0Ev,_ZThn56_N9S19905C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C15__9S19905C13__8S19905C9[] = {
  ABISELECT(-336,-200),
  ABISELECT(-160,-96),
  ABISELECT(-224,-136),
  ABISELECT(-608,-352),
  ABISELECT(-272,-164),
  ABISELECT(-608,-352),
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S19905C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C12__9S19905C13__8S19905C9[] = {
  ABISELECT(-64,-36),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-336,-188),
  ABISELECT(-336,-188),
  ABISELECT(176,108),
  ABISELECT(176,108),
  (VTBL_ENTRY)&(_ZTI9S19905C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19905C13D1Ev,_ZTv0_n24_N9S19905C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19905C13D0Ev,_ZTv0_n24_N9S19905C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C3__9S19905C13__8S19905C9[] = {
  ABISELECT(128,80),
  ABISELECT(-112,-64),
  ABISELECT(-384,-216),
  ABISELECT(64,40),
  ABISELECT(128,80),
  (VTBL_ENTRY)&(_ZTI9S19905C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C13D1Ev,_ZTv0_n24_N9S19905C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C13D0Ev,_ZTv0_n24_N9S19905C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C13__8S19905C9[] = {
  ABISELECT(-176,-104),
  ABISELECT(-448,-256),
  ABISELECT(64,40),
  ABISELECT(64,40),
  (VTBL_ENTRY)&(_ZTI9S19905C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C3__A2__9S19905C13__8S19905C9[] = {
  ABISELECT(-400,-224),
  ABISELECT(112,72),
  ABISELECT(112,72),
  (VTBL_ENTRY)&(_ZTI9S19905C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev)();
extern void ABISELECT(_ZThn144_N9S19905C13D1Ev,_ZThn84_N9S19905C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev)();
extern void ABISELECT(_ZThn144_N9S19905C13D0Ev,_ZThn84_N9S19905C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C49S19905C15__A1__9S19905C13__8S19905C9[] = {
  ABISELECT(-384,-228),
  ABISELECT(-656,-380),
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19905C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void _ZN9S19905C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
extern void _ZN9S19905C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C15__8S19905C9[] = {
  ABISELECT(-336,-200),
  ABISELECT(-160,-96),
  ABISELECT(-224,-136),
  ABISELECT(-608,-352),
  ABISELECT(-272,-164),
  ABISELECT(-608,-352),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C79S19905C15__A3__8S19905C9[] = {
  ABISELECT(-608,-352),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C79S19905C15__A3__8S19905C9[] = {
  ABISELECT(608,352),
  ABISELECT(608,352),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void _ZN8S19905C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void _ZN8S19905C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C49S19905C15__A2__8S19905C9[] = {
  ABISELECT(-384,-228),
  ABISELECT(-656,-380),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void _ZN8S19905C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void _ZN8S19905C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C68S19905C49S19905C15__A3__8S19905C9[] = {
  ABISELECT(-384,-228),
  ABISELECT(-656,-380),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C68S19905C49S19905C15__A3__8S19905C9[] = {
  ABISELECT(656,380),
  ABISELECT(656,380),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C68S19905C49S19905C15__A3__8S19905C9[] = {
  ABISELECT(-272,-152),
  ABISELECT(384,228),
  ABISELECT(384,228),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C49S19905C15__A2__8S19905C9[] = {
  ABISELECT(656,380),
  ABISELECT(656,380),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C49S19905C15__A2__8S19905C9[] = {
  ABISELECT(-272,-152),
  ABISELECT(384,228),
  ABISELECT(384,228),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__9S19905C15__8S19905C9[] = {
  ABISELECT(608,352),
  ABISELECT(608,352),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C12__9S19905C15__8S19905C9[] = {
  ABISELECT(-64,-36),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-336,-188),
  ABISELECT(-336,-188),
  ABISELECT(272,164),
  ABISELECT(272,164),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19905C15D1Ev,_ZTv0_n24_N9S19905C15D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19905C15D0Ev,_ZTv0_n24_N9S19905C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C3__9S19905C15__8S19905C9[] = {
  ABISELECT(224,136),
  ABISELECT(-112,-64),
  ABISELECT(-384,-216),
  ABISELECT(64,40),
  ABISELECT(224,136),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C15D1Ev,_ZTv0_n24_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C15D0Ev,_ZTv0_n24_N9S19905C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C15__8S19905C9[] = {
  ABISELECT(-176,-104),
  ABISELECT(-448,-256),
  ABISELECT(160,96),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__A1__9S19905C15__8S19905C9[] = {
  ABISELECT(-272,-152),
  ABISELECT(336,200),
  ABISELECT(336,200),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C3__A2__9S19905C15__8S19905C9[] = {
  ABISELECT(-400,-224),
  ABISELECT(208,128),
  ABISELECT(208,128),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void ABISELECT(_ZThn48_N9S19905C15D1Ev,_ZThn28_N9S19905C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
extern void ABISELECT(_ZThn48_N9S19905C15D0Ev,_ZThn28_N9S19905C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__A__9S19905C15__8S19905C9[] = {
  ABISELECT(-384,-228),
  ABISELECT(-656,-380),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
};
static  VTT_ENTRY vtt_S19905C9[] = {
  {&(_ZTV8S19905C9[15]),  15,106},
  {&(_ZTV8S19905C9[15]),  15,106},
  {&(_ZTV8S19905C9[28]),  28,106},
  {&(_ZTV8S19905C9[34]),  34,106},
  {&(_ZTV8S19905C9[41]),  41,106},
  {&(_ZTV8S19905C9[51]),  51,106},
  {&(_ZTV8S19905C9[59]),  59,106},
  {&(_ZTV8S19905C9[72]),  72,106},
  {&(_ZTV8S19905C9[65]),  65,106},
  {&(_ZTV8S19905C9[86]),  86,106},
  {&(_ZTV8S19905C9[97]),  97,106},
  {&(_ZTV8S19905C9[104]),  104,106},
  {&(_tg__ZTV9S19905C10__8S19905C9[11]),  11,13},
  {&(_tg__ZTV8S19905C49S19905C10__A1__8S19905C9[5]),  5,7},
  {&(_tg__ZTV8S19905C68S19905C49S19905C10__A2__8S19905C9[5]),  5,7},
  {&(_tg__ZTV11S19905C5_nt__8S19905C68S19905C49S19905C10__A2__8S19905C9[3]),  3,5},
  {&(_tg__ZTV8S19905C7__8S19905C68S19905C49S19905C10__A2__8S19905C9[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C49S19905C10__A1__8S19905C9[3]),  3,5},
  {&(_tg__ZTV8S19905C7__8S19905C49S19905C10__A1__8S19905C9[4]),  4,6},
  {&(_tg__ZTV8S19905C7__9S19905C10__8S19905C9[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__9S19905C10__8S19905C9[3]),  3,5},
  {&(_tg__ZTV8S19905C6__9S19905C10__8S19905C9[5]),  5,7},
  {&(_tg__ZTV9S19905C12__9S19905C10__8S19905C9[8]),  8,10},
  {&(_tg__ZTV8S19905C3__9S19905C10__8S19905C9[6]),  6,8},
  {&(_tg__ZTV8S19905C4__9S19905C10__8S19905C9[5]),  5,7},
  {&(_tg__ZTV8S19905C78S19905C3__A1__9S19905C10__8S19905C9[4]),  4,6},
  {&(_tg__ZTV8S19905C7__8S19905C9[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C7__8S19905C9[3]),  3,5},
  {&(_tg__ZTV8S19905C6__8S19905C9[5]),  5,7},
  {&(_tg__ZTV11S19905C5_nt__8S19905C6__8S19905C9[3]),  3,5},
  {&(_tg__ZTV8S19905C7__8S19905C6__8S19905C9[4]),  4,6},
  {&(_tg__ZTV9S19905C12__8S19905C9[8]),  8,10},
  {&(_tg__ZTV8S19905C79S19905C12__A2__8S19905C9[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C79S19905C12__A2__8S19905C9[3]),  3,5},
  {&(_tg__ZTV8S19905C3__9S19905C12__8S19905C9[6]),  6,8},
  {&(_tg__ZTV8S19905C4__9S19905C12__8S19905C9[5]),  5,7},
  {&(_tg__ZTV11S19905C5_nt__9S19905C12__8S19905C9[3]),  3,5},
  {&(_tg__ZTV8S19905C7__9S19905C12__8S19905C9[4]),  4,6},
  {&(_tg__ZTV8S19905C78S19905C3__A1__9S19905C12__8S19905C9[4]),  4,6},
  {&(_tg__ZTV8S19905C3__8S19905C9[5]),  5,7},
  {&(_tg__ZTV8S19905C78S19905C3__A1__8S19905C9[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C78S19905C3__A1__8S19905C9[3]),  3,5},
  {&(_tg__ZTV8S19905C4__8S19905C3__8S19905C9[5]),  5,7},
  {&(_tg__ZTV11S19905C5_nt__8S19905C3__8S19905C9[3]),  3,5},
  {&(_tg__ZTV8S19905C7__8S19905C3__8S19905C9[4]),  4,6},
  {&(_tg__ZTV8S19905C7__A__8S19905C3__8S19905C9[4]),  4,6},
  {&(_tg__ZTV8S19905C4__8S19905C9[5]),  5,7},
  {&(_tg__ZTV8S19905C68S19905C4__A1__8S19905C9[5]),  5,7},
  {&(_tg__ZTV11S19905C5_nt__8S19905C68S19905C4__A1__8S19905C9[3]),  3,5},
  {&(_tg__ZTV8S19905C7__8S19905C68S19905C4__A1__8S19905C9[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C4__8S19905C9[3]),  3,5},
  {&(_tg__ZTV8S19905C7__8S19905C4__8S19905C9[4]),  4,6},
  {&(_tg__ZTV9S19905C13__8S19905C9[12]),  12,14},
  {&(_tg__ZTV9S19905C149S19905C13__8S19905C9[11]),  11,13},
  {&(_tg__ZTV9S19905C169S19905C149S19905C13__8S19905C9[7]),  7,9},
  {&(_tg__ZTV8S19905C4__9S19905C169S19905C149S19905C13__8S19905C9[5]),  5,7},
  {&(_tg__ZTV11S19905C5_nt__9S19905C169S19905C149S19905C13__8S19905C9[3]),  3,5},
  {&(_tg__ZTV8S19905C7__9S19905C169S19905C149S19905C13__8S19905C9[4]),  4,6},
  {&(_tg__ZTV8S19905C7__9S19905C149S19905C13__8S19905C9[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__9S19905C149S19905C13__8S19905C9[3]),  3,5},
  {&(_tg__ZTV9S19905C15__9S19905C149S19905C13__8S19905C9[9]),  9,11},
  {&(_tg__ZTV9S19905C12__9S19905C149S19905C13__8S19905C9[8]),  8,10},
  {&(_tg__ZTV8S19905C3__9S19905C149S19905C13__8S19905C9[6]),  6,8},
  {&(_tg__ZTV8S19905C4__9S19905C149S19905C13__8S19905C9[5]),  5,7},
  {&(_tg__ZTV8S19905C78S19905C3__A2__9S19905C149S19905C13__8S19905C9[4]),  4,6},
  {&(_tg__ZTV8S19905C49S19905C15__A1__9S19905C149S19905C13__8S19905C9[5]),  5,7},
  {&(_tg__ZTV8S19905C7__9S19905C13__8S19905C9[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__9S19905C13__8S19905C9[3]),  3,5},
  {&(_tg__ZTV9S19905C15__9S19905C13__8S19905C9[9]),  9,11},
  {&(_tg__ZTV9S19905C12__9S19905C13__8S19905C9[8]),  8,10},
  {&(_tg__ZTV8S19905C3__9S19905C13__8S19905C9[6]),  6,8},
  {&(_tg__ZTV8S19905C4__9S19905C13__8S19905C9[5]),  5,7},
  {&(_tg__ZTV8S19905C78S19905C3__A2__9S19905C13__8S19905C9[4]),  4,6},
  {&(_tg__ZTV8S19905C49S19905C15__A1__9S19905C13__8S19905C9[5]),  5,7},
  {&(_tg__ZTV9S19905C15__8S19905C9[9]),  9,11},
  {&(_tg__ZTV8S19905C79S19905C15__A3__8S19905C9[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C79S19905C15__A3__8S19905C9[3]),  3,5},
  {&(_tg__ZTV8S19905C49S19905C15__A2__8S19905C9[5]),  5,7},
  {&(_tg__ZTV8S19905C68S19905C49S19905C15__A3__8S19905C9[5]),  5,7},
  {&(_tg__ZTV11S19905C5_nt__8S19905C68S19905C49S19905C15__A3__8S19905C9[3]),  3,5},
  {&(_tg__ZTV8S19905C7__8S19905C68S19905C49S19905C15__A3__8S19905C9[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C49S19905C15__A2__8S19905C9[3]),  3,5},
  {&(_tg__ZTV8S19905C7__8S19905C49S19905C15__A2__8S19905C9[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__9S19905C15__8S19905C9[3]),  3,5},
  {&(_tg__ZTV9S19905C12__9S19905C15__8S19905C9[8]),  8,10},
  {&(_tg__ZTV8S19905C3__9S19905C15__8S19905C9[6]),  6,8},
  {&(_tg__ZTV8S19905C4__9S19905C15__8S19905C9[5]),  5,7},
  {&(_tg__ZTV8S19905C7__A1__9S19905C15__8S19905C9[4]),  4,6},
  {&(_tg__ZTV8S19905C78S19905C3__A2__9S19905C15__8S19905C9[4]),  4,6},
  {&(_tg__ZTV8S19905C4__A__9S19905C15__8S19905C9[5]),  5,7},
};
extern VTBL_ENTRY _ZTI8S19905C9[];
extern  VTBL_ENTRY _ZTV8S19905C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C9[];
static VTBL_ENTRY alt_thunk_names10[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19905C15D0Ev,_ZThn28_N9S19905C15D0Ev),
  (VTBL_ENTRY)_ZN9S19905C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19905C15D1Ev,_ZThn28_N9S19905C15D1Ev),
  (VTBL_ENTRY)_ZN9S19905C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev), // 
  (VTBL_ENTRY)_ZN9S19905C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev), // 
  (VTBL_ENTRY)_ZN9S19905C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19905C14D0Ev,_ZThn84_N9S19905C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19905C14D0Ev,_ZThn56_N9S19905C14D0Ev),
  (VTBL_ENTRY)_ZN9S19905C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19905C14D1Ev,_ZThn84_N9S19905C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19905C14D1Ev,_ZThn56_N9S19905C14D1Ev),
  (VTBL_ENTRY)_ZN9S19905C14D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19905C13D0Ev,_ZThn84_N9S19905C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19905C13D0Ev,_ZThn56_N9S19905C13D0Ev),
  (VTBL_ENTRY)_ZN9S19905C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19905C13D1Ev,_ZThn84_N9S19905C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19905C13D1Ev,_ZThn56_N9S19905C13D1Ev),
  (VTBL_ENTRY)_ZN9S19905C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C3D0Ev,_ZThn8_N8S19905C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C3D0Ev,_ZThn40_N8S19905C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C3D1Ev,_ZThn8_N8S19905C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C3D1Ev,_ZThn40_N8S19905C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19905C12D0Ev,_ZTv0_n24_N9S19905C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19905C12D0Ev,_ZThn28_N9S19905C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19905C12D1Ev,_ZTv0_n24_N9S19905C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19905C12D1Ev,_ZThn28_N9S19905C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19905C12D0Ev,_ZThn36_N9S19905C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19905C12D0Ev,_ZThn68_N9S19905C12D0Ev),
  (VTBL_ENTRY)_ZN9S19905C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19905C12D1Ev,_ZThn36_N9S19905C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19905C12D1Ev,_ZThn68_N9S19905C12D1Ev),
  (VTBL_ENTRY)_ZN9S19905C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19905C10D0Ev,_ZTv0_n24_N9S19905C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S19905C10D0Ev,_ZThn212_N9S19905C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19905C10D1Ev,_ZTv0_n24_N9S19905C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S19905C10D1Ev,_ZThn212_N9S19905C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev), // 
  (VTBL_ENTRY)_ZN8S19905C6D0Ev,
  (VTBL_ENTRY)_ZN8S19905C6D0Ev,
  (VTBL_ENTRY)_ZN8S19905C6D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19905C6D0Ev,_ZThn148_N8S19905C6D0Ev),
  (VTBL_ENTRY)_ZN8S19905C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev), // 
  (VTBL_ENTRY)_ZN8S19905C6D1Ev,
  (VTBL_ENTRY)_ZN8S19905C6D1Ev,
  (VTBL_ENTRY)_ZN8S19905C6D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19905C6D1Ev,_ZThn148_N8S19905C6D1Ev),
  (VTBL_ENTRY)_ZN8S19905C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19905C4D0Ev,
  (VTBL_ENTRY)_ZN8S19905C4D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19905C4D0Ev,_ZThn148_N8S19905C4D0Ev),
  (VTBL_ENTRY)_ZN8S19905C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19905C4D1Ev,
  (VTBL_ENTRY)_ZN8S19905C4D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19905C4D1Ev,_ZThn148_N8S19905C4D1Ev),
  (VTBL_ENTRY)_ZN8S19905C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S19905C10D0Ev,_ZThn220_N9S19905C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S19905C10D0Ev,_ZThn252_N9S19905C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S19905C10D0Ev,_ZThn184_N9S19905C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19905C10D0Ev,_ZThn176_N9S19905C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19905C10D0Ev,_ZThn148_N9S19905C10D0Ev),
  (VTBL_ENTRY)_ZN9S19905C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S19905C10D1Ev,_ZThn220_N9S19905C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S19905C10D1Ev,_ZThn252_N9S19905C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S19905C10D1Ev,_ZThn184_N9S19905C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19905C10D1Ev,_ZThn176_N9S19905C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19905C10D1Ev,_ZThn148_N9S19905C10D1Ev),
  (VTBL_ENTRY)_ZN9S19905C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19905C9D0Ev,_ZTv0_n24_N8S19905C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19905C9D0Ev,_ZThn216_N8S19905C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19905C9D1Ev,_ZTv0_n24_N8S19905C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19905C9D1Ev,_ZThn216_N8S19905C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S19905C9D0Ev,_ZThn380_N8S19905C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn608_N8S19905C9D0Ev,_ZThn352_N8S19905C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn512_N8S19905C9D0Ev,_ZThn296_N8S19905C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S19905C9D0Ev,_ZThn256_N8S19905C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn400_N8S19905C9D0Ev,_ZThn224_N8S19905C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S19905C9D0Ev,_ZThn188_N8S19905C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S19905C9D0Ev,_ZThn180_N8S19905C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S19905C9D0Ev,_ZThn152_N8S19905C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C9D0Ev,_ZThn4_N8S19905C9D0Ev),
  (VTBL_ENTRY)_ZN8S19905C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S19905C9D1Ev,_ZThn380_N8S19905C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn608_N8S19905C9D1Ev,_ZThn352_N8S19905C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn512_N8S19905C9D1Ev,_ZThn296_N8S19905C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S19905C9D1Ev,_ZThn256_N8S19905C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn400_N8S19905C9D1Ev,_ZThn224_N8S19905C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S19905C9D1Ev,_ZThn188_N8S19905C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S19905C9D1Ev,_ZThn180_N8S19905C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S19905C9D1Ev,_ZThn152_N8S19905C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C9D1Ev,_ZThn4_N8S19905C9D1Ev),
  (VTBL_ENTRY)_ZN8S19905C9D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19905C9 = {  "S19905C9", // class name
  bases_S19905C9, 31,
  &(vtc_S19905C9[0]), // expected_vtbl_contents
  &(vtt_S19905C9[0]), // expected_vtt_contents
  ABISELECT(720,420), // object size
  NSPAIRA(_ZTI8S19905C9),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19905C9),106, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19905C9),90, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names10,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19905C19  {
  void  mf19905c19(); // _ZN9S19905C1910mf19905c19Ev
  virtual  ~S19905C19(); // _ZN9S19905C19D1Ev
  S19905C19(); // tgen
};
//SIG(-1 S19905C19) C1{ vd m}


void  S19905C19 ::mf19905c19(){}
 S19905C19 ::~S19905C19(){ note_dtor("S19905C19", this);}
S19905C19 ::S19905C19(){ note_ctor("S19905C19", this);} // tgen

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

#else // __cplusplus

extern void _ZN9S19905C19C1Ev();
extern void _ZN9S19905C19D1Ev();
Name_Map name_map_S19905C19[] = {
  NSPAIR(_ZN9S19905C19C1Ev),
  NSPAIR(_ZN9S19905C19D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19905C19[];
extern void _ZN9S19905C19D1Ev();
extern void _ZN9S19905C19D0Ev();
static  VTBL_ENTRY vtc_S19905C19[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C19[0]),
  (VTBL_ENTRY)&_ZN9S19905C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19905C19D0Ev,
};
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
Class_Descriptor cd_S19905C19 = {  "S19905C19", // class name
  0,0,//no base classes
  &(vtc_S19905C19[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S19905C19),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19905C19),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  S19905C20  : virtual S5266C29 , S19905C6 , S19905C3 , S19905C5_nt , S17777C6_nt {
  void *s19905c20f0[2];
  ~S19905C20(); // tgen
  S19905C20(); // tgen
};
//SIG(-1 S19905C20) C1{ VBC2{ m} BC3{ VBC4{ vd m} VBC5{ VBC4 FD Fc Fs[4]} vd Fi} BC6{ VBC7{ VBC4 BC3 BC8{ m Fp} vd Fs FL Fp FL} BC8 BC4 BC5 vd Fi} BC4 BC8 Fp[2]}


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

static void Test_S19905C20()
{
  extern Class_Descriptor cd_S19905C20;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,33)];
    init_test(&cd_S19905C20, buf);
    S19905C20 *dp, &lv = *(dp=new (buf) S19905C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,128), "sizeof(S19905C20)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19905C20)");
    check_base_class_offset(lv, (S5266C29*), 0, "S19905C20");
    /*is_ambiguous_... S19905C20::S19905C6 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C6*), 0, "S19905C20");
    /*is_ambiguous_... S19905C20::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*), 0, "S19905C20");
    check_base_class_offset(lv, (S19905C5_nt*)(S19905C4*), 0, "S19905C20");
    check_base_class_offset(lv, (S19905C5_nt*)(S19905C6*)(S19905C4*), 0, "S19905C20");
    /*is_ambiguous_... S19905C3::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*)(S19905C3*), 0, "S19905C20");
    /*is_ambiguous_... S19905C20::S19905C6 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C6*), ABISELECT(112,64), "S19905C20");
    check_base_class_offset(lv, (S19905C7*)(S19905C6*)(S19905C4*), ABISELECT(112,64), "S19905C20");
    /*is_ambiguous_... S19905C20::S19905C6 */ AMB_check_base_class_offset(lv, (S19905C6*), 0, "S19905C20");
    check_base_class_offset(lv, (S19905C6*)(S19905C4*), ABISELECT(160,92), "S19905C20");
    check_base_class_offset(lv, (S17777C6_nt*)(S19905C4*), ABISELECT(176,100), "S19905C20");
    check_base_class_offset(lv, (S19905C4*)(S19905C3*), ABISELECT(160,92), "S19905C20");
    /*is_ambiguous_... S19905C3::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C3*), ABISELECT(24,12), "S19905C20");
    /*is_ambiguous_... S19905C3::S19905C5_nt */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C3*), ABISELECT(16,8), "S19905C20");
    /*is_ambiguous_... S19905C3::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C3*), ABISELECT(32,16), "S19905C20");
    check_base_class_offset(lv, (S19905C3*), ABISELECT(16,8), "S19905C20");
    /*is_ambiguous_... S19905C20::S19905C5_nt */ AMB_check_base_class_offset(lv, (S19905C5_nt*), ABISELECT(80,48), "S19905C20");
    /*is_ambiguous_... S19905C20::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*), ABISELECT(88,52), "S19905C20");
    check_field_offset(lv, s19905c20f0, ABISELECT(96,56), "S19905C20.s19905c20f0");
    test_class_info(&lv, &cd_S19905C20);
    dp->~S19905C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19905C20(Test_S19905C20, "S19905C20", ABISELECT(224,128));

#else // __cplusplus

extern void _ZN9S19905C20C1Ev();
extern void _ZN9S19905C20D1Ev();
Name_Map name_map_S19905C20[] = {
  NSPAIR(_ZN9S19905C20C1Ev),
  NSPAIR(_ZN9S19905C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C6;
extern VTBL_ENTRY _ZTI8S19905C6[];
extern  VTBL_ENTRY _ZTV8S19905C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C6[];
extern Class_Descriptor cd_S19905C6;
extern VTBL_ENTRY _ZTI8S19905C6[];
extern  VTBL_ENTRY _ZTV8S19905C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C4;
extern VTBL_ENTRY _ZTI8S19905C4[];
extern  VTBL_ENTRY _ZTV8S19905C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C4[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C3;
extern VTBL_ENTRY _ZTI8S19905C3[];
extern  VTBL_ENTRY _ZTV8S19905C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C3[];
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
static Base_Class bases_S19905C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19905C5_nt,    0, //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
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19905C7,    ABISELECT(112,64), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19905C6,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19905C6,    ABISELECT(160,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(176,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19905C4,    ABISELECT(160,92), //bcp->offset
    32, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    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
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19905C5_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
    10, //immediately_derived
  0, 0},
  {&cd_S19905C7,    ABISELECT(32,16), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19905C3,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19905C5_nt,    ABISELECT(80,48), //bcp->offset
    22, //bcp->virtual_function_table_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},
  {&cd_S17777C6_nt,    ABISELECT(88,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
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19905C20[];
extern void ABISELECT(_ZTv0_n24_N9S19905C20D1Ev,_ZTv0_n12_N9S19905C20D1Ev)();
extern void _ZN9S19905C20D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C20D0Ev,_ZTv0_n12_N9S19905C20D0Ev)();
extern void _ZN9S19905C20D0Ev() __attribute__((weak));
extern void ABISELECT(_ZThn16_N9S19905C20D1Ev,_ZThn8_N9S19905C20D1Ev)();
extern void ABISELECT(_ZThn16_N9S19905C20D0Ev,_ZThn8_N9S19905C20D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C20D1Ev,_ZTv0_n12_N9S19905C20D1Ev)();
extern void ABISELECT(_ZThn32_N9S19905C20D1Ev,_ZThn16_N9S19905C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C20D0Ev,_ZTv0_n12_N9S19905C20D0Ev)();
extern void ABISELECT(_ZThn32_N9S19905C20D0Ev,_ZThn16_N9S19905C20D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZThn80_N9S19905C20D1Ev,_ZThn48_N9S19905C20D1Ev)();
extern void ABISELECT(_ZThn80_N9S19905C20D0Ev,_ZThn48_N9S19905C20D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C20D1Ev,_ZTv0_n12_N9S19905C20D1Ev)();
extern void ABISELECT(_ZThn112_N9S19905C20D1Ev,_ZThn64_N9S19905C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C20D0Ev,_ZTv0_n12_N9S19905C20D0Ev)();
extern void ABISELECT(_ZThn112_N9S19905C20D0Ev,_ZThn64_N9S19905C20D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C20D1Ev,_ZTv0_n12_N9S19905C20D1Ev)();
extern void ABISELECT(_ZThn160_N9S19905C20D1Ev,_ZThn92_N9S19905C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C20D0Ev,_ZTv0_n12_N9S19905C20D0Ev)();
extern void ABISELECT(_ZThn160_N9S19905C20D0Ev,_ZThn92_N9S19905C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19905C20[] = {
  ABISELECT(160,92),
  0,
  ABISELECT(112,64),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C20D1Ev,_ZTv0_n12_N9S19905C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C20D0Ev,_ZTv0_n12_N9S19905C20D0Ev),
  ABISELECT(96,56),
  ABISELECT(-16,-8),
  ABISELECT(144,84),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19905C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19905C20D1Ev,_ZThn8_N9S19905C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19905C20D0Ev,_ZThn8_N9S19905C20D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19905C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C20D1Ev,_ZTv0_n12_N9S19905C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C20D0Ev,_ZTv0_n12_N9S19905C20D0Ev),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI9S19905C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N9S19905C20D1Ev,_ZThn48_N9S19905C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N9S19905C20D0Ev,_ZThn48_N9S19905C20D0Ev),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI9S19905C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C20D1Ev,_ZTv0_n12_N9S19905C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C20D0Ev,_ZTv0_n12_N9S19905C20D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-160,-92),
  ABISELECT(-160,-92),
  ABISELECT(-160,-92),
  (VTBL_ENTRY)&(_ZTI9S19905C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C20D1Ev,_ZTv0_n12_N9S19905C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C20D0Ev,_ZTv0_n12_N9S19905C20D0Ev),
};
extern VTBL_ENTRY _ZTV9S19905C20[];
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void _ZN8S19905C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void _ZN8S19905C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C6__9S19905C20[] = {
  ABISELECT(112,64),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZThn112_N8S19905C6D1Ev,_ZThn64_N8S19905C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void ABISELECT(_ZThn112_N8S19905C6D0Ev,_ZThn64_N8S19905C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C6__9S19905C20[] = {
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void _ZN8S19905C3D1Ev();
extern void _ZN8S19905C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19905C3__9S19905C20[] = {
  ABISELECT(96,56),
  ABISELECT(-16,-8),
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&_ZN8S19905C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19905C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C3__A1__9S19905C20[] = {
  ABISELECT(-32,-16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C78S19905C3__A1__9S19905C20[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZThn144_N8S19905C3D1Ev,_ZThn84_N8S19905C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
extern void ABISELECT(_ZThn144_N8S19905C3D0Ev,_ZThn84_N8S19905C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__8S19905C3__9S19905C20[] = {
  ABISELECT(-48,-28),
  ABISELECT(-160,-92),
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C3__9S19905C20[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZThn96_N8S19905C3D1Ev,_ZThn56_N8S19905C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
extern void ABISELECT(_ZThn96_N8S19905C3D0Ev,_ZThn56_N8S19905C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C3__9S19905C20[] = {
  ABISELECT(-112,-64),
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19905C3D1Ev,_ZThn8_N8S19905C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19905C3D0Ev,_ZThn8_N8S19905C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__A__8S19905C3__9S19905C20[] = {
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__9S19905C20[] = {
  ABISELECT(-112,-64),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C7__9S19905C20[] = {
  ABISELECT(112,64),
  ABISELECT(112,64),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void _ZN8S19905C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void _ZN8S19905C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C20[] = {
  ABISELECT(-48,-28),
  ABISELECT(-160,-92),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void _ZN8S19905C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void _ZN8S19905C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C68S19905C4__A1__9S19905C20[] = {
  ABISELECT(-48,-28),
  ABISELECT(-160,-92),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C68S19905C4__A1__9S19905C20[] = {
  ABISELECT(160,92),
  ABISELECT(160,92),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C68S19905C4__A1__9S19905C20[] = {
  ABISELECT(-112,-64),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C4__9S19905C20[] = {
  ABISELECT(160,92),
  ABISELECT(160,92),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C4__9S19905C20[] = {
  ABISELECT(-112,-64),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
static  VTT_ENTRY vtt_S19905C20[] = {
  {&(_ZTV9S19905C20[7]),  7,39},
  {&(_tg__ZTV8S19905C6__9S19905C20[5]),  5,7},
  {&(_tg__ZTV8S19905C6__9S19905C20[5]),  5,7},
  {&(_tg__ZTV8S19905C7__8S19905C6__9S19905C20[4]),  4,6},
  {&(_tg__ZTV8S19905C3__9S19905C20[5]),  5,7},
  {&(_tg__ZTV8S19905C78S19905C3__A1__9S19905C20[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C78S19905C3__A1__9S19905C20[3]),  3,5},
  {&(_tg__ZTV8S19905C4__8S19905C3__9S19905C20[5]),  5,7},
  {&(_tg__ZTV11S19905C5_nt__8S19905C3__9S19905C20[3]),  3,5},
  {&(_tg__ZTV8S19905C7__8S19905C3__9S19905C20[4]),  4,6},
  {&(_tg__ZTV8S19905C7__A__8S19905C3__9S19905C20[4]),  4,6},
  {&(_ZTV9S19905C20[7]),  7,39},
  {&(_ZTV9S19905C20[30]),  30,39},
  {&(_ZTV9S19905C20[14]),  14,39},
  {&(_ZTV9S19905C20[37]),  37,39},
  {&(_ZTV9S19905C20[20]),  20,39},
  {&(_tg__ZTV8S19905C7__9S19905C20[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C7__9S19905C20[3]),  3,5},
  {&(_tg__ZTV8S19905C4__9S19905C20[5]),  5,7},
  {&(_tg__ZTV8S19905C68S19905C4__A1__9S19905C20[5]),  5,7},
  {&(_tg__ZTV11S19905C5_nt__8S19905C68S19905C4__A1__9S19905C20[3]),  3,5},
  {&(_tg__ZTV8S19905C7__8S19905C68S19905C4__A1__9S19905C20[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C4__9S19905C20[3]),  3,5},
  {&(_tg__ZTV8S19905C7__8S19905C4__9S19905C20[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19905C20[];
extern  VTBL_ENTRY _ZTV9S19905C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C20[];
static VTBL_ENTRY alt_thunk_names11[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19905C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19905C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C3D0Ev,_ZThn8_N8S19905C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19905C3D0Ev,_ZThn56_N8S19905C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19905C3D0Ev,_ZThn84_N8S19905C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C3D1Ev,_ZThn8_N8S19905C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19905C3D1Ev,_ZThn56_N8S19905C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19905C3D1Ev,_ZThn84_N8S19905C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev), // 
  (VTBL_ENTRY)_ZN8S19905C6D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19905C6D0Ev,_ZThn64_N8S19905C6D0Ev),
  (VTBL_ENTRY)_ZN8S19905C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev), // 
  (VTBL_ENTRY)_ZN8S19905C6D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19905C6D1Ev,_ZThn64_N8S19905C6D1Ev),
  (VTBL_ENTRY)_ZN8S19905C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C20D0Ev,_ZTv0_n12_N9S19905C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19905C20D0Ev,_ZThn92_N9S19905C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19905C20D0Ev,_ZThn64_N9S19905C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19905C20D0Ev,_ZThn16_N9S19905C20D0Ev),
  (VTBL_ENTRY)_ZN9S19905C20D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C20D1Ev,_ZTv0_n12_N9S19905C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19905C20D1Ev,_ZThn92_N9S19905C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19905C20D1Ev,_ZThn64_N9S19905C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19905C20D1Ev,_ZThn16_N9S19905C20D1Ev),
  (VTBL_ENTRY)_ZN9S19905C20D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19905C20 = {  "S19905C20", // class name
  bases_S19905C20, 13,
  &(vtc_S19905C20[0]), // expected_vtbl_contents
  &(vtt_S19905C20[0]), // expected_vtt_contents
  ABISELECT(224,128), // object size
  NSPAIRA(_ZTI9S19905C20),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19905C20),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19905C20),24, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names11,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19905C18  : virtual S19905C4 , S19905C19 , S19905C20 {
  virtual  ~S19905C18(); // _ZN9S19905C18D2Ev
  S19905C18(); // tgen
};
//SIG(-1 S19905C18) C1{ VBC2{ VBC3{ vd m} BC4{ VBC3 VBC5{ VBC3 FD Fc Fs[4]} vd Fi} BC6{ m Fp} vd Fs FL Fp FL} BC7{ vd m} BC8{ VBC9{ m} BC4 BC10{ VBC2 BC6 BC3 BC5 vd Fi} BC3 BC6 Fp[2]} vd}


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

static void Test_S19905C18()
{
  extern Class_Descriptor cd_S19905C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,34)];
    init_test(&cd_S19905C18, buf);
    S19905C18 *dp, &lv = *(dp=new (buf) S19905C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,132), "sizeof(S19905C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19905C18)");
    check_base_class_offset(lv, (S19905C5_nt*)(S19905C4*), ABISELECT(128,68), "S19905C18");
    check_base_class_offset(lv, (S19905C5_nt*)(S19905C6*)(S19905C4*), ABISELECT(128,68), "S19905C18");
    /*is_ambiguous_... S19905C18::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*), ABISELECT(128,68), "S19905C18");
    /*is_ambiguous_... S19905C20::S19905C6 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C6*)(S19905C20*), ABISELECT(128,68), "S19905C18");
    /*is_ambiguous_... S19905C3::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*)(S19905C3*)(S19905C20*), ABISELECT(128,68), "S19905C18");
    check_base_class_offset(lv, (S19905C7*)(S19905C6*)(S19905C4*), ABISELECT(192,104), "S19905C18");
    /*is_ambiguous_... S19905C20::S19905C6 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C6*)(S19905C20*), ABISELECT(192,104), "S19905C18");
    check_base_class_offset(lv, (S19905C6*)(S19905C4*), ABISELECT(128,68), "S19905C18");
    check_base_class_offset(lv, (S17777C6_nt*)(S19905C4*), ABISELECT(144,76), "S19905C18");
    check_base_class_offset(lv, (S19905C4*), ABISELECT(128,68), "S19905C18");
    check_base_class_offset(lv, (S19905C4*)(S19905C3*)(S19905C20*), ABISELECT(128,68), "S19905C18");
    check_base_class_offset(lv, (S19905C19*), 0, "S19905C18");
    check_base_class_offset(lv, (S5266C29*)(S19905C20*), 0, "S19905C18");
    /*is_ambiguous_... S19905C20::S19905C6 */ AMB_check_base_class_offset(lv, (S19905C6*)(S19905C20*), ABISELECT(16,4), "S19905C18");
    /*is_ambiguous_... S19905C3::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C3*)(S19905C20*), ABISELECT(40,16), "S19905C18");
    /*is_ambiguous_... S19905C3::S19905C5_nt */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C3*)(S19905C20*), ABISELECT(32,12), "S19905C18");
    /*is_ambiguous_... S19905C3::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C3*)(S19905C20*), ABISELECT(48,20), "S19905C18");
    check_base_class_offset(lv, (S19905C3*)(S19905C20*), ABISELECT(32,12), "S19905C18");
    /*is_ambiguous_... S19905C20::S19905C5_nt */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C20*), ABISELECT(96,52), "S19905C18");
    /*is_ambiguous_... S19905C20::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C20*), ABISELECT(104,56), "S19905C18");
    check_base_class_offset(lv, (S19905C20*), ABISELECT(16,4), "S19905C18");
    test_class_info(&lv, &cd_S19905C18);
    dp->~S19905C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19905C18(Test_S19905C18, "S19905C18", ABISELECT(240,132));

#else // __cplusplus

extern void _ZN9S19905C18C1Ev();
extern void _ZN9S19905C18D2Ev();
Name_Map name_map_S19905C18[] = {
  NSPAIR(_ZN9S19905C18C1Ev),
  NSPAIR(_ZN9S19905C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C6;
extern VTBL_ENTRY _ZTI8S19905C6[];
extern  VTBL_ENTRY _ZTV8S19905C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C4;
extern VTBL_ENTRY _ZTI8S19905C4[];
extern  VTBL_ENTRY _ZTV8S19905C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C4[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19905C6;
extern VTBL_ENTRY _ZTI8S19905C6[];
extern  VTBL_ENTRY _ZTV8S19905C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C3;
extern VTBL_ENTRY _ZTI8S19905C3[];
extern  VTBL_ENTRY _ZTV8S19905C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C3[];
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C20;
extern VTBL_ENTRY _ZTI9S19905C20[];
extern  VTBL_ENTRY _ZTV9S19905C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C20[];
static Base_Class bases_S19905C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C5_nt,    ABISELECT(128,68), //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_S19905C7,    ABISELECT(192,104), //bcp->offset
    41, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19905C6,    ABISELECT(128,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(144,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
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19905C4,    ABISELECT(128,68), //bcp->offset
    34, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19905C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19905C6,    ABISELECT(16,4), //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
    6, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(40,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
    11, //immediately_derived
  0, 0},
  {&cd_S19905C5_nt,    ABISELECT(32,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
    11, //immediately_derived
  0, 0},
  {&cd_S19905C7,    ABISELECT(48,20), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19905C3,    ABISELECT(32,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19905C5_nt,    ABISELECT(96,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
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(104,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
    14, //immediately_derived
  0, 0},
  {&cd_S19905C20,    ABISELECT(16,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    21, //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 _ZTI9S19905C18[];
extern void _ZN9S19905C18D1Ev();
extern void _ZN9S19905C18D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19905C18D1Ev,_ZTv0_n12_N9S19905C18D1Ev)();
extern void ABISELECT(_ZThn16_N9S19905C18D1Ev,_ZThn4_N9S19905C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C18D0Ev,_ZTv0_n12_N9S19905C18D0Ev)();
extern void ABISELECT(_ZThn16_N9S19905C18D0Ev,_ZThn4_N9S19905C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZThn32_N9S19905C18D1Ev,_ZThn12_N9S19905C18D1Ev)();
extern void ABISELECT(_ZThn32_N9S19905C18D0Ev,_ZThn12_N9S19905C18D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C18D1Ev,_ZTv0_n12_N9S19905C18D1Ev)();
extern void ABISELECT(_ZThn48_N9S19905C18D1Ev,_ZThn20_N9S19905C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C18D0Ev,_ZTv0_n12_N9S19905C18D0Ev)();
extern void ABISELECT(_ZThn48_N9S19905C18D0Ev,_ZThn20_N9S19905C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZThn96_N9S19905C18D1Ev,_ZThn52_N9S19905C18D1Ev)();
extern void ABISELECT(_ZThn96_N9S19905C18D0Ev,_ZThn52_N9S19905C18D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C18D1Ev,_ZTv0_n12_N9S19905C18D1Ev)();
extern void ABISELECT(_ZThn128_N9S19905C18D1Ev,_ZThn68_N9S19905C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C18D0Ev,_ZTv0_n12_N9S19905C18D0Ev)();
extern void ABISELECT(_ZThn128_N9S19905C18D0Ev,_ZThn68_N9S19905C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C18D1Ev,_ZTv0_n12_N9S19905C18D1Ev)();
extern void ABISELECT(_ZThn192_N9S19905C18D1Ev,_ZThn104_N9S19905C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C18D0Ev,_ZTv0_n12_N9S19905C18D0Ev)();
extern void ABISELECT(_ZThn192_N9S19905C18D0Ev,_ZThn104_N9S19905C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19905C18[] = {
  0,
  ABISELECT(192,104),
  ABISELECT(128,68),
  ABISELECT(128,68),
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C18[0]),
  (VTBL_ENTRY)&_ZN9S19905C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19905C18D0Ev,
  ABISELECT(112,64),
  ABISELECT(-16,-4),
  ABISELECT(176,100),
  ABISELECT(112,64),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI9S19905C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C18D1Ev,_ZTv0_n12_N9S19905C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C18D0Ev,_ZTv0_n12_N9S19905C18D0Ev),
  ABISELECT(160,92),
  ABISELECT(96,56),
  ABISELECT(96,56),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI9S19905C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N9S19905C18D1Ev,_ZThn12_N9S19905C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N9S19905C18D0Ev,_ZThn12_N9S19905C18D0Ev),
  ABISELECT(80,48),
  ABISELECT(-48,-20),
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI9S19905C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C18D1Ev,_ZTv0_n12_N9S19905C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C18D0Ev,_ZTv0_n12_N9S19905C18D0Ev),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI9S19905C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N9S19905C18D1Ev,_ZThn52_N9S19905C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N9S19905C18D0Ev,_ZThn52_N9S19905C18D0Ev),
  ABISELECT(64,36),
  0,
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI9S19905C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C18D1Ev,_ZTv0_n12_N9S19905C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C18D0Ev,_ZTv0_n12_N9S19905C18D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-192,-104),
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI9S19905C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C18D1Ev,_ZTv0_n12_N9S19905C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C18D0Ev,_ZTv0_n12_N9S19905C18D0Ev),
};
extern VTBL_ENTRY _ZTV9S19905C18[];
extern void ABISELECT(_ZTv0_n24_N9S19905C20D1Ev,_ZTv0_n12_N9S19905C20D1Ev)();
extern void _ZN9S19905C20D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C20D0Ev,_ZTv0_n12_N9S19905C20D0Ev)();
extern void _ZN9S19905C20D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C20__9S19905C18[] = {
  ABISELECT(112,64),
  ABISELECT(-16,-4),
  ABISELECT(176,100),
  ABISELECT(112,64),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C20D1Ev,_ZTv0_n12_N9S19905C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C20D0Ev,_ZTv0_n12_N9S19905C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void _ZN8S19905C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void _ZN8S19905C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C69S19905C20__A1__9S19905C18[] = {
  ABISELECT(176,100),
  ABISELECT(112,64),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZThn112_N8S19905C6D1Ev,_ZThn64_N8S19905C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void ABISELECT(_ZThn112_N8S19905C6D0Ev,_ZThn64_N8S19905C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C69S19905C20__A1__9S19905C18[] = {
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZThn176_N8S19905C6D1Ev,_ZThn100_N8S19905C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void ABISELECT(_ZThn176_N8S19905C6D0Ev,_ZThn100_N8S19905C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C69S19905C20__A1__9S19905C18[] = {
  ABISELECT(-64,-36),
  ABISELECT(-176,-100),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void _ZN8S19905C3D1Ev();
extern void _ZN8S19905C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19905C39S19905C20__9S19905C18[] = {
  ABISELECT(160,92),
  ABISELECT(96,56),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&_ZN8S19905C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19905C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C39S19905C20__A1__9S19905C18[] = {
  ABISELECT(80,48),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZThn80_N8S19905C7D1Ev,_ZThn48_N8S19905C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void ABISELECT(_ZThn80_N8S19905C7D0Ev,_ZThn48_N8S19905C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C78S19905C39S19905C20__A1__9S19905C18[] = {
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZThn96_N8S19905C3D1Ev,_ZThn56_N8S19905C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
extern void ABISELECT(_ZThn96_N8S19905C3D0Ev,_ZThn56_N8S19905C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__8S19905C39S19905C20__9S19905C18[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZThn160_N8S19905C3D1Ev,_ZThn92_N8S19905C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
extern void ABISELECT(_ZThn160_N8S19905C3D0Ev,_ZThn92_N8S19905C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C39S19905C20__9S19905C18[] = {
  ABISELECT(-64,-36),
  ABISELECT(-160,-92),
  ABISELECT(-160,-92),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19905C3D1Ev,_ZThn8_N8S19905C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19905C3D0Ev,_ZThn8_N8S19905C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__A__8S19905C39S19905C20__9S19905C18[] = {
  ABISELECT(80,48),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C20D1Ev,_ZTv0_n12_N9S19905C20D1Ev)();
extern void ABISELECT(_ZThn112_N9S19905C20D1Ev,_ZThn64_N9S19905C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C20D0Ev,_ZTv0_n12_N9S19905C20D0Ev)();
extern void ABISELECT(_ZThn112_N9S19905C20D0Ev,_ZThn64_N9S19905C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C20__9S19905C18[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI9S19905C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C20D1Ev,_ZTv0_n12_N9S19905C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C20D0Ev,_ZTv0_n12_N9S19905C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C20D1Ev,_ZTv0_n12_N9S19905C20D1Ev)();
extern void ABISELECT(_ZThn176_N9S19905C20D1Ev,_ZThn100_N9S19905C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C20D0Ev,_ZTv0_n12_N9S19905C20D0Ev)();
extern void ABISELECT(_ZThn176_N9S19905C20D0Ev,_ZThn100_N9S19905C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__9S19905C20__9S19905C18[] = {
  ABISELECT(-64,-36),
  ABISELECT(-176,-100),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI9S19905C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C20D1Ev,_ZTv0_n12_N9S19905C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C20D0Ev,_ZTv0_n12_N9S19905C20D0Ev),
};
extern void ABISELECT(_ZThn16_N9S19905C20D1Ev,_ZThn8_N9S19905C20D1Ev)();
extern void ABISELECT(_ZThn16_N9S19905C20D0Ev,_ZThn8_N9S19905C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C3__9S19905C20__9S19905C18[] = {
  ABISELECT(160,92),
  ABISELECT(96,56),
  ABISELECT(96,56),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19905C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19905C20D1Ev,_ZThn8_N9S19905C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19905C20D0Ev,_ZThn8_N9S19905C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C20D1Ev,_ZTv0_n12_N9S19905C20D1Ev)();
extern void ABISELECT(_ZThn32_N9S19905C20D1Ev,_ZThn16_N9S19905C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C20D0Ev,_ZTv0_n12_N9S19905C20D0Ev)();
extern void ABISELECT(_ZThn32_N9S19905C20D0Ev,_ZThn16_N9S19905C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C3__A1__9S19905C20__9S19905C18[] = {
  ABISELECT(80,48),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19905C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C20D1Ev,_ZTv0_n12_N9S19905C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C20D0Ev,_ZTv0_n12_N9S19905C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void _ZN8S19905C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void _ZN8S19905C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C18[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void _ZN8S19905C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void _ZN8S19905C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C68S19905C4__9S19905C18[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S19905C6D1Ev,_ZThn36_N8S19905C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S19905C6D0Ev,_ZThn36_N8S19905C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C68S19905C4__9S19905C18[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZThn64_N8S19905C4D1Ev,_ZThn36_N8S19905C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void ABISELECT(_ZThn64_N8S19905C4D0Ev,_ZThn36_N8S19905C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C4__9S19905C18[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__9S19905C18[] = {
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C7__9S19905C18[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
static  VTT_ENTRY vtt_S19905C18[] = {
  {&(_ZTV9S19905C18[6]),  6,47},
  {&(_tg__ZTV9S19905C20__9S19905C18[7]),  7,9},
  {&(_tg__ZTV8S19905C69S19905C20__A1__9S19905C18[5]),  5,7},
  {&(_tg__ZTV11S19905C5_nt__8S19905C69S19905C20__A1__9S19905C18[3]),  3,5},
  {&(_tg__ZTV8S19905C7__8S19905C69S19905C20__A1__9S19905C18[4]),  4,6},
  {&(_tg__ZTV8S19905C39S19905C20__9S19905C18[5]),  5,7},
  {&(_tg__ZTV8S19905C78S19905C39S19905C20__A1__9S19905C18[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C78S19905C39S19905C20__A1__9S19905C18[3]),  3,5},
  {&(_tg__ZTV8S19905C4__8S19905C39S19905C20__9S19905C18[5]),  5,7},
  {&(_tg__ZTV8S19905C4__8S19905C39S19905C20__9S19905C18[5]),  5,7},
  {&(_tg__ZTV8S19905C7__8S19905C39S19905C20__9S19905C18[4]),  4,6},
  {&(_tg__ZTV8S19905C7__A__8S19905C39S19905C20__9S19905C18[4]),  4,6},
  {&(_tg__ZTV8S19905C4__9S19905C20__9S19905C18[5]),  5,7},
  {&(_tg__ZTV8S19905C7__9S19905C20__9S19905C18[4]),  4,6},
  {&(_tg__ZTV8S19905C3__9S19905C20__9S19905C18[5]),  5,7},
  {&(_tg__ZTV8S19905C4__9S19905C20__9S19905C18[5]),  5,7},
  {&(_tg__ZTV8S19905C78S19905C3__A1__9S19905C20__9S19905C18[4]),  4,6},
  {&(_ZTV9S19905C18[39]),  39,47},
  {&(_ZTV9S19905C18[39]),  39,47},
  {&(_ZTV9S19905C18[45]),  45,47},
  {&(_ZTV9S19905C18[15]),  15,47},
  {&(_ZTV9S19905C18[22]),  22,47},
  {&(_ZTV9S19905C18[28]),  28,47},
  {&(_tg__ZTV8S19905C4__9S19905C18[5]),  5,7},
  {&(_tg__ZTV8S19905C68S19905C4__9S19905C18[5]),  5,7},
  {&(_tg__ZTV8S19905C68S19905C4__9S19905C18[5]),  5,7},
  {&(_tg__ZTV8S19905C7__8S19905C68S19905C4__9S19905C18[4]),  4,6},
  {&(_tg__ZTV8S19905C4__9S19905C18[5]),  5,7},
  {&(_tg__ZTV8S19905C7__8S19905C4__9S19905C18[4]),  4,6},
  {&(_tg__ZTV8S19905C7__9S19905C18[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C7__9S19905C18[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19905C18[];
extern  VTBL_ENTRY _ZTV9S19905C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C18[];
static VTBL_ENTRY alt_thunk_names12[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C4D0Ev,_ZThn36_N8S19905C4D0Ev),
  (VTBL_ENTRY)_ZN8S19905C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C4D1Ev,_ZThn36_N8S19905C4D1Ev),
  (VTBL_ENTRY)_ZN8S19905C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C3D0Ev,_ZThn8_N8S19905C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19905C3D0Ev,_ZThn92_N8S19905C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19905C3D0Ev,_ZThn56_N8S19905C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C3D1Ev,_ZThn8_N8S19905C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19905C3D1Ev,_ZThn92_N8S19905C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19905C3D1Ev,_ZThn56_N8S19905C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19905C7D0Ev,_ZThn48_N8S19905C7D0Ev),
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19905C7D1Ev,_ZThn48_N8S19905C7D1Ev),
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C6D0Ev,_ZThn36_N8S19905C6D0Ev),
  (VTBL_ENTRY)_ZN8S19905C6D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S19905C6D0Ev,_ZThn100_N8S19905C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19905C6D0Ev,_ZThn64_N8S19905C6D0Ev),
  (VTBL_ENTRY)_ZN8S19905C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C6D1Ev,_ZThn36_N8S19905C6D1Ev),
  (VTBL_ENTRY)_ZN8S19905C6D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S19905C6D1Ev,_ZThn100_N8S19905C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19905C6D1Ev,_ZThn64_N8S19905C6D1Ev),
  (VTBL_ENTRY)_ZN8S19905C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C20D0Ev,_ZTv0_n12_N9S19905C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19905C20D0Ev,_ZThn16_N9S19905C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S19905C20D0Ev,_ZThn100_N9S19905C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19905C20D0Ev,_ZThn64_N9S19905C20D0Ev),
  (VTBL_ENTRY)_ZN9S19905C20D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C20D1Ev,_ZTv0_n12_N9S19905C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19905C20D1Ev,_ZThn16_N9S19905C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S19905C20D1Ev,_ZThn100_N9S19905C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19905C20D1Ev,_ZThn64_N9S19905C20D1Ev),
  (VTBL_ENTRY)_ZN9S19905C20D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C18D0Ev,_ZTv0_n12_N9S19905C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S19905C18D0Ev,_ZThn104_N9S19905C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19905C18D0Ev,_ZThn68_N9S19905C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19905C18D0Ev,_ZThn20_N9S19905C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19905C18D0Ev,_ZThn4_N9S19905C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C18D1Ev,_ZTv0_n12_N9S19905C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S19905C18D1Ev,_ZThn104_N9S19905C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19905C18D1Ev,_ZThn68_N9S19905C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19905C18D1Ev,_ZThn20_N9S19905C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19905C18D1Ev,_ZThn4_N9S19905C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19905C18 = {  "S19905C18", // class name
  bases_S19905C18, 15,
  &(vtc_S19905C18[0]), // expected_vtbl_contents
  &(vtt_S19905C18[0]), // expected_vtt_contents
  ABISELECT(240,132), // object size
  NSPAIRA(_ZTI9S19905C18),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19905C18),47, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19905C18),31, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names12,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19905C1  : virtual S5266C29 , virtual S19905C3 , S19905C9 , virtual S19905C18 {
  int s19905c1f0;
  virtual  ~S19905C1(); // _ZN8S19905C1D2Ev
  S19905C1(); // tgen
};
//SIG(1 S19905C1) C1{ VBC2{ m} VBC3{ VBC4{ VBC5{ vd m} BC6{ VBC5 VBC7{ VBC5 FD Fc Fs[4]} vd Fi} BC8{ m Fp} vd Fs FL Fp FL} BC8 BC5 BC7 vd Fi} BC9{ VBC5 VBC10{ VBC7 VBC6 VBC11{ m} VBC12{ VBC2 VBC3 BC7 vd Fs} BC4 vd FC3 Fi Fs} VBC8 VBC13{ VBC11 BC14{ VBC7 VBC15{ VBC5 BC7 VBC12 BC4 Fp} VBC8 BC16{ BC11 VBC4 BC8 VBC2 vd FC6 Fs} vd Fi FC17{}} BC2 vd} BC11} VBC18{ VBC4 BC19{ vd m} BC20{ VBC2 BC6 BC3 BC5 BC8 Fp[2]} vd} vd Fi}


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

static void Test_S19905C1()
{
  extern Class_Descriptor cd_S19905C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(55,124)];
    init_test(&cd_S19905C1, buf);
    S19905C1 *dp, &lv = *(dp=new (buf) S19905C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(864,492), "sizeof(S19905C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19905C1)");
    /*is_ambiguous_... S19905C1::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*), 0, "S19905C1");
    check_base_class_offset(lv, (S5266C29*)(S19905C12*), 0, "S19905C1");
    check_base_class_offset(lv, (S5266C29*)(S19905C16*)(S19905C14*)(S19905C13*), 0, "S19905C1");
    check_base_class_offset(lv, (S5266C29*)(S19905C20*)(S19905C18*), 0, "S19905C1");
    /*is_ambiguous_... S19905C1::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C4*), ABISELECT(80,48), "S19905C1");
    /*is_ambiguous_... S19905C1::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C6*)(S19905C4*), ABISELECT(80,48), "S19905C1");
    /*is_ambiguous_... S19905C1::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*), ABISELECT(80,48), "S19905C1");
    /*is_ambiguous_... S19905C1::S19905C3 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*)(S19905C3*), ABISELECT(80,48), "S19905C1");
    /*is_ambiguous_... S19905C9::S19905C5_nt */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C9*), ABISELECT(80,48), "S19905C1");
    /*is_ambiguous_... S19905C1::S19905C6 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C6*), ABISELECT(80,48), "S19905C1");
    /*is_ambiguous_... S19905C12::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*)(S19905C12*), ABISELECT(80,48), "S19905C1");
    /*is_ambiguous_... S19905C10::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C4*)(S19905C10*), ABISELECT(80,48), "S19905C1");
    /*is_ambiguous_... S19905C10::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C6*)(S19905C4*)(S19905C10*), ABISELECT(80,48), "S19905C1");
    /*is_ambiguous_... S19905C15::S19905C5_nt */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C15*), ABISELECT(80,48), "S19905C1");
    /*is_ambiguous_... S19905C15::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*)(S19905C15*), ABISELECT(80,48), "S19905C1");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C4*)(S19905C15*), ABISELECT(80,48), "S19905C1");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C6*)(S19905C4*)(S19905C15*), ABISELECT(80,48), "S19905C1");
    /*is_ambiguous_... S19905C20::S19905C6 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C6*)(S19905C20*)(S19905C18*), ABISELECT(80,48), "S19905C1");
    /*is_ambiguous_... S19905C3::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C7*)(S19905C3*)(S19905C20*)(S19905C18*), ABISELECT(80,48), "S19905C1");
    /*is_ambiguous_... S19905C1::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C6*)(S19905C4*), ABISELECT(144,84), "S19905C1");
    /*is_ambiguous_... S19905C10::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C10*), ABISELECT(144,84), "S19905C1");
    /*is_ambiguous_... S19905C1::S19905C6 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C6*), ABISELECT(144,84), "S19905C1");
    /*is_ambiguous_... S19905C10::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C6*)(S19905C4*)(S19905C10*), ABISELECT(144,84), "S19905C1");
    /*is_ambiguous_... S19905C14::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C14*)(S19905C13*), ABISELECT(144,84), "S19905C1");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C6*)(S19905C4*)(S19905C15*), ABISELECT(144,84), "S19905C1");
    /*is_ambiguous_... S19905C20::S19905C6 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C6*)(S19905C20*)(S19905C18*), ABISELECT(144,84), "S19905C1");
    /*is_ambiguous_... S19905C1::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C6*)(S19905C4*), ABISELECT(80,48), "S19905C1");
    /*is_ambiguous_... S19905C1::S19905C4 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C4*), ABISELECT(96,56), "S19905C1");
    /*is_ambiguous_... S19905C1::S19905C3 */ AMB_check_base_class_offset(lv, (S19905C4*)(S19905C3*), ABISELECT(80,48), "S19905C1");
    check_base_class_offset(lv, (S19905C4*)(S19905C16*)(S19905C14*)(S19905C13*), ABISELECT(80,48), "S19905C1");
    check_base_class_offset(lv, (S19905C4*)(S19905C18*), ABISELECT(80,48), "S19905C1");
    check_base_class_offset(lv, (S19905C4*)(S19905C3*)(S19905C20*)(S19905C18*), ABISELECT(80,48), "S19905C1");
    /*is_ambiguous_... S19905C1::S19905C3 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C3*), ABISELECT(24,12), "S19905C1");
    /*is_ambiguous_... S19905C1::S19905C3 */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C3*), ABISELECT(16,8), "S19905C1");
    /*is_ambiguous_... S19905C1::S19905C3 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C3*), ABISELECT(32,16), "S19905C1");
    /*is_ambiguous_... S19905C1::S19905C3 */ AMB_check_base_class_offset(lv, (S19905C3*), ABISELECT(16,8), "S19905C1");
    check_base_class_offset(lv, (S19905C3*)(S19905C12*), ABISELECT(16,8), "S19905C1");
    /*is_ambiguous_... S19905C10::S19905C6 */ AMB_check_base_class_offset(lv, (S19905C6*)(S19905C10*), ABISELECT(440,260), "S19905C1");
    check_base_class_offset(lv, (S5266C26*)(S19905C10*), ABISELECT(452,268), "S19905C1");
    /*is_ambiguous_... S19905C13::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S19905C13*), ABISELECT(452,268), "S19905C1");
    /*is_ambiguous_... S19905C12::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C12*), ABISELECT(464,268), "S19905C1");
    check_base_class_offset(lv, (S19905C12*)(S19905C10*), ABISELECT(464,268), "S19905C1");
    check_base_class_offset(lv, (S19905C12*)(S19905C15*), ABISELECT(464,268), "S19905C1");
    /*is_ambiguous_... S19905C10::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C6*)(S19905C4*)(S19905C10*), ABISELECT(192,112), "S19905C1");
    /*is_ambiguous_... S19905C10::S19905C4 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C4*)(S19905C10*), ABISELECT(208,120), "S19905C1");
    /*is_ambiguous_... S19905C10::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C4*)(S19905C10*), ABISELECT(192,112), "S19905C1");
    check_base_class_offset(lv, (S19905C10*)(S19905C9*), ABISELECT(192,112), "S19905C1");
    /*is_ambiguous_... S19905C9::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C9*), ABISELECT(512,296), "S19905C1");
    /*is_ambiguous_... S19905C14::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C14*)(S19905C13*), ABISELECT(512,296), "S19905C1");
    /*is_ambiguous_... S19905C15::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C15*), ABISELECT(624,356), "S19905C1");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C6*)(S19905C4*)(S19905C15*), ABISELECT(672,384), "S19905C1");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C4*)(S19905C15*), ABISELECT(688,392), "S19905C1");
    /*is_ambiguous_... S19905C15::S19905C4 */ AMB_check_base_class_offset(lv, (S19905C4*)(S19905C15*), ABISELECT(672,384), "S19905C1");
    check_base_class_offset(lv, (S19905C15*)(S19905C14*)(S19905C13*), ABISELECT(624,356), "S19905C1");
    check_base_class_offset(lv, (S5266C26*)(S19905C16*)(S19905C14*)(S19905C13*), ABISELECT(528,300), "S19905C1");
    /*is_ambiguous_... S19905C16::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C16*)(S19905C14*)(S19905C13*), ABISELECT(536,304), "S19905C1");
    check_base_class_offset(lv, (S19905C16*)(S19905C14*)(S19905C13*), ABISELECT(528,300), "S19905C1");
    check_base_class_offset(lv, (S19905C14*)(S19905C13*), ABISELECT(528,300), "S19905C1");
    /*is_ambiguous_... S19905C13::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S19905C13*), ABISELECT(528,300), "S19905C1");
    check_base_class_offset(lv, (S19905C13*)(S19905C9*), ABISELECT(528,300), "S19905C1");
    /*is_ambiguous_... S19905C9::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S19905C9*), 0, "S19905C1");
    check_base_class_offset(lv, (S19905C9*), 0, "S19905C1");
    check_base_class_offset(lv, (S19905C19*)(S19905C18*), ABISELECT(736,424), "S19905C1");
    /*is_ambiguous_... S19905C20::S19905C6 */ AMB_check_base_class_offset(lv, (S19905C6*)(S19905C20*)(S19905C18*), ABISELECT(752,428), "S19905C1");
    /*is_ambiguous_... S19905C3::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C3*)(S19905C20*)(S19905C18*), ABISELECT(776,440), "S19905C1");
    /*is_ambiguous_... S19905C3::S19905C5_nt */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C3*)(S19905C20*)(S19905C18*), ABISELECT(768,436), "S19905C1");
    /*is_ambiguous_... S19905C3::S19905C7 */ AMB_check_base_class_offset(lv, (S19905C7*)(S19905C3*)(S19905C20*)(S19905C18*), ABISELECT(784,444), "S19905C1");
    check_base_class_offset(lv, (S19905C3*)(S19905C20*)(S19905C18*), ABISELECT(768,436), "S19905C1");
    /*is_ambiguous_... S19905C20::S19905C5_nt */ AMB_check_base_class_offset(lv, (S19905C5_nt*)(S19905C20*)(S19905C18*), ABISELECT(832,476), "S19905C1");
    /*is_ambiguous_... S19905C20::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19905C20*)(S19905C18*), ABISELECT(840,480), "S19905C1");
    check_base_class_offset(lv, (S19905C20*)(S19905C18*), ABISELECT(752,428), "S19905C1");
    check_base_class_offset(lv, (S19905C18*), ABISELECT(736,424), "S19905C1");
    check_field_offset(lv, s19905c1f0, ABISELECT(8,4), "S19905C1.s19905c1f0");
    test_class_info(&lv, &cd_S19905C1);
    dp->~S19905C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19905C1(Test_S19905C1, "S19905C1", ABISELECT(864,492));

#else // __cplusplus

extern void _ZN8S19905C1C1Ev();
extern void _ZN8S19905C1D2Ev();
Name_Map name_map_S19905C1[] = {
  NSPAIR(_ZN8S19905C1C1Ev),
  NSPAIR(_ZN8S19905C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C6;
extern VTBL_ENTRY _ZTI8S19905C6[];
extern  VTBL_ENTRY _ZTV8S19905C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C4;
extern VTBL_ENTRY _ZTI8S19905C4[];
extern  VTBL_ENTRY _ZTV8S19905C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C4[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C3;
extern VTBL_ENTRY _ZTI8S19905C3[];
extern  VTBL_ENTRY _ZTV8S19905C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C3[];
extern Class_Descriptor cd_S19905C6;
extern VTBL_ENTRY _ZTI8S19905C6[];
extern  VTBL_ENTRY _ZTV8S19905C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C6[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C12;
extern VTBL_ENTRY _ZTI9S19905C12[];
extern  VTBL_ENTRY _ZTV9S19905C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C12[];
extern Class_Descriptor cd_S19905C6;
extern VTBL_ENTRY _ZTI8S19905C6[];
extern  VTBL_ENTRY _ZTV8S19905C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C4;
extern VTBL_ENTRY _ZTI8S19905C4[];
extern  VTBL_ENTRY _ZTV8S19905C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C4[];
extern Class_Descriptor cd_S19905C10;
extern VTBL_ENTRY _ZTI9S19905C10[];
extern  VTBL_ENTRY _ZTV9S19905C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C10[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C6;
extern VTBL_ENTRY _ZTI8S19905C6[];
extern  VTBL_ENTRY _ZTV8S19905C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C4;
extern VTBL_ENTRY _ZTI8S19905C4[];
extern  VTBL_ENTRY _ZTV8S19905C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C4[];
extern Class_Descriptor cd_S19905C15;
extern VTBL_ENTRY _ZTI9S19905C15[];
extern  VTBL_ENTRY _ZTV9S19905C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C15[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C16;
extern VTBL_ENTRY _ZTI9S19905C16[];
extern  VTBL_ENTRY _ZTV9S19905C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C16[];
extern Class_Descriptor cd_S19905C14;
extern VTBL_ENTRY _ZTI9S19905C14[];
extern  VTBL_ENTRY _ZTV9S19905C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C14[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19905C13;
extern VTBL_ENTRY _ZTI9S19905C13[];
extern  VTBL_ENTRY _ZTV9S19905C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C13[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S19905C9;
extern VTBL_ENTRY _ZTI8S19905C9[];
extern  VTBL_ENTRY _ZTV8S19905C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C9[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S19905C6;
extern VTBL_ENTRY _ZTI8S19905C6[];
extern  VTBL_ENTRY _ZTV8S19905C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S19905C7;
extern VTBL_ENTRY _ZTI8S19905C7[];
extern  VTBL_ENTRY _ZTV8S19905C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C7[];
extern Class_Descriptor cd_S19905C3;
extern VTBL_ENTRY _ZTI8S19905C3[];
extern  VTBL_ENTRY _ZTV8S19905C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C3[];
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C20;
extern VTBL_ENTRY _ZTI9S19905C20[];
extern  VTBL_ENTRY _ZTV9S19905C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C20[];
extern Class_Descriptor cd_S19905C18;
extern VTBL_ENTRY _ZTI9S19905C18[];
extern  VTBL_ENTRY _ZTV9S19905C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19905C18[];
static Base_Class bases_S19905C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19905C5_nt,    ABISELECT(80,48), //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
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19905C7,    ABISELECT(144,84), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19905C6,    ABISELECT(80,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(96,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
    5, //immediately_derived
  0, 0},
  {&cd_S19905C4,    ABISELECT(80,48), //bcp->offset
    32, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    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
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19905C5_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
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19905C7,    ABISELECT(32,16), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19905C3,    ABISELECT(16,8), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19905C6,    ABISELECT(440,260), //bcp->offset
    58, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S5266C26,    ABISELECT(452,268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19905C7,    ABISELECT(464,268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19905C12,    ABISELECT(464,268), //bcp->offset
    65, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19905C6,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S17777C6_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
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19905C4,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19905C10,    ABISELECT(192,112), //bcp->offset
    45, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(512,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S19905C7,    ABISELECT(624,356), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    93, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19905C6,    ABISELECT(672,384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    96, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(688,392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19905C4,    ABISELECT(672,384), //bcp->offset
    100, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    95, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19905C15,    ABISELECT(624,356), //bcp->offset
    89, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    92, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S5266C26,    ABISELECT(528,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
    26, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(536,304), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19905C16,    ABISELECT(528,300), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    72, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19905C14,    ABISELECT(528,300), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S5266C29,    ABISELECT(528,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
    29, //immediately_derived
  0, 0},
  {&cd_S19905C13,    ABISELECT(528,300), //bcp->offset
    75, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19905C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19905C19,    ABISELECT(736,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
    21, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S19905C6,    ABISELECT(752,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    110, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(776,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
    -1, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S19905C5_nt,    ABISELECT(768,436), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S19905C7,    ABISELECT(784,444), //bcp->offset
    132, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    114, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S19905C3,    ABISELECT(768,436), //bcp->offset
    125, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    113, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S19905C5_nt,    ABISELECT(832,476), //bcp->offset
    138, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(840,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
    40, //immediately_derived
  0, 0},
  {&cd_S19905C20,    ABISELECT(752,428), //bcp->offset
    116, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    109, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S19905C18,    ABISELECT(736,424), //bcp->offset
    107, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    108, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19905C1[];
extern void ABISELECT(_ZTv0_n24_N8S19905C1D1Ev,_ZTv0_n12_N8S19905C1D1Ev)();
extern void _ZN8S19905C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C1D0Ev,_ZTv0_n12_N8S19905C1D0Ev)();
extern void _ZN8S19905C1D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19905C1D1Ev,_ZTv0_n24_N8S19905C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19905C1D1Ev,_ZThn8_N8S19905C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19905C1D0Ev,_ZTv0_n24_N8S19905C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19905C1D0Ev,_ZThn8_N8S19905C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C1D1Ev,_ZTv0_n12_N8S19905C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S19905C1D1Ev,_ZThn16_N8S19905C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C1D0Ev,_ZTv0_n12_N8S19905C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S19905C1D0Ev,_ZThn16_N8S19905C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C1D1Ev,_ZTv0_n12_N8S19905C1D1Ev)();
extern void ABISELECT(_ZThn80_N8S19905C1D1Ev,_ZThn48_N8S19905C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C1D0Ev,_ZTv0_n12_N8S19905C1D0Ev)();
extern void ABISELECT(_ZThn80_N8S19905C1D0Ev,_ZThn48_N8S19905C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C1D1Ev,_ZTv0_n12_N8S19905C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S19905C1D1Ev,_ZThn84_N8S19905C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C1D0Ev,_ZTv0_n12_N8S19905C1D0Ev)();
extern void ABISELECT(_ZThn144_N8S19905C1D0Ev,_ZThn84_N8S19905C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C1D1Ev,_ZTv0_n12_N8S19905C1D1Ev)();
extern void ABISELECT(_ZThn192_N8S19905C1D1Ev,_ZThn112_N8S19905C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C1D0Ev,_ZTv0_n12_N8S19905C1D0Ev)();
extern void ABISELECT(_ZThn192_N8S19905C1D0Ev,_ZThn112_N8S19905C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C1D1Ev,_ZTv0_n12_N8S19905C1D1Ev)();
extern void ABISELECT(_ZThn440_N8S19905C1D1Ev,_ZThn260_N8S19905C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C1D0Ev,_ZTv0_n12_N8S19905C1D0Ev)();
extern void ABISELECT(_ZThn440_N8S19905C1D0Ev,_ZThn260_N8S19905C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C1D1Ev,_ZTv0_n12_N8S19905C1D1Ev)();
extern void ABISELECT(_ZThn464_N8S19905C1D1Ev,_ZThn268_N8S19905C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C1D0Ev,_ZTv0_n12_N8S19905C1D0Ev)();
extern void ABISELECT(_ZThn464_N8S19905C1D0Ev,_ZThn268_N8S19905C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C1D1Ev,_ZTv0_n12_N8S19905C1D1Ev)();
extern void ABISELECT(_ZThn528_N8S19905C1D1Ev,_ZThn300_N8S19905C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C1D0Ev,_ZTv0_n12_N8S19905C1D0Ev)();
extern void ABISELECT(_ZThn528_N8S19905C1D0Ev,_ZThn300_N8S19905C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C1D1Ev,_ZTv0_n12_N8S19905C1D1Ev)();
extern void ABISELECT(_ZThn624_N8S19905C1D1Ev,_ZThn356_N8S19905C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C1D0Ev,_ZTv0_n12_N8S19905C1D0Ev)();
extern void ABISELECT(_ZThn624_N8S19905C1D0Ev,_ZThn356_N8S19905C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C1D1Ev,_ZTv0_n12_N8S19905C1D1Ev)();
extern void ABISELECT(_ZThn672_N8S19905C1D1Ev,_ZThn384_N8S19905C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C1D0Ev,_ZTv0_n12_N8S19905C1D0Ev)();
extern void ABISELECT(_ZThn672_N8S19905C1D0Ev,_ZThn384_N8S19905C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19905C1D1Ev,_ZTv0_n28_N8S19905C1D1Ev)();
extern void ABISELECT(_ZThn736_N8S19905C1D1Ev,_ZThn424_N8S19905C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19905C1D0Ev,_ZTv0_n28_N8S19905C1D0Ev)();
extern void ABISELECT(_ZThn736_N8S19905C1D0Ev,_ZThn424_N8S19905C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C1D1Ev,_ZTv0_n12_N8S19905C1D1Ev)();
extern void ABISELECT(_ZThn752_N8S19905C1D1Ev,_ZThn428_N8S19905C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C1D0Ev,_ZTv0_n12_N8S19905C1D0Ev)();
extern void ABISELECT(_ZThn752_N8S19905C1D0Ev,_ZThn428_N8S19905C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n56_N8S19905C1D1Ev,_ZTvn12_n28_N8S19905C1D1Ev)();
extern void ABISELECT(_ZTvn32_n56_N8S19905C1D0Ev,_ZTvn12_n28_N8S19905C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C1D1Ev,_ZTv0_n12_N8S19905C1D1Ev)();
extern void ABISELECT(_ZThn784_N8S19905C1D1Ev,_ZThn444_N8S19905C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C1D0Ev,_ZTv0_n12_N8S19905C1D0Ev)();
extern void ABISELECT(_ZThn784_N8S19905C1D0Ev,_ZThn444_N8S19905C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn96_n56_N8S19905C1D1Ev,_ZTvn52_n28_N8S19905C1D1Ev)();
extern void ABISELECT(_ZTvn96_n56_N8S19905C1D0Ev,_ZTvn52_n28_N8S19905C1D0Ev)();
static  VTBL_ENTRY vtc_S19905C1[] = {
  ABISELECT(736,424),
  ABISELECT(624,356),
  ABISELECT(528,300),
  ABISELECT(512,296),
  ABISELECT(80,48),
  ABISELECT(16,8),
  0,
  ABISELECT(464,268),
  ABISELECT(452,268),
  ABISELECT(440,260),
  ABISELECT(144,84),
  ABISELECT(192,112),
  ABISELECT(80,48),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C1D1Ev,_ZTv0_n12_N8S19905C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C1D0Ev,_ZTv0_n12_N8S19905C1D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19905C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19905C1D1Ev,_ZTv0_n24_N8S19905C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19905C1D0Ev,_ZTv0_n24_N8S19905C1D0Ev),
  ABISELECT(48,32),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19905C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C1D1Ev,_ZTv0_n12_N8S19905C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C1D0Ev,_ZTv0_n12_N8S19905C1D0Ev),
  ABISELECT(64,36),
  0,
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI8S19905C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C1D1Ev,_ZTv0_n12_N8S19905C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C1D0Ev,_ZTv0_n12_N8S19905C1D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19905C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C1D1Ev,_ZTv0_n12_N8S19905C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C1D0Ev,_ZTv0_n12_N8S19905C1D0Ev),
  ABISELECT(-112,-64),
  ABISELECT(-176,-104),
  ABISELECT(-192,-112),
  ABISELECT(272,156),
  ABISELECT(260,156),
  ABISELECT(248,148),
  ABISELECT(-48,-28),
  ABISELECT(-112,-64),
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI8S19905C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C1D1Ev,_ZTv0_n12_N8S19905C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C1D0Ev,_ZTv0_n12_N8S19905C1D0Ev),
  ABISELECT(-296,-176),
  ABISELECT(-360,-212),
  ABISELECT(-440,-260),
  ABISELECT(-440,-260),
  (VTBL_ENTRY)&(_ZTI8S19905C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C1D1Ev,_ZTv0_n12_N8S19905C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C1D0Ev,_ZTv0_n12_N8S19905C1D0Ev),
  ABISELECT(-320,-184),
  ABISELECT(-384,-220),
  ABISELECT(-448,-260),
  ABISELECT(-464,-268),
  ABISELECT(-384,-220),
  ABISELECT(-464,-268),
  ABISELECT(-464,-268),
  (VTBL_ENTRY)&(_ZTI8S19905C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C1D1Ev,_ZTv0_n12_N8S19905C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C1D0Ev,_ZTv0_n12_N8S19905C1D0Ev),
  ABISELECT(-76,-32),
  ABISELECT(-16,-4),
  ABISELECT(-512,-292),
  ABISELECT(-64,-32),
  ABISELECT(96,56),
  ABISELECT(-528,-300),
  ABISELECT(-384,-216),
  ABISELECT(-448,-252),
  ABISELECT(-448,-252),
  ABISELECT(-528,-300),
  ABISELECT(-528,-300),
  (VTBL_ENTRY)&(_ZTI8S19905C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C1D1Ev,_ZTv0_n12_N8S19905C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C1D0Ev,_ZTv0_n12_N8S19905C1D0Ev),
  ABISELECT(-480,-272),
  ABISELECT(-544,-308),
  ABISELECT(-608,-348),
  ABISELECT(-624,-356),
  ABISELECT(-160,-88),
  ABISELECT(-544,-308),
  ABISELECT(-624,-356),
  ABISELECT(-624,-356),
  (VTBL_ENTRY)&(_ZTI8S19905C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C1D1Ev,_ZTv0_n12_N8S19905C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C1D0Ev,_ZTv0_n12_N8S19905C1D0Ev),
  ABISELECT(-528,-300),
  ABISELECT(-592,-336),
  ABISELECT(-672,-384),
  ABISELECT(-672,-384),
  (VTBL_ENTRY)&(_ZTI8S19905C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C1D1Ev,_ZTv0_n12_N8S19905C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C1D0Ev,_ZTv0_n12_N8S19905C1D0Ev),
  ABISELECT(-736,-424),
  ABISELECT(-736,-424),
  ABISELECT(-592,-340),
  ABISELECT(-656,-376),
  ABISELECT(-656,-376),
  ABISELECT(-736,-424),
  (VTBL_ENTRY)&(_ZTI8S19905C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19905C1D1Ev,_ZTv0_n28_N8S19905C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19905C1D0Ev,_ZTv0_n28_N8S19905C1D0Ev),
  ABISELECT(-672,-380),
  ABISELECT(-752,-428),
  ABISELECT(-608,-344),
  ABISELECT(-672,-380),
  ABISELECT(-752,-428),
  ABISELECT(-752,-428),
  (VTBL_ENTRY)&(_ZTI8S19905C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C1D1Ev,_ZTv0_n12_N8S19905C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C1D0Ev,_ZTv0_n12_N8S19905C1D0Ev),
  ABISELECT(-624,-352),
  ABISELECT(-688,-388),
  ABISELECT(-688,-388),
  ABISELECT(-768,-436),
  (VTBL_ENTRY)&(_ZTI8S19905C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n56_N8S19905C1D1Ev,_ZTvn12_n28_N8S19905C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n56_N8S19905C1D0Ev,_ZTvn12_n28_N8S19905C1D0Ev),
  ABISELECT(-704,-396),
  ABISELECT(-784,-444),
  ABISELECT(-784,-444),
  (VTBL_ENTRY)&(_ZTI8S19905C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C1D1Ev,_ZTv0_n12_N8S19905C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C1D0Ev,_ZTv0_n12_N8S19905C1D0Ev),
  ABISELECT(-832,-476),
  (VTBL_ENTRY)&(_ZTI8S19905C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n56_N8S19905C1D1Ev,_ZTvn52_n28_N8S19905C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n56_N8S19905C1D0Ev,_ZTvn52_n28_N8S19905C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19905C1[];
extern void ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev)();
extern void _ZN8S19905C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev)();
extern void _ZN8S19905C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C9__8S19905C1[] = {
  ABISELECT(624,356),
  ABISELECT(528,300),
  ABISELECT(512,296),
  ABISELECT(80,48),
  ABISELECT(16,8),
  0,
  ABISELECT(464,268),
  ABISELECT(452,268),
  ABISELECT(440,260),
  ABISELECT(144,84),
  ABISELECT(192,112),
  ABISELECT(80,48),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev)();
extern void ABISELECT(_ZThn80_N8S19905C9D1Ev,_ZThn48_N8S19905C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev)();
extern void ABISELECT(_ZThn80_N8S19905C9D0Ev,_ZThn48_N8S19905C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__8S19905C9__8S19905C1[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI8S19905C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev)();
extern void ABISELECT(_ZThn192_N8S19905C9D1Ev,_ZThn112_N8S19905C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev)();
extern void ABISELECT(_ZThn192_N8S19905C9D0Ev,_ZThn112_N8S19905C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C10__8S19905C9__8S19905C1[] = {
  ABISELECT(-112,-64),
  ABISELECT(-176,-104),
  ABISELECT(-192,-112),
  ABISELECT(272,156),
  ABISELECT(260,156),
  ABISELECT(248,148),
  ABISELECT(-48,-28),
  ABISELECT(-112,-64),
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI8S19905C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev)();
extern void ABISELECT(_ZThn144_N8S19905C9D1Ev,_ZThn84_N8S19905C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev)();
extern void ABISELECT(_ZThn144_N8S19905C9D0Ev,_ZThn84_N8S19905C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C9__8S19905C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19905C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev)();
extern void ABISELECT(_ZThn440_N8S19905C9D1Ev,_ZThn260_N8S19905C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev)();
extern void ABISELECT(_ZThn440_N8S19905C9D0Ev,_ZThn260_N8S19905C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C6__8S19905C9__8S19905C1[] = {
  ABISELECT(-296,-176),
  ABISELECT(-360,-212),
  ABISELECT(-440,-260),
  ABISELECT(-440,-260),
  (VTBL_ENTRY)&(_ZTI8S19905C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev)();
extern void ABISELECT(_ZThn464_N8S19905C9D1Ev,_ZThn268_N8S19905C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev)();
extern void ABISELECT(_ZThn464_N8S19905C9D0Ev,_ZThn268_N8S19905C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C12__8S19905C9__8S19905C1[] = {
  ABISELECT(-320,-184),
  ABISELECT(-384,-220),
  ABISELECT(-448,-260),
  ABISELECT(-464,-268),
  ABISELECT(-384,-220),
  ABISELECT(-464,-268),
  ABISELECT(-464,-268),
  (VTBL_ENTRY)&(_ZTI8S19905C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19905C9D1Ev,_ZTv0_n24_N8S19905C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19905C9D1Ev,_ZThn8_N8S19905C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19905C9D0Ev,_ZTv0_n24_N8S19905C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19905C9D0Ev,_ZThn8_N8S19905C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C3__8S19905C9__8S19905C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19905C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19905C9D1Ev,_ZTv0_n24_N8S19905C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19905C9D0Ev,_ZTv0_n24_N8S19905C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev)();
extern void ABISELECT(_ZThn32_N8S19905C9D1Ev,_ZThn16_N8S19905C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev)();
extern void ABISELECT(_ZThn32_N8S19905C9D0Ev,_ZThn16_N8S19905C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C3__A1__8S19905C9__8S19905C1[] = {
  ABISELECT(48,32),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19905C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev)();
extern void ABISELECT(_ZThn528_N8S19905C9D1Ev,_ZThn300_N8S19905C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev)();
extern void ABISELECT(_ZThn528_N8S19905C9D0Ev,_ZThn300_N8S19905C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C13__8S19905C9__8S19905C1[] = {
  ABISELECT(-76,-32),
  ABISELECT(-16,-4),
  ABISELECT(-512,-292),
  ABISELECT(-64,-32),
  ABISELECT(96,56),
  ABISELECT(-528,-300),
  ABISELECT(-384,-216),
  ABISELECT(-448,-252),
  ABISELECT(-448,-252),
  ABISELECT(-528,-300),
  ABISELECT(-528,-300),
  (VTBL_ENTRY)&(_ZTI8S19905C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev)();
extern void ABISELECT(_ZThn624_N8S19905C9D1Ev,_ZThn356_N8S19905C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev)();
extern void ABISELECT(_ZThn624_N8S19905C9D0Ev,_ZThn356_N8S19905C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C15__8S19905C9__8S19905C1[] = {
  ABISELECT(-480,-272),
  ABISELECT(-544,-308),
  ABISELECT(-608,-348),
  ABISELECT(-624,-356),
  ABISELECT(-160,-88),
  ABISELECT(-544,-308),
  ABISELECT(-624,-356),
  ABISELECT(-624,-356),
  (VTBL_ENTRY)&(_ZTI8S19905C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev)();
extern void ABISELECT(_ZThn672_N8S19905C9D1Ev,_ZThn384_N8S19905C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev)();
extern void ABISELECT(_ZThn672_N8S19905C9D0Ev,_ZThn384_N8S19905C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C49S19905C15__A2__8S19905C9__8S19905C1[] = {
  ABISELECT(-528,-300),
  ABISELECT(-592,-336),
  ABISELECT(-672,-384),
  ABISELECT(-672,-384),
  (VTBL_ENTRY)&(_ZTI8S19905C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev),
};
extern void _ZN8S19905C3D1Ev();
extern void _ZN8S19905C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19905C3__8S19905C1[] = {
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&_ZN8S19905C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19905C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C3__A1__8S19905C1[] = {
  ABISELECT(48,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZThn48_N8S19905C7D1Ev,_ZThn32_N8S19905C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void ABISELECT(_ZThn48_N8S19905C7D0Ev,_ZThn32_N8S19905C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C78S19905C3__A1__8S19905C1[] = {
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S19905C3D1Ev,_ZThn40_N8S19905C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
extern void ABISELECT(_ZThn64_N8S19905C3D0Ev,_ZThn40_N8S19905C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__8S19905C3__8S19905C1[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZThn128_N8S19905C3D1Ev,_ZThn76_N8S19905C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
extern void ABISELECT(_ZThn128_N8S19905C3D0Ev,_ZThn76_N8S19905C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C3__8S19905C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19905C3D1Ev,_ZThn8_N8S19905C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19905C3D0Ev,_ZThn8_N8S19905C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__A__8S19905C3__8S19905C1[] = {
  ABISELECT(48,32),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void _ZN8S19905C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void _ZN8S19905C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__8S19905C1[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void _ZN8S19905C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void _ZN8S19905C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C68S19905C4__8S19905C1[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S19905C6D1Ev,_ZThn36_N8S19905C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S19905C6D0Ev,_ZThn36_N8S19905C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C68S19905C4__8S19905C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZThn64_N8S19905C4D1Ev,_ZThn36_N8S19905C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void ABISELECT(_ZThn64_N8S19905C4D0Ev,_ZThn36_N8S19905C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C4__8S19905C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C1[] = {
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C7__8S19905C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev)();
extern void _ZN9S19905C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev)();
extern void _ZN9S19905C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C10__8S19905C1[] = {
  ABISELECT(-112,-64),
  ABISELECT(-176,-104),
  ABISELECT(-192,-112),
  ABISELECT(272,156),
  ABISELECT(260,156),
  ABISELECT(248,148),
  ABISELECT(-48,-28),
  ABISELECT(-112,-64),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void _ZN8S19905C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void _ZN8S19905C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C49S19905C10__A1__8S19905C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-112,-64),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void _ZN8S19905C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void _ZN8S19905C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C68S19905C49S19905C10__A2__8S19905C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-112,-64),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C68S19905C49S19905C10__A2__8S19905C1[] = {
  ABISELECT(112,64),
  ABISELECT(112,64),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C68S19905C49S19905C10__A2__8S19905C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C49S19905C10__A1__8S19905C1[] = {
  ABISELECT(112,64),
  ABISELECT(112,64),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C49S19905C10__A1__8S19905C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__9S19905C10__8S19905C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI9S19905C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C10__8S19905C1[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(112,64),
  ABISELECT(112,64),
  (VTBL_ENTRY)&(_ZTI9S19905C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev)();
extern void ABISELECT(_ZThn248_N9S19905C10D1Ev,_ZThn148_N9S19905C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev)();
extern void ABISELECT(_ZThn248_N9S19905C10D0Ev,_ZThn148_N9S19905C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C6__9S19905C10__8S19905C1[] = {
  ABISELECT(-296,-176),
  ABISELECT(-360,-212),
  ABISELECT(-248,-148),
  ABISELECT(-248,-148),
  (VTBL_ENTRY)&(_ZTI9S19905C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev)();
extern void ABISELECT(_ZThn272_N9S19905C10D1Ev,_ZThn156_N9S19905C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev)();
extern void ABISELECT(_ZThn272_N9S19905C10D0Ev,_ZThn156_N9S19905C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C12__9S19905C10__8S19905C1[] = {
  ABISELECT(-320,-184),
  ABISELECT(-384,-220),
  ABISELECT(-448,-260),
  ABISELECT(-464,-268),
  ABISELECT(-384,-220),
  ABISELECT(-272,-156),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI9S19905C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19905C10D1Ev,_ZTv0_n24_N9S19905C10D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19905C10D0Ev,_ZTv0_n24_N9S19905C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C3__9S19905C10__8S19905C1[] = {
  ABISELECT(176,104),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI9S19905C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C10D1Ev,_ZTv0_n24_N9S19905C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C10D0Ev,_ZTv0_n24_N9S19905C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C3__A1__9S19905C10__8S19905C1[] = {
  ABISELECT(48,32),
  ABISELECT(160,96),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI9S19905C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void _ZN8S19905C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void _ZN8S19905C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C6__A1__8S19905C1[] = {
  ABISELECT(-296,-176),
  ABISELECT(-360,-212),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C6__A1__8S19905C1[] = {
  ABISELECT(360,212),
  ABISELECT(360,212),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C6__A1__8S19905C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(296,176),
  ABISELECT(296,176),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void _ZN9S19905C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
extern void _ZN9S19905C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C12__8S19905C1[] = {
  ABISELECT(-320,-184),
  ABISELECT(-384,-220),
  ABISELECT(-448,-260),
  ABISELECT(-464,-268),
  ABISELECT(-384,-220),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C79S19905C12__A2__8S19905C1[] = {
  ABISELECT(-384,-220),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C79S19905C12__A2__8S19905C1[] = {
  ABISELECT(384,220),
  ABISELECT(384,220),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19905C12D1Ev,_ZTv0_n24_N9S19905C12D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19905C12D0Ev,_ZTv0_n24_N9S19905C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C3__9S19905C12__8S19905C1[] = {
  ABISELECT(448,260),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(448,260),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C12D1Ev,_ZTv0_n24_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C12D0Ev,_ZTv0_n24_N9S19905C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C12__8S19905C1[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(384,220),
  ABISELECT(384,220),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__9S19905C12__8S19905C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(320,184),
  ABISELECT(320,184),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C3__A1__9S19905C12__8S19905C1[] = {
  ABISELECT(48,32),
  ABISELECT(432,252),
  ABISELECT(432,252),
  (VTBL_ENTRY)&(_ZTI9S19905C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev)();
extern void _ZN9S19905C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev)();
extern void _ZN9S19905C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C13__8S19905C1[] = {
  ABISELECT(-76,-32),
  ABISELECT(-16,-4),
  ABISELECT(-512,-292),
  ABISELECT(-64,-32),
  ABISELECT(96,56),
  ABISELECT(-528,-300),
  ABISELECT(-384,-216),
  ABISELECT(-448,-252),
  ABISELECT(-448,-252),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void _ZN9S19905C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
extern void _ZN9S19905C14D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C149S19905C13__8S19905C1[] = {
  ABISELECT(-16,-4),
  ABISELECT(-512,-292),
  ABISELECT(-64,-32),
  ABISELECT(96,56),
  ABISELECT(-528,-300),
  ABISELECT(-384,-216),
  ABISELECT(-448,-252),
  ABISELECT(-448,-252),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev)();
extern void _ZN9S19905C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev)();
extern void _ZN9S19905C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C169S19905C149S19905C13__8S19905C1[] = {
  ABISELECT(-528,-300),
  ABISELECT(-384,-216),
  ABISELECT(-448,-252),
  ABISELECT(-448,-252),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C169S19905C149S19905C13__8S19905C1[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(448,252),
  ABISELECT(448,252),
  (VTBL_ENTRY)&(_ZTI9S19905C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__9S19905C169S19905C149S19905C13__8S19905C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(384,216),
  ABISELECT(384,216),
  (VTBL_ENTRY)&(_ZTI9S19905C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__9S19905C149S19905C13__8S19905C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(384,216),
  ABISELECT(384,216),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C149S19905C13__8S19905C1[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(448,252),
  ABISELECT(448,252),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void ABISELECT(_ZThn96_N9S19905C14D1Ev,_ZThn56_N9S19905C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
extern void ABISELECT(_ZThn96_N9S19905C14D0Ev,_ZThn56_N9S19905C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C15__9S19905C149S19905C13__8S19905C1[] = {
  ABISELECT(-480,-272),
  ABISELECT(-544,-308),
  ABISELECT(-608,-348),
  ABISELECT(-624,-356),
  ABISELECT(-160,-88),
  ABISELECT(-544,-308),
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C12__9S19905C149S19905C13__8S19905C1[] = {
  ABISELECT(-320,-184),
  ABISELECT(-384,-220),
  ABISELECT(-448,-260),
  ABISELECT(-464,-268),
  ABISELECT(-384,-220),
  ABISELECT(64,32),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19905C14D1Ev,_ZTv0_n24_N9S19905C14D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19905C14D0Ev,_ZTv0_n24_N9S19905C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C3__9S19905C149S19905C13__8S19905C1[] = {
  ABISELECT(512,292),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(512,292),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C14D1Ev,_ZTv0_n24_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C14D0Ev,_ZTv0_n24_N9S19905C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C3__A2__9S19905C149S19905C13__8S19905C1[] = {
  ABISELECT(48,32),
  ABISELECT(496,284),
  ABISELECT(496,284),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev)();
extern void ABISELECT(_ZThn144_N9S19905C14D1Ev,_ZThn84_N9S19905C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev)();
extern void ABISELECT(_ZThn144_N9S19905C14D0Ev,_ZThn84_N9S19905C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C49S19905C15__A1__9S19905C149S19905C13__8S19905C1[] = {
  ABISELECT(-528,-300),
  ABISELECT(-592,-336),
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19905C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__9S19905C13__8S19905C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(384,216),
  ABISELECT(384,216),
  (VTBL_ENTRY)&(_ZTI9S19905C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C13__8S19905C1[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(448,252),
  ABISELECT(448,252),
  (VTBL_ENTRY)&(_ZTI9S19905C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev)();
extern void ABISELECT(_ZThn96_N9S19905C13D1Ev,_ZThn56_N9S19905C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev)();
extern void ABISELECT(_ZThn96_N9S19905C13D0Ev,_ZThn56_N9S19905C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C15__9S19905C13__8S19905C1[] = {
  ABISELECT(-480,-272),
  ABISELECT(-544,-308),
  ABISELECT(-608,-348),
  ABISELECT(-624,-356),
  ABISELECT(-160,-88),
  ABISELECT(-544,-308),
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S19905C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C12__9S19905C13__8S19905C1[] = {
  ABISELECT(-320,-184),
  ABISELECT(-384,-220),
  ABISELECT(-448,-260),
  ABISELECT(-464,-268),
  ABISELECT(-384,-220),
  ABISELECT(64,32),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI9S19905C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19905C13D1Ev,_ZTv0_n24_N9S19905C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19905C13D0Ev,_ZTv0_n24_N9S19905C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C3__9S19905C13__8S19905C1[] = {
  ABISELECT(512,292),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(512,292),
  (VTBL_ENTRY)&(_ZTI9S19905C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C13D1Ev,_ZTv0_n24_N9S19905C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C13D0Ev,_ZTv0_n24_N9S19905C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C3__A2__9S19905C13__8S19905C1[] = {
  ABISELECT(48,32),
  ABISELECT(496,284),
  ABISELECT(496,284),
  (VTBL_ENTRY)&(_ZTI9S19905C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev)();
extern void ABISELECT(_ZThn144_N9S19905C13D1Ev,_ZThn84_N9S19905C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev)();
extern void ABISELECT(_ZThn144_N9S19905C13D0Ev,_ZThn84_N9S19905C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C49S19905C15__A1__9S19905C13__8S19905C1[] = {
  ABISELECT(-528,-300),
  ABISELECT(-592,-336),
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19905C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void _ZN9S19905C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
extern void _ZN9S19905C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C15__8S19905C1[] = {
  ABISELECT(-480,-272),
  ABISELECT(-544,-308),
  ABISELECT(-608,-348),
  ABISELECT(-624,-356),
  ABISELECT(-160,-88),
  ABISELECT(-544,-308),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C79S19905C15__A3__8S19905C1[] = {
  ABISELECT(-544,-308),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C79S19905C15__A3__8S19905C1[] = {
  ABISELECT(544,308),
  ABISELECT(544,308),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void _ZN8S19905C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
extern void _ZN8S19905C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C49S19905C15__A2__8S19905C1[] = {
  ABISELECT(-528,-300),
  ABISELECT(-592,-336),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void _ZN8S19905C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void _ZN8S19905C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C68S19905C49S19905C15__A3__8S19905C1[] = {
  ABISELECT(-528,-300),
  ABISELECT(-592,-336),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C68S19905C49S19905C15__A3__8S19905C1[] = {
  ABISELECT(592,336),
  ABISELECT(592,336),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C68S19905C49S19905C15__A3__8S19905C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(528,300),
  ABISELECT(528,300),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C49S19905C15__A2__8S19905C1[] = {
  ABISELECT(592,336),
  ABISELECT(592,336),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C49S19905C15__A2__8S19905C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(528,300),
  ABISELECT(528,300),
  (VTBL_ENTRY)&(_ZTI8S19905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C15__8S19905C1[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(544,308),
  ABISELECT(544,308),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C12__9S19905C15__8S19905C1[] = {
  ABISELECT(-320,-184),
  ABISELECT(-384,-220),
  ABISELECT(-448,-260),
  ABISELECT(-464,-268),
  ABISELECT(-384,-220),
  ABISELECT(160,88),
  ABISELECT(160,88),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19905C15D1Ev,_ZTv0_n24_N9S19905C15D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19905C15D0Ev,_ZTv0_n24_N9S19905C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C3__9S19905C15__8S19905C1[] = {
  ABISELECT(608,348),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(608,348),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C15D1Ev,_ZTv0_n24_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19905C15D0Ev,_ZTv0_n24_N9S19905C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__A1__9S19905C15__8S19905C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(480,272),
  ABISELECT(480,272),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C3__A2__9S19905C15__8S19905C1[] = {
  ABISELECT(48,32),
  ABISELECT(592,340),
  ABISELECT(592,340),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev)();
extern void ABISELECT(_ZThn48_N9S19905C15D1Ev,_ZThn28_N9S19905C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev)();
extern void ABISELECT(_ZThn48_N9S19905C15D0Ev,_ZThn28_N9S19905C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C4__A__9S19905C15__8S19905C1[] = {
  ABISELECT(-528,-300),
  ABISELECT(-592,-336),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19905C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev),
};
extern void _ZN9S19905C18D1Ev();
extern void _ZN9S19905C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19905C18__8S19905C1[] = {
  ABISELECT(-736,-424),
  ABISELECT(-592,-340),
  ABISELECT(-656,-376),
  ABISELECT(-656,-376),
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C18[0]),
  (VTBL_ENTRY)&_ZN9S19905C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19905C18D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19905C20D1Ev,_ZTv0_n12_N9S19905C20D1Ev)();
extern void _ZN9S19905C20D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C20D0Ev,_ZTv0_n12_N9S19905C20D0Ev)();
extern void _ZN9S19905C20D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C209S19905C18__8S19905C1[] = {
  ABISELECT(-672,-380),
  ABISELECT(-752,-428),
  ABISELECT(-608,-344),
  ABISELECT(-672,-380),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19905C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C20D1Ev,_ZTv0_n12_N9S19905C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C20D0Ev,_ZTv0_n12_N9S19905C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void _ZN8S19905C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
extern void _ZN8S19905C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C69S19905C209S19905C18__A4__8S19905C1[] = {
  ABISELECT(-608,-344),
  ABISELECT(-672,-380),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C69S19905C209S19905C18__A4__8S19905C1[] = {
  ABISELECT(672,380),
  ABISELECT(672,380),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C69S19905C209S19905C18__A4__8S19905C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(608,344),
  ABISELECT(608,344),
  (VTBL_ENTRY)&(_ZTI8S19905C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev),
};
extern void _ZN8S19905C3D1Ev();
extern void _ZN8S19905C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19905C39S19905C209S19905C18__A1__8S19905C1[] = {
  ABISELECT(-624,-352),
  ABISELECT(-688,-388),
  ABISELECT(-688,-388),
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&_ZN8S19905C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19905C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void _ZN8S19905C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
extern void _ZN8S19905C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C39S19905C209S19905C18__A4__8S19905C1[] = {
  ABISELECT(-704,-396),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19905C5_nt__8S19905C78S19905C39S19905C209S19905C18__A4__8S19905C1[] = {
  ABISELECT(704,396),
  ABISELECT(704,396),
  (VTBL_ENTRY)&(_ZTI8S19905C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C4__8S19905C39S19905C209S19905C18__A1__8S19905C1[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(688,388),
  ABISELECT(688,388),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__8S19905C39S19905C209S19905C18__A1__8S19905C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(624,352),
  ABISELECT(624,352),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19905C3D1Ev,_ZThn8_N8S19905C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19905C3D0Ev,_ZThn8_N8S19905C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C7__A__8S19905C39S19905C209S19905C18__A1__8S19905C1[] = {
  ABISELECT(-704,-396),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C20D1Ev,_ZTv0_n12_N9S19905C20D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C20D0Ev,_ZTv0_n12_N9S19905C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C209S19905C18__8S19905C1[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(672,380),
  ABISELECT(672,380),
  (VTBL_ENTRY)&(_ZTI9S19905C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C20D1Ev,_ZTv0_n12_N9S19905C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C20D0Ev,_ZTv0_n12_N9S19905C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C20D1Ev,_ZTv0_n12_N9S19905C20D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C20D0Ev,_ZTv0_n12_N9S19905C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__9S19905C209S19905C18__8S19905C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(608,344),
  ABISELECT(608,344),
  (VTBL_ENTRY)&(_ZTI9S19905C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C20D1Ev,_ZTv0_n12_N9S19905C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C20D0Ev,_ZTv0_n12_N9S19905C20D0Ev),
};
extern void ABISELECT(_ZThn16_N9S19905C20D1Ev,_ZThn8_N9S19905C20D1Ev)();
extern void ABISELECT(_ZThn16_N9S19905C20D0Ev,_ZThn8_N9S19905C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C3__9S19905C209S19905C18__8S19905C1[] = {
  ABISELECT(-624,-352),
  ABISELECT(-688,-388),
  ABISELECT(-688,-388),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19905C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19905C20D1Ev,_ZThn8_N9S19905C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19905C20D0Ev,_ZThn8_N9S19905C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C20D1Ev,_ZTv0_n12_N9S19905C20D1Ev)();
extern void ABISELECT(_ZThn32_N9S19905C20D1Ev,_ZThn16_N9S19905C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C20D0Ev,_ZTv0_n12_N9S19905C20D0Ev)();
extern void ABISELECT(_ZThn32_N9S19905C20D0Ev,_ZThn16_N9S19905C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C3__A1__9S19905C209S19905C18__8S19905C1[] = {
  ABISELECT(-704,-396),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19905C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C20D1Ev,_ZTv0_n12_N9S19905C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C20D0Ev,_ZTv0_n12_N9S19905C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C18D1Ev,_ZTv0_n12_N9S19905C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C18D0Ev,_ZTv0_n12_N9S19905C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C4__9S19905C18__8S19905C1[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(656,376),
  ABISELECT(656,376),
  (VTBL_ENTRY)&(_ZTI9S19905C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C18D1Ev,_ZTv0_n12_N9S19905C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C18D0Ev,_ZTv0_n12_N9S19905C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C18D1Ev,_ZTv0_n12_N9S19905C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19905C18D0Ev,_ZTv0_n12_N9S19905C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C7__9S19905C18__8S19905C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(592,340),
  ABISELECT(592,340),
  (VTBL_ENTRY)&(_ZTI9S19905C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C18D1Ev,_ZTv0_n12_N9S19905C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C18D0Ev,_ZTv0_n12_N9S19905C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C18D1Ev,_ZTv0_n12_N9S19905C18D1Ev)();
extern void ABISELECT(_ZThn16_N9S19905C18D1Ev,_ZThn4_N9S19905C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C18D0Ev,_ZTv0_n12_N9S19905C18D0Ev)();
extern void ABISELECT(_ZThn16_N9S19905C18D0Ev,_ZThn4_N9S19905C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C20__9S19905C18__8S19905C1[] = {
  ABISELECT(-672,-380),
  ABISELECT(-752,-428),
  ABISELECT(-608,-344),
  ABISELECT(-672,-380),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI9S19905C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C18D1Ev,_ZTv0_n12_N9S19905C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C18D0Ev,_ZTv0_n12_N9S19905C18D0Ev),
};
extern void ABISELECT(_ZThn32_N9S19905C18D1Ev,_ZThn12_N9S19905C18D1Ev)();
extern void ABISELECT(_ZThn32_N9S19905C18D0Ev,_ZThn12_N9S19905C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19905C39S19905C20__9S19905C18__8S19905C1[] = {
  ABISELECT(-624,-352),
  ABISELECT(-688,-388),
  ABISELECT(-688,-388),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI9S19905C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N9S19905C18D1Ev,_ZThn12_N9S19905C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N9S19905C18D0Ev,_ZThn12_N9S19905C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19905C18D1Ev,_ZTv0_n12_N9S19905C18D1Ev)();
extern void ABISELECT(_ZThn48_N9S19905C18D1Ev,_ZThn20_N9S19905C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19905C18D0Ev,_ZTv0_n12_N9S19905C18D0Ev)();
extern void ABISELECT(_ZThn48_N9S19905C18D0Ev,_ZThn20_N9S19905C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19905C78S19905C39S19905C20__A1__9S19905C18__8S19905C1[] = {
  ABISELECT(-704,-396),
  ABISELECT(-48,-20),
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI9S19905C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C18D1Ev,_ZTv0_n12_N9S19905C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19905C18D0Ev,_ZTv0_n12_N9S19905C18D0Ev),
};
static  VTT_ENTRY vtt_S19905C1[] = {
  {&(_ZTV8S19905C1[16]),  16,142},
  {&(_tg__ZTV8S19905C9__8S19905C1[15]),  15,17},
  {&(_tg__ZTV8S19905C4__8S19905C9__8S19905C1[5]),  5,7},
  {&(_tg__ZTV9S19905C10__8S19905C9__8S19905C1[11]),  11,13},
  {&(_tg__ZTV8S19905C7__8S19905C9__8S19905C1[4]),  4,6},
  {&(_tg__ZTV8S19905C6__8S19905C9__8S19905C1[5]),  5,7},
  {&(_tg__ZTV9S19905C12__8S19905C9__8S19905C1[8]),  8,10},
  {&(_tg__ZTV8S19905C3__8S19905C9__8S19905C1[6]),  6,8},
  {&(_tg__ZTV8S19905C4__8S19905C9__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C78S19905C3__A1__8S19905C9__8S19905C1[4]),  4,6},
  {&(_tg__ZTV9S19905C13__8S19905C9__8S19905C1[12]),  12,14},
  {&(_tg__ZTV9S19905C15__8S19905C9__8S19905C1[9]),  9,11},
  {&(_tg__ZTV8S19905C49S19905C15__A2__8S19905C9__8S19905C1[5]),  5,7},
  {&(_ZTV8S19905C1[24]),  24,142},
  {&(_ZTV8S19905C1[37]),  37,142},
  {&(_ZTV8S19905C1[37]),  37,142},
  {&(_ZTV8S19905C1[43]),  43,142},
  {&(_ZTV8S19905C1[30]),  30,142},
  {&(_ZTV8S19905C1[56]),  56,142},
  {&(_ZTV8S19905C1[63]),  63,142},
  {&(_ZTV8S19905C1[73]),  73,142},
  {&(_ZTV8S19905C1[87]),  87,142},
  {&(_ZTV8S19905C1[98]),  98,142},
  {&(_ZTV8S19905C1[105]),  105,142},
  {&(_ZTV8S19905C1[114]),  114,142},
  {&(_ZTV8S19905C1[123]),  123,142},
  {&(_ZTV8S19905C1[130]),  130,142},
  {&(_ZTV8S19905C1[136]),  136,142},
  {&(_ZTV8S19905C1[140]),  140,142},
  {&(_tg__ZTV8S19905C3__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C78S19905C3__A1__8S19905C1[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C78S19905C3__A1__8S19905C1[3]),  3,5},
  {&(_tg__ZTV8S19905C4__8S19905C3__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C4__8S19905C3__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C7__8S19905C3__8S19905C1[4]),  4,6},
  {&(_tg__ZTV8S19905C7__A__8S19905C3__8S19905C1[4]),  4,6},
  {&(_tg__ZTV8S19905C4__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C68S19905C4__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C68S19905C4__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C7__8S19905C68S19905C4__8S19905C1[4]),  4,6},
  {&(_tg__ZTV8S19905C4__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C7__8S19905C4__8S19905C1[4]),  4,6},
  {&(_tg__ZTV8S19905C7__8S19905C1[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C7__8S19905C1[3]),  3,5},
  {&(_tg__ZTV9S19905C10__8S19905C1[11]),  11,13},
  {&(_tg__ZTV8S19905C49S19905C10__A1__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C68S19905C49S19905C10__A2__8S19905C1[5]),  5,7},
  {&(_tg__ZTV11S19905C5_nt__8S19905C68S19905C49S19905C10__A2__8S19905C1[3]),  3,5},
  {&(_tg__ZTV8S19905C7__8S19905C68S19905C49S19905C10__A2__8S19905C1[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C49S19905C10__A1__8S19905C1[3]),  3,5},
  {&(_tg__ZTV8S19905C7__8S19905C49S19905C10__A1__8S19905C1[4]),  4,6},
  {&(_tg__ZTV8S19905C7__9S19905C10__8S19905C1[4]),  4,6},
  {&(_tg__ZTV8S19905C4__9S19905C10__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C6__9S19905C10__8S19905C1[5]),  5,7},
  {&(_tg__ZTV9S19905C12__9S19905C10__8S19905C1[8]),  8,10},
  {&(_tg__ZTV8S19905C3__9S19905C10__8S19905C1[6]),  6,8},
  {&(_tg__ZTV8S19905C4__9S19905C10__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C78S19905C3__A1__9S19905C10__8S19905C1[4]),  4,6},
  {&(_tg__ZTV8S19905C6__A1__8S19905C1[5]),  5,7},
  {&(_tg__ZTV11S19905C5_nt__8S19905C6__A1__8S19905C1[3]),  3,5},
  {&(_tg__ZTV8S19905C7__8S19905C6__A1__8S19905C1[4]),  4,6},
  {&(_tg__ZTV9S19905C12__8S19905C1[8]),  8,10},
  {&(_tg__ZTV8S19905C79S19905C12__A2__8S19905C1[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C79S19905C12__A2__8S19905C1[3]),  3,5},
  {&(_tg__ZTV8S19905C3__9S19905C12__8S19905C1[6]),  6,8},
  {&(_tg__ZTV8S19905C4__9S19905C12__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C4__9S19905C12__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C7__9S19905C12__8S19905C1[4]),  4,6},
  {&(_tg__ZTV8S19905C78S19905C3__A1__9S19905C12__8S19905C1[4]),  4,6},
  {&(_tg__ZTV9S19905C13__8S19905C1[12]),  12,14},
  {&(_tg__ZTV9S19905C149S19905C13__8S19905C1[11]),  11,13},
  {&(_tg__ZTV9S19905C169S19905C149S19905C13__8S19905C1[7]),  7,9},
  {&(_tg__ZTV8S19905C4__9S19905C169S19905C149S19905C13__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C4__9S19905C169S19905C149S19905C13__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C7__9S19905C169S19905C149S19905C13__8S19905C1[4]),  4,6},
  {&(_tg__ZTV8S19905C7__9S19905C149S19905C13__8S19905C1[4]),  4,6},
  {&(_tg__ZTV8S19905C4__9S19905C149S19905C13__8S19905C1[5]),  5,7},
  {&(_tg__ZTV9S19905C15__9S19905C149S19905C13__8S19905C1[9]),  9,11},
  {&(_tg__ZTV9S19905C12__9S19905C149S19905C13__8S19905C1[8]),  8,10},
  {&(_tg__ZTV8S19905C3__9S19905C149S19905C13__8S19905C1[6]),  6,8},
  {&(_tg__ZTV8S19905C4__9S19905C149S19905C13__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C78S19905C3__A2__9S19905C149S19905C13__8S19905C1[4]),  4,6},
  {&(_tg__ZTV8S19905C49S19905C15__A1__9S19905C149S19905C13__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C7__9S19905C13__8S19905C1[4]),  4,6},
  {&(_tg__ZTV8S19905C4__9S19905C13__8S19905C1[5]),  5,7},
  {&(_tg__ZTV9S19905C15__9S19905C13__8S19905C1[9]),  9,11},
  {&(_tg__ZTV9S19905C12__9S19905C13__8S19905C1[8]),  8,10},
  {&(_tg__ZTV8S19905C3__9S19905C13__8S19905C1[6]),  6,8},
  {&(_tg__ZTV8S19905C4__9S19905C13__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C78S19905C3__A2__9S19905C13__8S19905C1[4]),  4,6},
  {&(_tg__ZTV8S19905C49S19905C15__A1__9S19905C13__8S19905C1[5]),  5,7},
  {&(_tg__ZTV9S19905C15__8S19905C1[9]),  9,11},
  {&(_tg__ZTV8S19905C79S19905C15__A3__8S19905C1[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C79S19905C15__A3__8S19905C1[3]),  3,5},
  {&(_tg__ZTV8S19905C49S19905C15__A2__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C68S19905C49S19905C15__A3__8S19905C1[5]),  5,7},
  {&(_tg__ZTV11S19905C5_nt__8S19905C68S19905C49S19905C15__A3__8S19905C1[3]),  3,5},
  {&(_tg__ZTV8S19905C7__8S19905C68S19905C49S19905C15__A3__8S19905C1[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C49S19905C15__A2__8S19905C1[3]),  3,5},
  {&(_tg__ZTV8S19905C7__8S19905C49S19905C15__A2__8S19905C1[4]),  4,6},
  {&(_tg__ZTV8S19905C4__9S19905C15__8S19905C1[5]),  5,7},
  {&(_tg__ZTV9S19905C12__9S19905C15__8S19905C1[8]),  8,10},
  {&(_tg__ZTV8S19905C3__9S19905C15__8S19905C1[6]),  6,8},
  {&(_tg__ZTV8S19905C4__9S19905C15__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C7__A1__9S19905C15__8S19905C1[4]),  4,6},
  {&(_tg__ZTV8S19905C78S19905C3__A2__9S19905C15__8S19905C1[4]),  4,6},
  {&(_tg__ZTV8S19905C4__A__9S19905C15__8S19905C1[5]),  5,7},
  {&(_tg__ZTV9S19905C18__8S19905C1[6]),  6,8},
  {&(_tg__ZTV9S19905C209S19905C18__8S19905C1[7]),  7,9},
  {&(_tg__ZTV8S19905C69S19905C209S19905C18__A4__8S19905C1[5]),  5,7},
  {&(_tg__ZTV11S19905C5_nt__8S19905C69S19905C209S19905C18__A4__8S19905C1[3]),  3,5},
  {&(_tg__ZTV8S19905C7__8S19905C69S19905C209S19905C18__A4__8S19905C1[4]),  4,6},
  {&(_tg__ZTV8S19905C39S19905C209S19905C18__A1__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C78S19905C39S19905C209S19905C18__A4__8S19905C1[4]),  4,6},
  {&(_tg__ZTV11S19905C5_nt__8S19905C78S19905C39S19905C209S19905C18__A4__8S19905C1[3]),  3,5},
  {&(_tg__ZTV8S19905C4__8S19905C39S19905C209S19905C18__A1__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C4__8S19905C39S19905C209S19905C18__A1__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C7__8S19905C39S19905C209S19905C18__A1__8S19905C1[4]),  4,6},
  {&(_tg__ZTV8S19905C7__A__8S19905C39S19905C209S19905C18__A1__8S19905C1[4]),  4,6},
  {&(_tg__ZTV8S19905C4__9S19905C209S19905C18__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C7__9S19905C209S19905C18__8S19905C1[4]),  4,6},
  {&(_tg__ZTV8S19905C3__9S19905C209S19905C18__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C4__9S19905C209S19905C18__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C78S19905C3__A1__9S19905C209S19905C18__8S19905C1[4]),  4,6},
  {&(_tg__ZTV8S19905C4__9S19905C18__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C4__9S19905C18__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C7__9S19905C18__8S19905C1[4]),  4,6},
  {&(_tg__ZTV9S19905C20__9S19905C18__8S19905C1[7]),  7,9},
  {&(_tg__ZTV8S19905C39S19905C20__9S19905C18__8S19905C1[5]),  5,7},
  {&(_tg__ZTV8S19905C78S19905C39S19905C20__A1__9S19905C18__8S19905C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19905C1[];
extern  VTBL_ENTRY _ZTV8S19905C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19905C1[];
static VTBL_ENTRY alt_thunk_names13[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C18D0Ev,_ZTv0_n12_N9S19905C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19905C18D0Ev,_ZThn20_N9S19905C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19905C18D0Ev,_ZThn4_N9S19905C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C18D1Ev,_ZTv0_n12_N9S19905C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19905C18D1Ev,_ZThn20_N9S19905C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19905C18D1Ev,_ZThn4_N9S19905C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C20D0Ev,_ZTv0_n12_N9S19905C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19905C20D0Ev,_ZThn16_N9S19905C20D0Ev),
  (VTBL_ENTRY)_ZN9S19905C20D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C20D1Ev,_ZTv0_n12_N9S19905C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19905C20D1Ev,_ZThn16_N9S19905C20D1Ev),
  (VTBL_ENTRY)_ZN9S19905C20D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C15D0Ev,_ZTv0_n12_N9S19905C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19905C15D0Ev,_ZThn28_N9S19905C15D0Ev),
  (VTBL_ENTRY)_ZN9S19905C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C15D1Ev,_ZTv0_n12_N9S19905C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19905C15D1Ev,_ZThn28_N9S19905C15D1Ev),
  (VTBL_ENTRY)_ZN9S19905C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C16D0Ev,_ZTv0_n12_N9S19905C16D0Ev), // 
  (VTBL_ENTRY)_ZN9S19905C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C16D1Ev,_ZTv0_n12_N9S19905C16D1Ev), // 
  (VTBL_ENTRY)_ZN9S19905C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C14D0Ev,_ZTv0_n12_N9S19905C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19905C14D0Ev,_ZThn84_N9S19905C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19905C14D0Ev,_ZThn56_N9S19905C14D0Ev),
  (VTBL_ENTRY)_ZN9S19905C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C14D1Ev,_ZTv0_n12_N9S19905C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19905C14D1Ev,_ZThn84_N9S19905C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19905C14D1Ev,_ZThn56_N9S19905C14D1Ev),
  (VTBL_ENTRY)_ZN9S19905C14D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C13D0Ev,_ZTv0_n12_N9S19905C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19905C13D0Ev,_ZThn84_N9S19905C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19905C13D0Ev,_ZThn56_N9S19905C13D0Ev),
  (VTBL_ENTRY)_ZN9S19905C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C13D1Ev,_ZTv0_n12_N9S19905C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19905C13D1Ev,_ZThn84_N9S19905C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19905C13D1Ev,_ZThn56_N9S19905C13D1Ev),
  (VTBL_ENTRY)_ZN9S19905C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C12D0Ev,_ZTv0_n12_N9S19905C12D0Ev), // 
  (VTBL_ENTRY)_ZN9S19905C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C12D1Ev,_ZTv0_n12_N9S19905C12D1Ev), // 
  (VTBL_ENTRY)_ZN9S19905C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C10D0Ev,_ZTv0_n12_N9S19905C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N9S19905C10D0Ev,_ZThn156_N9S19905C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S19905C10D0Ev,_ZThn148_N9S19905C10D0Ev),
  (VTBL_ENTRY)_ZN9S19905C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19905C10D1Ev,_ZTv0_n12_N9S19905C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N9S19905C10D1Ev,_ZThn156_N9S19905C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S19905C10D1Ev,_ZThn148_N9S19905C10D1Ev),
  (VTBL_ENTRY)_ZN9S19905C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C6D0Ev,_ZTv0_n12_N8S19905C6D0Ev), // 
  (VTBL_ENTRY)_ZN8S19905C6D0Ev,
  (VTBL_ENTRY)_ZN8S19905C6D0Ev,
  (VTBL_ENTRY)_ZN8S19905C6D0Ev,
  (VTBL_ENTRY)_ZN8S19905C6D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C6D0Ev,_ZThn36_N8S19905C6D0Ev),
  (VTBL_ENTRY)_ZN8S19905C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C6D1Ev,_ZTv0_n12_N8S19905C6D1Ev), // 
  (VTBL_ENTRY)_ZN8S19905C6D1Ev,
  (VTBL_ENTRY)_ZN8S19905C6D1Ev,
  (VTBL_ENTRY)_ZN8S19905C6D1Ev,
  (VTBL_ENTRY)_ZN8S19905C6D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C6D1Ev,_ZThn36_N8S19905C6D1Ev),
  (VTBL_ENTRY)_ZN8S19905C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C4D0Ev,_ZTv0_n12_N8S19905C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19905C4D0Ev,
  (VTBL_ENTRY)_ZN8S19905C4D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C4D0Ev,_ZThn36_N8S19905C4D0Ev),
  (VTBL_ENTRY)_ZN8S19905C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C4D1Ev,_ZTv0_n12_N8S19905C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19905C4D1Ev,
  (VTBL_ENTRY)_ZN8S19905C4D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C4D1Ev,_ZThn36_N8S19905C4D1Ev),
  (VTBL_ENTRY)_ZN8S19905C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C3D0Ev,_ZTv0_n12_N8S19905C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C3D0Ev,_ZThn8_N8S19905C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C3D0Ev,_ZThn8_N8S19905C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19905C3D0Ev,_ZThn76_N8S19905C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C3D0Ev,_ZThn40_N8S19905C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C3D1Ev,_ZTv0_n12_N8S19905C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C3D1Ev,_ZThn8_N8S19905C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C3D1Ev,_ZThn8_N8S19905C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19905C3D1Ev,_ZThn76_N8S19905C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19905C3D1Ev,_ZThn40_N8S19905C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C7D0Ev,_ZTv0_n12_N8S19905C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19905C7D0Ev,_ZThn32_N8S19905C7D0Ev),
  (VTBL_ENTRY)_ZN8S19905C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C7D1Ev,_ZTv0_n12_N8S19905C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19905C7D1Ev,_ZThn32_N8S19905C7D1Ev),
  (VTBL_ENTRY)_ZN8S19905C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19905C9D0Ev,_ZTv0_n24_N8S19905C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C9D0Ev,_ZThn8_N8S19905C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19905C9D1Ev,_ZTv0_n24_N8S19905C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C9D1Ev,_ZThn8_N8S19905C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C9D0Ev,_ZTv0_n12_N8S19905C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N8S19905C9D0Ev,_ZThn384_N8S19905C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn624_N8S19905C9D0Ev,_ZThn356_N8S19905C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn528_N8S19905C9D0Ev,_ZThn300_N8S19905C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19905C9D0Ev,_ZThn16_N8S19905C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn464_N8S19905C9D0Ev,_ZThn268_N8S19905C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N8S19905C9D0Ev,_ZThn260_N8S19905C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19905C9D0Ev,_ZThn84_N8S19905C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19905C9D0Ev,_ZThn112_N8S19905C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19905C9D0Ev,_ZThn48_N8S19905C9D0Ev),
  (VTBL_ENTRY)_ZN8S19905C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C9D1Ev,_ZTv0_n12_N8S19905C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N8S19905C9D1Ev,_ZThn384_N8S19905C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn624_N8S19905C9D1Ev,_ZThn356_N8S19905C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn528_N8S19905C9D1Ev,_ZThn300_N8S19905C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19905C9D1Ev,_ZThn16_N8S19905C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn464_N8S19905C9D1Ev,_ZThn268_N8S19905C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N8S19905C9D1Ev,_ZThn260_N8S19905C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19905C9D1Ev,_ZThn84_N8S19905C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19905C9D1Ev,_ZThn112_N8S19905C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19905C9D1Ev,_ZThn48_N8S19905C9D1Ev),
  (VTBL_ENTRY)_ZN8S19905C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19905C1D0Ev,_ZTv0_n28_N8S19905C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn736_N8S19905C1D0Ev,_ZThn424_N8S19905C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19905C1D1Ev,_ZTv0_n28_N8S19905C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn736_N8S19905C1D1Ev,_ZThn424_N8S19905C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19905C1D0Ev,_ZTv0_n24_N8S19905C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C1D0Ev,_ZThn8_N8S19905C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19905C1D1Ev,_ZTv0_n24_N8S19905C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19905C1D1Ev,_ZThn8_N8S19905C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C1D0Ev,_ZTv0_n12_N8S19905C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S19905C1D0Ev,_ZThn444_N8S19905C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn752_N8S19905C1D0Ev,_ZThn428_N8S19905C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn672_N8S19905C1D0Ev,_ZThn384_N8S19905C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn624_N8S19905C1D0Ev,_ZThn356_N8S19905C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn528_N8S19905C1D0Ev,_ZThn300_N8S19905C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn464_N8S19905C1D0Ev,_ZThn268_N8S19905C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N8S19905C1D0Ev,_ZThn260_N8S19905C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19905C1D0Ev,_ZThn112_N8S19905C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19905C1D0Ev,_ZThn84_N8S19905C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19905C1D0Ev,_ZThn48_N8S19905C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19905C1D0Ev,_ZThn16_N8S19905C1D0Ev),
  (VTBL_ENTRY)_ZN8S19905C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19905C1D1Ev,_ZTv0_n12_N8S19905C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S19905C1D1Ev,_ZThn444_N8S19905C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn752_N8S19905C1D1Ev,_ZThn428_N8S19905C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn672_N8S19905C1D1Ev,_ZThn384_N8S19905C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn624_N8S19905C1D1Ev,_ZThn356_N8S19905C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn528_N8S19905C1D1Ev,_ZThn300_N8S19905C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn464_N8S19905C1D1Ev,_ZThn268_N8S19905C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N8S19905C1D1Ev,_ZThn260_N8S19905C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19905C1D1Ev,_ZThn112_N8S19905C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19905C1D1Ev,_ZThn84_N8S19905C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19905C1D1Ev,_ZThn48_N8S19905C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19905C1D1Ev,_ZThn16_N8S19905C1D1Ev),
  (VTBL_ENTRY)_ZN8S19905C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19905C1 = {  "S19905C1", // class name
  bases_S19905C1, 42,
  &(vtc_S19905C1[0]), // expected_vtbl_contents
  &(vtt_S19905C1[0]), // expected_vtt_contents
  ABISELECT(864,492), // object size
  NSPAIRA(_ZTI8S19905C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19905C1),142, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19905C1),130, //virtual table table var
  29, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names13,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7713C5_nt  {
  virtual void  v8(); // _ZN10S7713C5_nt2v8Ev
  ~S7713C5_nt(); // tgen
  S7713C5_nt(); // tgen
};
//SIG(-1 S7713C5_nt) C1{ v1}


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

//skip512 S7713C5_nt

#else // __cplusplus

extern void _ZN10S7713C5_ntC1Ev();
extern void _ZN10S7713C5_ntD1Ev();
Name_Map name_map_S7713C5_nt[] = {
  NSPAIR(_ZN10S7713C5_ntC1Ev),
  NSPAIR(_ZN10S7713C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern void _ZN10S7713C5_nt2v8Ev();
static  VTBL_ENTRY vtc_S7713C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7713C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
};
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
VTBL_ENTRY *P__ZTI10S7713C5_nt = _ZTI10S7713C5_nt; 
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
Class_Descriptor cd_S7713C5_nt = {  "S7713C5_nt", // class name
  0,0,//no base classes
  &(vtc_S7713C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7713C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7713C5_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  S7713C6  : S7713C5_nt {
  virtual void  v9(); // _ZN7S7713C62v9Ev
  virtual void  v10(); // _ZN7S7713C63v10Ev
  virtual void  v11(); // _ZN7S7713C63v11Ev
  ~S7713C6(); // tgen
  S7713C6(); // tgen
};
//SIG(-1 S7713C6) C1{ BC2{ v4} v1 v2 v3}


void  S7713C6 ::v9(){vfunc_called(this, "_ZN7S7713C62v9Ev");}
void  S7713C6 ::v10(){vfunc_called(this, "_ZN7S7713C63v10Ev");}
void  S7713C6 ::v11(){vfunc_called(this, "_ZN7S7713C63v11Ev");}
S7713C6 ::~S7713C6(){ note_dtor("S7713C6", this);} // tgen
S7713C6 ::S7713C6(){ note_ctor("S7713C6", this);} // tgen

static void Test_S7713C6()
{
  extern Class_Descriptor cd_S7713C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7713C6, buf);
    S7713C6 *dp, &lv = *(dp=new (buf) S7713C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7713C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7713C6)");
    check_base_class_offset(lv, (S7713C5_nt*), 0, "S7713C6");
    test_class_info(&lv, &cd_S7713C6);
    dp->~S7713C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7713C6(Test_S7713C6, "S7713C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7713C6C1Ev();
extern void _ZN7S7713C6D1Ev();
Name_Map name_map_S7713C6[] = {
  NSPAIR(_ZN7S7713C6C1Ev),
  NSPAIR(_ZN7S7713C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7713C5_nt;
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
static Base_Class bases_S7713C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7713C5_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 _ZTI7S7713C6[];
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
static  VTBL_ENTRY vtc_S7713C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C6[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
};
extern VTBL_ENTRY _ZTI7S7713C6[];
extern  VTBL_ENTRY _ZTV7S7713C6[];
Class_Descriptor cd_S7713C6 = {  "S7713C6", // class name
  bases_S7713C6, 1,
  &(vtc_S7713C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7713C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7713C6),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  S7713C7  : virtual S7713C6 , S7713C5_nt {
  int s7713c7f0;
  virtual void  v12(); // _ZN7S7713C73v12Ev
  virtual void  v13(); // _ZN7S7713C73v13Ev
  virtual void  v14(); // _ZN7S7713C73v14Ev
  virtual void  v15(); // _ZN7S7713C73v15Ev
  virtual void  v16(); // _ZN7S7713C73v16Ev
  virtual void  v17(); // _ZN7S7713C73v17Ev
  ~S7713C7(); // tgen
  S7713C7(); // tgen
};
//SIG(-1 S7713C7) C1{ VBC2{ BC3{ v7} v8 v9 v10} BC3 v1 v2 v3 v4 v5 v6 Fi}


void  S7713C7 ::v12(){vfunc_called(this, "_ZN7S7713C73v12Ev");}
void  S7713C7 ::v13(){vfunc_called(this, "_ZN7S7713C73v13Ev");}
void  S7713C7 ::v14(){vfunc_called(this, "_ZN7S7713C73v14Ev");}
void  S7713C7 ::v15(){vfunc_called(this, "_ZN7S7713C73v15Ev");}
void  S7713C7 ::v16(){vfunc_called(this, "_ZN7S7713C73v16Ev");}
void  S7713C7 ::v17(){vfunc_called(this, "_ZN7S7713C73v17Ev");}
S7713C7 ::~S7713C7(){ note_dtor("S7713C7", this);} // tgen
S7713C7 ::S7713C7(){ note_ctor("S7713C7", this);} // tgen

static void Test_S7713C7()
{
  extern Class_Descriptor cd_S7713C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7713C7, buf);
    S7713C7 *dp, &lv = *(dp=new (buf) S7713C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7713C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7713C7)");
    check_base_class_offset(lv, (S7713C5_nt*)(S7713C6*), ABISELECT(16,8), "S7713C7");
    check_base_class_offset(lv, (S7713C6*), ABISELECT(16,8), "S7713C7");
    /*is_ambiguous_... S7713C7::S7713C5_nt */ AMB_check_base_class_offset(lv, (S7713C5_nt*), 0, "S7713C7");
    check_field_offset(lv, s7713c7f0, ABISELECT(8,4), "S7713C7.s7713c7f0");
    test_class_info(&lv, &cd_S7713C7);
    dp->~S7713C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7713C7(Test_S7713C7, "S7713C7", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7713C7C1Ev();
extern void _ZN7S7713C7D1Ev();
Name_Map name_map_S7713C7[] = {
  NSPAIR(_ZN7S7713C7C1Ev),
  NSPAIR(_ZN7S7713C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7713C5_nt;
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
extern Class_Descriptor cd_S7713C6;
extern VTBL_ENTRY _ZTI7S7713C6[];
extern  VTBL_ENTRY _ZTV7S7713C6[];
extern Class_Descriptor cd_S7713C5_nt;
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
static Base_Class bases_S7713C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7713C5_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
    1, //immediately_derived
  0, 0},
  {&cd_S7713C6,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //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},
  {&cd_S7713C5_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 _ZTI7S7713C7[];
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
static  VTBL_ENTRY vtc_S7713C7[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C7[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7713C7[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
};
extern VTBL_ENTRY _ZTV7S7713C7[];
static  VTT_ENTRY vtt_S7713C7[] = {
  {&(_ZTV7S7713C7[3]),  3,20},
  {&(_ZTV7S7713C7[16]),  16,20},
};
extern VTBL_ENTRY _ZTI7S7713C7[];
extern  VTBL_ENTRY _ZTV7S7713C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C7[];
Class_Descriptor cd_S7713C7 = {  "S7713C7", // class name
  bases_S7713C7, 3,
  &(vtc_S7713C7[0]), // expected_vtbl_contents
  &(vtt_S7713C7[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7713C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7713C7),20, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7713C7),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7713C4  : S7713C5_nt , virtual S7713C6 , S7713C7 {
  char s7713c4f0;
  virtual void  v18(); // _ZN7S7713C43v18Ev
  virtual void  v19(); // _ZN7S7713C43v19Ev
  virtual void  v20(); // _ZN7S7713C43v20Ev
  virtual void  v21(); // _ZN7S7713C43v21Ev
  virtual void  v22(); // _ZN7S7713C43v22Ev
  virtual void  v23(); // _ZN7S7713C43v23Ev
  virtual void  v24(); // _ZN7S7713C43v24Ev
  ~S7713C4(); // tgen
  S7713C4(); // tgen
};
//SIG(-1 S7713C4) C1{ BC2{ v8} VBC3{ BC2 v9 v10 v11} BC4{ VBC3 BC2 v12 v13 v14 v15 v16 v17 Fi} v1 v2 v3 v4 v5 v6 v7 Fc}


void  S7713C4 ::v18(){vfunc_called(this, "_ZN7S7713C43v18Ev");}
void  S7713C4 ::v19(){vfunc_called(this, "_ZN7S7713C43v19Ev");}
void  S7713C4 ::v20(){vfunc_called(this, "_ZN7S7713C43v20Ev");}
void  S7713C4 ::v21(){vfunc_called(this, "_ZN7S7713C43v21Ev");}
void  S7713C4 ::v22(){vfunc_called(this, "_ZN7S7713C43v22Ev");}
void  S7713C4 ::v23(){vfunc_called(this, "_ZN7S7713C43v23Ev");}
void  S7713C4 ::v24(){vfunc_called(this, "_ZN7S7713C43v24Ev");}
S7713C4 ::~S7713C4(){ note_dtor("S7713C4", this);} // tgen
S7713C4 ::S7713C4(){ note_ctor("S7713C4", this);} // tgen

static void Test_S7713C4()
{
  extern Class_Descriptor cd_S7713C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S7713C4, buf);
    S7713C4 *dp, &lv = *(dp=new (buf) S7713C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S7713C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7713C4)");
    /*is_ambiguous_... S7713C4::S7713C5_nt */ AMB_check_base_class_offset(lv, (S7713C5_nt*), 0, "S7713C4");
    check_base_class_offset(lv, (S7713C5_nt*)(S7713C6*), ABISELECT(24,16), "S7713C4");
    check_base_class_offset(lv, (S7713C6*), ABISELECT(24,16), "S7713C4");
    check_base_class_offset(lv, (S7713C6*)(S7713C7*), ABISELECT(24,16), "S7713C4");
    /*is_ambiguous_... S7713C7::S7713C5_nt */ AMB_check_base_class_offset(lv, (S7713C5_nt*)(S7713C7*), ABISELECT(8,4), "S7713C4");
    check_base_class_offset(lv, (S7713C7*), ABISELECT(8,4), "S7713C4");
    check_field_offset(lv, s7713c4f0, ABISELECT(20,12), "S7713C4.s7713c4f0");
    test_class_info(&lv, &cd_S7713C4);
    dp->~S7713C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7713C4(Test_S7713C4, "S7713C4", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S7713C4C1Ev();
extern void _ZN7S7713C4D1Ev();
Name_Map name_map_S7713C4[] = {
  NSPAIR(_ZN7S7713C4C1Ev),
  NSPAIR(_ZN7S7713C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7713C5_nt;
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
extern Class_Descriptor cd_S7713C5_nt;
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
extern Class_Descriptor cd_S7713C6;
extern VTBL_ENTRY _ZTI7S7713C6[];
extern  VTBL_ENTRY _ZTV7S7713C6[];
extern Class_Descriptor cd_S7713C5_nt;
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
extern Class_Descriptor cd_S7713C7;
extern VTBL_ENTRY _ZTI7S7713C7[];
extern  VTBL_ENTRY _ZTV7S7713C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C7[];
static Base_Class bases_S7713C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7713C5_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_S7713C5_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
    2, //immediately_derived
  0, 0},
  {&cd_S7713C6,    ABISELECT(24,16), //bcp->offset
    21, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S7713C5_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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7713C7,    ABISELECT(8,4), //bcp->offset
    11, //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7713C4[];
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C43v18Ev();
extern void _ZN7S7713C43v19Ev();
extern void _ZN7S7713C43v20Ev();
extern void _ZN7S7713C43v21Ev();
extern void _ZN7S7713C43v22Ev();
extern void _ZN7S7713C43v23Ev();
extern void _ZN7S7713C43v24Ev();
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
static  VTBL_ENTRY vtc_S7713C4[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C4[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v24Ev,
  ABISELECT(16,12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7713C4[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7713C4[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
};
extern VTBL_ENTRY _ZTV7S7713C4[];
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C7__7S7713C4[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C7[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C6__7S7713C7__7S7713C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7713C7[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
};
static  VTT_ENTRY vtt_S7713C4[] = {
  {&(_ZTV7S7713C4[3]),  3,31},
  {&(_tg__ZTV7S7713C7__7S7713C4[3]),  3,10},
  {&(_tg__ZTV7S7713C6__7S7713C7__7S7713C4[6]),  6,10},
  {&(_ZTV7S7713C4[27]),  27,31},
  {&(_ZTV7S7713C4[14]),  14,31},
};
extern VTBL_ENTRY _ZTI7S7713C4[];
extern  VTBL_ENTRY _ZTV7S7713C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C4[];
Class_Descriptor cd_S7713C4 = {  "S7713C4", // class name
  bases_S7713C4, 5,
  &(vtc_S7713C4[0]), // expected_vtbl_contents
  &(vtt_S7713C4[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S7713C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7713C4),31, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7713C4),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7713C8_nt  {
  virtual void  v25(); // _ZN10S7713C8_nt3v25Ev
  virtual void  v26(); // _ZN10S7713C8_nt3v26Ev
  virtual void  v27(); // _ZN10S7713C8_nt3v27Ev
  virtual void  v28(); // _ZN10S7713C8_nt3v28Ev
  virtual void  v29(); // _ZN10S7713C8_nt3v29Ev
  ~S7713C8_nt(); // tgen
  S7713C8_nt(); // tgen
};
//SIG(-1 S7713C8_nt) C1{ v1 v2 v3 v4 v5}


void  S7713C8_nt ::v25(){vfunc_called(this, "_ZN10S7713C8_nt3v25Ev");}
void  S7713C8_nt ::v26(){vfunc_called(this, "_ZN10S7713C8_nt3v26Ev");}
void  S7713C8_nt ::v27(){vfunc_called(this, "_ZN10S7713C8_nt3v27Ev");}
void  S7713C8_nt ::v28(){vfunc_called(this, "_ZN10S7713C8_nt3v28Ev");}
void  S7713C8_nt ::v29(){vfunc_called(this, "_ZN10S7713C8_nt3v29Ev");}
S7713C8_nt ::~S7713C8_nt(){ note_dtor("S7713C8_nt", this);} // tgen
S7713C8_nt ::S7713C8_nt(){ note_ctor("S7713C8_nt", this);} // tgen

//skip512 S7713C8_nt

#else // __cplusplus

extern void _ZN10S7713C8_ntC1Ev();
extern void _ZN10S7713C8_ntD1Ev();
Name_Map name_map_S7713C8_nt[] = {
  NSPAIR(_ZN10S7713C8_ntC1Ev),
  NSPAIR(_ZN10S7713C8_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7713C8_nt[];
extern void _ZN10S7713C8_nt3v25Ev();
extern void _ZN10S7713C8_nt3v26Ev();
extern void _ZN10S7713C8_nt3v27Ev();
extern void _ZN10S7713C8_nt3v28Ev();
extern void _ZN10S7713C8_nt3v29Ev();
static  VTBL_ENTRY vtc_S7713C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7713C8_nt[0]),
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v29Ev,
};
extern VTBL_ENTRY _ZTI10S7713C8_nt[];
VTBL_ENTRY *P__ZTI10S7713C8_nt = _ZTI10S7713C8_nt; 
extern  VTBL_ENTRY _ZTV10S7713C8_nt[];
Class_Descriptor cd_S7713C8_nt = {  "S7713C8_nt", // class name
  0,0,//no base classes
  &(vtc_S7713C8_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7713C8_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7713C8_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  S7713C9  : virtual S7713C5_nt {
  virtual  ~S7713C9(); // _ZN7S7713C9D2Ev
  virtual void  v30(); // _ZN7S7713C93v30Ev
  S7713C9(); // tgen
};
//SIG(-1 S7713C9) C1{ VBC2{ v2} vd v1}


 S7713C9 ::~S7713C9(){ note_dtor("S7713C9", this);}
void  S7713C9 ::v30(){vfunc_called(this, "_ZN7S7713C93v30Ev");}
S7713C9 ::S7713C9(){ note_ctor("S7713C9", this);} // tgen

static void Test_S7713C9()
{
  extern Class_Descriptor cd_S7713C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7713C9, buf);
    S7713C9 *dp, &lv = *(dp=new (buf) S7713C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7713C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7713C9)");
    check_base_class_offset(lv, (S7713C5_nt*), 0, "S7713C9");
    test_class_info(&lv, &cd_S7713C9);
    dp->~S7713C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7713C9(Test_S7713C9, "S7713C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7713C9C1Ev();
extern void _ZN7S7713C9D2Ev();
Name_Map name_map_S7713C9[] = {
  NSPAIR(_ZN7S7713C9C1Ev),
  NSPAIR(_ZN7S7713C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7713C5_nt;
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
static Base_Class bases_S7713C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7713C5_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 _ZTI7S7713C9[];
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C9D1Ev();
extern void _ZN7S7713C9D0Ev();
extern void _ZN7S7713C93v30Ev();
static  VTBL_ENTRY vtc_S7713C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C9[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7713C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7713C93v30Ev,
};
extern VTBL_ENTRY _ZTV7S7713C9[];
static  VTT_ENTRY vtt_S7713C9[] = {
  {&(_ZTV7S7713C9[4]),  4,8},
  {&(_ZTV7S7713C9[4]),  4,8},
};
extern VTBL_ENTRY _ZTI7S7713C9[];
extern  VTBL_ENTRY _ZTV7S7713C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C9[];
Class_Descriptor cd_S7713C9 = {  "S7713C9", // class name
  bases_S7713C9, 1,
  &(vtc_S7713C9[0]), // expected_vtbl_contents
  &(vtt_S7713C9[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7713C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7713C9),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7713C9),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7713C3  : virtual S7713C4 , virtual S7713C8_nt , S7713C9 {
  ::S7713C7 s7713c3f0;
  virtual  ~S7713C3(); // _ZN7S7713C3D2Ev
  virtual void  v31(); // _ZN7S7713C33v31Ev
  virtual void  v32(); // _ZN7S7713C33v32Ev
  virtual void  v33(); // _ZN7S7713C33v33Ev
  S7713C3(); // tgen
};
//SIG(-1 S7713C3) C1{ VBC2{ BC3{ v4} VBC4{ BC3 v5 v6 v7} BC5{ VBC4 BC3 v8 v9 v10 v11 v12 v13 Fi} v14 v15 v16 v17 v18 v19 v20 Fc} VBC6{ v21 v22 v23 v24 v25} BC7{ VBC3 vd v26} vd v1 v2 v3 FC5}


 S7713C3 ::~S7713C3(){ note_dtor("S7713C3", this);}
void  S7713C3 ::v31(){vfunc_called(this, "_ZN7S7713C33v31Ev");}
void  S7713C3 ::v32(){vfunc_called(this, "_ZN7S7713C33v32Ev");}
void  S7713C3 ::v33(){vfunc_called(this, "_ZN7S7713C33v33Ev");}
S7713C3 ::S7713C3(){ note_ctor("S7713C3", this);} // tgen

static void Test_S7713C3()
{
  extern Class_Descriptor cd_S7713C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S7713C3, buf);
    S7713C3 *dp, &lv = *(dp=new (buf) S7713C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S7713C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7713C3)");
    /*is_ambiguous_... S7713C4::S7713C5_nt */ AMB_check_base_class_offset(lv, (S7713C5_nt*)(S7713C4*), ABISELECT(32,16), "S7713C3");
    check_base_class_offset(lv, (S7713C5_nt*)(S7713C6*), ABISELECT(56,32), "S7713C3");
    check_base_class_offset(lv, (S7713C6*)(S7713C4*), ABISELECT(56,32), "S7713C3");
    check_base_class_offset(lv, (S7713C6*)(S7713C7*)(S7713C4*), ABISELECT(56,32), "S7713C3");
    /*is_ambiguous_... S7713C7::S7713C5_nt */ AMB_check_base_class_offset(lv, (S7713C5_nt*)(S7713C7*)(S7713C4*), ABISELECT(40,20), "S7713C3");
    check_base_class_offset(lv, (S7713C7*)(S7713C4*), ABISELECT(40,20), "S7713C3");
    check_base_class_offset(lv, (S7713C4*), ABISELECT(32,16), "S7713C3");
    check_base_class_offset(lv, (S7713C8_nt*), ABISELECT(64,36), "S7713C3");
    check_base_class_offset(lv, (S7713C5_nt*)(S7713C9*), 0, "S7713C3");
    check_base_class_offset(lv, (S7713C9*), 0, "S7713C3");
    check_field_offset(lv, s7713c3f0, ABISELECT(8,4), "S7713C3.s7713c3f0");
    test_class_info(&lv, &cd_S7713C3);
    dp->~S7713C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7713C3(Test_S7713C3, "S7713C3", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN7S7713C3C1Ev();
extern void _ZN7S7713C3D2Ev();
Name_Map name_map_S7713C3[] = {
  NSPAIR(_ZN7S7713C3C1Ev),
  NSPAIR(_ZN7S7713C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7713C5_nt;
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
extern Class_Descriptor cd_S7713C5_nt;
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
extern Class_Descriptor cd_S7713C6;
extern VTBL_ENTRY _ZTI7S7713C6[];
extern  VTBL_ENTRY _ZTV7S7713C6[];
extern Class_Descriptor cd_S7713C5_nt;
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
extern Class_Descriptor cd_S7713C7;
extern VTBL_ENTRY _ZTI7S7713C7[];
extern  VTBL_ENTRY _ZTV7S7713C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C7[];
extern Class_Descriptor cd_S7713C4;
extern VTBL_ENTRY _ZTI7S7713C4[];
extern  VTBL_ENTRY _ZTV7S7713C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C4[];
extern Class_Descriptor cd_S7713C8_nt;
extern VTBL_ENTRY _ZTI10S7713C8_nt[];
extern  VTBL_ENTRY _ZTV10S7713C8_nt[];
extern Class_Descriptor cd_S7713C5_nt;
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
extern Class_Descriptor cd_S7713C9;
extern VTBL_ENTRY _ZTI7S7713C9[];
extern  VTBL_ENTRY _ZTV7S7713C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C9[];
static Base_Class bases_S7713C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7713C5_nt,    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
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7713C5_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7713C6,    ABISELECT(56,32), //bcp->offset
    49, //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
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7713C5_nt,    ABISELECT(40,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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7713C7,    ABISELECT(40,20), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7713C4,    ABISELECT(32,16), //bcp->offset
    14, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7713C8_nt,    ABISELECT(64,36), //bcp->offset
    59, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7713C5_nt,    0, //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
    8, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7713C9,    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},
  {0}};
extern VTBL_ENTRY _ZTI7S7713C3[];
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C3D1Ev();
extern void _ZN7S7713C3D0Ev();
extern void _ZN7S7713C93v30Ev();
extern void _ZN7S7713C33v31Ev();
extern void _ZN7S7713C33v32Ev();
extern void _ZN7S7713C33v33Ev();
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C43v18Ev();
extern void _ZN7S7713C43v19Ev();
extern void _ZN7S7713C43v20Ev();
extern void _ZN7S7713C43v21Ev();
extern void _ZN7S7713C43v22Ev();
extern void _ZN7S7713C43v23Ev();
extern void _ZN7S7713C43v24Ev();
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
extern void _ZN10S7713C8_nt3v25Ev();
extern void _ZN10S7713C8_nt3v26Ev();
extern void _ZN10S7713C8_nt3v27Ev();
extern void _ZN10S7713C8_nt3v28Ev();
extern void _ZN10S7713C8_nt3v29Ev();
static  VTBL_ENTRY vtc_S7713C3[] = {
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(32,16),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7713C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7713C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v31Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v32Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v33Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v24Ev,
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v29Ev,
};
extern VTBL_ENTRY _ZTV7S7713C3[];
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C9D1Ev();
extern void _ZN7S7713C9D0Ev();
extern void _ZN7S7713C93v30Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C9__7S7713C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C9[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7713C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7713C93v30Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C43v18Ev();
extern void _ZN7S7713C43v19Ev();
extern void _ZN7S7713C43v20Ev();
extern void _ZN7S7713C43v21Ev();
extern void _ZN7S7713C43v22Ev();
extern void _ZN7S7713C43v23Ev();
extern void _ZN7S7713C43v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C4__7S7713C3[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C4[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v24Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C77S7713C4__7S7713C3[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C7[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C6__7S7713C77S7713C4__7S7713C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7713C7[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C6__7S7713C4__7S7713C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7713C4[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C7__7S7713C4__7S7713C3[] = {
  ABISELECT(16,12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7713C4[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
};
static  VTT_ENTRY vtt_S7713C3[] = {
  {&(_ZTV7S7713C3[7]),  7,71},
  {&(_tg__ZTV7S7713C9__7S7713C3[4]),  4,8},
  {&(_tg__ZTV7S7713C9__7S7713C3[4]),  4,8},
  {&(_ZTV7S7713C3[31]),  31,71},
  {&(_ZTV7S7713C3[55]),  55,71},
  {&(_ZTV7S7713C3[42]),  42,71},
  {&(_ZTV7S7713C3[66]),  66,71},
  {&(_ZTV7S7713C3[7]),  7,71},
  {&(_tg__ZTV7S7713C4__7S7713C3[3]),  3,11},
  {&(_tg__ZTV7S7713C77S7713C4__7S7713C3[3]),  3,10},
  {&(_tg__ZTV7S7713C6__7S7713C77S7713C4__7S7713C3[6]),  6,10},
  {&(_tg__ZTV7S7713C6__7S7713C4__7S7713C3[6]),  6,10},
  {&(_tg__ZTV7S7713C7__7S7713C4__7S7713C3[3]),  3,10},
};
extern VTBL_ENTRY _ZTI7S7713C3[];
extern  VTBL_ENTRY _ZTV7S7713C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C3[];
Class_Descriptor cd_S7713C3 = {  "S7713C3", // class name
  bases_S7713C3, 9,
  &(vtc_S7713C3[0]), // expected_vtbl_contents
  &(vtt_S7713C3[0]), // expected_vtt_contents
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI7S7713C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7713C3),71, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7713C3),13, //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  S7713C10_nt  {
  virtual  ~S7713C10_nt(); // _ZN11S7713C10_ntD1Ev
  virtual void  v34(); // _ZN11S7713C10_nt3v34Ev
  virtual void  v35(); // _ZN11S7713C10_nt3v35Ev
  virtual void  v36(); // _ZN11S7713C10_nt3v36Ev
  virtual void  v37(); // _ZN11S7713C10_nt3v37Ev
  S7713C10_nt(); // tgen
};
//SIG(-1 S7713C10_nt) C1{ vd v1 v2 v3 v4}


 S7713C10_nt ::~S7713C10_nt(){ note_dtor("S7713C10_nt", this);}
void  S7713C10_nt ::v34(){vfunc_called(this, "_ZN11S7713C10_nt3v34Ev");}
void  S7713C10_nt ::v35(){vfunc_called(this, "_ZN11S7713C10_nt3v35Ev");}
void  S7713C10_nt ::v36(){vfunc_called(this, "_ZN11S7713C10_nt3v36Ev");}
void  S7713C10_nt ::v37(){vfunc_called(this, "_ZN11S7713C10_nt3v37Ev");}
S7713C10_nt ::S7713C10_nt(){ note_ctor("S7713C10_nt", this);} // tgen

//skip512 S7713C10_nt

#else // __cplusplus

extern void _ZN11S7713C10_ntC1Ev();
extern void _ZN11S7713C10_ntD1Ev();
Name_Map name_map_S7713C10_nt[] = {
  NSPAIR(_ZN11S7713C10_ntC1Ev),
  NSPAIR(_ZN11S7713C10_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S7713C10_nt[];
extern void _ZN11S7713C10_ntD1Ev();
extern void _ZN11S7713C10_ntD0Ev();
extern void _ZN11S7713C10_nt3v34Ev();
extern void _ZN11S7713C10_nt3v35Ev();
extern void _ZN11S7713C10_nt3v36Ev();
extern void _ZN11S7713C10_nt3v37Ev();
static  VTBL_ENTRY vtc_S7713C10_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S7713C10_nt[0]),
  (VTBL_ENTRY)&_ZN11S7713C10_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S7713C10_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v34Ev,
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v35Ev,
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v36Ev,
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v37Ev,
};
extern VTBL_ENTRY _ZTI11S7713C10_nt[];
VTBL_ENTRY *P__ZTI11S7713C10_nt = _ZTI11S7713C10_nt; 
extern  VTBL_ENTRY _ZTV11S7713C10_nt[];
Class_Descriptor cd_S7713C10_nt = {  "S7713C10_nt", // class name
  0,0,//no base classes
  &(vtc_S7713C10_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S7713C10_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S7713C10_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  S7713C12_nt  {
  int s7713c12f0;
  virtual void  v38(); // _ZN11S7713C12_nt3v38Ev
  virtual void  v39(); // _ZN11S7713C12_nt3v39Ev
  virtual void  v40(); // _ZN11S7713C12_nt3v40Ev
  ~S7713C12_nt(); // tgen
  S7713C12_nt(); // tgen
};
//SIG(-1 S7713C12_nt) C1{ v1 v2 v3 Fi}


void  S7713C12_nt ::v38(){vfunc_called(this, "_ZN11S7713C12_nt3v38Ev");}
void  S7713C12_nt ::v39(){vfunc_called(this, "_ZN11S7713C12_nt3v39Ev");}
void  S7713C12_nt ::v40(){vfunc_called(this, "_ZN11S7713C12_nt3v40Ev");}
S7713C12_nt ::~S7713C12_nt(){ note_dtor("S7713C12_nt", this);} // tgen
S7713C12_nt ::S7713C12_nt(){ note_ctor("S7713C12_nt", this);} // tgen

//skip512 S7713C12_nt

#else // __cplusplus

extern void _ZN11S7713C12_ntC1Ev();
extern void _ZN11S7713C12_ntD1Ev();
Name_Map name_map_S7713C12_nt[] = {
  NSPAIR(_ZN11S7713C12_ntC1Ev),
  NSPAIR(_ZN11S7713C12_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S7713C12_nt[];
extern void _ZN11S7713C12_nt3v38Ev();
extern void _ZN11S7713C12_nt3v39Ev();
extern void _ZN11S7713C12_nt3v40Ev();
static  VTBL_ENTRY vtc_S7713C12_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S7713C12_nt[0]),
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v40Ev,
};
extern VTBL_ENTRY _ZTI11S7713C12_nt[];
VTBL_ENTRY *P__ZTI11S7713C12_nt = _ZTI11S7713C12_nt; 
extern  VTBL_ENTRY _ZTV11S7713C12_nt[];
Class_Descriptor cd_S7713C12_nt = {  "S7713C12_nt", // class name
  0,0,//no base classes
  &(vtc_S7713C12_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI11S7713C12_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S7713C12_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  S7713C11  : virtual S7713C4 , virtual S7713C12_nt {
  void *s7713c11f0;
  char s7713c11f1[7];
  virtual void  v41(); // _ZN8S7713C113v41Ev
  virtual void  v42(); // _ZN8S7713C113v42Ev
  virtual void  v43(); // _ZN8S7713C113v43Ev
  virtual void  v44(); // _ZN8S7713C113v44Ev
  virtual void  v45(); // _ZN8S7713C113v45Ev
  ~S7713C11(); // tgen
  S7713C11(); // tgen
};
//SIG(-1 S7713C11) C1{ VBC2{ BC3{ v6} VBC4{ BC3 v7 v8 v9} BC5{ VBC4 BC3 v10 v11 v12 v13 v14 v15 Fi} v16 v17 v18 v19 v20 v21 v22 Fc} VBC6{ v23 v24 v25 Fi} v1 v2 v3 v4 v5 Fp Fc[7]}


void  S7713C11 ::v41(){vfunc_called(this, "_ZN8S7713C113v41Ev");}
void  S7713C11 ::v42(){vfunc_called(this, "_ZN8S7713C113v42Ev");}
void  S7713C11 ::v43(){vfunc_called(this, "_ZN8S7713C113v43Ev");}
void  S7713C11 ::v44(){vfunc_called(this, "_ZN8S7713C113v44Ev");}
void  S7713C11 ::v45(){vfunc_called(this, "_ZN8S7713C113v45Ev");}
S7713C11 ::~S7713C11(){ note_dtor("S7713C11", this);} // tgen
S7713C11 ::S7713C11(){ note_ctor("S7713C11", this);} // tgen

static void Test_S7713C11()
{
  extern Class_Descriptor cd_S7713C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S7713C11, buf);
    S7713C11 *dp, &lv = *(dp=new (buf) S7713C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S7713C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7713C11)");
    /*is_ambiguous_... S7713C4::S7713C5_nt */ AMB_check_base_class_offset(lv, (S7713C5_nt*)(S7713C4*), ABISELECT(24,16), "S7713C11");
    check_base_class_offset(lv, (S7713C5_nt*)(S7713C6*), 0, "S7713C11");
    check_base_class_offset(lv, (S7713C6*)(S7713C4*), 0, "S7713C11");
    check_base_class_offset(lv, (S7713C6*)(S7713C7*)(S7713C4*), 0, "S7713C11");
    /*is_ambiguous_... S7713C7::S7713C5_nt */ AMB_check_base_class_offset(lv, (S7713C5_nt*)(S7713C7*)(S7713C4*), ABISELECT(32,20), "S7713C11");
    check_base_class_offset(lv, (S7713C7*)(S7713C4*), ABISELECT(32,20), "S7713C11");
    check_base_class_offset(lv, (S7713C4*), ABISELECT(24,16), "S7713C11");
    check_base_class_offset(lv, (S7713C12_nt*), ABISELECT(48,32), "S7713C11");
    check_field_offset(lv, s7713c11f0, ABISELECT(8,4), "S7713C11.s7713c11f0");
    check_field_offset(lv, s7713c11f1, ABISELECT(16,8), "S7713C11.s7713c11f1");
    test_class_info(&lv, &cd_S7713C11);
    dp->~S7713C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7713C11(Test_S7713C11, "S7713C11", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S7713C11C1Ev();
extern void _ZN8S7713C11D1Ev();
Name_Map name_map_S7713C11[] = {
  NSPAIR(_ZN8S7713C11C1Ev),
  NSPAIR(_ZN8S7713C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7713C5_nt;
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
extern Class_Descriptor cd_S7713C5_nt;
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
extern Class_Descriptor cd_S7713C6;
extern VTBL_ENTRY _ZTI7S7713C6[];
extern  VTBL_ENTRY _ZTV7S7713C6[];
extern Class_Descriptor cd_S7713C5_nt;
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
extern Class_Descriptor cd_S7713C7;
extern VTBL_ENTRY _ZTI7S7713C7[];
extern  VTBL_ENTRY _ZTV7S7713C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C7[];
extern Class_Descriptor cd_S7713C4;
extern VTBL_ENTRY _ZTI7S7713C4[];
extern  VTBL_ENTRY _ZTV7S7713C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C4[];
extern Class_Descriptor cd_S7713C12_nt;
extern VTBL_ENTRY _ZTI11S7713C12_nt[];
extern  VTBL_ENTRY _ZTV11S7713C12_nt[];
static Base_Class bases_S7713C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7713C5_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
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7713C5_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_S7713C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //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
    4, //immediately_derived
  0, 1},
  {&cd_S7713C5_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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7713C7,    ABISELECT(32,20), //bcp->offset
    43, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7713C4,    ABISELECT(24,16), //bcp->offset
    18, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7713C12_nt,    ABISELECT(48,32), //bcp->offset
    53, //bcp->virtual_function_table_offset
    5, //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 _ZTI8S7713C11[];
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
extern void _ZN8S7713C113v41Ev();
extern void _ZN8S7713C113v42Ev();
extern void _ZN8S7713C113v43Ev();
extern void _ZN8S7713C113v44Ev();
extern void _ZN8S7713C113v45Ev();
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C43v18Ev();
extern void _ZN7S7713C43v19Ev();
extern void _ZN7S7713C43v20Ev();
extern void _ZN7S7713C43v21Ev();
extern void _ZN7S7713C43v22Ev();
extern void _ZN7S7713C43v23Ev();
extern void _ZN7S7713C43v24Ev();
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
extern void _ZN11S7713C12_nt3v38Ev();
extern void _ZN11S7713C12_nt3v39Ev();
extern void _ZN11S7713C12_nt3v40Ev();
static  VTBL_ENTRY vtc_S7713C11[] = {
  ABISELECT(48,32),
  0,
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7713C11[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v41Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v42Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v43Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v45Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S7713C11[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v24Ev,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S7713C11[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
  0,
  0,
  0,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S7713C11[0]),
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v40Ev,
};
extern VTBL_ENTRY _ZTV8S7713C11[];
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C43v18Ev();
extern void _ZN7S7713C43v19Ev();
extern void _ZN7S7713C43v20Ev();
extern void _ZN7S7713C43v21Ev();
extern void _ZN7S7713C43v22Ev();
extern void _ZN7S7713C43v23Ev();
extern void _ZN7S7713C43v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C4__8S7713C11[] = {
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C4[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v24Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C77S7713C4__8S7713C11[] = {
  ABISELECT(-32,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C7[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C6__7S7713C77S7713C4__8S7713C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI7S7713C7[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C6__7S7713C4__8S7713C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI7S7713C4[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C7__7S7713C4__8S7713C11[] = {
  ABISELECT(-32,-20),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7713C4[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
};
static  VTT_ENTRY vtt_S7713C11[] = {
  {&(_ZTV8S7713C11[9]),  9,61},
  {&(_ZTV8S7713C11[35]),  35,61},
  {&(_ZTV8S7713C11[9]),  9,61},
  {&(_ZTV8S7713C11[46]),  46,61},
  {&(_ZTV8S7713C11[58]),  58,61},
  {&(_tg__ZTV7S7713C4__8S7713C11[3]),  3,11},
  {&(_tg__ZTV7S7713C77S7713C4__8S7713C11[3]),  3,10},
  {&(_tg__ZTV7S7713C6__7S7713C77S7713C4__8S7713C11[6]),  6,10},
  {&(_tg__ZTV7S7713C6__7S7713C4__8S7713C11[6]),  6,10},
  {&(_tg__ZTV7S7713C7__7S7713C4__8S7713C11[3]),  3,10},
};
extern VTBL_ENTRY _ZTI8S7713C11[];
extern  VTBL_ENTRY _ZTV8S7713C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7713C11[];
Class_Descriptor cd_S7713C11 = {  "S7713C11", // class name
  bases_S7713C11, 7,
  &(vtc_S7713C11[0]), // expected_vtbl_contents
  &(vtt_S7713C11[0]), // expected_vtt_contents
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S7713C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7713C11),61, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7713C11),10, //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  S7713C2  : virtual S7713C3 , virtual S7713C10_nt , S7713C11 {
  virtual  ~S7713C2(); // _ZN7S7713C2D2Ev
  virtual void  v46(); // _ZN7S7713C23v46Ev
  virtual void  v47(); // _ZN7S7713C23v47Ev
  virtual void  v48(); // _ZN7S7713C23v48Ev
  virtual void  v49(); // _ZN7S7713C23v49Ev
  virtual void  v50(); // _ZN7S7713C23v50Ev
  S7713C2(); // tgen
};
//SIG(-1 S7713C2) C1{ VBC2{ VBC3{ BC4{ v6} VBC5{ BC4 v7 v8 v9} BC6{ VBC5 BC4 v10 v11 v12 v13 v14 v15 Fi} v16 v17 v18 v19 v20 v21 v22 Fc} VBC7{ v23 v24 v25 v26 v27} BC8{ VBC4 vd v28} vd v29 v30 v31 FC6} VBC9{ vd v32 v33 v34 v35} BC10{ VBC3 VBC11{ v36 v37 v38 Fi} v39 v40 v41 v42 v43 Fp Fc[7]} vd v1 v2 v3 v4 v5}


 S7713C2 ::~S7713C2(){ note_dtor("S7713C2", this);}
void  S7713C2 ::v46(){vfunc_called(this, "_ZN7S7713C23v46Ev");}
void  S7713C2 ::v47(){vfunc_called(this, "_ZN7S7713C23v47Ev");}
void  S7713C2 ::v48(){vfunc_called(this, "_ZN7S7713C23v48Ev");}
void  S7713C2 ::v49(){vfunc_called(this, "_ZN7S7713C23v49Ev");}
void  S7713C2 ::v50(){vfunc_called(this, "_ZN7S7713C23v50Ev");}
S7713C2 ::S7713C2(){ note_ctor("S7713C2", this);} // tgen

static void Test_S7713C2()
{
  extern Class_Descriptor cd_S7713C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,17)];
    init_test(&cd_S7713C2, buf);
    S7713C2 *dp, &lv = *(dp=new (buf) S7713C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S7713C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7713C2)");
    /*is_ambiguous_... S7713C4::S7713C5_nt */ AMB_check_base_class_offset(lv, (S7713C5_nt*)(S7713C4*), ABISELECT(56,32), "S7713C2");
    check_base_class_offset(lv, (S7713C5_nt*)(S7713C6*), 0, "S7713C2");
    check_base_class_offset(lv, (S7713C6*)(S7713C4*), 0, "S7713C2");
    check_base_class_offset(lv, (S7713C6*)(S7713C7*)(S7713C4*), 0, "S7713C2");
    /*is_ambiguous_... S7713C7::S7713C5_nt */ AMB_check_base_class_offset(lv, (S7713C5_nt*)(S7713C7*)(S7713C4*), ABISELECT(64,36), "S7713C2");
    check_base_class_offset(lv, (S7713C7*)(S7713C4*), ABISELECT(64,36), "S7713C2");
    check_base_class_offset(lv, (S7713C4*)(S7713C3*), ABISELECT(56,32), "S7713C2");
    check_base_class_offset(lv, (S7713C4*)(S7713C11*), ABISELECT(56,32), "S7713C2");
    check_base_class_offset(lv, (S7713C8_nt*)(S7713C3*), ABISELECT(80,48), "S7713C2");
    check_base_class_offset(lv, (S7713C5_nt*)(S7713C9*)(S7713C3*), ABISELECT(24,16), "S7713C2");
    check_base_class_offset(lv, (S7713C9*)(S7713C3*), ABISELECT(24,16), "S7713C2");
    check_base_class_offset(lv, (S7713C3*), ABISELECT(24,16), "S7713C2");
    check_base_class_offset(lv, (S7713C10_nt*), ABISELECT(88,52), "S7713C2");
    check_base_class_offset(lv, (S7713C12_nt*)(S7713C11*), ABISELECT(96,56), "S7713C2");
    check_base_class_offset(lv, (S7713C11*), 0, "S7713C2");
    test_class_info(&lv, &cd_S7713C2);
    dp->~S7713C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7713C2(Test_S7713C2, "S7713C2", ABISELECT(112,64));

#else // __cplusplus

extern void _ZN7S7713C2C1Ev();
extern void _ZN7S7713C2D2Ev();
Name_Map name_map_S7713C2[] = {
  NSPAIR(_ZN7S7713C2C1Ev),
  NSPAIR(_ZN7S7713C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7713C5_nt;
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
extern Class_Descriptor cd_S7713C5_nt;
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
extern Class_Descriptor cd_S7713C6;
extern VTBL_ENTRY _ZTI7S7713C6[];
extern  VTBL_ENTRY _ZTV7S7713C6[];
extern Class_Descriptor cd_S7713C5_nt;
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
extern Class_Descriptor cd_S7713C7;
extern VTBL_ENTRY _ZTI7S7713C7[];
extern  VTBL_ENTRY _ZTV7S7713C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C7[];
extern Class_Descriptor cd_S7713C4;
extern VTBL_ENTRY _ZTI7S7713C4[];
extern  VTBL_ENTRY _ZTV7S7713C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C4[];
extern Class_Descriptor cd_S7713C8_nt;
extern VTBL_ENTRY _ZTI10S7713C8_nt[];
extern  VTBL_ENTRY _ZTV10S7713C8_nt[];
extern Class_Descriptor cd_S7713C5_nt;
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
extern Class_Descriptor cd_S7713C9;
extern VTBL_ENTRY _ZTI7S7713C9[];
extern  VTBL_ENTRY _ZTV7S7713C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C9[];
extern Class_Descriptor cd_S7713C3;
extern VTBL_ENTRY _ZTI7S7713C3[];
extern  VTBL_ENTRY _ZTV7S7713C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C3[];
extern Class_Descriptor cd_S7713C10_nt;
extern VTBL_ENTRY _ZTI11S7713C10_nt[];
extern  VTBL_ENTRY _ZTV11S7713C10_nt[];
extern Class_Descriptor cd_S7713C12_nt;
extern VTBL_ENTRY _ZTI11S7713C12_nt[];
extern  VTBL_ENTRY _ZTV11S7713C12_nt[];
extern Class_Descriptor cd_S7713C11;
extern VTBL_ENTRY _ZTI8S7713C11[];
extern  VTBL_ENTRY _ZTV8S7713C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7713C11[];
static Base_Class bases_S7713C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7713C5_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S7713C5_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_S7713C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //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
    4, //immediately_derived
  0, 1},
  {&cd_S7713C5_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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7713C7,    ABISELECT(64,36), //bcp->offset
    73, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7713C4,    ABISELECT(56,32), //bcp->offset
    48, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7713C8_nt,    ABISELECT(80,48), //bcp->offset
    83, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7713C5_nt,    ABISELECT(24,16), //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
    8, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7713C9,    ABISELECT(24,16), //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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7713C3,    ABISELECT(24,16), //bcp->offset
    29, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7713C10_nt,    ABISELECT(88,52), //bcp->offset
    95, //bcp->virtual_function_table_offset
    7, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S7713C12_nt,    ABISELECT(96,56), //bcp->offset
    108, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7713C11,    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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7713C2[];
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
extern void _ZN8S7713C113v41Ev();
extern void _ZN8S7713C113v42Ev();
extern void _ZN8S7713C113v43Ev();
extern void _ZN8S7713C113v44Ev();
extern void _ZN8S7713C113v45Ev();
extern void _ZN7S7713C2D1Ev();
extern void _ZN7S7713C2D0Ev();
extern void _ZN7S7713C23v46Ev();
extern void _ZN7S7713C23v47Ev();
extern void _ZN7S7713C23v48Ev();
extern void _ZN7S7713C23v49Ev();
extern void _ZN7S7713C23v50Ev();
extern void _ZN10S7713C5_nt2v8Ev();
extern void ABISELECT(_ZTv0_n64_N7S7713C2D1Ev,_ZTv0_n32_N7S7713C2D1Ev)();
extern void ABISELECT(_ZThn24_N7S7713C2D1Ev,_ZThn16_N7S7713C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7713C2D0Ev,_ZTv0_n32_N7S7713C2D0Ev)();
extern void ABISELECT(_ZThn24_N7S7713C2D0Ev,_ZThn16_N7S7713C2D0Ev)() __attribute__((weak));
extern void _ZN7S7713C93v30Ev();
extern void _ZN7S7713C33v31Ev();
extern void _ZN7S7713C33v32Ev();
extern void _ZN7S7713C33v33Ev();
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C43v18Ev();
extern void _ZN7S7713C43v19Ev();
extern void _ZN7S7713C43v20Ev();
extern void _ZN7S7713C43v21Ev();
extern void _ZN7S7713C43v22Ev();
extern void _ZN7S7713C43v23Ev();
extern void _ZN7S7713C43v24Ev();
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
extern void _ZN10S7713C8_nt3v25Ev();
extern void _ZN10S7713C8_nt3v26Ev();
extern void _ZN10S7713C8_nt3v27Ev();
extern void _ZN10S7713C8_nt3v28Ev();
extern void _ZN10S7713C8_nt3v29Ev();
extern void ABISELECT(_ZTv0_n24_N7S7713C2D1Ev,_ZTv0_n12_N7S7713C2D1Ev)();
extern void ABISELECT(_ZThn88_N7S7713C2D1Ev,_ZThn52_N7S7713C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7713C2D0Ev,_ZTv0_n12_N7S7713C2D0Ev)();
extern void ABISELECT(_ZThn88_N7S7713C2D0Ev,_ZThn52_N7S7713C2D0Ev)() __attribute__((weak));
extern void _ZN11S7713C10_nt3v34Ev();
extern void _ZN11S7713C10_nt3v35Ev();
extern void _ZN11S7713C10_nt3v36Ev();
extern void _ZN11S7713C10_nt3v37Ev();
extern void _ZN11S7713C12_nt3v38Ev();
extern void _ZN11S7713C12_nt3v39Ev();
extern void _ZN11S7713C12_nt3v40Ev();
static  VTBL_ENTRY vtc_S7713C2[] = {
  ABISELECT(88,52),
  ABISELECT(24,16),
  ABISELECT(80,48),
  ABISELECT(24,16),
  ABISELECT(96,56),
  0,
  ABISELECT(56,32),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v41Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v42Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v43Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v45Ev,
  (VTBL_ENTRY)&_ZN7S7713C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7713C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v46Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v47Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v48Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v49Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v50Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(56,32),
  ABISELECT(-24,-16),
  ABISELECT(32,16),
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7713C2D1Ev,_ZTv0_n32_N7S7713C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7713C2D0Ev,_ZTv0_n32_N7S7713C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7713C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v31Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v32Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v33Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v24Ev,
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v29Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-52),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7713C2D1Ev,_ZTv0_n12_N7S7713C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7713C2D0Ev,_ZTv0_n12_N7S7713C2D0Ev),
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v34Ev,
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v35Ev,
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v36Ev,
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v37Ev,
  0,
  0,
  0,
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v40Ev,
};
extern VTBL_ENTRY _ZTV7S7713C2[];
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
extern void _ZN8S7713C113v41Ev();
extern void _ZN8S7713C113v42Ev();
extern void _ZN8S7713C113v43Ev();
extern void _ZN8S7713C113v44Ev();
extern void _ZN8S7713C113v45Ev();
static  VTBL_ENTRY _tg__ZTV8S7713C11__7S7713C2[] = {
  ABISELECT(96,56),
  0,
  ABISELECT(56,32),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7713C11[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v41Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v42Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v43Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v45Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C43v18Ev();
extern void _ZN7S7713C43v19Ev();
extern void _ZN7S7713C43v20Ev();
extern void _ZN7S7713C43v21Ev();
extern void _ZN7S7713C43v22Ev();
extern void _ZN7S7713C43v23Ev();
extern void _ZN7S7713C43v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C4__8S7713C11__7S7713C2[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S7713C11[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v24Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C77S7713C4__8S7713C11__7S7713C2[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S7713C11[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
};
extern void _ZN11S7713C12_nt3v38Ev();
extern void _ZN11S7713C12_nt3v39Ev();
extern void _ZN11S7713C12_nt3v40Ev();
static  VTBL_ENTRY _tg__ZTV11S7713C12_nt__8S7713C11__7S7713C2[] = {
  0,
  0,
  0,
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S7713C11[0]),
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v40Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C3D1Ev();
extern void _ZN7S7713C3D0Ev();
extern void _ZN7S7713C93v30Ev();
extern void _ZN7S7713C33v31Ev();
extern void _ZN7S7713C33v32Ev();
extern void _ZN7S7713C33v33Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C3__7S7713C2[] = {
  ABISELECT(56,32),
  ABISELECT(-24,-16),
  ABISELECT(32,16),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7713C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7713C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v31Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v32Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v33Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C9D1Ev();
extern void _ZN7S7713C9D0Ev();
extern void _ZN7S7713C93v30Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C97S7713C3__7S7713C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C9[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7713C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7713C93v30Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C43v18Ev();
extern void _ZN7S7713C43v19Ev();
extern void _ZN7S7713C43v20Ev();
extern void _ZN7S7713C43v21Ev();
extern void _ZN7S7713C43v22Ev();
extern void _ZN7S7713C43v23Ev();
extern void _ZN7S7713C43v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C4__7S7713C3__7S7713C2[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v24Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C6__7S7713C3__7S7713C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C77S7713C4__7S7713C3__7S7713C2[] = {
  ABISELECT(-64,-36),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
};
extern void _ZN10S7713C8_nt3v25Ev();
extern void _ZN10S7713C8_nt3v26Ev();
extern void _ZN10S7713C8_nt3v27Ev();
extern void _ZN10S7713C8_nt3v28Ev();
extern void _ZN10S7713C8_nt3v29Ev();
static  VTBL_ENTRY _tg__ZTV10S7713C8_nt__7S7713C3__7S7713C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v29Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C43v18Ev();
extern void _ZN7S7713C43v19Ev();
extern void _ZN7S7713C43v20Ev();
extern void _ZN7S7713C43v21Ev();
extern void _ZN7S7713C43v22Ev();
extern void _ZN7S7713C43v23Ev();
extern void _ZN7S7713C43v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C4__7S7713C2[] = {
  ABISELECT(-56,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C4[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v24Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C77S7713C4__7S7713C2[] = {
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C7[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C6__7S7713C77S7713C4__7S7713C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI7S7713C7[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C6__7S7713C4__7S7713C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI7S7713C4[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C7__7S7713C4__7S7713C2[] = {
  ABISELECT(-64,-36),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7713C4[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
};
static  VTT_ENTRY vtt_S7713C2[] = {
  {&(_ZTV7S7713C2[13]),  13,116},
  {&(_tg__ZTV8S7713C11__7S7713C2[9]),  9,18},
  {&(_tg__ZTV7S7713C4__8S7713C11__7S7713C2[17]),  17,25},
  {&(_tg__ZTV8S7713C11__7S7713C2[9]),  9,18},
  {&(_tg__ZTV7S7713C77S7713C4__8S7713C11__7S7713C2[3]),  3,10},
  {&(_tg__ZTV11S7713C12_nt__8S7713C11__7S7713C2[5]),  5,8},
  {&(_ZTV7S7713C2[41]),  41,116},
  {&(_ZTV7S7713C2[65]),  65,116},
  {&(_ZTV7S7713C2[13]),  13,116},
  {&(_ZTV7S7713C2[76]),  76,116},
  {&(_ZTV7S7713C2[90]),  90,116},
  {&(_ZTV7S7713C2[41]),  41,116},
  {&(_ZTV7S7713C2[102]),  102,116},
  {&(_ZTV7S7713C2[113]),  113,116},
  {&(_tg__ZTV7S7713C3__7S7713C2[7]),  7,14},
  {&(_tg__ZTV7S7713C97S7713C3__7S7713C2[4]),  4,8},
  {&(_tg__ZTV7S7713C97S7713C3__7S7713C2[4]),  4,8},
  {&(_tg__ZTV7S7713C4__7S7713C3__7S7713C2[17]),  17,25},
  {&(_tg__ZTV7S7713C6__7S7713C3__7S7713C2[6]),  6,10},
  {&(_tg__ZTV7S7713C77S7713C4__7S7713C3__7S7713C2[3]),  3,10},
  {&(_tg__ZTV10S7713C8_nt__7S7713C3__7S7713C2[7]),  7,12},
  {&(_tg__ZTV7S7713C3__7S7713C2[7]),  7,14},
  {&(_tg__ZTV7S7713C4__7S7713C2[3]),  3,11},
  {&(_tg__ZTV7S7713C77S7713C4__7S7713C2[3]),  3,10},
  {&(_tg__ZTV7S7713C6__7S7713C77S7713C4__7S7713C2[6]),  6,10},
  {&(_tg__ZTV7S7713C6__7S7713C4__7S7713C2[6]),  6,10},
  {&(_tg__ZTV7S7713C7__7S7713C4__7S7713C2[3]),  3,10},
};
extern VTBL_ENTRY _ZTI7S7713C2[];
extern  VTBL_ENTRY _ZTV7S7713C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C2[];
static VTBL_ENTRY alt_thunk_names14[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7713C2D0Ev,_ZTv0_n12_N7S7713C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7713C2D0Ev,_ZThn52_N7S7713C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7713C2D1Ev,_ZTv0_n12_N7S7713C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7713C2D1Ev,_ZThn52_N7S7713C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7713C2D0Ev,_ZTv0_n32_N7S7713C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7713C2D0Ev,_ZThn16_N7S7713C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7713C2D1Ev,_ZTv0_n32_N7S7713C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7713C2D1Ev,_ZThn16_N7S7713C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7713C2 = {  "S7713C2", // class name
  bases_S7713C2, 13,
  &(vtc_S7713C2[0]), // expected_vtbl_contents
  &(vtt_S7713C2[0]), // expected_vtt_contents
  ABISELECT(112,64), // object size
  NSPAIRA(_ZTI7S7713C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7713C2),116, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7713C2),27, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names14,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7713C13  : S7713C2 , S7713C3 {
  void *s7713c13f0;
  long double s7713c13f1;
  virtual void  v51(); // _ZN8S7713C133v51Ev
  virtual void  v52(); // _ZN8S7713C133v52Ev
  virtual void  v53(); // _ZN8S7713C133v53Ev
  virtual void  v54(); // _ZN8S7713C133v54Ev
  virtual void  v55(); // _ZN8S7713C133v55Ev
  virtual void  v56(); // _ZN8S7713C133v56Ev
  ~S7713C13(); // tgen
  S7713C13(); // tgen
};
//SIG(-1 S7713C13) C1{ BC2{ VBC3{ VBC4{ BC5{ v7} VBC6{ BC5 v8 v9 v10} BC7{ VBC6 BC5 v11 v12 v13 v14 v15 v16 Fi} v17 v18 v19 v20 v21 v22 v23 Fc} VBC8{ v24 v25 v26 v27 v28} BC9{ VBC5 vd v29} vd v30 v31 v32 FC7} VBC10{ vd v33 v34 v35 v36} BC11{ VBC4 VBC12{ v37 v38 v39 Fi} v40 v41 v42 v43 v44 Fp Fc[7]} vd v45 v46 v47 v48 v49} BC3 v1 v2 v3 v4 v5 v6 Fp FD}


void  S7713C13 ::v51(){vfunc_called(this, "_ZN8S7713C133v51Ev");}
void  S7713C13 ::v52(){vfunc_called(this, "_ZN8S7713C133v52Ev");}
void  S7713C13 ::v53(){vfunc_called(this, "_ZN8S7713C133v53Ev");}
void  S7713C13 ::v54(){vfunc_called(this, "_ZN8S7713C133v54Ev");}
void  S7713C13 ::v55(){vfunc_called(this, "_ZN8S7713C133v55Ev");}
void  S7713C13 ::v56(){vfunc_called(this, "_ZN8S7713C133v56Ev");}
S7713C13 ::~S7713C13(){ note_dtor("S7713C13", this);} // tgen
S7713C13 ::S7713C13(){ note_ctor("S7713C13", this);} // tgen

static void Test_S7713C13()
{
  extern Class_Descriptor cd_S7713C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,25)];
    init_test(&cd_S7713C13, buf);
    S7713C13 *dp, &lv = *(dp=new (buf) S7713C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,96), "sizeof(S7713C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7713C13)");
    /*is_ambiguous_... S7713C4::S7713C5_nt */ AMB_check_base_class_offset(lv, (S7713C5_nt*)(S7713C4*), ABISELECT(112,64), "S7713C13");
    check_base_class_offset(lv, (S7713C5_nt*)(S7713C6*), 0, "S7713C13");
    check_base_class_offset(lv, (S7713C6*)(S7713C4*), 0, "S7713C13");
    check_base_class_offset(lv, (S7713C6*)(S7713C7*)(S7713C4*), 0, "S7713C13");
    /*is_ambiguous_... S7713C7::S7713C5_nt */ AMB_check_base_class_offset(lv, (S7713C5_nt*)(S7713C7*)(S7713C4*), ABISELECT(120,68), "S7713C13");
    check_base_class_offset(lv, (S7713C7*)(S7713C4*), ABISELECT(120,68), "S7713C13");
    /*is_ambiguous_... S7713C13::S7713C3 */ AMB_check_base_class_offset(lv, (S7713C4*)(S7713C3*), ABISELECT(112,64), "S7713C13");
    check_base_class_offset(lv, (S7713C4*)(S7713C11*)(S7713C2*), ABISELECT(112,64), "S7713C13");
    /*is_ambiguous_... S7713C13::S7713C3 */ AMB_check_base_class_offset(lv, (S7713C4*)(S7713C3*), ABISELECT(112,64), "S7713C13");
    /*is_ambiguous_... S7713C13::S7713C3 */ AMB_check_base_class_offset(lv, (S7713C8_nt*)(S7713C3*), ABISELECT(136,80), "S7713C13");
    /*is_ambiguous_... S7713C13::S7713C3 */ AMB_check_base_class_offset(lv, (S7713C8_nt*)(S7713C3*), ABISELECT(136,80), "S7713C13");
    /*is_ambiguous_... S7713C13::S7713C3 */ AMB_check_base_class_offset(lv, (S7713C5_nt*)(S7713C9*)(S7713C3*), ABISELECT(80,48), "S7713C13");
    /*is_ambiguous_... S7713C13::S7713C3 */ AMB_check_base_class_offset(lv, (S7713C5_nt*)(S7713C9*)(S7713C3*), ABISELECT(80,48), "S7713C13");
    /*is_ambiguous_... S7713C13::S7713C3 */ AMB_check_base_class_offset(lv, (S7713C9*)(S7713C3*), ABISELECT(80,48), "S7713C13");
    check_base_class_offset(lv, (S7713C3*)(S7713C2*), ABISELECT(80,48), "S7713C13");
    check_base_class_offset(lv, (S7713C10_nt*)(S7713C2*), ABISELECT(144,84), "S7713C13");
    check_base_class_offset(lv, (S7713C12_nt*)(S7713C11*)(S7713C2*), ABISELECT(152,88), "S7713C13");
    check_base_class_offset(lv, (S7713C11*)(S7713C2*), 0, "S7713C13");
    check_base_class_offset(lv, (S7713C2*), 0, "S7713C13");
    /*is_ambiguous_... S7713C13::S7713C3 */ AMB_check_base_class_offset(lv, (S7713C9*)(S7713C3*), ABISELECT(24,16), "S7713C13");
    /*is_ambiguous_... S7713C13::S7713C3 */ AMB_check_base_class_offset(lv, (S7713C3*), ABISELECT(24,16), "S7713C13");
    check_field_offset(lv, s7713c13f0, ABISELECT(56,32), "S7713C13.s7713c13f0");
    check_field_offset(lv, s7713c13f1, ABISELECT(64,36), "S7713C13.s7713c13f1");
    test_class_info(&lv, &cd_S7713C13);
    dp->~S7713C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7713C13(Test_S7713C13, "S7713C13", ABISELECT(176,96));

#else // __cplusplus

extern void _ZN8S7713C13C1Ev();
extern void _ZN8S7713C13D1Ev();
Name_Map name_map_S7713C13[] = {
  NSPAIR(_ZN8S7713C13C1Ev),
  NSPAIR(_ZN8S7713C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7713C5_nt;
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
extern Class_Descriptor cd_S7713C5_nt;
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
extern Class_Descriptor cd_S7713C6;
extern VTBL_ENTRY _ZTI7S7713C6[];
extern  VTBL_ENTRY _ZTV7S7713C6[];
extern Class_Descriptor cd_S7713C5_nt;
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
extern Class_Descriptor cd_S7713C7;
extern VTBL_ENTRY _ZTI7S7713C7[];
extern  VTBL_ENTRY _ZTV7S7713C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C7[];
extern Class_Descriptor cd_S7713C4;
extern VTBL_ENTRY _ZTI7S7713C4[];
extern  VTBL_ENTRY _ZTV7S7713C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C4[];
extern Class_Descriptor cd_S7713C8_nt;
extern VTBL_ENTRY _ZTI10S7713C8_nt[];
extern  VTBL_ENTRY _ZTV10S7713C8_nt[];
extern Class_Descriptor cd_S7713C5_nt;
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
extern Class_Descriptor cd_S7713C9;
extern VTBL_ENTRY _ZTI7S7713C9[];
extern  VTBL_ENTRY _ZTV7S7713C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C9[];
extern Class_Descriptor cd_S7713C3;
extern VTBL_ENTRY _ZTI7S7713C3[];
extern  VTBL_ENTRY _ZTV7S7713C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C3[];
extern Class_Descriptor cd_S7713C10_nt;
extern VTBL_ENTRY _ZTI11S7713C10_nt[];
extern  VTBL_ENTRY _ZTV11S7713C10_nt[];
extern Class_Descriptor cd_S7713C12_nt;
extern VTBL_ENTRY _ZTI11S7713C12_nt[];
extern  VTBL_ENTRY _ZTV11S7713C12_nt[];
extern Class_Descriptor cd_S7713C11;
extern VTBL_ENTRY _ZTI8S7713C11[];
extern  VTBL_ENTRY _ZTV8S7713C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7713C11[];
extern Class_Descriptor cd_S7713C2;
extern VTBL_ENTRY _ZTI7S7713C2[];
extern  VTBL_ENTRY _ZTV7S7713C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C2[];
extern Class_Descriptor cd_S7713C9;
extern VTBL_ENTRY _ZTI7S7713C9[];
extern  VTBL_ENTRY _ZTV7S7713C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C9[];
extern Class_Descriptor cd_S7713C3;
extern VTBL_ENTRY _ZTI7S7713C3[];
extern  VTBL_ENTRY _ZTV7S7713C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C3[];
static Base_Class bases_S7713C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7713C5_nt,    ABISELECT(112,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
    5, //immediately_derived
  0, 0},
  {&cd_S7713C5_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_S7713C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7713C5_nt,    ABISELECT(120,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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7713C7,    ABISELECT(120,68), //bcp->offset
    93, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7713C4,    ABISELECT(112,64), //bcp->offset
    68, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7713C8_nt,    ABISELECT(136,80), //bcp->offset
    103, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7713C5_nt,    ABISELECT(80,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7713C9,    ABISELECT(80,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7713C3,    ABISELECT(80,48), //bcp->offset
    49, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7713C10_nt,    ABISELECT(144,84), //bcp->offset
    115, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7713C12_nt,    ABISELECT(152,88), //bcp->offset
    128, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7713C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //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_S7713C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //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_S7713C9,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7713C3,    ABISELECT(24,16), //bcp->offset
    35, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7713C13[];
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
extern void _ZN8S7713C113v41Ev();
extern void _ZN8S7713C113v42Ev();
extern void _ZN8S7713C113v43Ev();
extern void _ZN8S7713C113v44Ev();
extern void _ZN8S7713C113v45Ev();
extern void _ZN8S7713C13D1Ev();
extern void _ZN8S7713C13D0Ev();
extern void _ZN7S7713C23v46Ev();
extern void _ZN7S7713C23v47Ev();
extern void _ZN7S7713C23v48Ev();
extern void _ZN7S7713C23v49Ev();
extern void _ZN7S7713C23v50Ev();
extern void _ZN8S7713C133v51Ev();
extern void _ZN8S7713C133v52Ev();
extern void _ZN8S7713C133v53Ev();
extern void _ZN8S7713C133v54Ev();
extern void _ZN8S7713C133v55Ev();
extern void _ZN8S7713C133v56Ev();
extern void _ZN10S7713C5_nt2v8Ev();
extern void ABISELECT(_ZThn24_N8S7713C13D1Ev,_ZThn16_N8S7713C13D1Ev)();
extern void ABISELECT(_ZThn24_N8S7713C13D0Ev,_ZThn16_N8S7713C13D0Ev)();
extern void _ZN7S7713C93v30Ev();
extern void _ZN7S7713C33v31Ev();
extern void _ZN7S7713C33v32Ev();
extern void _ZN7S7713C33v33Ev();
extern void _ZN10S7713C5_nt2v8Ev();
extern void ABISELECT(_ZTv0_n64_N8S7713C13D1Ev,_ZTv0_n32_N8S7713C13D1Ev)();
extern void ABISELECT(_ZThn80_N8S7713C13D1Ev,_ZThn48_N8S7713C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7713C13D0Ev,_ZTv0_n32_N8S7713C13D0Ev)();
extern void ABISELECT(_ZThn80_N8S7713C13D0Ev,_ZThn48_N8S7713C13D0Ev)() __attribute__((weak));
extern void _ZN7S7713C93v30Ev();
extern void _ZN7S7713C33v31Ev();
extern void _ZN7S7713C33v32Ev();
extern void _ZN7S7713C33v33Ev();
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C43v18Ev();
extern void _ZN7S7713C43v19Ev();
extern void _ZN7S7713C43v20Ev();
extern void _ZN7S7713C43v21Ev();
extern void _ZN7S7713C43v22Ev();
extern void _ZN7S7713C43v23Ev();
extern void _ZN7S7713C43v24Ev();
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
extern void _ZN10S7713C8_nt3v25Ev();
extern void _ZN10S7713C8_nt3v26Ev();
extern void _ZN10S7713C8_nt3v27Ev();
extern void _ZN10S7713C8_nt3v28Ev();
extern void _ZN10S7713C8_nt3v29Ev();
extern void ABISELECT(_ZTv0_n24_N8S7713C13D1Ev,_ZTv0_n12_N8S7713C13D1Ev)();
extern void ABISELECT(_ZThn144_N8S7713C13D1Ev,_ZThn84_N8S7713C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7713C13D0Ev,_ZTv0_n12_N8S7713C13D0Ev)();
extern void ABISELECT(_ZThn144_N8S7713C13D0Ev,_ZThn84_N8S7713C13D0Ev)() __attribute__((weak));
extern void _ZN11S7713C10_nt3v34Ev();
extern void _ZN11S7713C10_nt3v35Ev();
extern void _ZN11S7713C10_nt3v36Ev();
extern void _ZN11S7713C10_nt3v37Ev();
extern void _ZN11S7713C12_nt3v38Ev();
extern void _ZN11S7713C12_nt3v39Ev();
extern void _ZN11S7713C12_nt3v40Ev();
static  VTBL_ENTRY vtc_S7713C13[] = {
  ABISELECT(144,84),
  ABISELECT(80,48),
  ABISELECT(136,80),
  ABISELECT(80,48),
  ABISELECT(152,88),
  0,
  ABISELECT(112,64),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7713C13[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v41Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v42Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v43Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v45Ev,
  (VTBL_ENTRY)&_ZN8S7713C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7713C13D0Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v46Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v47Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v48Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v49Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v50Ev,
  (VTBL_ENTRY)&_ZN8S7713C133v51Ev,
  (VTBL_ENTRY)&_ZN8S7713C133v52Ev,
  (VTBL_ENTRY)&_ZN8S7713C133v53Ev,
  (VTBL_ENTRY)&_ZN8S7713C133v54Ev,
  (VTBL_ENTRY)&_ZN8S7713C133v55Ev,
  (VTBL_ENTRY)&_ZN8S7713C133v56Ev,
  ABISELECT(112,64),
  ABISELECT(-24,-16),
  ABISELECT(88,48),
  ABISELECT(56,32),
  ABISELECT(56,32),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S7713C13[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S7713C13D1Ev,_ZThn16_N8S7713C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S7713C13D0Ev,_ZThn16_N8S7713C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7713C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v31Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v32Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v33Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-48),
  ABISELECT(56,32),
  ABISELECT(-80,-48),
  ABISELECT(32,16),
  0,
  0,
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI8S7713C13[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7713C13D1Ev,_ZTv0_n32_N8S7713C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7713C13D0Ev,_ZTv0_n32_N8S7713C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7713C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v31Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v32Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v33Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI8S7713C13[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v24Ev,
  ABISELECT(-120,-68),
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI8S7713C13[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI8S7713C13[0]),
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v29Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S7713C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7713C13D1Ev,_ZTv0_n12_N8S7713C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7713C13D0Ev,_ZTv0_n12_N8S7713C13D0Ev),
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v34Ev,
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v35Ev,
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v36Ev,
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v37Ev,
  0,
  0,
  0,
  ABISELECT(-152,-88),
  (VTBL_ENTRY)&(_ZTI8S7713C13[0]),
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v40Ev,
};
extern VTBL_ENTRY _ZTV8S7713C13[];
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
extern void _ZN8S7713C113v41Ev();
extern void _ZN8S7713C113v42Ev();
extern void _ZN8S7713C113v43Ev();
extern void _ZN8S7713C113v44Ev();
extern void _ZN8S7713C113v45Ev();
extern void _ZN7S7713C2D1Ev();
extern void _ZN7S7713C2D0Ev();
extern void _ZN7S7713C23v46Ev();
extern void _ZN7S7713C23v47Ev();
extern void _ZN7S7713C23v48Ev();
extern void _ZN7S7713C23v49Ev();
extern void _ZN7S7713C23v50Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C2__8S7713C13[] = {
  ABISELECT(144,84),
  ABISELECT(80,48),
  ABISELECT(136,80),
  ABISELECT(80,48),
  ABISELECT(152,88),
  0,
  ABISELECT(112,64),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v41Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v42Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v43Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v45Ev,
  (VTBL_ENTRY)&_ZN7S7713C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7713C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v46Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v47Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v48Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v49Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v50Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
extern void _ZN8S7713C113v41Ev();
extern void _ZN8S7713C113v42Ev();
extern void _ZN8S7713C113v43Ev();
extern void _ZN8S7713C113v44Ev();
extern void _ZN8S7713C113v45Ev();
static  VTBL_ENTRY _tg__ZTV8S7713C117S7713C2__8S7713C13[] = {
  ABISELECT(152,88),
  0,
  ABISELECT(112,64),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7713C11[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v41Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v42Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v43Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v45Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C43v18Ev();
extern void _ZN7S7713C43v19Ev();
extern void _ZN7S7713C43v20Ev();
extern void _ZN7S7713C43v21Ev();
extern void _ZN7S7713C43v22Ev();
extern void _ZN7S7713C43v23Ev();
extern void _ZN7S7713C43v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C4__8S7713C117S7713C2__8S7713C13[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI8S7713C11[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v24Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C77S7713C4__8S7713C117S7713C2__8S7713C13[] = {
  ABISELECT(-120,-68),
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI8S7713C11[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
};
extern void _ZN11S7713C12_nt3v38Ev();
extern void _ZN11S7713C12_nt3v39Ev();
extern void _ZN11S7713C12_nt3v40Ev();
static  VTBL_ENTRY _tg__ZTV11S7713C12_nt__8S7713C117S7713C2__8S7713C13[] = {
  0,
  0,
  0,
  ABISELECT(-152,-88),
  (VTBL_ENTRY)&(_ZTI8S7713C11[0]),
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v40Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void ABISELECT(_ZTv0_n64_N7S7713C2D1Ev,_ZTv0_n32_N7S7713C2D1Ev)();
extern void ABISELECT(_ZThn80_N7S7713C2D1Ev,_ZThn48_N7S7713C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7713C2D0Ev,_ZTv0_n32_N7S7713C2D0Ev)();
extern void ABISELECT(_ZThn80_N7S7713C2D0Ev,_ZThn48_N7S7713C2D0Ev)() __attribute__((weak));
extern void _ZN7S7713C93v30Ev();
extern void _ZN7S7713C33v31Ev();
extern void _ZN7S7713C33v32Ev();
extern void _ZN7S7713C33v33Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C3__7S7713C2__8S7713C13[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-80,-48),
  ABISELECT(56,32),
  ABISELECT(-80,-48),
  ABISELECT(32,16),
  0,
  0,
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7713C2D1Ev,_ZTv0_n32_N7S7713C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7713C2D0Ev,_ZTv0_n32_N7S7713C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7713C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v31Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v32Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v33Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C43v18Ev();
extern void _ZN7S7713C43v19Ev();
extern void _ZN7S7713C43v20Ev();
extern void _ZN7S7713C43v21Ev();
extern void _ZN7S7713C43v22Ev();
extern void _ZN7S7713C43v23Ev();
extern void _ZN7S7713C43v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C4__7S7713C2__8S7713C13[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v24Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C77S7713C4__7S7713C2__8S7713C13[] = {
  ABISELECT(-120,-68),
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
};
extern void _ZN10S7713C8_nt3v25Ev();
extern void _ZN10S7713C8_nt3v26Ev();
extern void _ZN10S7713C8_nt3v27Ev();
extern void _ZN10S7713C8_nt3v28Ev();
extern void _ZN10S7713C8_nt3v29Ev();
static  VTBL_ENTRY _tg__ZTV10S7713C8_nt__7S7713C2__8S7713C13[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v29Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7713C2D1Ev,_ZTv0_n12_N7S7713C2D1Ev)();
extern void ABISELECT(_ZThn144_N7S7713C2D1Ev,_ZThn84_N7S7713C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7713C2D0Ev,_ZTv0_n12_N7S7713C2D0Ev)();
extern void ABISELECT(_ZThn144_N7S7713C2D0Ev,_ZThn84_N7S7713C2D0Ev)() __attribute__((weak));
extern void _ZN11S7713C10_nt3v34Ev();
extern void _ZN11S7713C10_nt3v35Ev();
extern void _ZN11S7713C10_nt3v36Ev();
extern void _ZN11S7713C10_nt3v37Ev();
static  VTBL_ENTRY _tg__ZTV11S7713C10_nt__7S7713C2__8S7713C13[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7713C2D1Ev,_ZTv0_n12_N7S7713C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7713C2D0Ev,_ZTv0_n12_N7S7713C2D0Ev),
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v34Ev,
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v35Ev,
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v36Ev,
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v37Ev,
};
extern void _ZN11S7713C12_nt3v38Ev();
extern void _ZN11S7713C12_nt3v39Ev();
extern void _ZN11S7713C12_nt3v40Ev();
static  VTBL_ENTRY _tg__ZTV11S7713C12_nt__7S7713C2__8S7713C13[] = {
  0,
  0,
  0,
  ABISELECT(-152,-88),
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v40Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C3D1Ev();
extern void _ZN7S7713C3D0Ev();
extern void _ZN7S7713C93v30Ev();
extern void _ZN7S7713C33v31Ev();
extern void _ZN7S7713C33v32Ev();
extern void _ZN7S7713C33v33Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C3__A__8S7713C13[] = {
  ABISELECT(112,64),
  ABISELECT(-24,-16),
  ABISELECT(88,48),
  ABISELECT(56,32),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7713C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7713C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v31Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v32Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v33Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C9D1Ev();
extern void _ZN7S7713C9D0Ev();
extern void _ZN7S7713C93v30Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C97S7713C3__A1__8S7713C13[] = {
  ABISELECT(56,32),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C9[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7713C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7713C93v30Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S7713C5_nt__7S7713C97S7713C3__A1__8S7713C13[] = {
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7713C9[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C43v18Ev();
extern void _ZN7S7713C43v19Ev();
extern void _ZN7S7713C43v20Ev();
extern void _ZN7S7713C43v21Ev();
extern void _ZN7S7713C43v22Ev();
extern void _ZN7S7713C43v23Ev();
extern void _ZN7S7713C43v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C4__7S7713C3__A__8S7713C13[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-64),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v24Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C6__7S7713C3__A__8S7713C13[] = {
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C77S7713C4__7S7713C3__A__8S7713C13[] = {
  ABISELECT(-120,-68),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
};
extern void _ZN10S7713C8_nt3v25Ev();
extern void _ZN10S7713C8_nt3v26Ev();
extern void _ZN10S7713C8_nt3v27Ev();
extern void _ZN10S7713C8_nt3v28Ev();
extern void _ZN10S7713C8_nt3v29Ev();
static  VTBL_ENTRY _tg__ZTV10S7713C8_nt__7S7713C3__A__8S7713C13[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v29Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S7713C5_nt__A3__7S7713C3__A__8S7713C13[] = {
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C3D1Ev();
extern void _ZN7S7713C3D0Ev();
extern void _ZN7S7713C93v30Ev();
extern void _ZN7S7713C33v31Ev();
extern void _ZN7S7713C33v32Ev();
extern void _ZN7S7713C33v33Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C3__8S7713C13[] = {
  ABISELECT(56,32),
  ABISELECT(-80,-48),
  ABISELECT(32,16),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7713C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7713C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v31Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v32Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v33Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C9D1Ev();
extern void _ZN7S7713C9D0Ev();
extern void _ZN7S7713C93v30Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C97S7713C3__8S7713C13[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C9[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7713C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7713C93v30Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C43v18Ev();
extern void _ZN7S7713C43v19Ev();
extern void _ZN7S7713C43v20Ev();
extern void _ZN7S7713C43v21Ev();
extern void _ZN7S7713C43v22Ev();
extern void _ZN7S7713C43v23Ev();
extern void _ZN7S7713C43v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C4__7S7713C3__8S7713C13[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-64),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v24Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C6__7S7713C3__8S7713C13[] = {
  0,
  0,
  0,
  0,
  ABISELECT(80,48),
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C77S7713C4__7S7713C3__8S7713C13[] = {
  ABISELECT(-120,-68),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
};
extern void _ZN10S7713C8_nt3v25Ev();
extern void _ZN10S7713C8_nt3v26Ev();
extern void _ZN10S7713C8_nt3v27Ev();
extern void _ZN10S7713C8_nt3v28Ev();
extern void _ZN10S7713C8_nt3v29Ev();
static  VTBL_ENTRY _tg__ZTV10S7713C8_nt__7S7713C3__8S7713C13[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v29Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C43v18Ev();
extern void _ZN7S7713C43v19Ev();
extern void _ZN7S7713C43v20Ev();
extern void _ZN7S7713C43v21Ev();
extern void _ZN7S7713C43v22Ev();
extern void _ZN7S7713C43v23Ev();
extern void _ZN7S7713C43v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C4__8S7713C13[] = {
  ABISELECT(-112,-64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C4[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v24Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C77S7713C4__8S7713C13[] = {
  ABISELECT(-120,-68),
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C7[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C6__7S7713C77S7713C4__8S7713C13[] = {
  0,
  0,
  0,
  0,
  ABISELECT(120,68),
  (VTBL_ENTRY)&(_ZTI7S7713C7[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C6__7S7713C4__8S7713C13[] = {
  0,
  0,
  0,
  0,
  ABISELECT(112,64),
  (VTBL_ENTRY)&(_ZTI7S7713C4[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C7__7S7713C4__8S7713C13[] = {
  ABISELECT(-120,-68),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7713C4[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
};
static  VTT_ENTRY vtt_S7713C13[] = {
  {&(_ZTV8S7713C13[13]),  13,136},
  {&(_tg__ZTV7S7713C2__8S7713C13[13]),  13,29},
  {&(_tg__ZTV8S7713C117S7713C2__8S7713C13[9]),  9,18},
  {&(_tg__ZTV7S7713C4__8S7713C117S7713C2__8S7713C13[17]),  17,25},
  {&(_tg__ZTV8S7713C117S7713C2__8S7713C13[9]),  9,18},
  {&(_tg__ZTV7S7713C77S7713C4__8S7713C117S7713C2__8S7713C13[3]),  3,10},
  {&(_tg__ZTV11S7713C12_nt__8S7713C117S7713C2__8S7713C13[5]),  5,8},
  {&(_tg__ZTV7S7713C3__7S7713C2__8S7713C13[12]),  12,19},
  {&(_tg__ZTV7S7713C4__7S7713C2__8S7713C13[17]),  17,25},
  {&(_tg__ZTV7S7713C2__8S7713C13[13]),  13,29},
  {&(_tg__ZTV7S7713C77S7713C4__7S7713C2__8S7713C13[3]),  3,10},
  {&(_tg__ZTV10S7713C8_nt__7S7713C2__8S7713C13[7]),  7,12},
  {&(_tg__ZTV7S7713C3__7S7713C2__8S7713C13[12]),  12,19},
  {&(_tg__ZTV11S7713C10_nt__7S7713C2__8S7713C13[7]),  7,13},
  {&(_tg__ZTV11S7713C12_nt__7S7713C2__8S7713C13[5]),  5,8},
  {&(_tg__ZTV7S7713C3__A__8S7713C13[7]),  7,14},
  {&(_tg__ZTV7S7713C97S7713C3__A1__8S7713C13[4]),  4,8},
  {&(_tg__ZTV10S7713C5_nt__7S7713C97S7713C3__A1__8S7713C13[3]),  3,4},
  {&(_tg__ZTV7S7713C4__7S7713C3__A__8S7713C13[17]),  17,25},
  {&(_tg__ZTV7S7713C6__7S7713C3__A__8S7713C13[6]),  6,10},
  {&(_tg__ZTV7S7713C77S7713C4__7S7713C3__A__8S7713C13[3]),  3,10},
  {&(_tg__ZTV10S7713C8_nt__7S7713C3__A__8S7713C13[7]),  7,12},
  {&(_tg__ZTV10S7713C5_nt__A3__7S7713C3__A__8S7713C13[3]),  3,4},
  {&(_ZTV8S7713C13[61]),  61,136},
  {&(_ZTV8S7713C13[85]),  85,136},
  {&(_ZTV8S7713C13[13]),  13,136},
  {&(_ZTV8S7713C13[96]),  96,136},
  {&(_ZTV8S7713C13[110]),  110,136},
  {&(_ZTV8S7713C13[61]),  61,136},
  {&(_ZTV8S7713C13[122]),  122,136},
  {&(_ZTV8S7713C13[133]),  133,136},
  {&(_ZTV8S7713C13[42]),  42,136},
  {&(_tg__ZTV7S7713C3__8S7713C13[7]),  7,14},
  {&(_tg__ZTV7S7713C97S7713C3__8S7713C13[4]),  4,8},
  {&(_tg__ZTV7S7713C97S7713C3__8S7713C13[4]),  4,8},
  {&(_tg__ZTV7S7713C4__7S7713C3__8S7713C13[17]),  17,25},
  {&(_tg__ZTV7S7713C6__7S7713C3__8S7713C13[6]),  6,10},
  {&(_tg__ZTV7S7713C77S7713C4__7S7713C3__8S7713C13[3]),  3,10},
  {&(_tg__ZTV10S7713C8_nt__7S7713C3__8S7713C13[7]),  7,12},
  {&(_tg__ZTV7S7713C3__8S7713C13[7]),  7,14},
  {&(_tg__ZTV7S7713C4__8S7713C13[3]),  3,11},
  {&(_tg__ZTV7S7713C77S7713C4__8S7713C13[3]),  3,10},
  {&(_tg__ZTV7S7713C6__7S7713C77S7713C4__8S7713C13[6]),  6,10},
  {&(_tg__ZTV7S7713C6__7S7713C4__8S7713C13[6]),  6,10},
  {&(_tg__ZTV7S7713C7__7S7713C4__8S7713C13[3]),  3,10},
};
extern VTBL_ENTRY _ZTI8S7713C13[];
extern  VTBL_ENTRY _ZTV8S7713C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7713C13[];
static VTBL_ENTRY alt_thunk_names15[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7713C2D0Ev,_ZTv0_n12_N7S7713C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S7713C2D0Ev,_ZThn84_N7S7713C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7713C2D1Ev,_ZTv0_n12_N7S7713C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S7713C2D1Ev,_ZThn84_N7S7713C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7713C2D0Ev,_ZTv0_n32_N7S7713C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7713C2D0Ev,_ZThn48_N7S7713C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7713C2D1Ev,_ZTv0_n32_N7S7713C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7713C2D1Ev,_ZThn48_N7S7713C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7713C13D0Ev,_ZTv0_n12_N8S7713C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S7713C13D0Ev,_ZThn84_N8S7713C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7713C13D1Ev,_ZTv0_n12_N8S7713C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S7713C13D1Ev,_ZThn84_N8S7713C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7713C13D0Ev,_ZTv0_n32_N8S7713C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7713C13D0Ev,_ZThn48_N8S7713C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7713C13D1Ev,_ZTv0_n32_N8S7713C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7713C13D1Ev,_ZThn48_N8S7713C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7713C13 = {  "S7713C13", // class name
  bases_S7713C13, 16,
  &(vtc_S7713C13[0]), // expected_vtbl_contents
  &(vtt_S7713C13[0]), // expected_vtt_contents
  ABISELECT(176,96), // object size
  NSPAIRA(_ZTI8S7713C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7713C13),136, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7713C13),45, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names15,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7713C1  : S7713C2 , S7713C4 , virtual S7713C13 {
  char s7713c1f0;
  __tsi64 s7713c1f1;
  virtual  ~S7713C1(); // _ZN7S7713C1D2Ev
  virtual void  v1(); // _ZN7S7713C12v1Ev
  virtual void  v2(); // _ZN7S7713C12v2Ev
  virtual void  v3(); // _ZN7S7713C12v3Ev
  virtual void  v4(); // _ZN7S7713C12v4Ev
  virtual void  v5(); // _ZN7S7713C12v5Ev
  virtual void  v6(); // _ZN7S7713C12v6Ev
  virtual void  v7(); // _ZN7S7713C12v7Ev
  S7713C1(); // tgen
};
//SIG(1 S7713C1) C1{ BC2{ VBC3{ VBC4{ BC5{ v8} VBC6{ BC5 v9 v10 v11} BC7{ VBC6 BC5 v12 v13 v14 v15 v16 v17 Fi} v18 v19 v20 v21 v22 v23 v24 Fc} VBC8{ v25 v26 v27 v28 v29} BC9{ VBC5 vd v30} vd v31 v32 v33 FC7} VBC10{ vd v34 v35 v36 v37} BC11{ VBC4 VBC12{ v38 v39 v40 Fi} v41 v42 v43 v44 v45 Fp Fc[7]} vd v46 v47 v48 v49 v50} BC4 VBC13{ BC2 BC3 v51 v52 v53 v54 v55 v56 Fp FD} vd v1 v2 v3 v4 v5 v6 v7 Fc FL}


 S7713C1 ::~S7713C1(){ note_dtor("S7713C1", this);}
void  S7713C1 ::v1(){vfunc_called(this, "_ZN7S7713C12v1Ev");}
void  S7713C1 ::v2(){vfunc_called(this, "_ZN7S7713C12v2Ev");}
void  S7713C1 ::v3(){vfunc_called(this, "_ZN7S7713C12v3Ev");}
void  S7713C1 ::v4(){vfunc_called(this, "_ZN7S7713C12v4Ev");}
void  S7713C1 ::v5(){vfunc_called(this, "_ZN7S7713C12v5Ev");}
void  S7713C1 ::v6(){vfunc_called(this, "_ZN7S7713C12v6Ev");}
void  S7713C1 ::v7(){vfunc_called(this, "_ZN7S7713C12v7Ev");}
S7713C1 ::S7713C1(){ note_ctor("S7713C1", this);} // tgen

static void Test_S7713C1()
{
  extern Class_Descriptor cd_S7713C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,35)];
    init_test(&cd_S7713C1, buf);
    S7713C1 *dp, &lv = *(dp=new (buf) S7713C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,136), "sizeof(S7713C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7713C1)");
    /*is_ambiguous_... S7713C1::S7713C4 */ AMB_check_base_class_offset(lv, (S7713C5_nt*)(S7713C4*), ABISELECT(88,56), "S7713C1");
    check_base_class_offset(lv, (S7713C5_nt*)(S7713C6*), 0, "S7713C1");
    /*is_ambiguous_... S7713C1::S7713C4 */ AMB_check_base_class_offset(lv, (S7713C6*)(S7713C4*), 0, "S7713C1");
    /*is_ambiguous_... S7713C1::S7713C4 */ AMB_check_base_class_offset(lv, (S7713C6*)(S7713C7*)(S7713C4*), 0, "S7713C1");
    /*is_ambiguous_... S7713C1::S7713C4 */ AMB_check_base_class_offset(lv, (S7713C6*)(S7713C4*), 0, "S7713C1");
    /*is_ambiguous_... S7713C1::S7713C4 */ AMB_check_base_class_offset(lv, (S7713C6*)(S7713C7*)(S7713C4*), 0, "S7713C1");
    /*is_ambiguous_... S7713C1::S7713C4 */ AMB_check_base_class_offset(lv, (S7713C5_nt*)(S7713C7*)(S7713C4*), ABISELECT(96,60), "S7713C1");
    /*is_ambiguous_... S7713C1::S7713C4 */ AMB_check_base_class_offset(lv, (S7713C7*)(S7713C4*), ABISELECT(96,60), "S7713C1");
    /*is_ambiguous_... S7713C1::S7713C3 */ AMB_check_base_class_offset(lv, (S7713C4*)(S7713C3*), ABISELECT(88,56), "S7713C1");
    /*is_ambiguous_... S7713C1::S7713C2 */ AMB_check_base_class_offset(lv, (S7713C4*)(S7713C11*)(S7713C2*), ABISELECT(88,56), "S7713C1");
    check_base_class_offset(lv, (S7713C4*)(S7713C11*)(S7713C2*)(S7713C13*), ABISELECT(88,56), "S7713C1");
    /*is_ambiguous_... S7713C13::S7713C3 */ AMB_check_base_class_offset(lv, (S7713C4*)(S7713C3*)(S7713C13*), ABISELECT(88,56), "S7713C1");
    /*is_ambiguous_... S7713C1::S7713C3 */ AMB_check_base_class_offset(lv, (S7713C8_nt*)(S7713C3*), ABISELECT(112,72), "S7713C1");
    /*is_ambiguous_... S7713C13::S7713C3 */ AMB_check_base_class_offset(lv, (S7713C8_nt*)(S7713C3*)(S7713C13*), ABISELECT(112,72), "S7713C1");
    /*is_ambiguous_... S7713C1::S7713C3 */ AMB_check_base_class_offset(lv, (S7713C5_nt*)(S7713C9*)(S7713C3*), ABISELECT(56,40), "S7713C1");
    /*is_ambiguous_... S7713C13::S7713C3 */ AMB_check_base_class_offset(lv, (S7713C5_nt*)(S7713C9*)(S7713C3*)(S7713C13*), ABISELECT(56,40), "S7713C1");
    /*is_ambiguous_... S7713C1::S7713C3 */ AMB_check_base_class_offset(lv, (S7713C9*)(S7713C3*), ABISELECT(56,40), "S7713C1");
    /*is_ambiguous_... S7713C1::S7713C2 */ AMB_check_base_class_offset(lv, (S7713C3*)(S7713C2*), ABISELECT(56,40), "S7713C1");
    check_base_class_offset(lv, (S7713C3*)(S7713C2*)(S7713C13*), ABISELECT(56,40), "S7713C1");
    /*is_ambiguous_... S7713C1::S7713C2 */ AMB_check_base_class_offset(lv, (S7713C10_nt*)(S7713C2*), ABISELECT(120,76), "S7713C1");
    check_base_class_offset(lv, (S7713C10_nt*)(S7713C2*)(S7713C13*), ABISELECT(120,76), "S7713C1");
    /*is_ambiguous_... S7713C1::S7713C2 */ AMB_check_base_class_offset(lv, (S7713C12_nt*)(S7713C11*)(S7713C2*), ABISELECT(128,80), "S7713C1");
    check_base_class_offset(lv, (S7713C12_nt*)(S7713C11*)(S7713C2*)(S7713C13*), ABISELECT(128,80), "S7713C1");
    /*is_ambiguous_... S7713C1::S7713C2 */ AMB_check_base_class_offset(lv, (S7713C11*)(S7713C2*), 0, "S7713C1");
    /*is_ambiguous_... S7713C1::S7713C2 */ AMB_check_base_class_offset(lv, (S7713C2*), 0, "S7713C1");
    /*is_ambiguous_... S7713C1::S7713C4 */ AMB_check_base_class_offset(lv, (S7713C5_nt*)(S7713C4*), ABISELECT(24,16), "S7713C1");
    /*is_ambiguous_... S7713C1::S7713C4 */ AMB_check_base_class_offset(lv, (S7713C5_nt*)(S7713C7*)(S7713C4*), ABISELECT(32,20), "S7713C1");
    /*is_ambiguous_... S7713C1::S7713C4 */ AMB_check_base_class_offset(lv, (S7713C7*)(S7713C4*), ABISELECT(32,20), "S7713C1");
    /*is_ambiguous_... S7713C1::S7713C4 */ AMB_check_base_class_offset(lv, (S7713C4*), ABISELECT(24,16), "S7713C1");
    check_base_class_offset(lv, (S7713C11*)(S7713C2*)(S7713C13*), ABISELECT(144,88), "S7713C1");
    check_base_class_offset(lv, (S7713C2*)(S7713C13*), ABISELECT(144,88), "S7713C1");
    /*is_ambiguous_... S7713C13::S7713C3 */ AMB_check_base_class_offset(lv, (S7713C9*)(S7713C3*)(S7713C13*), ABISELECT(168,104), "S7713C1");
    /*is_ambiguous_... S7713C13::S7713C3 */ AMB_check_base_class_offset(lv, (S7713C3*)(S7713C13*), ABISELECT(168,104), "S7713C1");
    check_base_class_offset(lv, (S7713C13*), ABISELECT(144,88), "S7713C1");
    check_field_offset(lv, s7713c1f0, ABISELECT(45,29), "S7713C1.s7713c1f0");
    check_field_offset(lv, s7713c1f1, ABISELECT(48,32), "S7713C1.s7713c1f1");
    test_class_info(&lv, &cd_S7713C1);
    dp->~S7713C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7713C1(Test_S7713C1, "S7713C1", ABISELECT(224,136));

#else // __cplusplus

extern void _ZN7S7713C1C1Ev();
extern void _ZN7S7713C1D2Ev();
Name_Map name_map_S7713C1[] = {
  NSPAIR(_ZN7S7713C1C1Ev),
  NSPAIR(_ZN7S7713C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7713C5_nt;
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
extern Class_Descriptor cd_S7713C5_nt;
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
extern Class_Descriptor cd_S7713C6;
extern VTBL_ENTRY _ZTI7S7713C6[];
extern  VTBL_ENTRY _ZTV7S7713C6[];
extern Class_Descriptor cd_S7713C5_nt;
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
extern Class_Descriptor cd_S7713C7;
extern VTBL_ENTRY _ZTI7S7713C7[];
extern  VTBL_ENTRY _ZTV7S7713C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C7[];
extern Class_Descriptor cd_S7713C4;
extern VTBL_ENTRY _ZTI7S7713C4[];
extern  VTBL_ENTRY _ZTV7S7713C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C4[];
extern Class_Descriptor cd_S7713C8_nt;
extern VTBL_ENTRY _ZTI10S7713C8_nt[];
extern  VTBL_ENTRY _ZTV10S7713C8_nt[];
extern Class_Descriptor cd_S7713C5_nt;
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
extern Class_Descriptor cd_S7713C9;
extern VTBL_ENTRY _ZTI7S7713C9[];
extern  VTBL_ENTRY _ZTV7S7713C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C9[];
extern Class_Descriptor cd_S7713C3;
extern VTBL_ENTRY _ZTI7S7713C3[];
extern  VTBL_ENTRY _ZTV7S7713C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C3[];
extern Class_Descriptor cd_S7713C10_nt;
extern VTBL_ENTRY _ZTI11S7713C10_nt[];
extern  VTBL_ENTRY _ZTV11S7713C10_nt[];
extern Class_Descriptor cd_S7713C12_nt;
extern VTBL_ENTRY _ZTI11S7713C12_nt[];
extern  VTBL_ENTRY _ZTV11S7713C12_nt[];
extern Class_Descriptor cd_S7713C11;
extern VTBL_ENTRY _ZTI8S7713C11[];
extern  VTBL_ENTRY _ZTV8S7713C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7713C11[];
extern Class_Descriptor cd_S7713C2;
extern VTBL_ENTRY _ZTI7S7713C2[];
extern  VTBL_ENTRY _ZTV7S7713C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C2[];
extern Class_Descriptor cd_S7713C5_nt;
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
extern Class_Descriptor cd_S7713C5_nt;
extern VTBL_ENTRY _ZTI10S7713C5_nt[];
extern  VTBL_ENTRY _ZTV10S7713C5_nt[];
extern Class_Descriptor cd_S7713C7;
extern VTBL_ENTRY _ZTI7S7713C7[];
extern  VTBL_ENTRY _ZTV7S7713C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C7[];
extern Class_Descriptor cd_S7713C4;
extern VTBL_ENTRY _ZTI7S7713C4[];
extern  VTBL_ENTRY _ZTV7S7713C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C4[];
extern Class_Descriptor cd_S7713C11;
extern VTBL_ENTRY _ZTI8S7713C11[];
extern  VTBL_ENTRY _ZTV8S7713C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7713C11[];
extern Class_Descriptor cd_S7713C2;
extern VTBL_ENTRY _ZTI7S7713C2[];
extern  VTBL_ENTRY _ZTV7S7713C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C2[];
extern Class_Descriptor cd_S7713C9;
extern VTBL_ENTRY _ZTI7S7713C9[];
extern  VTBL_ENTRY _ZTV7S7713C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C9[];
extern Class_Descriptor cd_S7713C3;
extern VTBL_ENTRY _ZTI7S7713C3[];
extern  VTBL_ENTRY _ZTV7S7713C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C3[];
extern Class_Descriptor cd_S7713C13;
extern VTBL_ENTRY _ZTI8S7713C13[];
extern  VTBL_ENTRY _ZTV8S7713C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7713C13[];
static Base_Class bases_S7713C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7713C5_nt,    ABISELECT(88,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
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7713C5_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_S7713C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7713C5_nt,    ABISELECT(96,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_S7713C7,    ABISELECT(96,60), //bcp->offset
    102, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7713C4,    ABISELECT(88,56), //bcp->offset
    77, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7713C8_nt,    ABISELECT(112,72), //bcp->offset
    112, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7713C5_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7713C9,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7713C3,    ABISELECT(56,40), //bcp->offset
    58, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7713C10_nt,    ABISELECT(120,76), //bcp->offset
    124, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7713C12_nt,    ABISELECT(128,80), //bcp->offset
    137, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7713C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //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
    13, //immediately_derived
  0, 0},
  {&cd_S7713C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //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_S7713C5_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
    20, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7713C5_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
    21, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7713C7,    ABISELECT(32,20), //bcp->offset
    48, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7713C4,    ABISELECT(24,16), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7713C11,    ABISELECT(144,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7713C2,    ABISELECT(144,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7713C9,    ABISELECT(168,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7713C3,    ABISELECT(168,104), //bcp->offset
    201, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7713C13,    ABISELECT(144,88), //bcp->offset
    145, //bcp->virtual_function_table_offset
    34, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7713C1[];
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
extern void _ZN8S7713C113v41Ev();
extern void _ZN8S7713C113v42Ev();
extern void _ZN8S7713C113v43Ev();
extern void _ZN8S7713C113v44Ev();
extern void _ZN8S7713C113v45Ev();
extern void _ZN7S7713C1D1Ev();
extern void _ZN7S7713C1D0Ev();
extern void _ZN7S7713C23v46Ev();
extern void _ZN7S7713C23v47Ev();
extern void _ZN7S7713C23v48Ev();
extern void _ZN7S7713C23v49Ev();
extern void _ZN7S7713C23v50Ev();
extern void _ZN7S7713C12v1Ev();
extern void _ZN7S7713C12v2Ev();
extern void _ZN7S7713C12v3Ev();
extern void _ZN7S7713C12v4Ev();
extern void _ZN7S7713C12v5Ev();
extern void _ZN7S7713C12v6Ev();
extern void _ZN7S7713C12v7Ev();
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C43v18Ev();
extern void _ZN7S7713C43v19Ev();
extern void _ZN7S7713C43v20Ev();
extern void _ZN7S7713C43v21Ev();
extern void _ZN7S7713C43v22Ev();
extern void _ZN7S7713C43v23Ev();
extern void _ZN7S7713C43v24Ev();
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
extern void _ZN10S7713C5_nt2v8Ev();
extern void ABISELECT(_ZTv0_n64_N7S7713C1D1Ev,_ZTv0_n32_N7S7713C1D1Ev)();
extern void ABISELECT(_ZThn56_N7S7713C1D1Ev,_ZThn40_N7S7713C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7713C1D0Ev,_ZTv0_n32_N7S7713C1D0Ev)();
extern void ABISELECT(_ZThn56_N7S7713C1D0Ev,_ZThn40_N7S7713C1D0Ev)() __attribute__((weak));
extern void _ZN7S7713C93v30Ev();
extern void _ZN7S7713C33v31Ev();
extern void _ZN7S7713C33v32Ev();
extern void _ZN7S7713C33v33Ev();
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C43v18Ev();
extern void _ZN7S7713C43v19Ev();
extern void _ZN7S7713C43v20Ev();
extern void _ZN7S7713C43v21Ev();
extern void _ZN7S7713C43v22Ev();
extern void _ZN7S7713C43v23Ev();
extern void _ZN7S7713C43v24Ev();
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
extern void _ZN10S7713C8_nt3v25Ev();
extern void _ZN10S7713C8_nt3v26Ev();
extern void _ZN10S7713C8_nt3v27Ev();
extern void _ZN10S7713C8_nt3v28Ev();
extern void _ZN10S7713C8_nt3v29Ev();
extern void ABISELECT(_ZTv0_n24_N7S7713C1D1Ev,_ZTv0_n12_N7S7713C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S7713C1D1Ev,_ZThn76_N7S7713C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7713C1D0Ev,_ZTv0_n12_N7S7713C1D0Ev)();
extern void ABISELECT(_ZThn120_N7S7713C1D0Ev,_ZThn76_N7S7713C1D0Ev)() __attribute__((weak));
extern void _ZN11S7713C10_nt3v34Ev();
extern void _ZN11S7713C10_nt3v35Ev();
extern void _ZN11S7713C10_nt3v36Ev();
extern void _ZN11S7713C10_nt3v37Ev();
extern void _ZN11S7713C12_nt3v38Ev();
extern void _ZN11S7713C12_nt3v39Ev();
extern void _ZN11S7713C12_nt3v40Ev();
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
extern void _ZN8S7713C113v41Ev();
extern void _ZN8S7713C113v42Ev();
extern void _ZN8S7713C113v43Ev();
extern void _ZN8S7713C113v44Ev();
extern void _ZN8S7713C113v45Ev();
extern void ABISELECT(_ZTv0_n152_N7S7713C1D1Ev,_ZTv0_n76_N7S7713C1D1Ev)();
extern void ABISELECT(_ZThn144_N7S7713C1D1Ev,_ZThn88_N7S7713C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n152_N7S7713C1D0Ev,_ZTv0_n76_N7S7713C1D0Ev)();
extern void ABISELECT(_ZThn144_N7S7713C1D0Ev,_ZThn88_N7S7713C1D0Ev)() __attribute__((weak));
extern void _ZN7S7713C23v46Ev();
extern void _ZN7S7713C23v47Ev();
extern void _ZN7S7713C23v48Ev();
extern void _ZN7S7713C23v49Ev();
extern void _ZN7S7713C23v50Ev();
extern void _ZN8S7713C133v51Ev();
extern void _ZN8S7713C133v52Ev();
extern void _ZN8S7713C133v53Ev();
extern void _ZN8S7713C133v54Ev();
extern void _ZN8S7713C133v55Ev();
extern void _ZN8S7713C133v56Ev();
extern void _ZN10S7713C5_nt2v8Ev();
extern void ABISELECT(_ZTvn24_n152_N7S7713C1D1Ev,_ZTvn16_n76_N7S7713C1D1Ev)();
extern void ABISELECT(_ZTvn24_n152_N7S7713C1D0Ev,_ZTvn16_n76_N7S7713C1D0Ev)();
extern void _ZN7S7713C93v30Ev();
extern void _ZN7S7713C33v31Ev();
extern void _ZN7S7713C33v32Ev();
extern void _ZN7S7713C33v33Ev();
static  VTBL_ENTRY vtc_S7713C1[] = {
  ABISELECT(144,88),
  ABISELECT(120,76),
  ABISELECT(56,40),
  ABISELECT(112,72),
  ABISELECT(56,40),
  ABISELECT(128,80),
  0,
  ABISELECT(88,56),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C1[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v41Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v42Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v43Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v45Ev,
  (VTBL_ENTRY)&_ZN7S7713C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7713C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v46Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v47Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v48Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v49Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v50Ev,
  (VTBL_ENTRY)&_ZN7S7713C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7713C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7713C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7713C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7713C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7713C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7713C12v7Ev,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7713C1[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v24Ev,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7713C1[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(56,32),
  ABISELECT(-56,-40),
  ABISELECT(32,16),
  0,
  0,
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI7S7713C1[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7713C1D1Ev,_ZTv0_n32_N7S7713C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7713C1D0Ev,_ZTv0_n32_N7S7713C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7713C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v31Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v32Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v33Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S7713C1[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v24Ev,
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S7713C1[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI7S7713C1[0]),
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v29Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI7S7713C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7713C1D1Ev,_ZTv0_n12_N7S7713C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7713C1D0Ev,_ZTv0_n12_N7S7713C1D0Ev),
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v34Ev,
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v35Ev,
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v36Ev,
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v37Ev,
  0,
  0,
  0,
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI7S7713C1[0]),
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v40Ev,
  ABISELECT(24,16),
  ABISELECT(24,16),
  ABISELECT(24,16),
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-88),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-88,-48),
  ABISELECT(-32,-16),
  ABISELECT(-88,-48),
  ABISELECT(-16,-8),
  ABISELECT(-144,-88),
  ABISELECT(-56,-32),
  ABISELECT(-144,-88),
  ABISELECT(-144,-88),
  ABISELECT(-144,-88),
  ABISELECT(-144,-88),
  ABISELECT(-144,-88),
  (VTBL_ENTRY)&(_ZTI7S7713C1[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v41Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v42Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v43Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v45Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n152_N7S7713C1D1Ev,_ZTv0_n76_N7S7713C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n152_N7S7713C1D0Ev,_ZTv0_n76_N7S7713C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7713C23v46Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v47Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v48Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v49Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v50Ev,
  (VTBL_ENTRY)&_ZN8S7713C133v51Ev,
  (VTBL_ENTRY)&_ZN8S7713C133v52Ev,
  (VTBL_ENTRY)&_ZN8S7713C133v53Ev,
  (VTBL_ENTRY)&_ZN8S7713C133v54Ev,
  (VTBL_ENTRY)&_ZN8S7713C133v55Ev,
  (VTBL_ENTRY)&_ZN8S7713C133v56Ev,
  ABISELECT(-56,-32),
  ABISELECT(-168,-104),
  ABISELECT(-80,-48),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  ABISELECT(-168,-104),
  (VTBL_ENTRY)&(_ZTI7S7713C1[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n152_N7S7713C1D1Ev,_ZTvn16_n76_N7S7713C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n152_N7S7713C1D0Ev,_ZTvn16_n76_N7S7713C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7713C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v31Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v32Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v33Ev,
};
extern VTBL_ENTRY _ZTV7S7713C1[];
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
extern void _ZN8S7713C113v41Ev();
extern void _ZN8S7713C113v42Ev();
extern void _ZN8S7713C113v43Ev();
extern void _ZN8S7713C113v44Ev();
extern void _ZN8S7713C113v45Ev();
extern void _ZN7S7713C2D1Ev();
extern void _ZN7S7713C2D0Ev();
extern void _ZN7S7713C23v46Ev();
extern void _ZN7S7713C23v47Ev();
extern void _ZN7S7713C23v48Ev();
extern void _ZN7S7713C23v49Ev();
extern void _ZN7S7713C23v50Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C2__7S7713C1[] = {
  ABISELECT(120,76),
  ABISELECT(56,40),
  ABISELECT(112,72),
  ABISELECT(56,40),
  ABISELECT(128,80),
  0,
  ABISELECT(88,56),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v41Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v42Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v43Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v45Ev,
  (VTBL_ENTRY)&_ZN7S7713C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7713C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v46Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v47Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v48Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v49Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v50Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
extern void _ZN8S7713C113v41Ev();
extern void _ZN8S7713C113v42Ev();
extern void _ZN8S7713C113v43Ev();
extern void _ZN8S7713C113v44Ev();
extern void _ZN8S7713C113v45Ev();
static  VTBL_ENTRY _tg__ZTV8S7713C117S7713C2__7S7713C1[] = {
  ABISELECT(128,80),
  0,
  ABISELECT(88,56),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7713C11[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v41Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v42Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v43Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v45Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C43v18Ev();
extern void _ZN7S7713C43v19Ev();
extern void _ZN7S7713C43v20Ev();
extern void _ZN7S7713C43v21Ev();
extern void _ZN7S7713C43v22Ev();
extern void _ZN7S7713C43v23Ev();
extern void _ZN7S7713C43v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C4__8S7713C117S7713C2__7S7713C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S7713C11[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v24Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C77S7713C4__8S7713C117S7713C2__7S7713C1[] = {
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI8S7713C11[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
};
extern void _ZN11S7713C12_nt3v38Ev();
extern void _ZN11S7713C12_nt3v39Ev();
extern void _ZN11S7713C12_nt3v40Ev();
static  VTBL_ENTRY _tg__ZTV11S7713C12_nt__8S7713C117S7713C2__7S7713C1[] = {
  0,
  0,
  0,
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S7713C11[0]),
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v40Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void ABISELECT(_ZTv0_n64_N7S7713C2D1Ev,_ZTv0_n32_N7S7713C2D1Ev)();
extern void ABISELECT(_ZThn56_N7S7713C2D1Ev,_ZThn40_N7S7713C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7713C2D0Ev,_ZTv0_n32_N7S7713C2D0Ev)();
extern void ABISELECT(_ZThn56_N7S7713C2D0Ev,_ZThn40_N7S7713C2D0Ev)() __attribute__((weak));
extern void _ZN7S7713C93v30Ev();
extern void _ZN7S7713C33v31Ev();
extern void _ZN7S7713C33v32Ev();
extern void _ZN7S7713C33v33Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C3__7S7713C2__7S7713C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(56,32),
  ABISELECT(-56,-40),
  ABISELECT(32,16),
  0,
  0,
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7713C2D1Ev,_ZTv0_n32_N7S7713C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7713C2D0Ev,_ZTv0_n32_N7S7713C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7713C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v31Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v32Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v33Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C43v18Ev();
extern void _ZN7S7713C43v19Ev();
extern void _ZN7S7713C43v20Ev();
extern void _ZN7S7713C43v21Ev();
extern void _ZN7S7713C43v22Ev();
extern void _ZN7S7713C43v23Ev();
extern void _ZN7S7713C43v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C4__7S7713C2__7S7713C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v24Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C77S7713C4__7S7713C2__7S7713C1[] = {
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
};
extern void _ZN10S7713C8_nt3v25Ev();
extern void _ZN10S7713C8_nt3v26Ev();
extern void _ZN10S7713C8_nt3v27Ev();
extern void _ZN10S7713C8_nt3v28Ev();
extern void _ZN10S7713C8_nt3v29Ev();
static  VTBL_ENTRY _tg__ZTV10S7713C8_nt__7S7713C2__7S7713C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v29Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7713C2D1Ev,_ZTv0_n12_N7S7713C2D1Ev)();
extern void ABISELECT(_ZThn120_N7S7713C2D1Ev,_ZThn76_N7S7713C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7713C2D0Ev,_ZTv0_n12_N7S7713C2D0Ev)();
extern void ABISELECT(_ZThn120_N7S7713C2D0Ev,_ZThn76_N7S7713C2D0Ev)() __attribute__((weak));
extern void _ZN11S7713C10_nt3v34Ev();
extern void _ZN11S7713C10_nt3v35Ev();
extern void _ZN11S7713C10_nt3v36Ev();
extern void _ZN11S7713C10_nt3v37Ev();
static  VTBL_ENTRY _tg__ZTV11S7713C10_nt__7S7713C2__7S7713C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7713C2D1Ev,_ZTv0_n12_N7S7713C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7713C2D0Ev,_ZTv0_n12_N7S7713C2D0Ev),
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v34Ev,
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v35Ev,
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v36Ev,
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v37Ev,
};
extern void _ZN11S7713C12_nt3v38Ev();
extern void _ZN11S7713C12_nt3v39Ev();
extern void _ZN11S7713C12_nt3v40Ev();
static  VTBL_ENTRY _tg__ZTV11S7713C12_nt__7S7713C2__7S7713C1[] = {
  0,
  0,
  0,
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v40Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C43v18Ev();
extern void _ZN7S7713C43v19Ev();
extern void _ZN7S7713C43v20Ev();
extern void _ZN7S7713C43v21Ev();
extern void _ZN7S7713C43v22Ev();
extern void _ZN7S7713C43v23Ev();
extern void _ZN7S7713C43v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C4__A__7S7713C1[] = {
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C4[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v24Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C77S7713C4__A1__7S7713C1[] = {
  ABISELECT(-32,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C7[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C6__7S7713C77S7713C4__A1__7S7713C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI7S7713C7[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C6__7S7713C4__A__7S7713C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI7S7713C4[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C7__7S7713C4__A__7S7713C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7713C4[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C3D1Ev();
extern void _ZN7S7713C3D0Ev();
extern void _ZN7S7713C93v30Ev();
extern void _ZN7S7713C33v31Ev();
extern void _ZN7S7713C33v32Ev();
extern void _ZN7S7713C33v33Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C3__7S7713C1[] = {
  ABISELECT(56,32),
  ABISELECT(-56,-40),
  ABISELECT(32,16),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7713C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7713C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v31Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v32Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v33Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C9D1Ev();
extern void _ZN7S7713C9D0Ev();
extern void _ZN7S7713C93v30Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C97S7713C3__7S7713C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C9[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7713C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7713C93v30Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C43v18Ev();
extern void _ZN7S7713C43v19Ev();
extern void _ZN7S7713C43v20Ev();
extern void _ZN7S7713C43v21Ev();
extern void _ZN7S7713C43v22Ev();
extern void _ZN7S7713C43v23Ev();
extern void _ZN7S7713C43v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C4__7S7713C3__7S7713C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v24Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C6__7S7713C3__7S7713C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(56,40),
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C77S7713C4__7S7713C3__7S7713C1[] = {
  ABISELECT(-96,-60),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
};
extern void _ZN10S7713C8_nt3v25Ev();
extern void _ZN10S7713C8_nt3v26Ev();
extern void _ZN10S7713C8_nt3v27Ev();
extern void _ZN10S7713C8_nt3v28Ev();
extern void _ZN10S7713C8_nt3v29Ev();
static  VTBL_ENTRY _tg__ZTV10S7713C8_nt__7S7713C3__7S7713C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v29Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C43v18Ev();
extern void _ZN7S7713C43v19Ev();
extern void _ZN7S7713C43v20Ev();
extern void _ZN7S7713C43v21Ev();
extern void _ZN7S7713C43v22Ev();
extern void _ZN7S7713C43v23Ev();
extern void _ZN7S7713C43v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C4__7S7713C1[] = {
  ABISELECT(-88,-56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C4[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v24Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C77S7713C4__7S7713C1[] = {
  ABISELECT(-96,-60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C7[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C6__7S7713C77S7713C4__7S7713C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(96,60),
  (VTBL_ENTRY)&(_ZTI7S7713C7[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C6__7S7713C4__7S7713C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(88,56),
  (VTBL_ENTRY)&(_ZTI7S7713C4[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C7__7S7713C4__7S7713C1[] = {
  ABISELECT(-96,-60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7713C4[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
extern void _ZN8S7713C113v41Ev();
extern void _ZN8S7713C113v42Ev();
extern void _ZN8S7713C113v43Ev();
extern void _ZN8S7713C113v44Ev();
extern void _ZN8S7713C113v45Ev();
extern void _ZN8S7713C13D1Ev();
extern void _ZN8S7713C13D0Ev();
extern void _ZN7S7713C23v46Ev();
extern void _ZN7S7713C23v47Ev();
extern void _ZN7S7713C23v48Ev();
extern void _ZN7S7713C23v49Ev();
extern void _ZN7S7713C23v50Ev();
extern void _ZN8S7713C133v51Ev();
extern void _ZN8S7713C133v52Ev();
extern void _ZN8S7713C133v53Ev();
extern void _ZN8S7713C133v54Ev();
extern void _ZN8S7713C133v55Ev();
extern void _ZN8S7713C133v56Ev();
static  VTBL_ENTRY _tg__ZTV8S7713C13__7S7713C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-88,-48),
  ABISELECT(-32,-16),
  ABISELECT(-88,-48),
  ABISELECT(-16,-8),
  ABISELECT(-144,-88),
  ABISELECT(-56,-32),
  ABISELECT(-144,-88),
  ABISELECT(-144,-88),
  ABISELECT(-144,-88),
  ABISELECT(-144,-88),
  0,
  (VTBL_ENTRY)&(_ZTI8S7713C13[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v41Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v42Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v43Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v45Ev,
  (VTBL_ENTRY)&_ZN8S7713C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7713C13D0Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v46Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v47Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v48Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v49Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v50Ev,
  (VTBL_ENTRY)&_ZN8S7713C133v51Ev,
  (VTBL_ENTRY)&_ZN8S7713C133v52Ev,
  (VTBL_ENTRY)&_ZN8S7713C133v53Ev,
  (VTBL_ENTRY)&_ZN8S7713C133v54Ev,
  (VTBL_ENTRY)&_ZN8S7713C133v55Ev,
  (VTBL_ENTRY)&_ZN8S7713C133v56Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
extern void _ZN8S7713C113v41Ev();
extern void _ZN8S7713C113v42Ev();
extern void _ZN8S7713C113v43Ev();
extern void _ZN8S7713C113v44Ev();
extern void _ZN8S7713C113v45Ev();
extern void _ZN7S7713C2D1Ev();
extern void _ZN7S7713C2D0Ev();
extern void _ZN7S7713C23v46Ev();
extern void _ZN7S7713C23v47Ev();
extern void _ZN7S7713C23v48Ev();
extern void _ZN7S7713C23v49Ev();
extern void _ZN7S7713C23v50Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C28S7713C13__A1__7S7713C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-88,-48),
  ABISELECT(-32,-16),
  ABISELECT(-88,-48),
  ABISELECT(-16,-8),
  ABISELECT(-144,-88),
  ABISELECT(-56,-32),
  ABISELECT(-144,-88),
  ABISELECT(-144,-88),
  ABISELECT(-144,-88),
  ABISELECT(-144,-88),
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v41Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v42Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v43Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v45Ev,
  (VTBL_ENTRY)&_ZN7S7713C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7713C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v46Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v47Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v48Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v49Ev,
  (VTBL_ENTRY)&_ZN7S7713C23v50Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
extern void _ZN8S7713C113v41Ev();
extern void _ZN8S7713C113v42Ev();
extern void _ZN8S7713C113v43Ev();
extern void _ZN8S7713C113v44Ev();
extern void _ZN8S7713C113v45Ev();
static  VTBL_ENTRY _tg__ZTV8S7713C117S7713C28S7713C13__A1__7S7713C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-144,-88),
  ABISELECT(-56,-32),
  ABISELECT(-144,-88),
  ABISELECT(-144,-88),
  ABISELECT(-144,-88),
  ABISELECT(-144,-88),
  0,
  (VTBL_ENTRY)&(_ZTI8S7713C11[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v41Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v42Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v43Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7713C113v45Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C43v18Ev();
extern void _ZN7S7713C43v19Ev();
extern void _ZN7S7713C43v20Ev();
extern void _ZN7S7713C43v21Ev();
extern void _ZN7S7713C43v22Ev();
extern void _ZN7S7713C43v23Ev();
extern void _ZN7S7713C43v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C4__8S7713C117S7713C28S7713C13__A1__7S7713C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI8S7713C11[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v24Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C6__8S7713C117S7713C28S7713C13__A1__7S7713C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(144,88),
  (VTBL_ENTRY)&(_ZTI8S7713C11[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C77S7713C4__8S7713C117S7713C28S7713C13__A1__7S7713C1[] = {
  ABISELECT(-96,-60),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S7713C11[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
};
extern void _ZN11S7713C12_nt3v38Ev();
extern void _ZN11S7713C12_nt3v39Ev();
extern void _ZN11S7713C12_nt3v40Ev();
static  VTBL_ENTRY _tg__ZTV11S7713C12_nt__8S7713C117S7713C28S7713C13__A1__7S7713C1[] = {
  0,
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7713C11[0]),
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v40Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void ABISELECT(_ZTv0_n64_N7S7713C2D1Ev,_ZTv0_n32_N7S7713C2D1Ev)();
extern void ABISELECT(_ZTv0_n64_N7S7713C2D0Ev,_ZTv0_n32_N7S7713C2D0Ev)();
extern void _ZN7S7713C93v30Ev();
extern void _ZN7S7713C33v31Ev();
extern void _ZN7S7713C33v32Ev();
extern void _ZN7S7713C33v33Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C3__7S7713C28S7713C13__A1__7S7713C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(88,48),
  ABISELECT(56,32),
  ABISELECT(-56,-40),
  ABISELECT(32,16),
  0,
  0,
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7713C2D1Ev,_ZTv0_n32_N7S7713C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7713C2D0Ev,_ZTv0_n32_N7S7713C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7713C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v31Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v32Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v33Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C43v18Ev();
extern void _ZN7S7713C43v19Ev();
extern void _ZN7S7713C43v20Ev();
extern void _ZN7S7713C43v21Ev();
extern void _ZN7S7713C43v22Ev();
extern void _ZN7S7713C43v23Ev();
extern void _ZN7S7713C43v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C4__7S7713C28S7713C13__A1__7S7713C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v24Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C6__7S7713C28S7713C13__A1__7S7713C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(144,88),
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C77S7713C4__7S7713C28S7713C13__A1__7S7713C1[] = {
  ABISELECT(-96,-60),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
};
extern void _ZN10S7713C8_nt3v25Ev();
extern void _ZN10S7713C8_nt3v26Ev();
extern void _ZN10S7713C8_nt3v27Ev();
extern void _ZN10S7713C8_nt3v28Ev();
extern void _ZN10S7713C8_nt3v29Ev();
static  VTBL_ENTRY _tg__ZTV10S7713C8_nt__7S7713C28S7713C13__A1__7S7713C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v29Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7713C2D1Ev,_ZTv0_n12_N7S7713C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7713C2D0Ev,_ZTv0_n12_N7S7713C2D0Ev)();
extern void _ZN11S7713C10_nt3v34Ev();
extern void _ZN11S7713C10_nt3v35Ev();
extern void _ZN11S7713C10_nt3v36Ev();
extern void _ZN11S7713C10_nt3v37Ev();
static  VTBL_ENTRY _tg__ZTV11S7713C10_nt__7S7713C28S7713C13__A1__7S7713C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7713C2D1Ev,_ZTv0_n12_N7S7713C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7713C2D0Ev,_ZTv0_n12_N7S7713C2D0Ev),
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v34Ev,
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v35Ev,
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v36Ev,
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v37Ev,
};
extern void _ZN11S7713C12_nt3v38Ev();
extern void _ZN11S7713C12_nt3v39Ev();
extern void _ZN11S7713C12_nt3v40Ev();
static  VTBL_ENTRY _tg__ZTV11S7713C12_nt__7S7713C28S7713C13__A1__7S7713C1[] = {
  0,
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7713C2[0]),
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v40Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C3D1Ev();
extern void _ZN7S7713C3D0Ev();
extern void _ZN7S7713C93v30Ev();
extern void _ZN7S7713C33v31Ev();
extern void _ZN7S7713C33v32Ev();
extern void _ZN7S7713C33v33Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C38S7713C13__A1__7S7713C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-168,-104),
  ABISELECT(-80,-48),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7713C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7713C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v31Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v32Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v33Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C9D1Ev();
extern void _ZN7S7713C9D0Ev();
extern void _ZN7S7713C93v30Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C97S7713C38S7713C13__A1__7S7713C1[] = {
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7713C9[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7713C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7713C93v30Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S7713C5_nt__7S7713C97S7713C38S7713C13__A1__7S7713C1[] = {
  0,
  ABISELECT(112,64),
  (VTBL_ENTRY)&(_ZTI7S7713C9[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C43v18Ev();
extern void _ZN7S7713C43v19Ev();
extern void _ZN7S7713C43v20Ev();
extern void _ZN7S7713C43v21Ev();
extern void _ZN7S7713C43v22Ev();
extern void _ZN7S7713C43v23Ev();
extern void _ZN7S7713C43v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C4__7S7713C38S7713C13__A1__7S7713C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  ABISELECT(80,48),
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v24Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C6__7S7713C38S7713C13__A1__7S7713C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(168,104),
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C77S7713C4__7S7713C38S7713C13__A1__7S7713C1[] = {
  ABISELECT(-96,-60),
  ABISELECT(72,44),
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
};
extern void _ZN10S7713C8_nt3v25Ev();
extern void _ZN10S7713C8_nt3v26Ev();
extern void _ZN10S7713C8_nt3v27Ev();
extern void _ZN10S7713C8_nt3v28Ev();
extern void _ZN10S7713C8_nt3v29Ev();
static  VTBL_ENTRY _tg__ZTV10S7713C8_nt__7S7713C38S7713C13__A1__7S7713C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v29Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S7713C5_nt__A3__7S7713C38S7713C13__A1__7S7713C1[] = {
  0,
  ABISELECT(112,64),
  (VTBL_ENTRY)&(_ZTI7S7713C3[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void ABISELECT(_ZTv0_n64_N8S7713C13D1Ev,_ZTv0_n32_N8S7713C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S7713C13D0Ev,_ZTv0_n32_N8S7713C13D0Ev)();
extern void _ZN7S7713C93v30Ev();
extern void _ZN7S7713C33v31Ev();
extern void _ZN7S7713C33v32Ev();
extern void _ZN7S7713C33v33Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C3__8S7713C13__7S7713C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(88,48),
  ABISELECT(56,32),
  ABISELECT(-56,-40),
  ABISELECT(32,16),
  0,
  0,
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI8S7713C13[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7713C13D1Ev,_ZTv0_n32_N8S7713C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7713C13D0Ev,_ZTv0_n32_N8S7713C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7713C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v31Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v32Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v33Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C43v18Ev();
extern void _ZN7S7713C43v19Ev();
extern void _ZN7S7713C43v20Ev();
extern void _ZN7S7713C43v21Ev();
extern void _ZN7S7713C43v22Ev();
extern void _ZN7S7713C43v23Ev();
extern void _ZN7S7713C43v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C4__8S7713C13__7S7713C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI8S7713C13[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7713C43v24Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C62v9Ev();
extern void _ZN7S7713C63v10Ev();
extern void _ZN7S7713C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C6__8S7713C13__7S7713C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(144,88),
  (VTBL_ENTRY)&(_ZTI8S7713C13[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7713C63v11Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void _ZN7S7713C73v12Ev();
extern void _ZN7S7713C73v13Ev();
extern void _ZN7S7713C73v14Ev();
extern void _ZN7S7713C73v15Ev();
extern void _ZN7S7713C73v16Ev();
extern void _ZN7S7713C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C77S7713C4__8S7713C13__7S7713C1[] = {
  ABISELECT(-96,-60),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S7713C13[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v12Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7713C73v17Ev,
};
extern void _ZN10S7713C8_nt3v25Ev();
extern void _ZN10S7713C8_nt3v26Ev();
extern void _ZN10S7713C8_nt3v27Ev();
extern void _ZN10S7713C8_nt3v28Ev();
extern void _ZN10S7713C8_nt3v29Ev();
static  VTBL_ENTRY _tg__ZTV10S7713C8_nt__8S7713C13__7S7713C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S7713C13[0]),
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S7713C8_nt3v29Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7713C13D1Ev,_ZTv0_n12_N8S7713C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7713C13D0Ev,_ZTv0_n12_N8S7713C13D0Ev)();
extern void _ZN11S7713C10_nt3v34Ev();
extern void _ZN11S7713C10_nt3v35Ev();
extern void _ZN11S7713C10_nt3v36Ev();
extern void _ZN11S7713C10_nt3v37Ev();
static  VTBL_ENTRY _tg__ZTV11S7713C10_nt__8S7713C13__7S7713C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S7713C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7713C13D1Ev,_ZTv0_n12_N8S7713C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7713C13D0Ev,_ZTv0_n12_N8S7713C13D0Ev),
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v34Ev,
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v35Ev,
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v36Ev,
  (VTBL_ENTRY)&_ZN11S7713C10_nt3v37Ev,
};
extern void _ZN11S7713C12_nt3v38Ev();
extern void _ZN11S7713C12_nt3v39Ev();
extern void _ZN11S7713C12_nt3v40Ev();
static  VTBL_ENTRY _tg__ZTV11S7713C12_nt__8S7713C13__7S7713C1[] = {
  0,
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7713C13[0]),
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S7713C12_nt3v40Ev,
};
extern void _ZN10S7713C5_nt2v8Ev();
extern void ABISELECT(_ZThn24_N8S7713C13D1Ev,_ZThn16_N8S7713C13D1Ev)();
extern void ABISELECT(_ZThn24_N8S7713C13D0Ev,_ZThn16_N8S7713C13D0Ev)();
extern void _ZN7S7713C93v30Ev();
extern void _ZN7S7713C33v31Ev();
extern void _ZN7S7713C33v32Ev();
extern void _ZN7S7713C33v33Ev();
static  VTBL_ENTRY _tg__ZTV7S7713C3__A__8S7713C13__7S7713C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-168,-104),
  ABISELECT(-80,-48),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S7713C13[0]),
  (VTBL_ENTRY)&_ZN10S7713C5_nt2v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S7713C13D1Ev,_ZThn16_N8S7713C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S7713C13D0Ev,_ZThn16_N8S7713C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7713C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v31Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v32Ev,
  (VTBL_ENTRY)&_ZN7S7713C33v33Ev,
};
static  VTT_ENTRY vtt_S7713C1[] = {
  {&(_ZTV7S7713C1[14]),  14,215},
  {&(_tg__ZTV7S7713C2__7S7713C1[13]),  13,29},
  {&(_tg__ZTV8S7713C117S7713C2__7S7713C1[9]),  9,18},
  {&(_tg__ZTV7S7713C4__8S7713C117S7713C2__7S7713C1[17]),  17,25},
  {&(_tg__ZTV8S7713C117S7713C2__7S7713C1[9]),  9,18},
  {&(_tg__ZTV7S7713C77S7713C4__8S7713C117S7713C2__7S7713C1[3]),  3,10},
  {&(_tg__ZTV11S7713C12_nt__8S7713C117S7713C2__7S7713C1[5]),  5,8},
  {&(_tg__ZTV7S7713C3__7S7713C2__7S7713C1[12]),  12,19},
  {&(_tg__ZTV7S7713C4__7S7713C2__7S7713C1[17]),  17,25},
  {&(_tg__ZTV7S7713C2__7S7713C1[13]),  13,29},
  {&(_tg__ZTV7S7713C77S7713C4__7S7713C2__7S7713C1[3]),  3,10},
  {&(_tg__ZTV10S7713C8_nt__7S7713C2__7S7713C1[7]),  7,12},
  {&(_tg__ZTV7S7713C3__7S7713C2__7S7713C1[12]),  12,19},
  {&(_tg__ZTV11S7713C10_nt__7S7713C2__7S7713C1[7]),  7,13},
  {&(_tg__ZTV11S7713C12_nt__7S7713C2__7S7713C1[5]),  5,8},
  {&(_tg__ZTV7S7713C4__A__7S7713C1[3]),  3,11},
  {&(_tg__ZTV7S7713C77S7713C4__A1__7S7713C1[3]),  3,10},
  {&(_tg__ZTV7S7713C6__7S7713C77S7713C4__A1__7S7713C1[6]),  6,10},
  {&(_tg__ZTV7S7713C6__7S7713C4__A__7S7713C1[6]),  6,10},
  {&(_tg__ZTV7S7713C7__7S7713C4__A__7S7713C1[3]),  3,10},
  {&(_ZTV7S7713C1[70]),  70,215},
  {&(_ZTV7S7713C1[94]),  94,215},
  {&(_ZTV7S7713C1[14]),  14,215},
  {&(_ZTV7S7713C1[105]),  105,215},
  {&(_ZTV7S7713C1[119]),  119,215},
  {&(_ZTV7S7713C1[70]),  70,215},
  {&(_ZTV7S7713C1[131]),  131,215},
  {&(_ZTV7S7713C1[142]),  142,215},
  {&(_ZTV7S7713C1[40]),  40,215},
  {&(_ZTV7S7713C1[51]),  51,215},
  {&(_ZTV7S7713C1[179]),  179,215},
  {&(_ZTV7S7713C1[208]),  208,215},
  {&(_tg__ZTV7S7713C3__7S7713C1[7]),  7,14},
  {&(_tg__ZTV7S7713C97S7713C3__7S7713C1[4]),  4,8},
  {&(_tg__ZTV7S7713C97S7713C3__7S7713C1[4]),  4,8},
  {&(_tg__ZTV7S7713C4__7S7713C3__7S7713C1[17]),  17,25},
  {&(_tg__ZTV7S7713C6__7S7713C3__7S7713C1[6]),  6,10},
  {&(_tg__ZTV7S7713C77S7713C4__7S7713C3__7S7713C1[3]),  3,10},
  {&(_tg__ZTV10S7713C8_nt__7S7713C3__7S7713C1[7]),  7,12},
  {&(_tg__ZTV7S7713C3__7S7713C1[7]),  7,14},
  {&(_tg__ZTV7S7713C4__7S7713C1[3]),  3,11},
  {&(_tg__ZTV7S7713C77S7713C4__7S7713C1[3]),  3,10},
  {&(_tg__ZTV7S7713C6__7S7713C77S7713C4__7S7713C1[6]),  6,10},
  {&(_tg__ZTV7S7713C6__7S7713C4__7S7713C1[6]),  6,10},
  {&(_tg__ZTV7S7713C7__7S7713C4__7S7713C1[3]),  3,10},
  {&(_tg__ZTV8S7713C13__7S7713C1[13]),  13,35},
  {&(_tg__ZTV7S7713C28S7713C13__A1__7S7713C1[13]),  13,29},
  {&(_tg__ZTV8S7713C117S7713C28S7713C13__A1__7S7713C1[9]),  9,18},
  {&(_tg__ZTV7S7713C4__8S7713C117S7713C28S7713C13__A1__7S7713C1[17]),  17,25},
  {&(_tg__ZTV7S7713C6__8S7713C117S7713C28S7713C13__A1__7S7713C1[6]),  6,10},
  {&(_tg__ZTV7S7713C77S7713C4__8S7713C117S7713C28S7713C13__A1__7S7713C1[3]),  3,10},
  {&(_tg__ZTV11S7713C12_nt__8S7713C117S7713C28S7713C13__A1__7S7713C1[5]),  5,8},
  {&(_tg__ZTV7S7713C3__7S7713C28S7713C13__A1__7S7713C1[12]),  12,19},
  {&(_tg__ZTV7S7713C4__7S7713C28S7713C13__A1__7S7713C1[17]),  17,25},
  {&(_tg__ZTV7S7713C6__7S7713C28S7713C13__A1__7S7713C1[6]),  6,10},
  {&(_tg__ZTV7S7713C77S7713C4__7S7713C28S7713C13__A1__7S7713C1[3]),  3,10},
  {&(_tg__ZTV10S7713C8_nt__7S7713C28S7713C13__A1__7S7713C1[7]),  7,12},
  {&(_tg__ZTV7S7713C3__7S7713C28S7713C13__A1__7S7713C1[12]),  12,19},
  {&(_tg__ZTV11S7713C10_nt__7S7713C28S7713C13__A1__7S7713C1[7]),  7,13},
  {&(_tg__ZTV11S7713C12_nt__7S7713C28S7713C13__A1__7S7713C1[5]),  5,8},
  {&(_tg__ZTV7S7713C38S7713C13__A1__7S7713C1[7]),  7,14},
  {&(_tg__ZTV7S7713C97S7713C38S7713C13__A1__7S7713C1[4]),  4,8},
  {&(_tg__ZTV10S7713C5_nt__7S7713C97S7713C38S7713C13__A1__7S7713C1[3]),  3,4},
  {&(_tg__ZTV7S7713C4__7S7713C38S7713C13__A1__7S7713C1[17]),  17,25},
  {&(_tg__ZTV7S7713C6__7S7713C38S7713C13__A1__7S7713C1[6]),  6,10},
  {&(_tg__ZTV7S7713C77S7713C4__7S7713C38S7713C13__A1__7S7713C1[3]),  3,10},
  {&(_tg__ZTV10S7713C8_nt__7S7713C38S7713C13__A1__7S7713C1[7]),  7,12},
  {&(_tg__ZTV10S7713C5_nt__A3__7S7713C38S7713C13__A1__7S7713C1[3]),  3,4},
  {&(_tg__ZTV7S7713C3__8S7713C13__7S7713C1[12]),  12,19},
  {&(_tg__ZTV7S7713C4__8S7713C13__7S7713C1[17]),  17,25},
  {&(_tg__ZTV7S7713C6__8S7713C13__7S7713C1[6]),  6,10},
  {&(_tg__ZTV7S7713C77S7713C4__8S7713C13__7S7713C1[3]),  3,10},
  {&(_tg__ZTV10S7713C8_nt__8S7713C13__7S7713C1[7]),  7,12},
  {&(_tg__ZTV7S7713C3__8S7713C13__7S7713C1[12]),  12,19},
  {&(_tg__ZTV11S7713C10_nt__8S7713C13__7S7713C1[7]),  7,13},
  {&(_tg__ZTV11S7713C12_nt__8S7713C13__7S7713C1[5]),  5,8},
  {&(_tg__ZTV7S7713C3__A__8S7713C13__7S7713C1[7]),  7,14},
};
extern VTBL_ENTRY _ZTI7S7713C1[];
extern  VTBL_ENTRY _ZTV7S7713C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7713C1[];
static VTBL_ENTRY alt_thunk_names16[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7713C2D0Ev,_ZTv0_n12_N7S7713C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7713C2D0Ev,_ZThn76_N7S7713C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7713C2D1Ev,_ZTv0_n12_N7S7713C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7713C2D1Ev,_ZThn76_N7S7713C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7713C2D0Ev,_ZTv0_n32_N7S7713C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7713C2D0Ev,_ZThn40_N7S7713C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7713C2D1Ev,_ZTv0_n32_N7S7713C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7713C2D1Ev,_ZThn40_N7S7713C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n152_N7S7713C1D0Ev,_ZTv0_n76_N7S7713C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S7713C1D0Ev,_ZThn88_N7S7713C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n152_N7S7713C1D1Ev,_ZTv0_n76_N7S7713C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S7713C1D1Ev,_ZThn88_N7S7713C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7713C1D0Ev,_ZTv0_n12_N7S7713C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7713C1D0Ev,_ZThn76_N7S7713C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7713C1D1Ev,_ZTv0_n12_N7S7713C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7713C1D1Ev,_ZThn76_N7S7713C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7713C1D0Ev,_ZTv0_n32_N7S7713C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7713C1D0Ev,_ZThn40_N7S7713C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7713C1D1Ev,_ZTv0_n32_N7S7713C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7713C1D1Ev,_ZThn40_N7S7713C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7713C1 = {  "S7713C1", // class name
  bases_S7713C1, 23,
  &(vtc_S7713C1[0]), // expected_vtbl_contents
  &(vtt_S7713C1[0]), // expected_vtt_contents
  ABISELECT(224,136), // object size
  NSPAIRA(_ZTI7S7713C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7713C1),215, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7713C1),77, //virtual table table var
  23, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names16,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6961C2  {
  int s6961c2f0;
  __tsi64 s6961c2f1;
  void *s6961c2f2[4];
  int s6961c2f3[2];
  void *s6961c2f4;
  ::S79C8_nt s6961c2f5;
  void *s6961c2f6[2];
  virtual  ~S6961C2(); // _ZN7S6961C2D1Ev
  virtual void  v5(); // _ZN7S6961C22v5Ev
  virtual void  v6(); // _ZN7S6961C22v6Ev
  virtual void  v7(); // _ZN7S6961C22v7Ev
  virtual void  v8(); // _ZN7S6961C22v8Ev
  virtual void  v9(); // _ZN7S6961C22v9Ev
  virtual void  v10(); // _ZN7S6961C23v10Ev
  virtual void  v11(); // _ZN7S6961C23v11Ev
  virtual void  v12(); // _ZN7S6961C23v12Ev
  virtual void  v13(); // _ZN7S6961C23v13Ev
  virtual void  v14(); // _ZN7S6961C23v14Ev
  virtual void  v15(); // _ZN7S6961C23v15Ev
  virtual void  v16(); // _ZN7S6961C23v16Ev
  virtual void  v17(); // _ZN7S6961C23v17Ev
  virtual void  v18(); // _ZN7S6961C23v18Ev
  virtual void  v19(); // _ZN7S6961C23v19Ev
  virtual void  v20(); // _ZN7S6961C23v20Ev
  virtual void  v21(); // _ZN7S6961C23v21Ev
  virtual void  v22(); // _ZN7S6961C23v22Ev
  virtual void  v23(); // _ZN7S6961C23v23Ev
  virtual void  v24(); // _ZN7S6961C23v24Ev
  virtual void  v25(); // _ZN7S6961C23v25Ev
  virtual void  v26(); // _ZN7S6961C23v26Ev
  virtual void  v27(); // _ZN7S6961C23v27Ev
  virtual void  v28(); // _ZN7S6961C23v28Ev
  virtual void  v29(); // _ZN7S6961C23v29Ev
  virtual void  v30(); // _ZN7S6961C23v30Ev
  virtual void  v31(); // _ZN7S6961C23v31Ev
  virtual void  v32(); // _ZN7S6961C23v32Ev
  virtual void  v33(); // _ZN7S6961C23v33Ev
  virtual void  v34(); // _ZN7S6961C23v34Ev
  virtual void  v35(); // _ZN7S6961C23v35Ev
  virtual void  v36(); // _ZN7S6961C23v36Ev
  virtual void  v37(); // _ZN7S6961C23v37Ev
  virtual void  v38(); // _ZN7S6961C23v38Ev
  virtual void  v39(); // _ZN7S6961C23v39Ev
  virtual void  v40(); // _ZN7S6961C23v40Ev
  virtual void  v41(); // _ZN7S6961C23v41Ev
  virtual void  v42(); // _ZN7S6961C23v42Ev
  virtual void  v43(); // _ZN7S6961C23v43Ev
  virtual void  v44(); // _ZN7S6961C23v44Ev
  virtual void  v45(); // _ZN7S6961C23v45Ev
  virtual void  v46(); // _ZN7S6961C23v46Ev
  virtual void  v47(); // _ZN7S6961C23v47Ev
  virtual void  v48(); // _ZN7S6961C23v48Ev
  virtual void  v49(); // _ZN7S6961C23v49Ev
  virtual void  v50(); // _ZN7S6961C23v50Ev
  virtual void  v51(); // _ZN7S6961C23v51Ev
  virtual void  v52(); // _ZN7S6961C23v52Ev
  virtual void  v53(); // _ZN7S6961C23v53Ev
  virtual void  v54(); // _ZN7S6961C23v54Ev
  virtual void  v55(); // _ZN7S6961C23v55Ev
  virtual void  v56(); // _ZN7S6961C23v56Ev
  virtual void  v57(); // _ZN7S6961C23v57Ev
  virtual void  v58(); // _ZN7S6961C23v58Ev
  virtual void  v59(); // _ZN7S6961C23v59Ev
  virtual void  v60(); // _ZN7S6961C23v60Ev
  virtual void  v61(); // _ZN7S6961C23v61Ev
  virtual void  v62(); // _ZN7S6961C23v62Ev
  virtual void  v63(); // _ZN7S6961C23v63Ev
  virtual void  v64(); // _ZN7S6961C23v64Ev
  virtual void  v65(); // _ZN7S6961C23v65Ev
  virtual void  v66(); // _ZN7S6961C23v66Ev
  virtual void  v67(); // _ZN7S6961C23v67Ev
  virtual void  v68(); // _ZN7S6961C23v68Ev
  S6961C2(); // tgen
};
//SIG(-1 S6961C2) 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]}


 S6961C2 ::~S6961C2(){ note_dtor("S6961C2", this);}
void  S6961C2 ::v5(){vfunc_called(this, "_ZN7S6961C22v5Ev");}
void  S6961C2 ::v6(){vfunc_called(this, "_ZN7S6961C22v6Ev");}
void  S6961C2 ::v7(){vfunc_called(this, "_ZN7S6961C22v7Ev");}
void  S6961C2 ::v8(){vfunc_called(this, "_ZN7S6961C22v8Ev");}
void  S6961C2 ::v9(){vfunc_called(this, "_ZN7S6961C22v9Ev");}
void  S6961C2 ::v10(){vfunc_called(this, "_ZN7S6961C23v10Ev");}
void  S6961C2 ::v11(){vfunc_called(this, "_ZN7S6961C23v11Ev");}
void  S6961C2 ::v12(){vfunc_called(this, "_ZN7S6961C23v12Ev");}
void  S6961C2 ::v13(){vfunc_called(this, "_ZN7S6961C23v13Ev");}
void  S6961C2 ::v14(){vfunc_called(this, "_ZN7S6961C23v14Ev");}
void  S6961C2 ::v15(){vfunc_called(this, "_ZN7S6961C23v15Ev");}
void  S6961C2 ::v16(){vfunc_called(this, "_ZN7S6961C23v16Ev");}
void  S6961C2 ::v17(){vfunc_called(this, "_ZN7S6961C23v17Ev");}
void  S6961C2 ::v18(){vfunc_called(this, "_ZN7S6961C23v18Ev");}
void  S6961C2 ::v19(){vfunc_called(this, "_ZN7S6961C23v19Ev");}
void  S6961C2 ::v20(){vfunc_called(this, "_ZN7S6961C23v20Ev");}
void  S6961C2 ::v21(){vfunc_called(this, "_ZN7S6961C23v21Ev");}
void  S6961C2 ::v22(){vfunc_called(this, "_ZN7S6961C23v22Ev");}
void  S6961C2 ::v23(){vfunc_called(this, "_ZN7S6961C23v23Ev");}
void  S6961C2 ::v24(){vfunc_called(this, "_ZN7S6961C23v24Ev");}
void  S6961C2 ::v25(){vfunc_called(this, "_ZN7S6961C23v25Ev");}
void  S6961C2 ::v26(){vfunc_called(this, "_ZN7S6961C23v26Ev");}
void  S6961C2 ::v27(){vfunc_called(this, "_ZN7S6961C23v27Ev");}
void  S6961C2 ::v28(){vfunc_called(this, "_ZN7S6961C23v28Ev");}
void  S6961C2 ::v29(){vfunc_called(this, "_ZN7S6961C23v29Ev");}
void  S6961C2 ::v30(){vfunc_called(this, "_ZN7S6961C23v30Ev");}
void  S6961C2 ::v31(){vfunc_called(this, "_ZN7S6961C23v31Ev");}
void  S6961C2 ::v32(){vfunc_called(this, "_ZN7S6961C23v32Ev");}
void  S6961C2 ::v33(){vfunc_called(this, "_ZN7S6961C23v33Ev");}
void  S6961C2 ::v34(){vfunc_called(this, "_ZN7S6961C23v34Ev");}
void  S6961C2 ::v35(){vfunc_called(this, "_ZN7S6961C23v35Ev");}
void  S6961C2 ::v36(){vfunc_called(this, "_ZN7S6961C23v36Ev");}
void  S6961C2 ::v37(){vfunc_called(this, "_ZN7S6961C23v37Ev");}
void  S6961C2 ::v38(){vfunc_called(this, "_ZN7S6961C23v38Ev");}
void  S6961C2 ::v39(){vfunc_called(this, "_ZN7S6961C23v39Ev");}
void  S6961C2 ::v40(){vfunc_called(this, "_ZN7S6961C23v40Ev");}
void  S6961C2 ::v41(){vfunc_called(this, "_ZN7S6961C23v41Ev");}
void  S6961C2 ::v42(){vfunc_called(this, "_ZN7S6961C23v42Ev");}
void  S6961C2 ::v43(){vfunc_called(this, "_ZN7S6961C23v43Ev");}
void  S6961C2 ::v44(){vfunc_called(this, "_ZN7S6961C23v44Ev");}
void  S6961C2 ::v45(){vfunc_called(this, "_ZN7S6961C23v45Ev");}
void  S6961C2 ::v46(){vfunc_called(this, "_ZN7S6961C23v46Ev");}
void  S6961C2 ::v47(){vfunc_called(this, "_ZN7S6961C23v47Ev");}
void  S6961C2 ::v48(){vfunc_called(this, "_ZN7S6961C23v48Ev");}
void  S6961C2 ::v49(){vfunc_called(this, "_ZN7S6961C23v49Ev");}
void  S6961C2 ::v50(){vfunc_called(this, "_ZN7S6961C23v50Ev");}
void  S6961C2 ::v51(){vfunc_called(this, "_ZN7S6961C23v51Ev");}
void  S6961C2 ::v52(){vfunc_called(this, "_ZN7S6961C23v52Ev");}
void  S6961C2 ::v53(){vfunc_called(this, "_ZN7S6961C23v53Ev");}
void  S6961C2 ::v54(){vfunc_called(this, "_ZN7S6961C23v54Ev");}
void  S6961C2 ::v55(){vfunc_called(this, "_ZN7S6961C23v55Ev");}
void  S6961C2 ::v56(){vfunc_called(this, "_ZN7S6961C23v56Ev");}
void  S6961C2 ::v57(){vfunc_called(this, "_ZN7S6961C23v57Ev");}
void  S6961C2 ::v58(){vfunc_called(this, "_ZN7S6961C23v58Ev");}
void  S6961C2 ::v59(){vfunc_called(this, "_ZN7S6961C23v59Ev");}
void  S6961C2 ::v60(){vfunc_called(this, "_ZN7S6961C23v60Ev");}
void  S6961C2 ::v61(){vfunc_called(this, "_ZN7S6961C23v61Ev");}
void  S6961C2 ::v62(){vfunc_called(this, "_ZN7S6961C23v62Ev");}
void  S6961C2 ::v63(){vfunc_called(this, "_ZN7S6961C23v63Ev");}
void  S6961C2 ::v64(){vfunc_called(this, "_ZN7S6961C23v64Ev");}
void  S6961C2 ::v65(){vfunc_called(this, "_ZN7S6961C23v65Ev");}
void  S6961C2 ::v66(){vfunc_called(this, "_ZN7S6961C23v66Ev");}
void  S6961C2 ::v67(){vfunc_called(this, "_ZN7S6961C23v67Ev");}
void  S6961C2 ::v68(){vfunc_called(this, "_ZN7S6961C23v68Ev");}
S6961C2 ::S6961C2(){ note_ctor("S6961C2", this);} // tgen

static void Test_S6961C2()
{
  extern Class_Descriptor cd_S6961C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S6961C2, buf);
    S6961C2 *dp, &lv = *(dp=new (buf) S6961C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S6961C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6961C2)");
    check_field_offset(lv, s6961c2f0, ABISELECT(8,4), "S6961C2.s6961c2f0");
    check_field_offset(lv, s6961c2f1, ABISELECT(16,8), "S6961C2.s6961c2f1");
    check_field_offset(lv, s6961c2f2, ABISELECT(24,16), "S6961C2.s6961c2f2");
    check_field_offset(lv, s6961c2f3, ABISELECT(56,32), "S6961C2.s6961c2f3");
    check_field_offset(lv, s6961c2f4, ABISELECT(64,40), "S6961C2.s6961c2f4");
    check_field_offset(lv, s6961c2f5, ABISELECT(72,44), "S6961C2.s6961c2f5");
    check_field_offset(lv, s6961c2f6, ABISELECT(80,52), "S6961C2.s6961c2f6");
    test_class_info(&lv, &cd_S6961C2);
    dp->~S6961C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6961C2(Test_S6961C2, "S6961C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S6961C2C1Ev();
extern void _ZN7S6961C2D1Ev();
Name_Map name_map_S6961C2[] = {
  NSPAIR(_ZN7S6961C2C1Ev),
  NSPAIR(_ZN7S6961C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6961C2[];
extern void _ZN7S6961C2D1Ev();
extern void _ZN7S6961C2D0Ev();
extern void _ZN7S6961C22v5Ev();
extern void _ZN7S6961C22v6Ev();
extern void _ZN7S6961C22v7Ev();
extern void _ZN7S6961C22v8Ev();
extern void _ZN7S6961C22v9Ev();
extern void _ZN7S6961C23v10Ev();
extern void _ZN7S6961C23v11Ev();
extern void _ZN7S6961C23v12Ev();
extern void _ZN7S6961C23v13Ev();
extern void _ZN7S6961C23v14Ev();
extern void _ZN7S6961C23v15Ev();
extern void _ZN7S6961C23v16Ev();
extern void _ZN7S6961C23v17Ev();
extern void _ZN7S6961C23v18Ev();
extern void _ZN7S6961C23v19Ev();
extern void _ZN7S6961C23v20Ev();
extern void _ZN7S6961C23v21Ev();
extern void _ZN7S6961C23v22Ev();
extern void _ZN7S6961C23v23Ev();
extern void _ZN7S6961C23v24Ev();
extern void _ZN7S6961C23v25Ev();
extern void _ZN7S6961C23v26Ev();
extern void _ZN7S6961C23v27Ev();
extern void _ZN7S6961C23v28Ev();
extern void _ZN7S6961C23v29Ev();
extern void _ZN7S6961C23v30Ev();
extern void _ZN7S6961C23v31Ev();
extern void _ZN7S6961C23v32Ev();
extern void _ZN7S6961C23v33Ev();
extern void _ZN7S6961C23v34Ev();
extern void _ZN7S6961C23v35Ev();
extern void _ZN7S6961C23v36Ev();
extern void _ZN7S6961C23v37Ev();
extern void _ZN7S6961C23v38Ev();
extern void _ZN7S6961C23v39Ev();
extern void _ZN7S6961C23v40Ev();
extern void _ZN7S6961C23v41Ev();
extern void _ZN7S6961C23v42Ev();
extern void _ZN7S6961C23v43Ev();
extern void _ZN7S6961C23v44Ev();
extern void _ZN7S6961C23v45Ev();
extern void _ZN7S6961C23v46Ev();
extern void _ZN7S6961C23v47Ev();
extern void _ZN7S6961C23v48Ev();
extern void _ZN7S6961C23v49Ev();
extern void _ZN7S6961C23v50Ev();
extern void _ZN7S6961C23v51Ev();
extern void _ZN7S6961C23v52Ev();
extern void _ZN7S6961C23v53Ev();
extern void _ZN7S6961C23v54Ev();
extern void _ZN7S6961C23v55Ev();
extern void _ZN7S6961C23v56Ev();
extern void _ZN7S6961C23v57Ev();
extern void _ZN7S6961C23v58Ev();
extern void _ZN7S6961C23v59Ev();
extern void _ZN7S6961C23v60Ev();
extern void _ZN7S6961C23v61Ev();
extern void _ZN7S6961C23v62Ev();
extern void _ZN7S6961C23v63Ev();
extern void _ZN7S6961C23v64Ev();
extern void _ZN7S6961C23v65Ev();
extern void _ZN7S6961C23v66Ev();
extern void _ZN7S6961C23v67Ev();
extern void _ZN7S6961C23v68Ev();
static  VTBL_ENTRY vtc_S6961C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6961C2[0]),
  (VTBL_ENTRY)&_ZN7S6961C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6961C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6961C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6961C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6961C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6961C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6961C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v12Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v13Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v14Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v15Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v16Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v17Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v18Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v19Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v20Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v21Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v22Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v23Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v24Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v25Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v26Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v27Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v28Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v29Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v30Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v31Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v32Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v33Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v34Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v35Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v36Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v37Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v38Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v39Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v40Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v41Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v42Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v43Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v44Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v45Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v46Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v47Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v48Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v49Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v50Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v51Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v52Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v53Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v54Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v55Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v56Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v57Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v58Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v59Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v60Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v61Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v62Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v63Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v64Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v65Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v66Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v67Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v68Ev,
};
extern VTBL_ENTRY _ZTI7S6961C2[];
extern  VTBL_ENTRY _ZTV7S6961C2[];
Class_Descriptor cd_S6961C2 = {  "S6961C2", // class name
  0,0,//no base classes
  &(vtc_S6961C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S6961C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6961C2),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  S6961C7  : S79C12_nt {
};
//SIG(-1 S6961C7) C1{ BC2{ m Fp Fi[2]}}



static void Test_S6961C7()
{
  extern Class_Descriptor cd_S6961C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S6961C7, buf);
    S6961C7 &lv = *(new (buf) S6961C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S6961C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6961C7)");
    check_base_class_offset(lv, (S79C12_nt*), 0, "S6961C7");
    test_class_info(&lv, &cd_S6961C7);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6961C7(Test_S6961C7, "S6961C7", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S79C12_nt;
static Base_Class bases_S6961C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S79C12_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_S6961C7 = {  "S6961C7", // class name
  bases_S6961C7, 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  S6961C6  : S6961C7 {
  int s6961c6f0;
};
//SIG(-1 S6961C6) C1{ BC2{ BC3{ m Fp Fi[2]}} Fi}



static void Test_S6961C6()
{
  extern Class_Descriptor cd_S6961C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S6961C6, buf);
    S6961C6 &lv = *(new (buf) S6961C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S6961C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6961C6)");
    check_base_class_offset(lv, (S79C12_nt*)(S6961C7*), 0, "S6961C6");
    check_base_class_offset(lv, (S6961C7*), 0, "S6961C6");
    check_field_offset(lv, s6961c6f0, ABISELECT(16,12), "S6961C6.s6961c6f0");
    test_class_info(&lv, &cd_S6961C6);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6961C6(Test_S6961C6, "S6961C6", ABISELECT(24,16));

#else // __cplusplus

extern Class_Descriptor cd_S79C12_nt;
extern Class_Descriptor cd_S6961C7;
static Base_Class bases_S6961C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S79C12_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_S6961C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S6961C6 = {  "S6961C6", // class name
  bases_S6961C6, 2,
  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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6961C1  : S6961C2 {
  ::S79C45 s6961c1f0;
  ::S6961C6 s6961c1f1;
  int s6961c1f2;
  virtual  ~S6961C1(); // _ZN7S6961C1D1Ev
  virtual void  v1(); // _ZN7S6961C12v1Ev
  virtual void  v2(); // _ZN7S6961C12v2Ev
  virtual void  v3(); // _ZN7S6961C12v3Ev
  virtual void  v4(); // _ZN7S6961C12v4Ev
  S6961C1(); // tgen
};
//SIG(1 S6961C1) C1{ BC2{ vd 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 FC4{ BC5{ m Fp Fi[2]}} FC6{ BC7{ BC5} Fi} Fi}


 S6961C1 ::~S6961C1(){ note_dtor("S6961C1", this);}
void  S6961C1 ::v1(){vfunc_called(this, "_ZN7S6961C12v1Ev");}
void  S6961C1 ::v2(){vfunc_called(this, "_ZN7S6961C12v2Ev");}
void  S6961C1 ::v3(){vfunc_called(this, "_ZN7S6961C12v3Ev");}
void  S6961C1 ::v4(){vfunc_called(this, "_ZN7S6961C12v4Ev");}
S6961C1 ::S6961C1(){ note_ctor("S6961C1", this);} // tgen

static void Test_S6961C1()
{
  extern Class_Descriptor cd_S6961C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,24)];
    init_test(&cd_S6961C1, buf);
    S6961C1 *dp, &lv = *(dp=new (buf) S6961C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,92), "sizeof(S6961C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6961C1)");
    check_base_class_offset(lv, (S6961C2*), 0, "S6961C1");
    check_field_offset(lv, s6961c1f0, ABISELECT(96,60), "S6961C1.s6961c1f0");
    check_field_offset(lv, s6961c1f1, ABISELECT(112,72), "S6961C1.s6961c1f1");
    check_field_offset(lv, s6961c1f2, ABISELECT(136,88), "S6961C1.s6961c1f2");
    test_class_info(&lv, &cd_S6961C1);
    dp->~S6961C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6961C1(Test_S6961C1, "S6961C1", ABISELECT(144,92));

#else // __cplusplus

extern void _ZN7S6961C1C1Ev();
extern void _ZN7S6961C1D1Ev();
Name_Map name_map_S6961C1[] = {
  NSPAIR(_ZN7S6961C1C1Ev),
  NSPAIR(_ZN7S6961C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6961C2;
extern VTBL_ENTRY _ZTI7S6961C2[];
extern  VTBL_ENTRY _ZTV7S6961C2[];
static Base_Class bases_S6961C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6961C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S6961C1[];
extern void _ZN7S6961C1D1Ev();
extern void _ZN7S6961C1D0Ev();
extern void _ZN7S6961C22v5Ev();
extern void _ZN7S6961C22v6Ev();
extern void _ZN7S6961C22v7Ev();
extern void _ZN7S6961C22v8Ev();
extern void _ZN7S6961C22v9Ev();
extern void _ZN7S6961C23v10Ev();
extern void _ZN7S6961C23v11Ev();
extern void _ZN7S6961C23v12Ev();
extern void _ZN7S6961C23v13Ev();
extern void _ZN7S6961C23v14Ev();
extern void _ZN7S6961C23v15Ev();
extern void _ZN7S6961C23v16Ev();
extern void _ZN7S6961C23v17Ev();
extern void _ZN7S6961C23v18Ev();
extern void _ZN7S6961C23v19Ev();
extern void _ZN7S6961C23v20Ev();
extern void _ZN7S6961C23v21Ev();
extern void _ZN7S6961C23v22Ev();
extern void _ZN7S6961C23v23Ev();
extern void _ZN7S6961C23v24Ev();
extern void _ZN7S6961C23v25Ev();
extern void _ZN7S6961C23v26Ev();
extern void _ZN7S6961C23v27Ev();
extern void _ZN7S6961C23v28Ev();
extern void _ZN7S6961C23v29Ev();
extern void _ZN7S6961C23v30Ev();
extern void _ZN7S6961C23v31Ev();
extern void _ZN7S6961C23v32Ev();
extern void _ZN7S6961C23v33Ev();
extern void _ZN7S6961C23v34Ev();
extern void _ZN7S6961C23v35Ev();
extern void _ZN7S6961C23v36Ev();
extern void _ZN7S6961C23v37Ev();
extern void _ZN7S6961C23v38Ev();
extern void _ZN7S6961C23v39Ev();
extern void _ZN7S6961C23v40Ev();
extern void _ZN7S6961C23v41Ev();
extern void _ZN7S6961C23v42Ev();
extern void _ZN7S6961C23v43Ev();
extern void _ZN7S6961C23v44Ev();
extern void _ZN7S6961C23v45Ev();
extern void _ZN7S6961C23v46Ev();
extern void _ZN7S6961C23v47Ev();
extern void _ZN7S6961C23v48Ev();
extern void _ZN7S6961C23v49Ev();
extern void _ZN7S6961C23v50Ev();
extern void _ZN7S6961C23v51Ev();
extern void _ZN7S6961C23v52Ev();
extern void _ZN7S6961C23v53Ev();
extern void _ZN7S6961C23v54Ev();
extern void _ZN7S6961C23v55Ev();
extern void _ZN7S6961C23v56Ev();
extern void _ZN7S6961C23v57Ev();
extern void _ZN7S6961C23v58Ev();
extern void _ZN7S6961C23v59Ev();
extern void _ZN7S6961C23v60Ev();
extern void _ZN7S6961C23v61Ev();
extern void _ZN7S6961C23v62Ev();
extern void _ZN7S6961C23v63Ev();
extern void _ZN7S6961C23v64Ev();
extern void _ZN7S6961C23v65Ev();
extern void _ZN7S6961C23v66Ev();
extern void _ZN7S6961C23v67Ev();
extern void _ZN7S6961C23v68Ev();
extern void _ZN7S6961C12v1Ev();
extern void _ZN7S6961C12v2Ev();
extern void _ZN7S6961C12v3Ev();
extern void _ZN7S6961C12v4Ev();
static  VTBL_ENTRY vtc_S6961C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6961C1[0]),
  (VTBL_ENTRY)&_ZN7S6961C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6961C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6961C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6961C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6961C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6961C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6961C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v12Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v13Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v14Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v15Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v16Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v17Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v18Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v19Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v20Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v21Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v22Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v23Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v24Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v25Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v26Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v27Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v28Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v29Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v30Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v31Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v32Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v33Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v34Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v35Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v36Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v37Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v38Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v39Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v40Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v41Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v42Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v43Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v44Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v45Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v46Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v47Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v48Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v49Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v50Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v51Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v52Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v53Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v54Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v55Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v56Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v57Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v58Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v59Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v60Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v61Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v62Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v63Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v64Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v65Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v66Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v67Ev,
  (VTBL_ENTRY)&_ZN7S6961C23v68Ev,
  (VTBL_ENTRY)&_ZN7S6961C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6961C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6961C12v3Ev,
  (VTBL_ENTRY)&_ZN7S6961C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S6961C1[];
extern  VTBL_ENTRY _ZTV7S6961C1[];
Class_Descriptor cd_S6961C1 = {  "S6961C1", // class name
  bases_S6961C1, 1,
  &(vtc_S6961C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,92), // object size
  NSPAIRA(_ZTI7S6961C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6961C1),72, //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  S18909C5  {
  virtual void  v13(); // _ZN8S18909C53v13Ev
  virtual void  v14(); // _ZN8S18909C53v14Ev
  virtual void  v15(); // _ZN8S18909C53v15Ev
  virtual void  v16(); // _ZN8S18909C53v16Ev
  virtual void  v17(); // _ZN8S18909C53v17Ev
  virtual void  v18(); // _ZN8S18909C53v18Ev
  virtual void  v19(); // _ZN8S18909C53v19Ev
  virtual void  v20(); // _ZN8S18909C53v20Ev
  virtual void  v21(); // _ZN8S18909C53v21Ev
  ~S18909C5(); // tgen
  S18909C5(); // tgen
};
//SIG(-1 S18909C5) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S18909C5 ::v13(){vfunc_called(this, "_ZN8S18909C53v13Ev");}
void  S18909C5 ::v14(){vfunc_called(this, "_ZN8S18909C53v14Ev");}
void  S18909C5 ::v15(){vfunc_called(this, "_ZN8S18909C53v15Ev");}
void  S18909C5 ::v16(){vfunc_called(this, "_ZN8S18909C53v16Ev");}
void  S18909C5 ::v17(){vfunc_called(this, "_ZN8S18909C53v17Ev");}
void  S18909C5 ::v18(){vfunc_called(this, "_ZN8S18909C53v18Ev");}
void  S18909C5 ::v19(){vfunc_called(this, "_ZN8S18909C53v19Ev");}
void  S18909C5 ::v20(){vfunc_called(this, "_ZN8S18909C53v20Ev");}
void  S18909C5 ::v21(){vfunc_called(this, "_ZN8S18909C53v21Ev");}
S18909C5 ::~S18909C5(){ note_dtor("S18909C5", this);} // tgen
S18909C5 ::S18909C5(){ note_ctor("S18909C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S18909C5C1Ev();
extern void _ZN8S18909C5D1Ev();
Name_Map name_map_S18909C5[] = {
  NSPAIR(_ZN8S18909C5C1Ev),
  NSPAIR(_ZN8S18909C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18909C5[];
extern void _ZN8S18909C53v13Ev();
extern void _ZN8S18909C53v14Ev();
extern void _ZN8S18909C53v15Ev();
extern void _ZN8S18909C53v16Ev();
extern void _ZN8S18909C53v17Ev();
extern void _ZN8S18909C53v18Ev();
extern void _ZN8S18909C53v19Ev();
extern void _ZN8S18909C53v20Ev();
extern void _ZN8S18909C53v21Ev();
static  VTBL_ENTRY vtc_S18909C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18909C5[0]),
  (VTBL_ENTRY)&_ZN8S18909C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v21Ev,
};
extern VTBL_ENTRY _ZTI8S18909C5[];
extern  VTBL_ENTRY _ZTV8S18909C5[];
Class_Descriptor cd_S18909C5 = {  "S18909C5", // class name
  0,0,//no base classes
  &(vtc_S18909C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S18909C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18909C5),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  S18909C7  {
  int s18909c7f0;
  __tsi64 s18909c7f1;
  virtual  ~S18909C7(); // _ZN8S18909C7D1Ev
  virtual void  v22(); // _ZN8S18909C73v22Ev
  virtual void  v23(); // _ZN8S18909C73v23Ev
  virtual void  v24(); // _ZN8S18909C73v24Ev
  S18909C7(); // tgen
};
//SIG(-1 S18909C7) C1{ vd v1 v2 v3 Fi FL}


 S18909C7 ::~S18909C7(){ note_dtor("S18909C7", this);}
void  S18909C7 ::v22(){vfunc_called(this, "_ZN8S18909C73v22Ev");}
void  S18909C7 ::v23(){vfunc_called(this, "_ZN8S18909C73v23Ev");}
void  S18909C7 ::v24(){vfunc_called(this, "_ZN8S18909C73v24Ev");}
S18909C7 ::S18909C7(){ note_ctor("S18909C7", this);} // tgen

static void Test_S18909C7()
{
  extern Class_Descriptor cd_S18909C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S18909C7, buf);
    S18909C7 *dp, &lv = *(dp=new (buf) S18909C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S18909C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18909C7)");
    check_field_offset(lv, s18909c7f0, ABISELECT(8,4), "S18909C7.s18909c7f0");
    check_field_offset(lv, s18909c7f1, ABISELECT(16,8), "S18909C7.s18909c7f1");
    test_class_info(&lv, &cd_S18909C7);
    dp->~S18909C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18909C7(Test_S18909C7, "S18909C7", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S18909C7C1Ev();
extern void _ZN8S18909C7D1Ev();
Name_Map name_map_S18909C7[] = {
  NSPAIR(_ZN8S18909C7C1Ev),
  NSPAIR(_ZN8S18909C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18909C7[];
extern void _ZN8S18909C7D1Ev();
extern void _ZN8S18909C7D0Ev();
extern void _ZN8S18909C73v22Ev();
extern void _ZN8S18909C73v23Ev();
extern void _ZN8S18909C73v24Ev();
static  VTBL_ENTRY vtc_S18909C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18909C7[0]),
  (VTBL_ENTRY)&_ZN8S18909C7D1Ev,
  (VTBL_ENTRY)&_ZN8S18909C7D0Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v22Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v23Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v24Ev,
};
extern VTBL_ENTRY _ZTI8S18909C7[];
extern  VTBL_ENTRY _ZTV8S18909C7[];
Class_Descriptor cd_S18909C7 = {  "S18909C7", // class name
  0,0,//no base classes
  &(vtc_S18909C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S18909C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18909C7),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  S18909C6  : S18909C7 {
  int s18909c6f0;
  ::S18909C7 s18909c6f1;
  virtual  ~S18909C6(); // _ZN8S18909C6D1Ev
  virtual void  v25(); // _ZN8S18909C63v25Ev
  virtual void  v26(); // _ZN8S18909C63v26Ev
  virtual void  v27(); // _ZN8S18909C63v27Ev
  S18909C6(); // tgen
};
//SIG(-1 S18909C6) C1{ BC2{ vd v4 v5 v6 Fi FL} vd v1 v2 v3 Fi FC2}


 S18909C6 ::~S18909C6(){ note_dtor("S18909C6", this);}
void  S18909C6 ::v25(){vfunc_called(this, "_ZN8S18909C63v25Ev");}
void  S18909C6 ::v26(){vfunc_called(this, "_ZN8S18909C63v26Ev");}
void  S18909C6 ::v27(){vfunc_called(this, "_ZN8S18909C63v27Ev");}
S18909C6 ::S18909C6(){ note_ctor("S18909C6", this);} // tgen

static void Test_S18909C6()
{
  extern Class_Descriptor cd_S18909C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S18909C6, buf);
    S18909C6 *dp, &lv = *(dp=new (buf) S18909C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S18909C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18909C6)");
    check_base_class_offset(lv, (S18909C7*), 0, "S18909C6");
    check_field_offset(lv, s18909c6f0, ABISELECT(24,16), "S18909C6.s18909c6f0");
    check_field_offset(lv, s18909c6f1, ABISELECT(32,20), "S18909C6.s18909c6f1");
    test_class_info(&lv, &cd_S18909C6);
    dp->~S18909C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18909C6(Test_S18909C6, "S18909C6", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN8S18909C6C1Ev();
extern void _ZN8S18909C6D1Ev();
Name_Map name_map_S18909C6[] = {
  NSPAIR(_ZN8S18909C6C1Ev),
  NSPAIR(_ZN8S18909C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18909C7;
extern VTBL_ENTRY _ZTI8S18909C7[];
extern  VTBL_ENTRY _ZTV8S18909C7[];
static Base_Class bases_S18909C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18909C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S18909C6[];
extern void _ZN8S18909C6D1Ev();
extern void _ZN8S18909C6D0Ev();
extern void _ZN8S18909C73v22Ev();
extern void _ZN8S18909C73v23Ev();
extern void _ZN8S18909C73v24Ev();
extern void _ZN8S18909C63v25Ev();
extern void _ZN8S18909C63v26Ev();
extern void _ZN8S18909C63v27Ev();
static  VTBL_ENTRY vtc_S18909C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18909C6[0]),
  (VTBL_ENTRY)&_ZN8S18909C6D1Ev,
  (VTBL_ENTRY)&_ZN8S18909C6D0Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v22Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v23Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v24Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v25Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v26Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v27Ev,
};
extern VTBL_ENTRY _ZTI8S18909C6[];
extern  VTBL_ENTRY _ZTV8S18909C6[];
Class_Descriptor cd_S18909C6 = {  "S18909C6", // class name
  bases_S18909C6, 1,
  &(vtc_S18909C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI8S18909C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S18909C6),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  S18909C4  : virtual S18909C5 , virtual S18909C6 {
  ::S18909C6 s18909c4f0[3];
  int s18909c4f1;
  void *s18909c4f2[8];
  int s18909c4f3;
  long double s18909c4f4[3];
  virtual void  v28(); // _ZN8S18909C43v28Ev
  virtual void  v29(); // _ZN8S18909C43v29Ev
  virtual void  v30(); // _ZN8S18909C43v30Ev
  virtual void  v31(); // _ZN8S18909C43v31Ev
  ~S18909C4(); // tgen
  S18909C4(); // tgen
};
//SIG(-1 S18909C4) C1{ VBC2{ v5 v6 v7 v8 v9 v10 v11 v12 v13} VBC3{ BC4{ vd v14 v15 v16 Fi FL} vd v17 v18 v19 Fi FC4} v1 v2 v3 v4 FC3[3] Fi Fp[8] Fi FD[3]}


void  S18909C4 ::v28(){vfunc_called(this, "_ZN8S18909C43v28Ev");}
void  S18909C4 ::v29(){vfunc_called(this, "_ZN8S18909C43v29Ev");}
void  S18909C4 ::v30(){vfunc_called(this, "_ZN8S18909C43v30Ev");}
void  S18909C4 ::v31(){vfunc_called(this, "_ZN8S18909C43v31Ev");}
S18909C4 ::~S18909C4(){ note_dtor("S18909C4", this);} // tgen
S18909C4 ::S18909C4(){ note_ctor("S18909C4", this);} // tgen

static void Test_S18909C4()
{
  extern Class_Descriptor cd_S18909C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,57)];
    init_test(&cd_S18909C4, buf);
    S18909C4 *dp, &lv = *(dp=new (buf) S18909C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,224), "sizeof(S18909C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18909C4)");
    check_base_class_offset(lv, (S18909C5*), 0, "S18909C4");
    check_base_class_offset(lv, (S18909C7*)(S18909C6*), ABISELECT(304,188), "S18909C4");
    check_base_class_offset(lv, (S18909C6*), ABISELECT(304,188), "S18909C4");
    check_field_offset(lv, s18909c4f0, ABISELECT(8,4), "S18909C4.s18909c4f0");
    check_field_offset(lv, s18909c4f1, ABISELECT(176,112), "S18909C4.s18909c4f1");
    check_field_offset(lv, s18909c4f2, ABISELECT(184,116), "S18909C4.s18909c4f2");
    check_field_offset(lv, s18909c4f3, ABISELECT(248,148), "S18909C4.s18909c4f3");
    check_field_offset(lv, s18909c4f4, ABISELECT(256,152), "S18909C4.s18909c4f4");
    test_class_info(&lv, &cd_S18909C4);
    dp->~S18909C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18909C4(Test_S18909C4, "S18909C4", ABISELECT(368,224));

#else // __cplusplus

extern void _ZN8S18909C4C1Ev();
extern void _ZN8S18909C4D1Ev();
Name_Map name_map_S18909C4[] = {
  NSPAIR(_ZN8S18909C4C1Ev),
  NSPAIR(_ZN8S18909C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18909C5;
extern VTBL_ENTRY _ZTI8S18909C5[];
extern  VTBL_ENTRY _ZTV8S18909C5[];
extern Class_Descriptor cd_S18909C7;
extern VTBL_ENTRY _ZTI8S18909C7[];
extern  VTBL_ENTRY _ZTV8S18909C7[];
extern Class_Descriptor cd_S18909C6;
extern VTBL_ENTRY _ZTI8S18909C6[];
extern  VTBL_ENTRY _ZTV8S18909C6[];
static Base_Class bases_S18909C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18909C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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_S18909C7,    ABISELECT(304,188), //bcp->offset
    -1, //bcp->virtual_function_table_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_S18909C6,    ABISELECT(304,188), //bcp->offset
    28, //bcp->virtual_function_table_offset
    9, //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 _ZTI8S18909C4[];
extern void _ZN8S18909C53v13Ev();
extern void _ZN8S18909C53v14Ev();
extern void _ZN8S18909C53v15Ev();
extern void _ZN8S18909C53v16Ev();
extern void _ZN8S18909C53v17Ev();
extern void _ZN8S18909C53v18Ev();
extern void _ZN8S18909C53v19Ev();
extern void _ZN8S18909C53v20Ev();
extern void _ZN8S18909C53v21Ev();
extern void _ZN8S18909C43v28Ev();
extern void _ZN8S18909C43v29Ev();
extern void _ZN8S18909C43v30Ev();
extern void _ZN8S18909C43v31Ev();
extern void _ZN8S18909C4D1Ev();
extern void _ZN8S18909C4D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S18909C4D1Ev,_ZTv0_n12_N8S18909C4D1Ev)();
extern void ABISELECT(_ZThn304_N8S18909C4D1Ev,_ZThn188_N8S18909C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S18909C4D0Ev,_ZTv0_n12_N8S18909C4D0Ev)();
extern void ABISELECT(_ZThn304_N8S18909C4D0Ev,_ZThn188_N8S18909C4D0Ev)() __attribute__((weak));
extern void _ZN8S18909C73v22Ev();
extern void _ZN8S18909C73v23Ev();
extern void _ZN8S18909C73v24Ev();
extern void _ZN8S18909C63v25Ev();
extern void _ZN8S18909C63v26Ev();
extern void _ZN8S18909C63v27Ev();
static  VTBL_ENTRY vtc_S18909C4[] = {
  ABISELECT(304,188),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S18909C4[0]),
  (VTBL_ENTRY)&_ZN8S18909C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v28Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v29Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v30Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v31Ev,
  (VTBL_ENTRY)&_ZN8S18909C4D1Ev,
  (VTBL_ENTRY)&_ZN8S18909C4D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-188),
  ABISELECT(-304,-188),
  (VTBL_ENTRY)&(_ZTI8S18909C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C4D1Ev,_ZTv0_n12_N8S18909C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C4D0Ev,_ZTv0_n12_N8S18909C4D0Ev),
  (VTBL_ENTRY)&_ZN8S18909C73v22Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v23Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v24Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v25Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v26Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v27Ev,
};
extern VTBL_ENTRY _ZTV8S18909C4[];
static  VTT_ENTRY vtt_S18909C4[] = {
  {&(_ZTV8S18909C4[13]),  13,45},
  {&(_ZTV8S18909C4[13]),  13,45},
  {&(_ZTV8S18909C4[37]),  37,45},
};
extern VTBL_ENTRY _ZTI8S18909C4[];
extern  VTBL_ENTRY _ZTV8S18909C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18909C4[];
static VTBL_ENTRY alt_thunk_names17[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S18909C4D0Ev,_ZTv0_n12_N8S18909C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S18909C4D0Ev,_ZThn188_N8S18909C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S18909C4D1Ev,_ZTv0_n12_N8S18909C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S18909C4D1Ev,_ZThn188_N8S18909C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18909C4 = {  "S18909C4", // class name
  bases_S18909C4, 3,
  &(vtc_S18909C4[0]), // expected_vtbl_contents
  &(vtt_S18909C4[0]), // expected_vtt_contents
  ABISELECT(368,224), // object size
  NSPAIRA(_ZTI8S18909C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18909C4),45, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18909C4),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names17,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18909C3  : S18909C4 , S18909C6 {
  int s18909c3f0;
  virtual  ~S18909C3(); // _ZN8S18909C3D2Ev
  virtual void  v32(); // _ZN8S18909C33v32Ev
  virtual void  v33(); // _ZN8S18909C33v33Ev
  virtual void  v34(); // _ZN8S18909C33v34Ev
  virtual void  v35(); // _ZN8S18909C33v35Ev
  virtual void  v36(); // _ZN8S18909C33v36Ev
  virtual void  v37(); // _ZN8S18909C33v37Ev
  virtual void  v38(); // _ZN8S18909C33v38Ev
  virtual void  v39(); // _ZN8S18909C33v39Ev
  virtual void  v40(); // _ZN8S18909C33v40Ev
  S18909C3(); // tgen
};
//SIG(-1 S18909C3) C1{ BC2{ VBC3{ v10 v11 v12 v13 v14 v15 v16 v17 v18} VBC4{ BC5{ vd v19 v20 v21 Fi FL} vd v22 v23 v24 Fi FC5} v25 v26 v27 v28 FC4[3] Fi Fp[8] Fi FD[3]} BC4 vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fi}


 S18909C3 ::~S18909C3(){ note_dtor("S18909C3", this);}
void  S18909C3 ::v32(){vfunc_called(this, "_ZN8S18909C33v32Ev");}
void  S18909C3 ::v33(){vfunc_called(this, "_ZN8S18909C33v33Ev");}
void  S18909C3 ::v34(){vfunc_called(this, "_ZN8S18909C33v34Ev");}
void  S18909C3 ::v35(){vfunc_called(this, "_ZN8S18909C33v35Ev");}
void  S18909C3 ::v36(){vfunc_called(this, "_ZN8S18909C33v36Ev");}
void  S18909C3 ::v37(){vfunc_called(this, "_ZN8S18909C33v37Ev");}
void  S18909C3 ::v38(){vfunc_called(this, "_ZN8S18909C33v38Ev");}
void  S18909C3 ::v39(){vfunc_called(this, "_ZN8S18909C33v39Ev");}
void  S18909C3 ::v40(){vfunc_called(this, "_ZN8S18909C33v40Ev");}
S18909C3 ::S18909C3(){ note_ctor("S18909C3", this);} // tgen

static void Test_S18909C3()
{
  extern Class_Descriptor cd_S18909C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,67)];
    init_test(&cd_S18909C3, buf);
    S18909C3 *dp, &lv = *(dp=new (buf) S18909C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,264), "sizeof(S18909C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18909C3)");
    check_base_class_offset(lv, (S18909C5*)(S18909C4*), 0, "S18909C3");
    /*is_ambiguous_... S18909C3::S18909C6 */ AMB_check_base_class_offset(lv, (S18909C7*)(S18909C6*), ABISELECT(368,228), "S18909C3");
    check_base_class_offset(lv, (S18909C6*)(S18909C4*), ABISELECT(368,228), "S18909C3");
    check_base_class_offset(lv, (S18909C4*), 0, "S18909C3");
    /*is_ambiguous_... S18909C3::S18909C6 */ AMB_check_base_class_offset(lv, (S18909C7*)(S18909C6*), ABISELECT(304,188), "S18909C3");
    /*is_ambiguous_... S18909C3::S18909C6 */ AMB_check_base_class_offset(lv, (S18909C6*), ABISELECT(304,188), "S18909C3");
    check_field_offset(lv, s18909c3f0, ABISELECT(360,224), "S18909C3.s18909c3f0");
    test_class_info(&lv, &cd_S18909C3);
    dp->~S18909C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18909C3(Test_S18909C3, "S18909C3", ABISELECT(432,264));

#else // __cplusplus

extern void _ZN8S18909C3C1Ev();
extern void _ZN8S18909C3D2Ev();
Name_Map name_map_S18909C3[] = {
  NSPAIR(_ZN8S18909C3C1Ev),
  NSPAIR(_ZN8S18909C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18909C5;
extern VTBL_ENTRY _ZTI8S18909C5[];
extern  VTBL_ENTRY _ZTV8S18909C5[];
extern Class_Descriptor cd_S18909C7;
extern VTBL_ENTRY _ZTI8S18909C7[];
extern  VTBL_ENTRY _ZTV8S18909C7[];
extern Class_Descriptor cd_S18909C6;
extern VTBL_ENTRY _ZTI8S18909C6[];
extern  VTBL_ENTRY _ZTV8S18909C6[];
extern Class_Descriptor cd_S18909C4;
extern VTBL_ENTRY _ZTI8S18909C4[];
extern  VTBL_ENTRY _ZTV8S18909C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18909C4[];
extern Class_Descriptor cd_S18909C7;
extern VTBL_ENTRY _ZTI8S18909C7[];
extern  VTBL_ENTRY _ZTV8S18909C7[];
extern Class_Descriptor cd_S18909C6;
extern VTBL_ENTRY _ZTI8S18909C6[];
extern  VTBL_ENTRY _ZTV8S18909C6[];
static Base_Class bases_S18909C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18909C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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
    3, //immediately_derived
  0, 1},
  {&cd_S18909C7,    ABISELECT(368,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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S18909C6,    ABISELECT(368,228), //bcp->offset
    47, //bcp->virtual_function_table_offset
    9, //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
    3, //immediately_derived
  0, 1},
  {&cd_S18909C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18909C7,    ABISELECT(304,188), //bcp->offset
    -1, //bcp->virtual_function_table_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_S18909C6,    ABISELECT(304,188), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S18909C3[];
extern void _ZN8S18909C53v13Ev();
extern void _ZN8S18909C53v14Ev();
extern void _ZN8S18909C53v15Ev();
extern void _ZN8S18909C53v16Ev();
extern void _ZN8S18909C53v17Ev();
extern void _ZN8S18909C53v18Ev();
extern void _ZN8S18909C53v19Ev();
extern void _ZN8S18909C53v20Ev();
extern void _ZN8S18909C53v21Ev();
extern void _ZN8S18909C43v28Ev();
extern void _ZN8S18909C43v29Ev();
extern void _ZN8S18909C43v30Ev();
extern void _ZN8S18909C43v31Ev();
extern void _ZN8S18909C3D1Ev();
extern void _ZN8S18909C3D0Ev();
extern void _ZN8S18909C33v32Ev();
extern void _ZN8S18909C33v33Ev();
extern void _ZN8S18909C33v34Ev();
extern void _ZN8S18909C33v35Ev();
extern void _ZN8S18909C33v36Ev();
extern void _ZN8S18909C33v37Ev();
extern void _ZN8S18909C33v38Ev();
extern void _ZN8S18909C33v39Ev();
extern void _ZN8S18909C33v40Ev();
extern void ABISELECT(_ZThn304_N8S18909C3D1Ev,_ZThn188_N8S18909C3D1Ev)();
extern void ABISELECT(_ZThn304_N8S18909C3D0Ev,_ZThn188_N8S18909C3D0Ev)();
extern void _ZN8S18909C73v22Ev();
extern void _ZN8S18909C73v23Ev();
extern void _ZN8S18909C73v24Ev();
extern void _ZN8S18909C63v25Ev();
extern void _ZN8S18909C63v26Ev();
extern void _ZN8S18909C63v27Ev();
extern void ABISELECT(_ZTv0_n24_N8S18909C3D1Ev,_ZTv0_n12_N8S18909C3D1Ev)();
extern void ABISELECT(_ZThn368_N8S18909C3D1Ev,_ZThn228_N8S18909C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S18909C3D0Ev,_ZTv0_n12_N8S18909C3D0Ev)();
extern void ABISELECT(_ZThn368_N8S18909C3D0Ev,_ZThn228_N8S18909C3D0Ev)() __attribute__((weak));
extern void _ZN8S18909C73v22Ev();
extern void _ZN8S18909C73v23Ev();
extern void _ZN8S18909C73v24Ev();
extern void _ZN8S18909C63v25Ev();
extern void _ZN8S18909C63v26Ev();
extern void _ZN8S18909C63v27Ev();
static  VTBL_ENTRY vtc_S18909C3[] = {
  ABISELECT(368,228),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S18909C3[0]),
  (VTBL_ENTRY)&_ZN8S18909C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v28Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v29Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v30Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v31Ev,
  (VTBL_ENTRY)&_ZN8S18909C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18909C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18909C33v32Ev,
  (VTBL_ENTRY)&_ZN8S18909C33v33Ev,
  (VTBL_ENTRY)&_ZN8S18909C33v34Ev,
  (VTBL_ENTRY)&_ZN8S18909C33v35Ev,
  (VTBL_ENTRY)&_ZN8S18909C33v36Ev,
  (VTBL_ENTRY)&_ZN8S18909C33v37Ev,
  (VTBL_ENTRY)&_ZN8S18909C33v38Ev,
  (VTBL_ENTRY)&_ZN8S18909C33v39Ev,
  (VTBL_ENTRY)&_ZN8S18909C33v40Ev,
  ABISELECT(-304,-188),
  (VTBL_ENTRY)&(_ZTI8S18909C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn304_N8S18909C3D1Ev,_ZThn188_N8S18909C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn304_N8S18909C3D0Ev,_ZThn188_N8S18909C3D0Ev),
  (VTBL_ENTRY)&_ZN8S18909C73v22Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v23Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v24Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v25Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v26Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v27Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-228),
  ABISELECT(-368,-228),
  (VTBL_ENTRY)&(_ZTI8S18909C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C3D1Ev,_ZTv0_n12_N8S18909C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C3D0Ev,_ZTv0_n12_N8S18909C3D0Ev),
  (VTBL_ENTRY)&_ZN8S18909C73v22Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v23Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v24Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v25Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v26Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v27Ev,
};
extern VTBL_ENTRY _ZTV8S18909C3[];
extern void _ZN8S18909C53v13Ev();
extern void _ZN8S18909C53v14Ev();
extern void _ZN8S18909C53v15Ev();
extern void _ZN8S18909C53v16Ev();
extern void _ZN8S18909C53v17Ev();
extern void _ZN8S18909C53v18Ev();
extern void _ZN8S18909C53v19Ev();
extern void _ZN8S18909C53v20Ev();
extern void _ZN8S18909C53v21Ev();
extern void _ZN8S18909C43v28Ev();
extern void _ZN8S18909C43v29Ev();
extern void _ZN8S18909C43v30Ev();
extern void _ZN8S18909C43v31Ev();
extern void _ZN8S18909C4D1Ev();
extern void _ZN8S18909C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S18909C4__8S18909C3[] = {
  ABISELECT(368,228),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S18909C4[0]),
  (VTBL_ENTRY)&_ZN8S18909C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v28Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v29Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v30Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v31Ev,
  (VTBL_ENTRY)&_ZN8S18909C4D1Ev,
  (VTBL_ENTRY)&_ZN8S18909C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S18909C4D1Ev,_ZTv0_n12_N8S18909C4D1Ev)();
extern void ABISELECT(_ZThn368_N8S18909C4D1Ev,_ZThn228_N8S18909C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S18909C4D0Ev,_ZTv0_n12_N8S18909C4D0Ev)();
extern void ABISELECT(_ZThn368_N8S18909C4D0Ev,_ZThn228_N8S18909C4D0Ev)() __attribute__((weak));
extern void _ZN8S18909C73v22Ev();
extern void _ZN8S18909C73v23Ev();
extern void _ZN8S18909C73v24Ev();
extern void _ZN8S18909C63v25Ev();
extern void _ZN8S18909C63v26Ev();
extern void _ZN8S18909C63v27Ev();
static  VTBL_ENTRY _tg__ZTV8S18909C6__8S18909C4__8S18909C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-228),
  ABISELECT(-368,-228),
  (VTBL_ENTRY)&(_ZTI8S18909C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C4D1Ev,_ZTv0_n12_N8S18909C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C4D0Ev,_ZTv0_n12_N8S18909C4D0Ev),
  (VTBL_ENTRY)&_ZN8S18909C73v22Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v23Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v24Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v25Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v26Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v27Ev,
};
static  VTT_ENTRY vtt_S18909C3[] = {
  {&(_ZTV8S18909C3[13]),  13,64},
  {&(_tg__ZTV8S18909C4__8S18909C3[13]),  13,28},
  {&(_tg__ZTV8S18909C4__8S18909C3[13]),  13,28},
  {&(_tg__ZTV8S18909C6__8S18909C4__8S18909C3[9]),  9,17},
  {&(_ZTV8S18909C3[13]),  13,64},
  {&(_ZTV8S18909C3[56]),  56,64},
};
extern VTBL_ENTRY _ZTI8S18909C3[];
extern  VTBL_ENTRY _ZTV8S18909C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18909C3[];
static VTBL_ENTRY alt_thunk_names18[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S18909C4D0Ev,_ZTv0_n12_N8S18909C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S18909C4D0Ev,_ZThn228_N8S18909C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S18909C4D1Ev,_ZTv0_n12_N8S18909C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S18909C4D1Ev,_ZThn228_N8S18909C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S18909C3D0Ev,_ZTv0_n12_N8S18909C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S18909C3D0Ev,_ZThn228_N8S18909C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S18909C3D1Ev,_ZTv0_n12_N8S18909C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S18909C3D1Ev,_ZThn228_N8S18909C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18909C3 = {  "S18909C3", // class name
  bases_S18909C3, 6,
  &(vtc_S18909C3[0]), // expected_vtbl_contents
  &(vtt_S18909C3[0]), // expected_vtt_contents
  ABISELECT(432,264), // object size
  NSPAIRA(_ZTI8S18909C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18909C3),64, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18909C3),6, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names18,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18909C9  : virtual S18909C4 , virtual S18909C7 {
  virtual  ~S18909C9(); // _ZN8S18909C9D2Ev
  virtual void  v41(); // _ZN8S18909C93v41Ev
  virtual void  v42(); // _ZN8S18909C93v42Ev
  virtual void  v43(); // _ZN8S18909C93v43Ev
  S18909C9(); // tgen
};
//SIG(-1 S18909C9) C1{ VBC2{ VBC3{ v4 v5 v6 v7 v8 v9 v10 v11 v12} VBC4{ BC5{ vd v13 v14 v15 Fi FL} vd v16 v17 v18 Fi FC5} v19 v20 v21 v22 FC4[3] Fi Fp[8] Fi FD[3]} VBC5 vd v1 v2 v3}


 S18909C9 ::~S18909C9(){ note_dtor("S18909C9", this);}
void  S18909C9 ::v41(){vfunc_called(this, "_ZN8S18909C93v41Ev");}
void  S18909C9 ::v42(){vfunc_called(this, "_ZN8S18909C93v42Ev");}
void  S18909C9 ::v43(){vfunc_called(this, "_ZN8S18909C93v43Ev");}
S18909C9 ::S18909C9(){ note_ctor("S18909C9", this);} // tgen

static void Test_S18909C9()
{
  extern Class_Descriptor cd_S18909C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(26,62)];
    init_test(&cd_S18909C9, buf);
    S18909C9 *dp, &lv = *(dp=new (buf) S18909C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,244), "sizeof(S18909C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18909C9)");
    check_base_class_offset(lv, (S18909C5*)(S18909C4*), 0, "S18909C9");
    check_base_class_offset(lv, (S18909C7*)(S18909C6*), ABISELECT(320,192), "S18909C9");
    check_base_class_offset(lv, (S18909C6*)(S18909C4*), ABISELECT(320,192), "S18909C9");
    check_base_class_offset(lv, (S18909C4*), ABISELECT(16,4), "S18909C9");
    /*is_ambiguous_... S18909C9::S18909C7 */ AMB_check_base_class_offset(lv, (S18909C7*), ABISELECT(376,228), "S18909C9");
    test_class_info(&lv, &cd_S18909C9);
    dp->~S18909C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18909C9(Test_S18909C9, "S18909C9", ABISELECT(400,244));

#else // __cplusplus

extern void _ZN8S18909C9C1Ev();
extern void _ZN8S18909C9D2Ev();
Name_Map name_map_S18909C9[] = {
  NSPAIR(_ZN8S18909C9C1Ev),
  NSPAIR(_ZN8S18909C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18909C5;
extern VTBL_ENTRY _ZTI8S18909C5[];
extern  VTBL_ENTRY _ZTV8S18909C5[];
extern Class_Descriptor cd_S18909C7;
extern VTBL_ENTRY _ZTI8S18909C7[];
extern  VTBL_ENTRY _ZTV8S18909C7[];
extern Class_Descriptor cd_S18909C6;
extern VTBL_ENTRY _ZTI8S18909C6[];
extern  VTBL_ENTRY _ZTV8S18909C6[];
extern Class_Descriptor cd_S18909C4;
extern VTBL_ENTRY _ZTI8S18909C4[];
extern  VTBL_ENTRY _ZTV8S18909C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18909C4[];
extern Class_Descriptor cd_S18909C7;
extern VTBL_ENTRY _ZTI8S18909C7[];
extern  VTBL_ENTRY _ZTV8S18909C7[];
static Base_Class bases_S18909C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18909C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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_S18909C7,    ABISELECT(320,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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S18909C6,    ABISELECT(320,192), //bcp->offset
    62, //bcp->virtual_function_table_offset
    9, //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_S18909C4,    ABISELECT(16,4), //bcp->offset
    29, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18909C7,    ABISELECT(376,228), //bcp->offset
    79, //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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S18909C9[];
extern void _ZN8S18909C53v13Ev();
extern void _ZN8S18909C53v14Ev();
extern void _ZN8S18909C53v15Ev();
extern void _ZN8S18909C53v16Ev();
extern void _ZN8S18909C53v17Ev();
extern void _ZN8S18909C53v18Ev();
extern void _ZN8S18909C53v19Ev();
extern void _ZN8S18909C53v20Ev();
extern void _ZN8S18909C53v21Ev();
extern void _ZN8S18909C9D1Ev();
extern void _ZN8S18909C9D0Ev();
extern void _ZN8S18909C93v41Ev();
extern void _ZN8S18909C93v42Ev();
extern void _ZN8S18909C93v43Ev();
extern void _ZN8S18909C53v13Ev();
extern void _ZN8S18909C53v14Ev();
extern void _ZN8S18909C53v15Ev();
extern void _ZN8S18909C53v16Ev();
extern void _ZN8S18909C53v17Ev();
extern void _ZN8S18909C53v18Ev();
extern void _ZN8S18909C53v19Ev();
extern void _ZN8S18909C53v20Ev();
extern void _ZN8S18909C53v21Ev();
extern void _ZN8S18909C43v28Ev();
extern void _ZN8S18909C43v29Ev();
extern void _ZN8S18909C43v30Ev();
extern void _ZN8S18909C43v31Ev();
extern void ABISELECT(_ZTv0_n144_N8S18909C9D1Ev,_ZTv0_n72_N8S18909C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S18909C9D1Ev,_ZThn4_N8S18909C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N8S18909C9D0Ev,_ZTv0_n72_N8S18909C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S18909C9D0Ev,_ZThn4_N8S18909C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S18909C9D1Ev,_ZTv0_n12_N8S18909C9D1Ev)();
extern void ABISELECT(_ZThn320_N8S18909C9D1Ev,_ZThn192_N8S18909C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S18909C9D0Ev,_ZTv0_n12_N8S18909C9D0Ev)();
extern void ABISELECT(_ZThn320_N8S18909C9D0Ev,_ZThn192_N8S18909C9D0Ev)() __attribute__((weak));
extern void _ZN8S18909C73v22Ev();
extern void _ZN8S18909C73v23Ev();
extern void _ZN8S18909C73v24Ev();
extern void _ZN8S18909C63v25Ev();
extern void _ZN8S18909C63v26Ev();
extern void _ZN8S18909C63v27Ev();
extern void ABISELECT(_ZTv0_n24_N8S18909C9D1Ev,_ZTv0_n12_N8S18909C9D1Ev)();
extern void ABISELECT(_ZThn376_N8S18909C9D1Ev,_ZThn228_N8S18909C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S18909C9D0Ev,_ZTv0_n12_N8S18909C9D0Ev)();
extern void ABISELECT(_ZThn376_N8S18909C9D0Ev,_ZThn228_N8S18909C9D0Ev)() __attribute__((weak));
extern void _ZN8S18909C73v22Ev();
extern void _ZN8S18909C73v23Ev();
extern void _ZN8S18909C73v24Ev();
static  VTBL_ENTRY vtc_S18909C9[] = {
  ABISELECT(376,228),
  ABISELECT(320,192),
  0,
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S18909C9[0]),
  (VTBL_ENTRY)&_ZN8S18909C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18909C9D1Ev,
  (VTBL_ENTRY)&_ZN8S18909C9D0Ev,
  (VTBL_ENTRY)&_ZN8S18909C93v41Ev,
  (VTBL_ENTRY)&_ZN8S18909C93v42Ev,
  (VTBL_ENTRY)&_ZN8S18909C93v43Ev,
  ABISELECT(-16,-4),
  0,
  0,
  0,
  0,
  ABISELECT(304,188),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S18909C9[0]),
  (VTBL_ENTRY)&_ZN8S18909C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v28Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v29Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v30Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v31Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S18909C9D1Ev,_ZTv0_n72_N8S18909C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S18909C9D0Ev,_ZTv0_n72_N8S18909C9D0Ev),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-192),
  ABISELECT(-320,-192),
  (VTBL_ENTRY)&(_ZTI8S18909C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C9D1Ev,_ZTv0_n12_N8S18909C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C9D0Ev,_ZTv0_n12_N8S18909C9D0Ev),
  (VTBL_ENTRY)&_ZN8S18909C73v22Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v23Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v24Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v25Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v26Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v27Ev,
  0,
  0,
  0,
  ABISELECT(-376,-228),
  ABISELECT(-376,-228),
  (VTBL_ENTRY)&(_ZTI8S18909C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C9D1Ev,_ZTv0_n12_N8S18909C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C9D0Ev,_ZTv0_n12_N8S18909C9D0Ev),
  (VTBL_ENTRY)&_ZN8S18909C73v22Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v23Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v24Ev,
};
extern VTBL_ENTRY _ZTV8S18909C9[];
extern void _ZN8S18909C53v13Ev();
extern void _ZN8S18909C53v14Ev();
extern void _ZN8S18909C53v15Ev();
extern void _ZN8S18909C53v16Ev();
extern void _ZN8S18909C53v17Ev();
extern void _ZN8S18909C53v18Ev();
extern void _ZN8S18909C53v19Ev();
extern void _ZN8S18909C53v20Ev();
extern void _ZN8S18909C53v21Ev();
extern void _ZN8S18909C43v28Ev();
extern void _ZN8S18909C43v29Ev();
extern void _ZN8S18909C43v30Ev();
extern void _ZN8S18909C43v31Ev();
extern void _ZN8S18909C4D1Ev();
extern void _ZN8S18909C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S18909C4__8S18909C9[] = {
  ABISELECT(304,188),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S18909C4[0]),
  (VTBL_ENTRY)&_ZN8S18909C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v28Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v29Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v30Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v31Ev,
  (VTBL_ENTRY)&_ZN8S18909C4D1Ev,
  (VTBL_ENTRY)&_ZN8S18909C4D0Ev,
};
extern void _ZN8S18909C53v13Ev();
extern void _ZN8S18909C53v14Ev();
extern void _ZN8S18909C53v15Ev();
extern void _ZN8S18909C53v16Ev();
extern void _ZN8S18909C53v17Ev();
extern void _ZN8S18909C53v18Ev();
extern void _ZN8S18909C53v19Ev();
extern void _ZN8S18909C53v20Ev();
extern void _ZN8S18909C53v21Ev();
static  VTBL_ENTRY _tg__ZTV8S18909C5__8S18909C4__8S18909C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI8S18909C4[0]),
  (VTBL_ENTRY)&_ZN8S18909C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S18909C4D1Ev,_ZTv0_n12_N8S18909C4D1Ev)();
extern void ABISELECT(_ZThn304_N8S18909C4D1Ev,_ZThn188_N8S18909C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S18909C4D0Ev,_ZTv0_n12_N8S18909C4D0Ev)();
extern void ABISELECT(_ZThn304_N8S18909C4D0Ev,_ZThn188_N8S18909C4D0Ev)() __attribute__((weak));
extern void _ZN8S18909C73v22Ev();
extern void _ZN8S18909C73v23Ev();
extern void _ZN8S18909C73v24Ev();
extern void _ZN8S18909C63v25Ev();
extern void _ZN8S18909C63v26Ev();
extern void _ZN8S18909C63v27Ev();
static  VTBL_ENTRY _tg__ZTV8S18909C6__8S18909C4__8S18909C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-188),
  ABISELECT(-304,-188),
  (VTBL_ENTRY)&(_ZTI8S18909C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C4D1Ev,_ZTv0_n12_N8S18909C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C4D0Ev,_ZTv0_n12_N8S18909C4D0Ev),
  (VTBL_ENTRY)&_ZN8S18909C73v22Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v23Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v24Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v25Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v26Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v27Ev,
};
static  VTT_ENTRY vtt_S18909C9[] = {
  {&(_ZTV8S18909C9[15]),  15,90},
  {&(_ZTV8S18909C9[47]),  47,90},
  {&(_ZTV8S18909C9[15]),  15,90},
  {&(_ZTV8S18909C9[71]),  71,90},
  {&(_ZTV8S18909C9[85]),  85,90},
  {&(_tg__ZTV8S18909C4__8S18909C9[13]),  13,28},
  {&(_tg__ZTV8S18909C5__8S18909C4__8S18909C9[11]),  11,20},
  {&(_tg__ZTV8S18909C6__8S18909C4__8S18909C9[9]),  9,17},
};
extern VTBL_ENTRY _ZTI8S18909C9[];
extern  VTBL_ENTRY _ZTV8S18909C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18909C9[];
static VTBL_ENTRY alt_thunk_names19[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S18909C4D0Ev,_ZTv0_n12_N8S18909C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S18909C4D0Ev,_ZThn188_N8S18909C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S18909C4D1Ev,_ZTv0_n12_N8S18909C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S18909C4D1Ev,_ZThn188_N8S18909C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S18909C9D0Ev,_ZTv0_n12_N8S18909C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N8S18909C9D0Ev,_ZThn228_N8S18909C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S18909C9D0Ev,_ZThn192_N8S18909C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S18909C9D1Ev,_ZTv0_n12_N8S18909C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N8S18909C9D1Ev,_ZThn228_N8S18909C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S18909C9D1Ev,_ZThn192_N8S18909C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N8S18909C9D0Ev,_ZTv0_n72_N8S18909C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S18909C9D0Ev,_ZThn4_N8S18909C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N8S18909C9D1Ev,_ZTv0_n72_N8S18909C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S18909C9D1Ev,_ZThn4_N8S18909C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18909C9 = {  "S18909C9", // class name
  bases_S18909C9, 5,
  &(vtc_S18909C9[0]), // expected_vtbl_contents
  &(vtt_S18909C9[0]), // expected_vtt_contents
  ABISELECT(400,244), // object size
  NSPAIRA(_ZTI8S18909C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18909C9),90, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18909C9),8, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names19,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18909C10  {
  ::S18909C6 s18909c10f0;
  int s18909c10f1;
  virtual  ~S18909C10(); // _ZN9S18909C10D1Ev
  virtual void  v44(); // _ZN9S18909C103v44Ev
  virtual void  v45(); // _ZN9S18909C103v45Ev
  virtual void  v46(); // _ZN9S18909C103v46Ev
  virtual void  v47(); // _ZN9S18909C103v47Ev
  virtual void  v48(); // _ZN9S18909C103v48Ev
  S18909C10(); // tgen
};
//SIG(-1 S18909C10) C1{ vd v1 v2 v3 v4 v5 FC2{ BC3{ vd v9 v10 v11 Fi FL} vd v6 v7 v8 Fi FC3} Fi}


 S18909C10 ::~S18909C10(){ note_dtor("S18909C10", this);}
void  S18909C10 ::v44(){vfunc_called(this, "_ZN9S18909C103v44Ev");}
void  S18909C10 ::v45(){vfunc_called(this, "_ZN9S18909C103v45Ev");}
void  S18909C10 ::v46(){vfunc_called(this, "_ZN9S18909C103v46Ev");}
void  S18909C10 ::v47(){vfunc_called(this, "_ZN9S18909C103v47Ev");}
void  S18909C10 ::v48(){vfunc_called(this, "_ZN9S18909C103v48Ev");}
S18909C10 ::S18909C10(){ note_ctor("S18909C10", this);} // tgen

static void Test_S18909C10()
{
  extern Class_Descriptor cd_S18909C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S18909C10, buf);
    S18909C10 *dp, &lv = *(dp=new (buf) S18909C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S18909C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18909C10)");
    check_field_offset(lv, s18909c10f0, ABISELECT(8,4), "S18909C10.s18909c10f0");
    check_field_offset(lv, s18909c10f1, ABISELECT(64,40), "S18909C10.s18909c10f1");
    test_class_info(&lv, &cd_S18909C10);
    dp->~S18909C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18909C10(Test_S18909C10, "S18909C10", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN9S18909C10C1Ev();
extern void _ZN9S18909C10D1Ev();
Name_Map name_map_S18909C10[] = {
  NSPAIR(_ZN9S18909C10C1Ev),
  NSPAIR(_ZN9S18909C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S18909C10[];
extern void _ZN9S18909C10D1Ev();
extern void _ZN9S18909C10D0Ev();
extern void _ZN9S18909C103v44Ev();
extern void _ZN9S18909C103v45Ev();
extern void _ZN9S18909C103v46Ev();
extern void _ZN9S18909C103v47Ev();
extern void _ZN9S18909C103v48Ev();
static  VTBL_ENTRY vtc_S18909C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S18909C10[0]),
  (VTBL_ENTRY)&_ZN9S18909C10D1Ev,
  (VTBL_ENTRY)&_ZN9S18909C10D0Ev,
  (VTBL_ENTRY)&_ZN9S18909C103v44Ev,
  (VTBL_ENTRY)&_ZN9S18909C103v45Ev,
  (VTBL_ENTRY)&_ZN9S18909C103v46Ev,
  (VTBL_ENTRY)&_ZN9S18909C103v47Ev,
  (VTBL_ENTRY)&_ZN9S18909C103v48Ev,
};
extern VTBL_ENTRY _ZTI9S18909C10[];
extern  VTBL_ENTRY _ZTV9S18909C10[];
Class_Descriptor cd_S18909C10 = {  "S18909C10", // class name
  0,0,//no base classes
  &(vtc_S18909C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI9S18909C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S18909C10),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18909C8  : virtual S18909C9 , S18909C10 {
  __tsi64 s18909c8f0;
  virtual  ~S18909C8(); // _ZN8S18909C8D2Ev
  virtual void  v49(); // _ZN8S18909C83v49Ev
  virtual void  v50(); // _ZN8S18909C83v50Ev
  virtual void  v51(); // _ZN8S18909C83v51Ev
  virtual void  v52(); // _ZN8S18909C83v52Ev
  virtual void  v53(); // _ZN8S18909C83v53Ev
  virtual void  v54(); // _ZN8S18909C83v54Ev
  S18909C8(); // tgen
};
//SIG(-1 S18909C8) C1{ VBC2{ VBC3{ VBC4{ v7 v8 v9 v10 v11 v12 v13 v14 v15} VBC5{ BC6{ vd v16 v17 v18 Fi FL} vd v19 v20 v21 Fi FC6} v22 v23 v24 v25 FC5[3] Fi Fp[8] Fi FD[3]} VBC6 vd v26 v27 v28} BC7{ vd v29 v30 v31 v32 v33 FC5 Fi} vd v1 v2 v3 v4 v5 v6 FL}


 S18909C8 ::~S18909C8(){ note_dtor("S18909C8", this);}
void  S18909C8 ::v49(){vfunc_called(this, "_ZN8S18909C83v49Ev");}
void  S18909C8 ::v50(){vfunc_called(this, "_ZN8S18909C83v50Ev");}
void  S18909C8 ::v51(){vfunc_called(this, "_ZN8S18909C83v51Ev");}
void  S18909C8 ::v52(){vfunc_called(this, "_ZN8S18909C83v52Ev");}
void  S18909C8 ::v53(){vfunc_called(this, "_ZN8S18909C83v53Ev");}
void  S18909C8 ::v54(){vfunc_called(this, "_ZN8S18909C83v54Ev");}
S18909C8 ::S18909C8(){ note_ctor("S18909C8", this);} // tgen

static void Test_S18909C8()
{
  extern Class_Descriptor cd_S18909C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(31,75)];
    init_test(&cd_S18909C8, buf);
    S18909C8 *dp, &lv = *(dp=new (buf) S18909C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(480,296), "sizeof(S18909C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18909C8)");
    check_base_class_offset(lv, (S18909C5*)(S18909C4*), ABISELECT(80,52), "S18909C8");
    check_base_class_offset(lv, (S18909C7*)(S18909C6*), ABISELECT(400,244), "S18909C8");
    check_base_class_offset(lv, (S18909C6*)(S18909C4*), ABISELECT(400,244), "S18909C8");
    check_base_class_offset(lv, (S18909C4*)(S18909C9*), ABISELECT(96,56), "S18909C8");
    /*is_ambiguous_... S18909C9::S18909C7 */ AMB_check_base_class_offset(lv, (S18909C7*)(S18909C9*), ABISELECT(456,280), "S18909C8");
    check_base_class_offset(lv, (S18909C9*), ABISELECT(80,52), "S18909C8");
    check_base_class_offset(lv, (S18909C10*), 0, "S18909C8");
    check_field_offset(lv, s18909c8f0, ABISELECT(72,44), "S18909C8.s18909c8f0");
    test_class_info(&lv, &cd_S18909C8);
    dp->~S18909C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18909C8(Test_S18909C8, "S18909C8", ABISELECT(480,296));

#else // __cplusplus

extern void _ZN8S18909C8C1Ev();
extern void _ZN8S18909C8D2Ev();
Name_Map name_map_S18909C8[] = {
  NSPAIR(_ZN8S18909C8C1Ev),
  NSPAIR(_ZN8S18909C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18909C5;
extern VTBL_ENTRY _ZTI8S18909C5[];
extern  VTBL_ENTRY _ZTV8S18909C5[];
extern Class_Descriptor cd_S18909C7;
extern VTBL_ENTRY _ZTI8S18909C7[];
extern  VTBL_ENTRY _ZTV8S18909C7[];
extern Class_Descriptor cd_S18909C6;
extern VTBL_ENTRY _ZTI8S18909C6[];
extern  VTBL_ENTRY _ZTV8S18909C6[];
extern Class_Descriptor cd_S18909C4;
extern VTBL_ENTRY _ZTI8S18909C4[];
extern  VTBL_ENTRY _ZTV8S18909C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18909C4[];
extern Class_Descriptor cd_S18909C7;
extern VTBL_ENTRY _ZTI8S18909C7[];
extern  VTBL_ENTRY _ZTV8S18909C7[];
extern Class_Descriptor cd_S18909C9;
extern VTBL_ENTRY _ZTI8S18909C9[];
extern  VTBL_ENTRY _ZTV8S18909C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18909C9[];
extern Class_Descriptor cd_S18909C10;
extern VTBL_ENTRY _ZTI9S18909C10[];
extern  VTBL_ENTRY _ZTV9S18909C10[];
static Base_Class bases_S18909C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18909C5,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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
    3, //immediately_derived
  0, 1},
  {&cd_S18909C7,    ABISELECT(400,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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S18909C6,    ABISELECT(400,244), //bcp->offset
    86, //bcp->virtual_function_table_offset
    9, //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
    3, //immediately_derived
  0, 1},
  {&cd_S18909C4,    ABISELECT(96,56), //bcp->offset
    53, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S18909C7,    ABISELECT(456,280), //bcp->offset
    103, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S18909C9,    ABISELECT(80,52), //bcp->offset
    20, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18909C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S18909C8[];
extern void _ZN8S18909C8D1Ev();
extern void _ZN8S18909C8D0Ev();
extern void _ZN9S18909C103v44Ev();
extern void _ZN9S18909C103v45Ev();
extern void _ZN9S18909C103v46Ev();
extern void _ZN9S18909C103v47Ev();
extern void _ZN9S18909C103v48Ev();
extern void _ZN8S18909C83v49Ev();
extern void _ZN8S18909C83v50Ev();
extern void _ZN8S18909C83v51Ev();
extern void _ZN8S18909C83v52Ev();
extern void _ZN8S18909C83v53Ev();
extern void _ZN8S18909C83v54Ev();
extern void _ZN8S18909C53v13Ev();
extern void _ZN8S18909C53v14Ev();
extern void _ZN8S18909C53v15Ev();
extern void _ZN8S18909C53v16Ev();
extern void _ZN8S18909C53v17Ev();
extern void _ZN8S18909C53v18Ev();
extern void _ZN8S18909C53v19Ev();
extern void _ZN8S18909C53v20Ev();
extern void _ZN8S18909C53v21Ev();
extern void ABISELECT(_ZTv0_n128_N8S18909C8D1Ev,_ZTv0_n64_N8S18909C8D1Ev)();
extern void ABISELECT(_ZThn80_N8S18909C8D1Ev,_ZThn52_N8S18909C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n128_N8S18909C8D0Ev,_ZTv0_n64_N8S18909C8D0Ev)();
extern void ABISELECT(_ZThn80_N8S18909C8D0Ev,_ZThn52_N8S18909C8D0Ev)() __attribute__((weak));
extern void _ZN8S18909C93v41Ev();
extern void _ZN8S18909C93v42Ev();
extern void _ZN8S18909C93v43Ev();
extern void _ZN8S18909C53v13Ev();
extern void _ZN8S18909C53v14Ev();
extern void _ZN8S18909C53v15Ev();
extern void _ZN8S18909C53v16Ev();
extern void _ZN8S18909C53v17Ev();
extern void _ZN8S18909C53v18Ev();
extern void _ZN8S18909C53v19Ev();
extern void _ZN8S18909C53v20Ev();
extern void _ZN8S18909C53v21Ev();
extern void _ZN8S18909C43v28Ev();
extern void _ZN8S18909C43v29Ev();
extern void _ZN8S18909C43v30Ev();
extern void _ZN8S18909C43v31Ev();
extern void ABISELECT(_ZTv0_n144_N8S18909C8D1Ev,_ZTv0_n72_N8S18909C8D1Ev)();
extern void ABISELECT(_ZThn96_N8S18909C8D1Ev,_ZThn56_N8S18909C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N8S18909C8D0Ev,_ZTv0_n72_N8S18909C8D0Ev)();
extern void ABISELECT(_ZThn96_N8S18909C8D0Ev,_ZThn56_N8S18909C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S18909C8D1Ev,_ZTv0_n12_N8S18909C8D1Ev)();
extern void ABISELECT(_ZThn400_N8S18909C8D1Ev,_ZThn244_N8S18909C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S18909C8D0Ev,_ZTv0_n12_N8S18909C8D0Ev)();
extern void ABISELECT(_ZThn400_N8S18909C8D0Ev,_ZThn244_N8S18909C8D0Ev)() __attribute__((weak));
extern void _ZN8S18909C73v22Ev();
extern void _ZN8S18909C73v23Ev();
extern void _ZN8S18909C73v24Ev();
extern void _ZN8S18909C63v25Ev();
extern void _ZN8S18909C63v26Ev();
extern void _ZN8S18909C63v27Ev();
extern void ABISELECT(_ZTv0_n24_N8S18909C8D1Ev,_ZTv0_n12_N8S18909C8D1Ev)();
extern void ABISELECT(_ZThn456_N8S18909C8D1Ev,_ZThn280_N8S18909C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S18909C8D0Ev,_ZTv0_n12_N8S18909C8D0Ev)();
extern void ABISELECT(_ZThn456_N8S18909C8D0Ev,_ZThn280_N8S18909C8D0Ev)() __attribute__((weak));
extern void _ZN8S18909C73v22Ev();
extern void _ZN8S18909C73v23Ev();
extern void _ZN8S18909C73v24Ev();
static  VTBL_ENTRY vtc_S18909C8[] = {
  ABISELECT(456,280),
  ABISELECT(400,244),
  ABISELECT(80,52),
  ABISELECT(96,56),
  ABISELECT(80,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S18909C8[0]),
  (VTBL_ENTRY)&_ZN8S18909C8D1Ev,
  (VTBL_ENTRY)&_ZN8S18909C8D0Ev,
  (VTBL_ENTRY)&_ZN9S18909C103v44Ev,
  (VTBL_ENTRY)&_ZN9S18909C103v45Ev,
  (VTBL_ENTRY)&_ZN9S18909C103v46Ev,
  (VTBL_ENTRY)&_ZN9S18909C103v47Ev,
  (VTBL_ENTRY)&_ZN9S18909C103v48Ev,
  (VTBL_ENTRY)&_ZN8S18909C83v49Ev,
  (VTBL_ENTRY)&_ZN8S18909C83v50Ev,
  (VTBL_ENTRY)&_ZN8S18909C83v51Ev,
  (VTBL_ENTRY)&_ZN8S18909C83v52Ev,
  (VTBL_ENTRY)&_ZN8S18909C83v53Ev,
  (VTBL_ENTRY)&_ZN8S18909C83v54Ev,
  0,
  0,
  0,
  ABISELECT(-80,-52),
  ABISELECT(376,228),
  ABISELECT(320,192),
  0,
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S18909C8[0]),
  (VTBL_ENTRY)&_ZN8S18909C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v21Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N8S18909C8D1Ev,_ZTv0_n64_N8S18909C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N8S18909C8D0Ev,_ZTv0_n64_N8S18909C8D0Ev),
  (VTBL_ENTRY)&_ZN8S18909C93v41Ev,
  (VTBL_ENTRY)&_ZN8S18909C93v42Ev,
  (VTBL_ENTRY)&_ZN8S18909C93v43Ev,
  ABISELECT(-96,-56),
  0,
  0,
  0,
  0,
  ABISELECT(304,188),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S18909C8[0]),
  (VTBL_ENTRY)&_ZN8S18909C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v28Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v29Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v30Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v31Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S18909C8D1Ev,_ZTv0_n72_N8S18909C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S18909C8D0Ev,_ZTv0_n72_N8S18909C8D0Ev),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-400,-244),
  ABISELECT(-400,-244),
  (VTBL_ENTRY)&(_ZTI8S18909C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C8D1Ev,_ZTv0_n12_N8S18909C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C8D0Ev,_ZTv0_n12_N8S18909C8D0Ev),
  (VTBL_ENTRY)&_ZN8S18909C73v22Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v23Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v24Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v25Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v26Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v27Ev,
  0,
  0,
  0,
  ABISELECT(-456,-280),
  ABISELECT(-456,-280),
  (VTBL_ENTRY)&(_ZTI8S18909C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C8D1Ev,_ZTv0_n12_N8S18909C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C8D0Ev,_ZTv0_n12_N8S18909C8D0Ev),
  (VTBL_ENTRY)&_ZN8S18909C73v22Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v23Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v24Ev,
};
extern VTBL_ENTRY _ZTV8S18909C8[];
extern void _ZN8S18909C53v13Ev();
extern void _ZN8S18909C53v14Ev();
extern void _ZN8S18909C53v15Ev();
extern void _ZN8S18909C53v16Ev();
extern void _ZN8S18909C53v17Ev();
extern void _ZN8S18909C53v18Ev();
extern void _ZN8S18909C53v19Ev();
extern void _ZN8S18909C53v20Ev();
extern void _ZN8S18909C53v21Ev();
extern void _ZN8S18909C9D1Ev();
extern void _ZN8S18909C9D0Ev();
extern void _ZN8S18909C93v41Ev();
extern void _ZN8S18909C93v42Ev();
extern void _ZN8S18909C93v43Ev();
static  VTBL_ENTRY _tg__ZTV8S18909C9__8S18909C8[] = {
  ABISELECT(376,228),
  ABISELECT(320,192),
  0,
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S18909C9[0]),
  (VTBL_ENTRY)&_ZN8S18909C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18909C9D1Ev,
  (VTBL_ENTRY)&_ZN8S18909C9D0Ev,
  (VTBL_ENTRY)&_ZN8S18909C93v41Ev,
  (VTBL_ENTRY)&_ZN8S18909C93v42Ev,
  (VTBL_ENTRY)&_ZN8S18909C93v43Ev,
};
extern void _ZN8S18909C53v13Ev();
extern void _ZN8S18909C53v14Ev();
extern void _ZN8S18909C53v15Ev();
extern void _ZN8S18909C53v16Ev();
extern void _ZN8S18909C53v17Ev();
extern void _ZN8S18909C53v18Ev();
extern void _ZN8S18909C53v19Ev();
extern void _ZN8S18909C53v20Ev();
extern void _ZN8S18909C53v21Ev();
extern void _ZN8S18909C43v28Ev();
extern void _ZN8S18909C43v29Ev();
extern void _ZN8S18909C43v30Ev();
extern void _ZN8S18909C43v31Ev();
extern void ABISELECT(_ZTv0_n144_N8S18909C9D1Ev,_ZTv0_n72_N8S18909C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S18909C9D1Ev,_ZThn4_N8S18909C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N8S18909C9D0Ev,_ZTv0_n72_N8S18909C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S18909C9D0Ev,_ZThn4_N8S18909C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S18909C4__8S18909C9__8S18909C8[] = {
  ABISELECT(-16,-4),
  0,
  0,
  0,
  0,
  ABISELECT(304,188),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S18909C9[0]),
  (VTBL_ENTRY)&_ZN8S18909C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v28Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v29Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v30Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v31Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S18909C9D1Ev,_ZTv0_n72_N8S18909C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S18909C9D0Ev,_ZTv0_n72_N8S18909C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S18909C9D1Ev,_ZTv0_n12_N8S18909C9D1Ev)();
extern void ABISELECT(_ZThn320_N8S18909C9D1Ev,_ZThn192_N8S18909C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S18909C9D0Ev,_ZTv0_n12_N8S18909C9D0Ev)();
extern void ABISELECT(_ZThn320_N8S18909C9D0Ev,_ZThn192_N8S18909C9D0Ev)() __attribute__((weak));
extern void _ZN8S18909C73v22Ev();
extern void _ZN8S18909C73v23Ev();
extern void _ZN8S18909C73v24Ev();
extern void _ZN8S18909C63v25Ev();
extern void _ZN8S18909C63v26Ev();
extern void _ZN8S18909C63v27Ev();
static  VTBL_ENTRY _tg__ZTV8S18909C6__8S18909C9__8S18909C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-192),
  ABISELECT(-320,-192),
  (VTBL_ENTRY)&(_ZTI8S18909C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C9D1Ev,_ZTv0_n12_N8S18909C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C9D0Ev,_ZTv0_n12_N8S18909C9D0Ev),
  (VTBL_ENTRY)&_ZN8S18909C73v22Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v23Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v24Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v25Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v26Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v27Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S18909C9D1Ev,_ZTv0_n12_N8S18909C9D1Ev)();
extern void ABISELECT(_ZThn376_N8S18909C9D1Ev,_ZThn228_N8S18909C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S18909C9D0Ev,_ZTv0_n12_N8S18909C9D0Ev)();
extern void ABISELECT(_ZThn376_N8S18909C9D0Ev,_ZThn228_N8S18909C9D0Ev)() __attribute__((weak));
extern void _ZN8S18909C73v22Ev();
extern void _ZN8S18909C73v23Ev();
extern void _ZN8S18909C73v24Ev();
static  VTBL_ENTRY _tg__ZTV8S18909C7__A1__8S18909C9__8S18909C8[] = {
  0,
  0,
  0,
  ABISELECT(-376,-228),
  ABISELECT(-376,-228),
  (VTBL_ENTRY)&(_ZTI8S18909C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C9D1Ev,_ZTv0_n12_N8S18909C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C9D0Ev,_ZTv0_n12_N8S18909C9D0Ev),
  (VTBL_ENTRY)&_ZN8S18909C73v22Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v23Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v24Ev,
};
extern void _ZN8S18909C53v13Ev();
extern void _ZN8S18909C53v14Ev();
extern void _ZN8S18909C53v15Ev();
extern void _ZN8S18909C53v16Ev();
extern void _ZN8S18909C53v17Ev();
extern void _ZN8S18909C53v18Ev();
extern void _ZN8S18909C53v19Ev();
extern void _ZN8S18909C53v20Ev();
extern void _ZN8S18909C53v21Ev();
extern void _ZN8S18909C43v28Ev();
extern void _ZN8S18909C43v29Ev();
extern void _ZN8S18909C43v30Ev();
extern void _ZN8S18909C43v31Ev();
extern void _ZN8S18909C4D1Ev();
extern void _ZN8S18909C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S18909C4__8S18909C8[] = {
  ABISELECT(304,188),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S18909C4[0]),
  (VTBL_ENTRY)&_ZN8S18909C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v28Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v29Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v30Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v31Ev,
  (VTBL_ENTRY)&_ZN8S18909C4D1Ev,
  (VTBL_ENTRY)&_ZN8S18909C4D0Ev,
};
extern void _ZN8S18909C53v13Ev();
extern void _ZN8S18909C53v14Ev();
extern void _ZN8S18909C53v15Ev();
extern void _ZN8S18909C53v16Ev();
extern void _ZN8S18909C53v17Ev();
extern void _ZN8S18909C53v18Ev();
extern void _ZN8S18909C53v19Ev();
extern void _ZN8S18909C53v20Ev();
extern void _ZN8S18909C53v21Ev();
static  VTBL_ENTRY _tg__ZTV8S18909C5__8S18909C4__8S18909C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI8S18909C4[0]),
  (VTBL_ENTRY)&_ZN8S18909C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S18909C4D1Ev,_ZTv0_n12_N8S18909C4D1Ev)();
extern void ABISELECT(_ZThn304_N8S18909C4D1Ev,_ZThn188_N8S18909C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S18909C4D0Ev,_ZTv0_n12_N8S18909C4D0Ev)();
extern void ABISELECT(_ZThn304_N8S18909C4D0Ev,_ZThn188_N8S18909C4D0Ev)() __attribute__((weak));
extern void _ZN8S18909C73v22Ev();
extern void _ZN8S18909C73v23Ev();
extern void _ZN8S18909C73v24Ev();
extern void _ZN8S18909C63v25Ev();
extern void _ZN8S18909C63v26Ev();
extern void _ZN8S18909C63v27Ev();
static  VTBL_ENTRY _tg__ZTV8S18909C6__8S18909C4__8S18909C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-188),
  ABISELECT(-304,-188),
  (VTBL_ENTRY)&(_ZTI8S18909C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C4D1Ev,_ZTv0_n12_N8S18909C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C4D0Ev,_ZTv0_n12_N8S18909C4D0Ev),
  (VTBL_ENTRY)&_ZN8S18909C73v22Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v23Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v24Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v25Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v26Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v27Ev,
};
static  VTT_ENTRY vtt_S18909C8[] = {
  {&(_ZTV8S18909C8[7]),  7,114},
  {&(_ZTV8S18909C8[39]),  39,114},
  {&(_ZTV8S18909C8[71]),  71,114},
  {&(_ZTV8S18909C8[39]),  39,114},
  {&(_ZTV8S18909C8[95]),  95,114},
  {&(_ZTV8S18909C8[109]),  109,114},
  {&(_tg__ZTV8S18909C9__8S18909C8[15]),  15,29},
  {&(_tg__ZTV8S18909C4__8S18909C9__8S18909C8[18]),  18,33},
  {&(_tg__ZTV8S18909C9__8S18909C8[15]),  15,29},
  {&(_tg__ZTV8S18909C6__8S18909C9__8S18909C8[9]),  9,17},
  {&(_tg__ZTV8S18909C7__A1__8S18909C9__8S18909C8[6]),  6,11},
  {&(_tg__ZTV8S18909C4__8S18909C8[13]),  13,28},
  {&(_tg__ZTV8S18909C5__8S18909C4__8S18909C8[11]),  11,20},
  {&(_tg__ZTV8S18909C6__8S18909C4__8S18909C8[9]),  9,17},
};
extern VTBL_ENTRY _ZTI8S18909C8[];
extern  VTBL_ENTRY _ZTV8S18909C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18909C8[];
static VTBL_ENTRY alt_thunk_names20[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S18909C4D0Ev,_ZTv0_n12_N8S18909C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S18909C4D0Ev,_ZThn188_N8S18909C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S18909C4D1Ev,_ZTv0_n12_N8S18909C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S18909C4D1Ev,_ZThn188_N8S18909C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S18909C9D0Ev,_ZTv0_n12_N8S18909C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N8S18909C9D0Ev,_ZThn228_N8S18909C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S18909C9D0Ev,_ZThn192_N8S18909C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S18909C9D1Ev,_ZTv0_n12_N8S18909C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N8S18909C9D1Ev,_ZThn228_N8S18909C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S18909C9D1Ev,_ZThn192_N8S18909C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N8S18909C9D0Ev,_ZTv0_n72_N8S18909C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S18909C9D0Ev,_ZThn4_N8S18909C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N8S18909C9D1Ev,_ZTv0_n72_N8S18909C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S18909C9D1Ev,_ZThn4_N8S18909C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S18909C8D0Ev,_ZTv0_n12_N8S18909C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn456_N8S18909C8D0Ev,_ZThn280_N8S18909C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn400_N8S18909C8D0Ev,_ZThn244_N8S18909C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S18909C8D1Ev,_ZTv0_n12_N8S18909C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn456_N8S18909C8D1Ev,_ZThn280_N8S18909C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn400_N8S18909C8D1Ev,_ZThn244_N8S18909C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N8S18909C8D0Ev,_ZTv0_n72_N8S18909C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S18909C8D0Ev,_ZThn56_N8S18909C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N8S18909C8D1Ev,_ZTv0_n72_N8S18909C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S18909C8D1Ev,_ZThn56_N8S18909C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N8S18909C8D0Ev,_ZTv0_n64_N8S18909C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S18909C8D0Ev,_ZThn52_N8S18909C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N8S18909C8D1Ev,_ZTv0_n64_N8S18909C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S18909C8D1Ev,_ZThn52_N8S18909C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18909C8 = {  "S18909C8", // class name
  bases_S18909C8, 7,
  &(vtc_S18909C8[0]), // expected_vtbl_contents
  &(vtt_S18909C8[0]), // expected_vtt_contents
  ABISELECT(480,296), // object size
  NSPAIRA(_ZTI8S18909C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18909C8),114, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18909C8),14, //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  S18909C2  : virtual S18909C3 , virtual S18909C8 {
  virtual  ~S18909C2(); // _ZN8S18909C2D2Ev
  virtual void  v4(); // _ZN8S18909C22v4Ev
  virtual void  v5(); // _ZN8S18909C22v5Ev
  virtual void  v6(); // _ZN8S18909C22v6Ev
  virtual void  v7(); // _ZN8S18909C22v7Ev
  virtual void  v8(); // _ZN8S18909C22v8Ev
  virtual void  v9(); // _ZN8S18909C22v9Ev
  virtual void  v10(); // _ZN8S18909C23v10Ev
  virtual void  v11(); // _ZN8S18909C23v11Ev
  virtual void  v12(); // _ZN8S18909C23v12Ev
  S18909C2(); // tgen
};
//SIG(-1 S18909C2) C1{ VBC2{ BC3{ VBC4{ v10 v11 v12 v13 v14 v15 v16 v17 v18} VBC5{ BC6{ vd v19 v20 v21 Fi FL} vd v22 v23 v24 Fi FC6} v25 v26 v27 v28 FC5[3] Fi Fp[8] Fi FD[3]} BC5 vd v29 v30 v31 v32 v33 v34 v35 v36 v37 Fi} VBC7{ VBC8{ VBC3 VBC6 vd v38 v39 v40} BC9{ vd v41 v42 v43 v44 v45 FC5 Fi} vd v46 v47 v48 v49 v50 v51 FL} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S18909C2 ::~S18909C2(){ note_dtor("S18909C2", this);}
void  S18909C2 ::v4(){vfunc_called(this, "_ZN8S18909C22v4Ev");}
void  S18909C2 ::v5(){vfunc_called(this, "_ZN8S18909C22v5Ev");}
void  S18909C2 ::v6(){vfunc_called(this, "_ZN8S18909C22v6Ev");}
void  S18909C2 ::v7(){vfunc_called(this, "_ZN8S18909C22v7Ev");}
void  S18909C2 ::v8(){vfunc_called(this, "_ZN8S18909C22v8Ev");}
void  S18909C2 ::v9(){vfunc_called(this, "_ZN8S18909C22v9Ev");}
void  S18909C2 ::v10(){vfunc_called(this, "_ZN8S18909C23v10Ev");}
void  S18909C2 ::v11(){vfunc_called(this, "_ZN8S18909C23v11Ev");}
void  S18909C2 ::v12(){vfunc_called(this, "_ZN8S18909C23v12Ev");}
S18909C2 ::S18909C2(){ note_ctor("S18909C2", this);} // tgen

static void Test_S18909C2()
{
  extern Class_Descriptor cd_S18909C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(55,132)];
    init_test(&cd_S18909C2, buf);
    S18909C2 *dp, &lv = *(dp=new (buf) S18909C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(864,524), "sizeof(S18909C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18909C2)");
    check_base_class_offset(lv, (S18909C5*)(S18909C4*)(S18909C3*), ABISELECT(16,4), "S18909C2");
    /*is_ambiguous_... S18909C2::S18909C4 */ AMB_check_base_class_offset(lv, (S18909C5*)(S18909C4*), ABISELECT(16,4), "S18909C2");
    /*is_ambiguous_... S18909C2::S18909C6 */ AMB_check_base_class_offset(lv, (S18909C7*)(S18909C6*), ABISELECT(384,232), "S18909C2");
    check_base_class_offset(lv, (S18909C6*)(S18909C4*)(S18909C3*), ABISELECT(384,232), "S18909C2");
    /*is_ambiguous_... S18909C2::S18909C4 */ AMB_check_base_class_offset(lv, (S18909C6*)(S18909C4*), ABISELECT(384,232), "S18909C2");
    check_base_class_offset(lv, (S18909C4*)(S18909C3*), ABISELECT(16,4), "S18909C2");
    /*is_ambiguous_... S18909C3::S18909C6 */ AMB_check_base_class_offset(lv, (S18909C7*)(S18909C6*)(S18909C3*), ABISELECT(320,192), "S18909C2");
    /*is_ambiguous_... S18909C3::S18909C6 */ AMB_check_base_class_offset(lv, (S18909C6*)(S18909C3*), ABISELECT(320,192), "S18909C2");
    check_base_class_offset(lv, (S18909C3*), ABISELECT(16,4), "S18909C2");
    check_base_class_offset(lv, (S18909C4*)(S18909C9*), ABISELECT(528,320), "S18909C2");
    /*is_ambiguous_... S18909C9::S18909C7 */ AMB_check_base_class_offset(lv, (S18909C7*)(S18909C9*), ABISELECT(832,508), "S18909C2");
    check_base_class_offset(lv, (S18909C9*)(S18909C8*), 0, "S18909C2");
    check_base_class_offset(lv, (S18909C10*)(S18909C8*), ABISELECT(440,268), "S18909C2");
    check_base_class_offset(lv, (S18909C8*), ABISELECT(440,268), "S18909C2");
    test_class_info(&lv, &cd_S18909C2);
    dp->~S18909C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18909C2(Test_S18909C2, "S18909C2", ABISELECT(864,524));

#else // __cplusplus

extern void _ZN8S18909C2C1Ev();
extern void _ZN8S18909C2D2Ev();
Name_Map name_map_S18909C2[] = {
  NSPAIR(_ZN8S18909C2C1Ev),
  NSPAIR(_ZN8S18909C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18909C5;
extern VTBL_ENTRY _ZTI8S18909C5[];
extern  VTBL_ENTRY _ZTV8S18909C5[];
extern Class_Descriptor cd_S18909C7;
extern VTBL_ENTRY _ZTI8S18909C7[];
extern  VTBL_ENTRY _ZTV8S18909C7[];
extern Class_Descriptor cd_S18909C6;
extern VTBL_ENTRY _ZTI8S18909C6[];
extern  VTBL_ENTRY _ZTV8S18909C6[];
extern Class_Descriptor cd_S18909C4;
extern VTBL_ENTRY _ZTI8S18909C4[];
extern  VTBL_ENTRY _ZTV8S18909C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18909C4[];
extern Class_Descriptor cd_S18909C7;
extern VTBL_ENTRY _ZTI8S18909C7[];
extern  VTBL_ENTRY _ZTV8S18909C7[];
extern Class_Descriptor cd_S18909C6;
extern VTBL_ENTRY _ZTI8S18909C6[];
extern  VTBL_ENTRY _ZTV8S18909C6[];
extern Class_Descriptor cd_S18909C3;
extern VTBL_ENTRY _ZTI8S18909C3[];
extern  VTBL_ENTRY _ZTV8S18909C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18909C3[];
extern Class_Descriptor cd_S18909C4;
extern VTBL_ENTRY _ZTI8S18909C4[];
extern  VTBL_ENTRY _ZTV8S18909C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18909C4[];
extern Class_Descriptor cd_S18909C7;
extern VTBL_ENTRY _ZTI8S18909C7[];
extern  VTBL_ENTRY _ZTV8S18909C7[];
extern Class_Descriptor cd_S18909C9;
extern VTBL_ENTRY _ZTI8S18909C9[];
extern  VTBL_ENTRY _ZTV8S18909C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18909C9[];
extern Class_Descriptor cd_S18909C10;
extern VTBL_ENTRY _ZTI9S18909C10[];
extern  VTBL_ENTRY _ZTV9S18909C10[];
extern Class_Descriptor cd_S18909C8;
extern VTBL_ENTRY _ZTI8S18909C8[];
extern  VTBL_ENTRY _ZTV8S18909C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18909C8[];
static Base_Class bases_S18909C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18909C5,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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_S18909C7,    ABISELECT(384,232), //bcp->offset
    -1, //bcp->virtual_function_table_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_S18909C6,    ABISELECT(384,232), //bcp->offset
    112, //bcp->virtual_function_table_offset
    9, //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_S18909C4,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S18909C7,    ABISELECT(320,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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S18909C6,    ABISELECT(320,192), //bcp->offset
    102, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S18909C3,    ABISELECT(16,4), //bcp->offset
    45, //bcp->virtual_function_table_offset
    33, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18909C4,    ABISELECT(528,320), //bcp->offset
    161, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S18909C7,    ABISELECT(832,508), //bcp->offset
    194, //bcp->virtual_function_table_offset
    6, //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
    9, //immediately_derived
  0, 1},
  {&cd_S18909C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S18909C10,    ABISELECT(440,268), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S18909C8,    ABISELECT(440,268), //bcp->offset
    129, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S18909C2[];
extern void _ZN8S18909C53v13Ev();
extern void _ZN8S18909C53v14Ev();
extern void _ZN8S18909C53v15Ev();
extern void _ZN8S18909C53v16Ev();
extern void _ZN8S18909C53v17Ev();
extern void _ZN8S18909C53v18Ev();
extern void _ZN8S18909C53v19Ev();
extern void _ZN8S18909C53v20Ev();
extern void _ZN8S18909C53v21Ev();
extern void _ZN8S18909C2D1Ev();
extern void _ZN8S18909C2D0Ev();
extern void _ZN8S18909C93v41Ev();
extern void _ZN8S18909C93v42Ev();
extern void _ZN8S18909C93v43Ev();
extern void _ZN8S18909C22v4Ev();
extern void _ZN8S18909C22v5Ev();
extern void _ZN8S18909C22v6Ev();
extern void _ZN8S18909C22v7Ev();
extern void _ZN8S18909C22v8Ev();
extern void _ZN8S18909C22v9Ev();
extern void _ZN8S18909C23v10Ev();
extern void _ZN8S18909C23v11Ev();
extern void _ZN8S18909C23v12Ev();
extern void _ZN8S18909C53v13Ev();
extern void _ZN8S18909C53v14Ev();
extern void _ZN8S18909C53v15Ev();
extern void _ZN8S18909C53v16Ev();
extern void _ZN8S18909C53v17Ev();
extern void _ZN8S18909C53v18Ev();
extern void _ZN8S18909C53v19Ev();
extern void _ZN8S18909C53v20Ev();
extern void _ZN8S18909C53v21Ev();
extern void _ZN8S18909C43v28Ev();
extern void _ZN8S18909C43v29Ev();
extern void _ZN8S18909C43v30Ev();
extern void _ZN8S18909C43v31Ev();
extern void ABISELECT(_ZTv0_n144_N8S18909C2D1Ev,_ZTv0_n72_N8S18909C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S18909C2D1Ev,_ZThn4_N8S18909C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N8S18909C2D0Ev,_ZTv0_n72_N8S18909C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S18909C2D0Ev,_ZThn4_N8S18909C2D0Ev)() __attribute__((weak));
extern void _ZN8S18909C33v32Ev();
extern void _ZN8S18909C33v33Ev();
extern void _ZN8S18909C33v34Ev();
extern void _ZN8S18909C33v35Ev();
extern void _ZN8S18909C33v36Ev();
extern void _ZN8S18909C33v37Ev();
extern void _ZN8S18909C33v38Ev();
extern void _ZN8S18909C33v39Ev();
extern void _ZN8S18909C33v40Ev();
extern void ABISELECT(_ZTvn304_n144_N8S18909C2D1Ev,_ZTvn188_n72_N8S18909C2D1Ev)();
extern void ABISELECT(_ZTvn304_n144_N8S18909C2D0Ev,_ZTvn188_n72_N8S18909C2D0Ev)();
extern void _ZN8S18909C73v22Ev();
extern void _ZN8S18909C73v23Ev();
extern void _ZN8S18909C73v24Ev();
extern void _ZN8S18909C63v25Ev();
extern void _ZN8S18909C63v26Ev();
extern void _ZN8S18909C63v27Ev();
extern void ABISELECT(_ZTv0_n24_N8S18909C2D1Ev,_ZTv0_n12_N8S18909C2D1Ev)();
extern void ABISELECT(_ZThn384_N8S18909C2D1Ev,_ZThn232_N8S18909C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S18909C2D0Ev,_ZTv0_n12_N8S18909C2D0Ev)();
extern void ABISELECT(_ZThn384_N8S18909C2D0Ev,_ZThn232_N8S18909C2D0Ev)() __attribute__((weak));
extern void _ZN8S18909C73v22Ev();
extern void _ZN8S18909C73v23Ev();
extern void _ZN8S18909C73v24Ev();
extern void _ZN8S18909C63v25Ev();
extern void _ZN8S18909C63v26Ev();
extern void _ZN8S18909C63v27Ev();
extern void ABISELECT(_ZTv0_n64_N8S18909C2D1Ev,_ZTv0_n32_N8S18909C2D1Ev)();
extern void ABISELECT(_ZThn440_N8S18909C2D1Ev,_ZThn268_N8S18909C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S18909C2D0Ev,_ZTv0_n32_N8S18909C2D0Ev)();
extern void ABISELECT(_ZThn440_N8S18909C2D0Ev,_ZThn268_N8S18909C2D0Ev)() __attribute__((weak));
extern void _ZN9S18909C103v44Ev();
extern void _ZN9S18909C103v45Ev();
extern void _ZN9S18909C103v46Ev();
extern void _ZN9S18909C103v47Ev();
extern void _ZN9S18909C103v48Ev();
extern void _ZN8S18909C83v49Ev();
extern void _ZN8S18909C83v50Ev();
extern void _ZN8S18909C83v51Ev();
extern void _ZN8S18909C83v52Ev();
extern void _ZN8S18909C83v53Ev();
extern void _ZN8S18909C83v54Ev();
extern void _ZN8S18909C53v13Ev();
extern void _ZN8S18909C53v14Ev();
extern void _ZN8S18909C53v15Ev();
extern void _ZN8S18909C53v16Ev();
extern void _ZN8S18909C53v17Ev();
extern void _ZN8S18909C53v18Ev();
extern void _ZN8S18909C53v19Ev();
extern void _ZN8S18909C53v20Ev();
extern void _ZN8S18909C53v21Ev();
extern void _ZN8S18909C43v28Ev();
extern void _ZN8S18909C43v29Ev();
extern void _ZN8S18909C43v30Ev();
extern void _ZN8S18909C43v31Ev();
extern void ABISELECT(_ZTv0_n144_N8S18909C2D1Ev,_ZTv0_n72_N8S18909C2D1Ev)();
extern void ABISELECT(_ZThn528_N8S18909C2D1Ev,_ZThn320_N8S18909C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N8S18909C2D0Ev,_ZTv0_n72_N8S18909C2D0Ev)();
extern void ABISELECT(_ZThn528_N8S18909C2D0Ev,_ZThn320_N8S18909C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S18909C2D1Ev,_ZTv0_n12_N8S18909C2D1Ev)();
extern void ABISELECT(_ZThn832_N8S18909C2D1Ev,_ZThn508_N8S18909C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S18909C2D0Ev,_ZTv0_n12_N8S18909C2D0Ev)();
extern void ABISELECT(_ZThn832_N8S18909C2D0Ev,_ZThn508_N8S18909C2D0Ev)() __attribute__((weak));
extern void _ZN8S18909C73v22Ev();
extern void _ZN8S18909C73v23Ev();
extern void _ZN8S18909C73v24Ev();
static  VTBL_ENTRY vtc_S18909C2[] = {
  0,
  ABISELECT(440,268),
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  ABISELECT(832,508),
  ABISELECT(384,232),
  ABISELECT(16,4),
  ABISELECT(528,320),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S18909C2[0]),
  (VTBL_ENTRY)&_ZN8S18909C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18909C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18909C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18909C93v41Ev,
  (VTBL_ENTRY)&_ZN8S18909C93v42Ev,
  (VTBL_ENTRY)&_ZN8S18909C93v43Ev,
  (VTBL_ENTRY)&_ZN8S18909C22v4Ev,
  (VTBL_ENTRY)&_ZN8S18909C22v5Ev,
  (VTBL_ENTRY)&_ZN8S18909C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18909C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18909C22v8Ev,
  (VTBL_ENTRY)&_ZN8S18909C22v9Ev,
  (VTBL_ENTRY)&_ZN8S18909C23v10Ev,
  (VTBL_ENTRY)&_ZN8S18909C23v11Ev,
  (VTBL_ENTRY)&_ZN8S18909C23v12Ev,
  ABISELECT(304,188),
  ABISELECT(304,188),
  ABISELECT(304,188),
  ABISELECT(304,188),
  ABISELECT(304,188),
  ABISELECT(304,188),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  0,
  0,
  0,
  0,
  ABISELECT(368,228),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S18909C2[0]),
  (VTBL_ENTRY)&_ZN8S18909C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v28Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v29Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v30Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v31Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S18909C2D1Ev,_ZTv0_n72_N8S18909C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S18909C2D0Ev,_ZTv0_n72_N8S18909C2D0Ev),
  (VTBL_ENTRY)&_ZN8S18909C33v32Ev,
  (VTBL_ENTRY)&_ZN8S18909C33v33Ev,
  (VTBL_ENTRY)&_ZN8S18909C33v34Ev,
  (VTBL_ENTRY)&_ZN8S18909C33v35Ev,
  (VTBL_ENTRY)&_ZN8S18909C33v36Ev,
  (VTBL_ENTRY)&_ZN8S18909C33v37Ev,
  (VTBL_ENTRY)&_ZN8S18909C33v38Ev,
  (VTBL_ENTRY)&_ZN8S18909C33v39Ev,
  (VTBL_ENTRY)&_ZN8S18909C33v40Ev,
  ABISELECT(-320,-192),
  (VTBL_ENTRY)&(_ZTI8S18909C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn304_n144_N8S18909C2D1Ev,_ZTvn188_n72_N8S18909C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn304_n144_N8S18909C2D0Ev,_ZTvn188_n72_N8S18909C2D0Ev),
  (VTBL_ENTRY)&_ZN8S18909C73v22Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v23Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v24Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v25Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v26Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v27Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-232),
  ABISELECT(-384,-232),
  (VTBL_ENTRY)&(_ZTI8S18909C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C2D1Ev,_ZTv0_n12_N8S18909C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C2D0Ev,_ZTv0_n12_N8S18909C2D0Ev),
  (VTBL_ENTRY)&_ZN8S18909C73v22Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v23Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v24Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v25Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v26Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v27Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-440,-268),
  ABISELECT(392,240),
  ABISELECT(-56,-36),
  ABISELECT(-424,-264),
  ABISELECT(88,52),
  ABISELECT(-440,-268),
  ABISELECT(-440,-268),
  (VTBL_ENTRY)&(_ZTI8S18909C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S18909C2D1Ev,_ZTv0_n32_N8S18909C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S18909C2D0Ev,_ZTv0_n32_N8S18909C2D0Ev),
  (VTBL_ENTRY)&_ZN9S18909C103v44Ev,
  (VTBL_ENTRY)&_ZN9S18909C103v45Ev,
  (VTBL_ENTRY)&_ZN9S18909C103v46Ev,
  (VTBL_ENTRY)&_ZN9S18909C103v47Ev,
  (VTBL_ENTRY)&_ZN9S18909C103v48Ev,
  (VTBL_ENTRY)&_ZN8S18909C83v49Ev,
  (VTBL_ENTRY)&_ZN8S18909C83v50Ev,
  (VTBL_ENTRY)&_ZN8S18909C83v51Ev,
  (VTBL_ENTRY)&_ZN8S18909C83v52Ev,
  (VTBL_ENTRY)&_ZN8S18909C83v53Ev,
  (VTBL_ENTRY)&_ZN8S18909C83v54Ev,
  ABISELECT(-528,-320),
  0,
  0,
  0,
  0,
  ABISELECT(-144,-88),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-528,-320),
  (VTBL_ENTRY)&(_ZTI8S18909C2[0]),
  (VTBL_ENTRY)&_ZN8S18909C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v28Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v29Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v30Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v31Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S18909C2D1Ev,_ZTv0_n72_N8S18909C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S18909C2D0Ev,_ZTv0_n72_N8S18909C2D0Ev),
  0,
  0,
  0,
  ABISELECT(-832,-508),
  ABISELECT(-832,-508),
  (VTBL_ENTRY)&(_ZTI8S18909C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C2D1Ev,_ZTv0_n12_N8S18909C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C2D0Ev,_ZTv0_n12_N8S18909C2D0Ev),
  (VTBL_ENTRY)&_ZN8S18909C73v22Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v23Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v24Ev,
};
extern VTBL_ENTRY _ZTV8S18909C2[];
extern void _ZN8S18909C53v13Ev();
extern void _ZN8S18909C53v14Ev();
extern void _ZN8S18909C53v15Ev();
extern void _ZN8S18909C53v16Ev();
extern void _ZN8S18909C53v17Ev();
extern void _ZN8S18909C53v18Ev();
extern void _ZN8S18909C53v19Ev();
extern void _ZN8S18909C53v20Ev();
extern void _ZN8S18909C53v21Ev();
extern void _ZN8S18909C43v28Ev();
extern void _ZN8S18909C43v29Ev();
extern void _ZN8S18909C43v30Ev();
extern void _ZN8S18909C43v31Ev();
extern void _ZN8S18909C3D1Ev();
extern void _ZN8S18909C3D0Ev();
extern void _ZN8S18909C33v32Ev();
extern void _ZN8S18909C33v33Ev();
extern void _ZN8S18909C33v34Ev();
extern void _ZN8S18909C33v35Ev();
extern void _ZN8S18909C33v36Ev();
extern void _ZN8S18909C33v37Ev();
extern void _ZN8S18909C33v38Ev();
extern void _ZN8S18909C33v39Ev();
extern void _ZN8S18909C33v40Ev();
static  VTBL_ENTRY _tg__ZTV8S18909C3__8S18909C2[] = {
  ABISELECT(368,228),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S18909C3[0]),
  (VTBL_ENTRY)&_ZN8S18909C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v28Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v29Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v30Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v31Ev,
  (VTBL_ENTRY)&_ZN8S18909C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18909C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18909C33v32Ev,
  (VTBL_ENTRY)&_ZN8S18909C33v33Ev,
  (VTBL_ENTRY)&_ZN8S18909C33v34Ev,
  (VTBL_ENTRY)&_ZN8S18909C33v35Ev,
  (VTBL_ENTRY)&_ZN8S18909C33v36Ev,
  (VTBL_ENTRY)&_ZN8S18909C33v37Ev,
  (VTBL_ENTRY)&_ZN8S18909C33v38Ev,
  (VTBL_ENTRY)&_ZN8S18909C33v39Ev,
  (VTBL_ENTRY)&_ZN8S18909C33v40Ev,
};
extern void _ZN8S18909C53v13Ev();
extern void _ZN8S18909C53v14Ev();
extern void _ZN8S18909C53v15Ev();
extern void _ZN8S18909C53v16Ev();
extern void _ZN8S18909C53v17Ev();
extern void _ZN8S18909C53v18Ev();
extern void _ZN8S18909C53v19Ev();
extern void _ZN8S18909C53v20Ev();
extern void _ZN8S18909C53v21Ev();
extern void _ZN8S18909C43v28Ev();
extern void _ZN8S18909C43v29Ev();
extern void _ZN8S18909C43v30Ev();
extern void _ZN8S18909C43v31Ev();
extern void _ZN8S18909C4D1Ev();
extern void _ZN8S18909C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S18909C48S18909C3__8S18909C2[] = {
  ABISELECT(368,228),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S18909C4[0]),
  (VTBL_ENTRY)&_ZN8S18909C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v28Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v29Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v30Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v31Ev,
  (VTBL_ENTRY)&_ZN8S18909C4D1Ev,
  (VTBL_ENTRY)&_ZN8S18909C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S18909C4D1Ev,_ZTv0_n12_N8S18909C4D1Ev)();
extern void ABISELECT(_ZThn368_N8S18909C4D1Ev,_ZThn228_N8S18909C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S18909C4D0Ev,_ZTv0_n12_N8S18909C4D0Ev)();
extern void ABISELECT(_ZThn368_N8S18909C4D0Ev,_ZThn228_N8S18909C4D0Ev)() __attribute__((weak));
extern void _ZN8S18909C73v22Ev();
extern void _ZN8S18909C73v23Ev();
extern void _ZN8S18909C73v24Ev();
extern void _ZN8S18909C63v25Ev();
extern void _ZN8S18909C63v26Ev();
extern void _ZN8S18909C63v27Ev();
static  VTBL_ENTRY _tg__ZTV8S18909C6__8S18909C48S18909C3__8S18909C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-228),
  ABISELECT(-368,-228),
  (VTBL_ENTRY)&(_ZTI8S18909C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C4D1Ev,_ZTv0_n12_N8S18909C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C4D0Ev,_ZTv0_n12_N8S18909C4D0Ev),
  (VTBL_ENTRY)&_ZN8S18909C73v22Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v23Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v24Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v25Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v26Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v27Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S18909C3D1Ev,_ZTv0_n12_N8S18909C3D1Ev)();
extern void ABISELECT(_ZThn368_N8S18909C3D1Ev,_ZThn228_N8S18909C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S18909C3D0Ev,_ZTv0_n12_N8S18909C3D0Ev)();
extern void ABISELECT(_ZThn368_N8S18909C3D0Ev,_ZThn228_N8S18909C3D0Ev)() __attribute__((weak));
extern void _ZN8S18909C73v22Ev();
extern void _ZN8S18909C73v23Ev();
extern void _ZN8S18909C73v24Ev();
extern void _ZN8S18909C63v25Ev();
extern void _ZN8S18909C63v26Ev();
extern void _ZN8S18909C63v27Ev();
static  VTBL_ENTRY _tg__ZTV8S18909C6__8S18909C3__8S18909C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-228),
  ABISELECT(-368,-228),
  (VTBL_ENTRY)&(_ZTI8S18909C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C3D1Ev,_ZTv0_n12_N8S18909C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C3D0Ev,_ZTv0_n12_N8S18909C3D0Ev),
  (VTBL_ENTRY)&_ZN8S18909C73v22Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v23Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v24Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v25Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v26Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v27Ev,
};
extern void _ZN8S18909C8D1Ev();
extern void _ZN8S18909C8D0Ev();
extern void _ZN9S18909C103v44Ev();
extern void _ZN9S18909C103v45Ev();
extern void _ZN9S18909C103v46Ev();
extern void _ZN9S18909C103v47Ev();
extern void _ZN9S18909C103v48Ev();
extern void _ZN8S18909C83v49Ev();
extern void _ZN8S18909C83v50Ev();
extern void _ZN8S18909C83v51Ev();
extern void _ZN8S18909C83v52Ev();
extern void _ZN8S18909C83v53Ev();
extern void _ZN8S18909C83v54Ev();
static  VTBL_ENTRY _tg__ZTV8S18909C8__8S18909C2[] = {
  ABISELECT(392,240),
  ABISELECT(-56,-36),
  ABISELECT(-424,-264),
  ABISELECT(88,52),
  ABISELECT(-440,-268),
  0,
  (VTBL_ENTRY)&(_ZTI8S18909C8[0]),
  (VTBL_ENTRY)&_ZN8S18909C8D1Ev,
  (VTBL_ENTRY)&_ZN8S18909C8D0Ev,
  (VTBL_ENTRY)&_ZN9S18909C103v44Ev,
  (VTBL_ENTRY)&_ZN9S18909C103v45Ev,
  (VTBL_ENTRY)&_ZN9S18909C103v46Ev,
  (VTBL_ENTRY)&_ZN9S18909C103v47Ev,
  (VTBL_ENTRY)&_ZN9S18909C103v48Ev,
  (VTBL_ENTRY)&_ZN8S18909C83v49Ev,
  (VTBL_ENTRY)&_ZN8S18909C83v50Ev,
  (VTBL_ENTRY)&_ZN8S18909C83v51Ev,
  (VTBL_ENTRY)&_ZN8S18909C83v52Ev,
  (VTBL_ENTRY)&_ZN8S18909C83v53Ev,
  (VTBL_ENTRY)&_ZN8S18909C83v54Ev,
};
extern void _ZN8S18909C53v13Ev();
extern void _ZN8S18909C53v14Ev();
extern void _ZN8S18909C53v15Ev();
extern void _ZN8S18909C53v16Ev();
extern void _ZN8S18909C53v17Ev();
extern void _ZN8S18909C53v18Ev();
extern void _ZN8S18909C53v19Ev();
extern void _ZN8S18909C53v20Ev();
extern void _ZN8S18909C53v21Ev();
extern void ABISELECT(_ZTv0_n128_N8S18909C8D1Ev,_ZTv0_n64_N8S18909C8D1Ev)();
extern void ABISELECT(_ZTv0_n128_N8S18909C8D0Ev,_ZTv0_n64_N8S18909C8D0Ev)();
extern void _ZN8S18909C93v41Ev();
extern void _ZN8S18909C93v42Ev();
extern void _ZN8S18909C93v43Ev();
static  VTBL_ENTRY _tg__ZTV8S18909C9__8S18909C8__8S18909C2[] = {
  0,
  0,
  0,
  ABISELECT(440,268),
  ABISELECT(832,508),
  ABISELECT(384,232),
  ABISELECT(16,4),
  ABISELECT(528,320),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(440,268),
  (VTBL_ENTRY)&(_ZTI8S18909C8[0]),
  (VTBL_ENTRY)&_ZN8S18909C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v21Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N8S18909C8D1Ev,_ZTv0_n64_N8S18909C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N8S18909C8D0Ev,_ZTv0_n64_N8S18909C8D0Ev),
  (VTBL_ENTRY)&_ZN8S18909C93v41Ev,
  (VTBL_ENTRY)&_ZN8S18909C93v42Ev,
  (VTBL_ENTRY)&_ZN8S18909C93v43Ev,
};
extern void _ZN8S18909C53v13Ev();
extern void _ZN8S18909C53v14Ev();
extern void _ZN8S18909C53v15Ev();
extern void _ZN8S18909C53v16Ev();
extern void _ZN8S18909C53v17Ev();
extern void _ZN8S18909C53v18Ev();
extern void _ZN8S18909C53v19Ev();
extern void _ZN8S18909C53v20Ev();
extern void _ZN8S18909C53v21Ev();
extern void _ZN8S18909C43v28Ev();
extern void _ZN8S18909C43v29Ev();
extern void _ZN8S18909C43v30Ev();
extern void _ZN8S18909C43v31Ev();
extern void ABISELECT(_ZTv0_n144_N8S18909C8D1Ev,_ZTv0_n72_N8S18909C8D1Ev)();
extern void ABISELECT(_ZThn88_N8S18909C8D1Ev,_ZThn52_N8S18909C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N8S18909C8D0Ev,_ZTv0_n72_N8S18909C8D0Ev)();
extern void ABISELECT(_ZThn88_N8S18909C8D0Ev,_ZThn52_N8S18909C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S18909C4__8S18909C8__8S18909C2[] = {
  ABISELECT(-88,-52),
  0,
  0,
  0,
  0,
  ABISELECT(-144,-88),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI8S18909C8[0]),
  (VTBL_ENTRY)&_ZN8S18909C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v28Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v29Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v30Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v31Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S18909C8D1Ev,_ZTv0_n72_N8S18909C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S18909C8D0Ev,_ZTv0_n72_N8S18909C8D0Ev),
};
extern void _ZN8S18909C53v13Ev();
extern void _ZN8S18909C53v14Ev();
extern void _ZN8S18909C53v15Ev();
extern void _ZN8S18909C53v16Ev();
extern void _ZN8S18909C53v17Ev();
extern void _ZN8S18909C53v18Ev();
extern void _ZN8S18909C53v19Ev();
extern void _ZN8S18909C53v20Ev();
extern void _ZN8S18909C53v21Ev();
static  VTBL_ENTRY _tg__ZTV8S18909C5__8S18909C8__8S18909C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(424,264),
  (VTBL_ENTRY)&(_ZTI8S18909C8[0]),
  (VTBL_ENTRY)&_ZN8S18909C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S18909C8D1Ev,_ZTv0_n12_N8S18909C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S18909C8D0Ev,_ZTv0_n12_N8S18909C8D0Ev)();
extern void _ZN8S18909C73v22Ev();
extern void _ZN8S18909C73v23Ev();
extern void _ZN8S18909C73v24Ev();
extern void _ZN8S18909C63v25Ev();
extern void _ZN8S18909C63v26Ev();
extern void _ZN8S18909C63v27Ev();
static  VTBL_ENTRY _tg__ZTV8S18909C6__8S18909C8__8S18909C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,36),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI8S18909C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C8D1Ev,_ZTv0_n12_N8S18909C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C8D0Ev,_ZTv0_n12_N8S18909C8D0Ev),
  (VTBL_ENTRY)&_ZN8S18909C73v22Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v23Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v24Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v25Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v26Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v27Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S18909C8D1Ev,_ZTv0_n12_N8S18909C8D1Ev)();
extern void ABISELECT(_ZThn392_N8S18909C8D1Ev,_ZThn240_N8S18909C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S18909C8D0Ev,_ZTv0_n12_N8S18909C8D0Ev)();
extern void ABISELECT(_ZThn392_N8S18909C8D0Ev,_ZThn240_N8S18909C8D0Ev)() __attribute__((weak));
extern void _ZN8S18909C73v22Ev();
extern void _ZN8S18909C73v23Ev();
extern void _ZN8S18909C73v24Ev();
static  VTBL_ENTRY _tg__ZTV8S18909C7__A1__8S18909C8__8S18909C2[] = {
  0,
  0,
  0,
  ABISELECT(-392,-240),
  ABISELECT(-392,-240),
  (VTBL_ENTRY)&(_ZTI8S18909C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C8D1Ev,_ZTv0_n12_N8S18909C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C8D0Ev,_ZTv0_n12_N8S18909C8D0Ev),
  (VTBL_ENTRY)&_ZN8S18909C73v22Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v23Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v24Ev,
};
extern void _ZN8S18909C53v13Ev();
extern void _ZN8S18909C53v14Ev();
extern void _ZN8S18909C53v15Ev();
extern void _ZN8S18909C53v16Ev();
extern void _ZN8S18909C53v17Ev();
extern void _ZN8S18909C53v18Ev();
extern void _ZN8S18909C53v19Ev();
extern void _ZN8S18909C53v20Ev();
extern void _ZN8S18909C53v21Ev();
extern void _ZN8S18909C9D1Ev();
extern void _ZN8S18909C9D0Ev();
extern void _ZN8S18909C93v41Ev();
extern void _ZN8S18909C93v42Ev();
extern void _ZN8S18909C93v43Ev();
static  VTBL_ENTRY _tg__ZTV8S18909C9__8S18909C2[] = {
  ABISELECT(832,508),
  ABISELECT(384,232),
  ABISELECT(16,4),
  ABISELECT(528,320),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S18909C9[0]),
  (VTBL_ENTRY)&_ZN8S18909C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18909C9D1Ev,
  (VTBL_ENTRY)&_ZN8S18909C9D0Ev,
  (VTBL_ENTRY)&_ZN8S18909C93v41Ev,
  (VTBL_ENTRY)&_ZN8S18909C93v42Ev,
  (VTBL_ENTRY)&_ZN8S18909C93v43Ev,
};
extern void _ZN8S18909C53v13Ev();
extern void _ZN8S18909C53v14Ev();
extern void _ZN8S18909C53v15Ev();
extern void _ZN8S18909C53v16Ev();
extern void _ZN8S18909C53v17Ev();
extern void _ZN8S18909C53v18Ev();
extern void _ZN8S18909C53v19Ev();
extern void _ZN8S18909C53v20Ev();
extern void _ZN8S18909C53v21Ev();
extern void _ZN8S18909C43v28Ev();
extern void _ZN8S18909C43v29Ev();
extern void _ZN8S18909C43v30Ev();
extern void _ZN8S18909C43v31Ev();
extern void ABISELECT(_ZTv0_n144_N8S18909C9D1Ev,_ZTv0_n72_N8S18909C9D1Ev)();
extern void ABISELECT(_ZThn528_N8S18909C9D1Ev,_ZThn320_N8S18909C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N8S18909C9D0Ev,_ZTv0_n72_N8S18909C9D0Ev)();
extern void ABISELECT(_ZThn528_N8S18909C9D0Ev,_ZThn320_N8S18909C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S18909C4__8S18909C9__8S18909C2[] = {
  ABISELECT(-528,-320),
  0,
  0,
  0,
  0,
  ABISELECT(-144,-88),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-528,-320),
  (VTBL_ENTRY)&(_ZTI8S18909C9[0]),
  (VTBL_ENTRY)&_ZN8S18909C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v28Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v29Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v30Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v31Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S18909C9D1Ev,_ZTv0_n72_N8S18909C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S18909C9D0Ev,_ZTv0_n72_N8S18909C9D0Ev),
};
extern void _ZN8S18909C53v13Ev();
extern void _ZN8S18909C53v14Ev();
extern void _ZN8S18909C53v15Ev();
extern void _ZN8S18909C53v16Ev();
extern void _ZN8S18909C53v17Ev();
extern void _ZN8S18909C53v18Ev();
extern void _ZN8S18909C53v19Ev();
extern void _ZN8S18909C53v20Ev();
extern void _ZN8S18909C53v21Ev();
static  VTBL_ENTRY _tg__ZTV8S18909C5__8S18909C9__8S18909C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S18909C9[0]),
  (VTBL_ENTRY)&_ZN8S18909C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S18909C9D1Ev,_ZTv0_n12_N8S18909C9D1Ev)();
extern void ABISELECT(_ZThn384_N8S18909C9D1Ev,_ZThn232_N8S18909C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S18909C9D0Ev,_ZTv0_n12_N8S18909C9D0Ev)();
extern void ABISELECT(_ZThn384_N8S18909C9D0Ev,_ZThn232_N8S18909C9D0Ev)() __attribute__((weak));
extern void _ZN8S18909C73v22Ev();
extern void _ZN8S18909C73v23Ev();
extern void _ZN8S18909C73v24Ev();
extern void _ZN8S18909C63v25Ev();
extern void _ZN8S18909C63v26Ev();
extern void _ZN8S18909C63v27Ev();
static  VTBL_ENTRY _tg__ZTV8S18909C6__8S18909C9__8S18909C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-232),
  ABISELECT(-384,-232),
  (VTBL_ENTRY)&(_ZTI8S18909C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C9D1Ev,_ZTv0_n12_N8S18909C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C9D0Ev,_ZTv0_n12_N8S18909C9D0Ev),
  (VTBL_ENTRY)&_ZN8S18909C73v22Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v23Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v24Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v25Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v26Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v27Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S18909C9D1Ev,_ZTv0_n12_N8S18909C9D1Ev)();
extern void ABISELECT(_ZThn832_N8S18909C9D1Ev,_ZThn508_N8S18909C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S18909C9D0Ev,_ZTv0_n12_N8S18909C9D0Ev)();
extern void ABISELECT(_ZThn832_N8S18909C9D0Ev,_ZThn508_N8S18909C9D0Ev)() __attribute__((weak));
extern void _ZN8S18909C73v22Ev();
extern void _ZN8S18909C73v23Ev();
extern void _ZN8S18909C73v24Ev();
static  VTBL_ENTRY _tg__ZTV8S18909C7__A1__8S18909C9__8S18909C2[] = {
  0,
  0,
  0,
  ABISELECT(-832,-508),
  ABISELECT(-832,-508),
  (VTBL_ENTRY)&(_ZTI8S18909C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C9D1Ev,_ZTv0_n12_N8S18909C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C9D0Ev,_ZTv0_n12_N8S18909C9D0Ev),
  (VTBL_ENTRY)&_ZN8S18909C73v22Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v23Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v24Ev,
};
extern void _ZN8S18909C53v13Ev();
extern void _ZN8S18909C53v14Ev();
extern void _ZN8S18909C53v15Ev();
extern void _ZN8S18909C53v16Ev();
extern void _ZN8S18909C53v17Ev();
extern void _ZN8S18909C53v18Ev();
extern void _ZN8S18909C53v19Ev();
extern void _ZN8S18909C53v20Ev();
extern void _ZN8S18909C53v21Ev();
extern void _ZN8S18909C43v28Ev();
extern void _ZN8S18909C43v29Ev();
extern void _ZN8S18909C43v30Ev();
extern void _ZN8S18909C43v31Ev();
extern void _ZN8S18909C4D1Ev();
extern void _ZN8S18909C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S18909C4__A1__8S18909C2[] = {
  ABISELECT(-144,-88),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  ABISELECT(-512,-316),
  0,
  (VTBL_ENTRY)&(_ZTI8S18909C4[0]),
  (VTBL_ENTRY)&_ZN8S18909C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v28Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v29Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v30Ev,
  (VTBL_ENTRY)&_ZN8S18909C43v31Ev,
  (VTBL_ENTRY)&_ZN8S18909C4D1Ev,
  (VTBL_ENTRY)&_ZN8S18909C4D0Ev,
};
extern void _ZN8S18909C53v13Ev();
extern void _ZN8S18909C53v14Ev();
extern void _ZN8S18909C53v15Ev();
extern void _ZN8S18909C53v16Ev();
extern void _ZN8S18909C53v17Ev();
extern void _ZN8S18909C53v18Ev();
extern void _ZN8S18909C53v19Ev();
extern void _ZN8S18909C53v20Ev();
extern void _ZN8S18909C53v21Ev();
static  VTBL_ENTRY _tg__ZTV8S18909C5__8S18909C4__A1__8S18909C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(512,316),
  (VTBL_ENTRY)&(_ZTI8S18909C4[0]),
  (VTBL_ENTRY)&_ZN8S18909C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18909C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S18909C4D1Ev,_ZTv0_n12_N8S18909C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S18909C4D0Ev,_ZTv0_n12_N8S18909C4D0Ev)();
extern void _ZN8S18909C73v22Ev();
extern void _ZN8S18909C73v23Ev();
extern void _ZN8S18909C73v24Ev();
extern void _ZN8S18909C63v25Ev();
extern void _ZN8S18909C63v26Ev();
extern void _ZN8S18909C63v27Ev();
static  VTBL_ENTRY _tg__ZTV8S18909C6__8S18909C4__A1__8S18909C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(144,88),
  ABISELECT(144,88),
  (VTBL_ENTRY)&(_ZTI8S18909C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C4D1Ev,_ZTv0_n12_N8S18909C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S18909C4D0Ev,_ZTv0_n12_N8S18909C4D0Ev),
  (VTBL_ENTRY)&_ZN8S18909C73v22Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v23Ev,
  (VTBL_ENTRY)&_ZN8S18909C73v24Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v25Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v26Ev,
  (VTBL_ENTRY)&_ZN8S18909C63v27Ev,
};
static  VTT_ENTRY vtt_S18909C2[] = {
  {&(_ZTV8S18909C2[22]),  22,205},
  {&(_ZTV8S18909C2[78]),  78,205},
  {&(_ZTV8S18909C2[78]),  78,205},
  {&(_ZTV8S18909C2[121]),  121,205},
  {&(_ZTV8S18909C2[104]),  104,205},
  {&(_ZTV8S18909C2[148]),  148,205},
  {&(_ZTV8S18909C2[22]),  22,205},
  {&(_ZTV8S18909C2[179]),  179,205},
  {&(_ZTV8S18909C2[200]),  200,205},
  {&(_tg__ZTV8S18909C3__8S18909C2[13]),  13,37},
  {&(_tg__ZTV8S18909C48S18909C3__8S18909C2[13]),  13,28},
  {&(_tg__ZTV8S18909C48S18909C3__8S18909C2[13]),  13,28},
  {&(_tg__ZTV8S18909C6__8S18909C48S18909C3__8S18909C2[9]),  9,17},
  {&(_tg__ZTV8S18909C3__8S18909C2[13]),  13,37},
  {&(_tg__ZTV8S18909C6__8S18909C3__8S18909C2[9]),  9,17},
  {&(_tg__ZTV8S18909C8__8S18909C2[7]),  7,20},
  {&(_tg__ZTV8S18909C9__8S18909C8__8S18909C2[19]),  19,33},
  {&(_tg__ZTV8S18909C4__8S18909C8__8S18909C2[18]),  18,33},
  {&(_tg__ZTV8S18909C5__8S18909C8__8S18909C2[11]),  11,20},
  {&(_tg__ZTV8S18909C6__8S18909C8__8S18909C2[9]),  9,17},
  {&(_tg__ZTV8S18909C7__A1__8S18909C8__8S18909C2[6]),  6,11},
  {&(_tg__ZTV8S18909C9__8S18909C2[15]),  15,29},
  {&(_tg__ZTV8S18909C4__8S18909C9__8S18909C2[18]),  18,33},
  {&(_tg__ZTV8S18909C5__8S18909C9__8S18909C2[11]),  11,20},
  {&(_tg__ZTV8S18909C6__8S18909C9__8S18909C2[9]),  9,17},
  {&(_tg__ZTV8S18909C7__A1__8S18909C9__8S18909C2[6]),  6,11},
  {&(_tg__ZTV8S18909C4__A1__8S18909C2[13]),  13,28},
  {&(_tg__ZTV8S18909C5__8S18909C4__A1__8S18909C2[11]),  11,20},
  {&(_tg__ZTV8S18909C6__8S18909C4__A1__8S18909C2[9]),  9,17},
};
extern VTBL_ENTRY _ZTI8S18909C2[];
extern  VTBL_ENTRY _ZTV8S18909C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18909C2[];
static VTBL_ENTRY alt_thunk_names21[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S18909C9D0Ev,_ZTv0_n12_N8S18909C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S18909C9D0Ev,_ZThn508_N8S18909C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S18909C9D0Ev,_ZThn232_N8S18909C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S18909C9D1Ev,_ZTv0_n12_N8S18909C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S18909C9D1Ev,_ZThn508_N8S18909C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S18909C9D1Ev,_ZThn232_N8S18909C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N8S18909C9D0Ev,_ZTv0_n72_N8S18909C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn528_N8S18909C9D0Ev,_ZThn320_N8S18909C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N8S18909C9D1Ev,_ZTv0_n72_N8S18909C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn528_N8S18909C9D1Ev,_ZThn320_N8S18909C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S18909C8D0Ev,_ZTv0_n12_N8S18909C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn392_N8S18909C8D0Ev,_ZThn240_N8S18909C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S18909C8D1Ev,_ZTv0_n12_N8S18909C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn392_N8S18909C8D1Ev,_ZThn240_N8S18909C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N8S18909C8D0Ev,_ZTv0_n72_N8S18909C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S18909C8D0Ev,_ZThn52_N8S18909C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N8S18909C8D1Ev,_ZTv0_n72_N8S18909C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S18909C8D1Ev,_ZThn52_N8S18909C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S18909C3D0Ev,_ZTv0_n12_N8S18909C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S18909C3D0Ev,_ZThn228_N8S18909C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S18909C3D1Ev,_ZTv0_n12_N8S18909C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S18909C3D1Ev,_ZThn228_N8S18909C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S18909C4D0Ev,_ZTv0_n12_N8S18909C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S18909C4D0Ev,_ZThn228_N8S18909C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S18909C4D1Ev,_ZTv0_n12_N8S18909C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S18909C4D1Ev,_ZThn228_N8S18909C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S18909C2D0Ev,_ZTv0_n32_N8S18909C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N8S18909C2D0Ev,_ZThn268_N8S18909C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S18909C2D1Ev,_ZTv0_n32_N8S18909C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N8S18909C2D1Ev,_ZThn268_N8S18909C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S18909C2D0Ev,_ZTv0_n12_N8S18909C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S18909C2D0Ev,_ZThn508_N8S18909C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S18909C2D0Ev,_ZThn232_N8S18909C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S18909C2D1Ev,_ZTv0_n12_N8S18909C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S18909C2D1Ev,_ZThn508_N8S18909C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S18909C2D1Ev,_ZThn232_N8S18909C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N8S18909C2D0Ev,_ZTv0_n72_N8S18909C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn528_N8S18909C2D0Ev,_ZThn320_N8S18909C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S18909C2D0Ev,_ZThn4_N8S18909C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N8S18909C2D1Ev,_ZTv0_n72_N8S18909C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn528_N8S18909C2D1Ev,_ZThn320_N8S18909C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S18909C2D1Ev,_ZThn4_N8S18909C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18909C2 = {  "S18909C2", // class name
  bases_S18909C2, 12,
  &(vtc_S18909C2[0]), // expected_vtbl_contents
  &(vtt_S18909C2[0]), // expected_vtt_contents
  ABISELECT(864,524), // object size
  NSPAIRA(_ZTI8S18909C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18909C2),205, //virtual function table var
  22, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18909C2),29, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names21,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18909C1  {
  ::S18909C2 s18909c1f0;
  int s18909c1f1;
  ::S18909C3 s18909c1f2;
  virtual  ~S18909C1(); // _ZN8S18909C1D1Ev
  virtual void  v1(); // _ZN8S18909C12v1Ev
  virtual void  v2(); // _ZN8S18909C12v2Ev
  virtual void  v3(); // _ZN8S18909C12v3Ev
  S18909C1(); // tgen
};
//SIG(1 S18909C1) C1{ vd v1 v2 v3 FC2{ VBC3{ BC4{ VBC5{ v13 v14 v15 v16 v17 v18 v19 v20 v21} VBC6{ BC7{ vd v22 v23 v24 Fi FL} vd v25 v26 v27 Fi FC7} v28 v29 v30 v31 FC6[3] Fi Fp[8] Fi FD[3]} BC6 vd v32 v33 v34 v35 v36 v37 v38 v39 v40 Fi} VBC8{ VBC9{ VBC4 VBC7 vd v41 v42 v43} BC10{ vd v44 v45 v46 v47 v48 FC6 Fi} vd v49 v50 v51 v52 v53 v54 FL} vd v4 v5 v6 v7 v8 v9 v10 v11 v12} Fi FC3}


 S18909C1 ::~S18909C1(){ note_dtor("S18909C1", this);}
void  S18909C1 ::v1(){vfunc_called(this, "_ZN8S18909C12v1Ev");}
void  S18909C1 ::v2(){vfunc_called(this, "_ZN8S18909C12v2Ev");}
void  S18909C1 ::v3(){vfunc_called(this, "_ZN8S18909C12v3Ev");}
S18909C1 ::S18909C1(){ note_ctor("S18909C1", this);} // tgen

static void Test_S18909C1()
{
  extern Class_Descriptor cd_S18909C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(84,200)];
    init_test(&cd_S18909C1, buf);
    S18909C1 *dp, &lv = *(dp=new (buf) S18909C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1328,796), "sizeof(S18909C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18909C1)");
    check_field_offset(lv, s18909c1f0, ABISELECT(16,4), "S18909C1.s18909c1f0");
    check_field_offset(lv, s18909c1f1, ABISELECT(880,528), "S18909C1.s18909c1f1");
    check_field_offset(lv, s18909c1f2, ABISELECT(896,532), "S18909C1.s18909c1f2");
    test_class_info(&lv, &cd_S18909C1);
    dp->~S18909C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18909C1(Test_S18909C1, "S18909C1", ABISELECT(1328,796));

#else // __cplusplus

extern void _ZN8S18909C1C1Ev();
extern void _ZN8S18909C1D1Ev();
Name_Map name_map_S18909C1[] = {
  NSPAIR(_ZN8S18909C1C1Ev),
  NSPAIR(_ZN8S18909C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18909C1[];
extern void _ZN8S18909C1D1Ev();
extern void _ZN8S18909C1D0Ev();
extern void _ZN8S18909C12v1Ev();
extern void _ZN8S18909C12v2Ev();
extern void _ZN8S18909C12v3Ev();
static  VTBL_ENTRY vtc_S18909C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18909C1[0]),
  (VTBL_ENTRY)&_ZN8S18909C1D1Ev,
  (VTBL_ENTRY)&_ZN8S18909C1D0Ev,
  (VTBL_ENTRY)&_ZN8S18909C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18909C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18909C12v3Ev,
};
extern VTBL_ENTRY _ZTI8S18909C1[];
extern  VTBL_ENTRY _ZTV8S18909C1[];
Class_Descriptor cd_S18909C1 = {  "S18909C1", // class name
  0,0,//no base classes
  &(vtc_S18909C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1328,796), // object size
  NSPAIRA(_ZTI8S18909C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18909C1),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  S20753C8  : virtual S19905C19 {
  long double s20753c8f0;
  char s20753c8f1;
  short s20753c8f2[4];
  ~S20753C8(); // tgen
  S20753C8(); // tgen
};
//SIG(-1 S20753C8) C1{ VBC2{ vd m} FD Fc Fs[4]}


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

static void Test_S20753C8()
{
  extern Class_Descriptor cd_S20753C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,8)];
    init_test(&cd_S20753C8, buf);
    S20753C8 *dp, &lv = *(dp=new (buf) S20753C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S20753C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20753C8)");
    check_base_class_offset(lv, (S19905C19*), 0, "S20753C8");
    check_field_offset(lv, s20753c8f0, ABISELECT(16,4), "S20753C8.s20753c8f0");
    check_field_offset(lv, s20753c8f1, ABISELECT(32,16), "S20753C8.s20753c8f1");
    check_field_offset(lv, s20753c8f2, ABISELECT(34,18), "S20753C8.s20753c8f2");
    test_class_info(&lv, &cd_S20753C8);
    dp->~S20753C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20753C8(Test_S20753C8, "S20753C8", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S20753C8C1Ev();
extern void _ZN8S20753C8D1Ev();
Name_Map name_map_S20753C8[] = {
  NSPAIR(_ZN8S20753C8C1Ev),
  NSPAIR(_ZN8S20753C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
static Base_Class bases_S20753C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    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 _ZTI8S20753C8[];
extern void _ZN8S20753C8D1Ev();
extern void _ZN8S20753C8D0Ev();
static  VTBL_ENTRY vtc_S20753C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&_ZN8S20753C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20753C8D0Ev,
};
extern VTBL_ENTRY _ZTV8S20753C8[];
static  VTT_ENTRY vtt_S20753C8[] = {
  {&(_ZTV8S20753C8[4]),  4,6},
  {&(_ZTV8S20753C8[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
Class_Descriptor cd_S20753C8 = {  "S20753C8", // class name
  bases_S20753C8, 1,
  &(vtc_S20753C8[0]), // expected_vtbl_contents
  &(vtt_S20753C8[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S20753C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20753C8),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20753C8),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20753C7  : virtual S19905C19 , virtual S20753C8 {
  int s20753c7f0;
  virtual  ~S20753C7(); // _ZN8S20753C7D2Ev
  S20753C7(); // tgen
};
//SIG(-1 S20753C7) C1{ VBC2{ vd m} VBC3{ VBC2 FD Fc Fs[4]} vd Fi}


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

static void Test_S20753C7()
{
  extern Class_Descriptor cd_S20753C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,10)];
    init_test(&cd_S20753C7, buf);
    S20753C7 *dp, &lv = *(dp=new (buf) S20753C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S20753C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20753C7)");
    check_base_class_offset(lv, (S19905C19*), 0, "S20753C7");
    check_base_class_offset(lv, (S19905C19*)(S20753C8*), 0, "S20753C7");
    check_base_class_offset(lv, (S20753C8*), ABISELECT(16,8), "S20753C7");
    check_field_offset(lv, s20753c7f0, ABISELECT(8,4), "S20753C7.s20753c7f0");
    test_class_info(&lv, &cd_S20753C7);
    dp->~S20753C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20753C7(Test_S20753C7, "S20753C7", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S20753C7C1Ev();
extern void _ZN8S20753C7D2Ev();
Name_Map name_map_S20753C7[] = {
  NSPAIR(_ZN8S20753C7C1Ev),
  NSPAIR(_ZN8S20753C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
static Base_Class bases_S20753C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    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_S20753C8,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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 _ZTI8S20753C7[];
extern void _ZN8S20753C7D1Ev();
extern void _ZN8S20753C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S20753C7D1Ev,_ZThn8_N8S20753C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void ABISELECT(_ZThn16_N8S20753C7D0Ev,_ZThn8_N8S20753C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20753C7[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&_ZN8S20753C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20753C7D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern VTBL_ENTRY _ZTV8S20753C7[];
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C7[] = {
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C8__8S20753C7[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
static  VTT_ENTRY vtt_S20753C7[] = {
  {&(_ZTV8S20753C7[5]),  5,13},
  {&(_ZTV8S20753C7[5]),  5,13},
  {&(_ZTV8S20753C7[11]),  11,13},
  {&(_tg__ZTV8S20753C8__8S20753C7[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C8__8S20753C7[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20753C7[];
extern  VTBL_ENTRY _ZTV8S20753C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C7[];
static VTBL_ENTRY alt_thunk_names22[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev), // 
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev), // 
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20753C7D0Ev,_ZThn8_N8S20753C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20753C7D1Ev,_ZThn8_N8S20753C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20753C7 = {  "S20753C7", // class name
  bases_S20753C7, 2,
  &(vtc_S20753C7[0]), // expected_vtbl_contents
  &(vtt_S20753C7[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S20753C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20753C7),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20753C7),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names22,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20753C5  : virtual S19905C19 , S20753C7 , S17777C6_nt {
  short s20753c5f0;
  __tsi64 s20753c5f1;
  void *s20753c5f2;
  __tsi64 s20753c5f3;
  virtual  ~S20753C5(); // _ZN8S20753C5D2Ev
  S20753C5(); // tgen
};
//SIG(-1 S20753C5) C1{ VBC2{ vd m} BC3{ VBC2 VBC4{ VBC2 FD Fc Fs[4]} vd Fi} BC5{ m Fp} vd Fs FL Fp FL}


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

static void Test_S20753C5()
{
  extern Class_Descriptor cd_S20753C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,17)];
    init_test(&cd_S20753C5, buf);
    S20753C5 *dp, &lv = *(dp=new (buf) S20753C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S20753C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20753C5)");
    check_base_class_offset(lv, (S19905C19*), 0, "S20753C5");
    check_base_class_offset(lv, (S19905C19*)(S20753C7*), 0, "S20753C5");
    check_base_class_offset(lv, (S19905C19*)(S20753C8*), 0, "S20753C5");
    check_base_class_offset(lv, (S20753C8*)(S20753C7*), ABISELECT(64,36), "S20753C5");
    check_base_class_offset(lv, (S20753C7*), 0, "S20753C5");
    check_base_class_offset(lv, (S17777C6_nt*), ABISELECT(16,8), "S20753C5");
    check_field_offset(lv, s20753c5f0, ABISELECT(24,12), "S20753C5.s20753c5f0");
    check_field_offset(lv, s20753c5f1, ABISELECT(32,16), "S20753C5.s20753c5f1");
    check_field_offset(lv, s20753c5f2, ABISELECT(40,24), "S20753C5.s20753c5f2");
    check_field_offset(lv, s20753c5f3, ABISELECT(48,28), "S20753C5.s20753c5f3");
    test_class_info(&lv, &cd_S20753C5);
    dp->~S20753C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20753C5(Test_S20753C5, "S20753C5", ABISELECT(112,64));

#else // __cplusplus

extern void _ZN8S20753C5C1Ev();
extern void _ZN8S20753C5D2Ev();
Name_Map name_map_S20753C5[] = {
  NSPAIR(_ZN8S20753C5C1Ev),
  NSPAIR(_ZN8S20753C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C7;
extern VTBL_ENTRY _ZTI8S20753C7[];
extern  VTBL_ENTRY _ZTV8S20753C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C7[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
static Base_Class bases_S20753C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20753C8,    ABISELECT(64,36), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20753C7,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S17777C6_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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20753C5[];
extern void _ZN8S20753C5D1Ev();
extern void _ZN8S20753C5D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C5D1Ev,_ZThn36_N8S20753C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C5D0Ev,_ZThn36_N8S20753C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20753C5[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&_ZN8S20753C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20753C5D0Ev,
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern VTBL_ENTRY _ZTV8S20753C5[];
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void _ZN8S20753C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void _ZN8S20753C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C7__8S20753C5[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C7D1Ev,_ZThn36_N8S20753C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C7D0Ev,_ZThn36_N8S20753C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C7__8S20753C5[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C5[] = {
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C8__8S20753C5[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
static  VTT_ENTRY vtt_S20753C5[] = {
  {&(_ZTV8S20753C5[5]),  5,13},
  {&(_tg__ZTV8S20753C7__8S20753C5[5]),  5,7},
  {&(_tg__ZTV8S20753C7__8S20753C5[5]),  5,7},
  {&(_tg__ZTV8S20753C8__8S20753C7__8S20753C5[4]),  4,6},
  {&(_ZTV8S20753C5[5]),  5,13},
  {&(_ZTV8S20753C5[11]),  11,13},
  {&(_tg__ZTV8S20753C8__8S20753C5[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C8__8S20753C5[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20753C5[];
extern  VTBL_ENTRY _ZTV8S20753C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C5[];
static VTBL_ENTRY alt_thunk_names23[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev), // 
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev), // 
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C7D0Ev,_ZThn36_N8S20753C7D0Ev),
  (VTBL_ENTRY)_ZN8S20753C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C7D1Ev,_ZThn36_N8S20753C7D1Ev),
  (VTBL_ENTRY)_ZN8S20753C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C5D0Ev,_ZThn36_N8S20753C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C5D1Ev,_ZThn36_N8S20753C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20753C5 = {  "S20753C5", // class name
  bases_S20753C5, 4,
  &(vtc_S20753C5[0]), // expected_vtbl_contents
  &(vtt_S20753C5[0]), // expected_vtt_contents
  ABISELECT(112,64), // object size
  NSPAIRA(_ZTI8S20753C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20753C5),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20753C5),8, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names23,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20753C4  : virtual S20753C5 , S17777C6_nt , S19905C19 , S20753C8 {
  int s20753c4f0;
  virtual  ~S20753C4(); // _ZN8S20753C4D2Ev
  S20753C4(); // tgen
};
//SIG(-1 S20753C4) C1{ VBC2{ VBC3{ vd m} BC4{ VBC3 VBC5{ VBC3 FD Fc Fs[4]} vd Fi} BC6{ m Fp} vd Fs FL Fp FL} BC6 BC3 BC5 vd Fi}


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

static void Test_S20753C4()
{
  extern Class_Descriptor cd_S20753C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,27)];
    init_test(&cd_S20753C4, buf);
    S20753C4 *dp, &lv = *(dp=new (buf) S20753C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,104), "sizeof(S20753C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20753C4)");
    check_base_class_offset(lv, (S19905C19*)(S20753C5*), ABISELECT(64,40), "S20753C4");
    check_base_class_offset(lv, (S19905C19*)(S20753C7*)(S20753C5*), ABISELECT(64,40), "S20753C4");
    /*is_ambiguous_... S20753C4::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*), ABISELECT(64,40), "S20753C4");
    /*is_ambiguous_... S20753C4::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*), ABISELECT(64,40), "S20753C4");
    check_base_class_offset(lv, (S20753C8*)(S20753C7*)(S20753C5*), ABISELECT(128,76), "S20753C4");
    check_base_class_offset(lv, (S20753C7*)(S20753C5*), ABISELECT(64,40), "S20753C4");
    check_base_class_offset(lv, (S17777C6_nt*)(S20753C5*), ABISELECT(80,48), "S20753C4");
    check_base_class_offset(lv, (S20753C5*), ABISELECT(64,40), "S20753C4");
    /*is_ambiguous_... S20753C4::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*), ABISELECT(8,4), "S20753C4");
    /*is_ambiguous_... S20753C4::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*), 0, "S20753C4");
    /*is_ambiguous_... S20753C4::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*), ABISELECT(16,8), "S20753C4");
    check_field_offset(lv, s20753c4f0, ABISELECT(60,36), "S20753C4.s20753c4f0");
    test_class_info(&lv, &cd_S20753C4);
    dp->~S20753C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20753C4(Test_S20753C4, "S20753C4", ABISELECT(176,104));

#else // __cplusplus

extern void _ZN8S20753C4C1Ev();
extern void _ZN8S20753C4D2Ev();
Name_Map name_map_S20753C4[] = {
  NSPAIR(_ZN8S20753C4C1Ev),
  NSPAIR(_ZN8S20753C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C7;
extern VTBL_ENTRY _ZTI8S20753C7[];
extern  VTBL_ENTRY _ZTV8S20753C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C7[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S20753C5;
extern VTBL_ENTRY _ZTI8S20753C5[];
extern  VTBL_ENTRY _ZTV8S20753C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C5[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
static Base_Class bases_S20753C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    ABISELECT(64,40), //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_S20753C8,    ABISELECT(128,76), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20753C7,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    4, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(80,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
    4, //immediately_derived
  0, 0},
  {&cd_S20753C5,    ABISELECT(64,40), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //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},
  {&cd_S17777C6_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, 0},
  {&cd_S19905C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20753C8,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //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 _ZTI8S20753C4[];
extern void _ZN8S20753C4D1Ev();
extern void _ZN8S20753C4D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZThn16_N8S20753C4D1Ev,_ZThn8_N8S20753C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
extern void ABISELECT(_ZThn16_N8S20753C4D0Ev,_ZThn8_N8S20753C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C4D1Ev,_ZThn40_N8S20753C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C4D0Ev,_ZThn40_N8S20753C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZThn128_N8S20753C4D1Ev,_ZThn76_N8S20753C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
extern void ABISELECT(_ZThn128_N8S20753C4D0Ev,_ZThn76_N8S20753C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20753C4[] = {
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&_ZN8S20753C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20753C4D0Ev,
  ABISELECT(48,32),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
  ABISELECT(64,36),
  0,
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S20753C4[];
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__A__8S20753C4[] = {
  ABISELECT(48,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZThn48_N8S20753C8D1Ev,_ZThn32_N8S20753C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void ABISELECT(_ZThn48_N8S20753C8D0Ev,_ZThn32_N8S20753C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C8__A__8S20753C4[] = {
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void _ZN8S20753C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void _ZN8S20753C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__8S20753C4[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void _ZN8S20753C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void _ZN8S20753C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C78S20753C5__8S20753C4[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C7D1Ev,_ZThn36_N8S20753C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C7D0Ev,_ZThn36_N8S20753C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C78S20753C5__8S20753C4[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C5D1Ev,_ZThn36_N8S20753C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C5D0Ev,_ZThn36_N8S20753C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C5__8S20753C4[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C4[] = {
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C8__8S20753C4[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
static  VTT_ENTRY vtt_S20753C4[] = {
  {&(_ZTV8S20753C4[5]),  5,26},
  {&(_tg__ZTV8S20753C8__A__8S20753C4[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C8__A__8S20753C4[3]),  3,5},
  {&(_ZTV8S20753C4[18]),  18,26},
  {&(_ZTV8S20753C4[18]),  18,26},
  {&(_ZTV8S20753C4[24]),  24,26},
  {&(_ZTV8S20753C4[11]),  11,26},
  {&(_tg__ZTV8S20753C5__8S20753C4[5]),  5,7},
  {&(_tg__ZTV8S20753C78S20753C5__8S20753C4[5]),  5,7},
  {&(_tg__ZTV8S20753C78S20753C5__8S20753C4[5]),  5,7},
  {&(_tg__ZTV8S20753C8__8S20753C78S20753C5__8S20753C4[4]),  4,6},
  {&(_tg__ZTV8S20753C5__8S20753C4[5]),  5,7},
  {&(_tg__ZTV8S20753C8__8S20753C5__8S20753C4[4]),  4,6},
  {&(_tg__ZTV8S20753C8__8S20753C4[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C8__8S20753C4[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20753C4[];
extern  VTBL_ENTRY _ZTV8S20753C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C4[];
static VTBL_ENTRY alt_thunk_names24[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C7D0Ev,_ZThn36_N8S20753C7D0Ev),
  (VTBL_ENTRY)_ZN8S20753C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C7D1Ev,_ZThn36_N8S20753C7D1Ev),
  (VTBL_ENTRY)_ZN8S20753C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C5D0Ev,_ZThn36_N8S20753C5D0Ev),
  (VTBL_ENTRY)_ZN8S20753C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C5D1Ev,_ZThn36_N8S20753C5D1Ev),
  (VTBL_ENTRY)_ZN8S20753C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev), // 
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20753C8D0Ev,_ZThn32_N8S20753C8D0Ev),
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev), // 
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20753C8D1Ev,_ZThn32_N8S20753C8D1Ev),
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20753C4D0Ev,_ZThn76_N8S20753C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C4D0Ev,_ZThn40_N8S20753C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20753C4D0Ev,_ZThn8_N8S20753C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20753C4D1Ev,_ZThn76_N8S20753C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C4D1Ev,_ZThn40_N8S20753C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20753C4D1Ev,_ZThn8_N8S20753C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20753C4 = {  "S20753C4", // class name
  bases_S20753C4, 8,
  &(vtc_S20753C4[0]), // expected_vtbl_contents
  &(vtt_S20753C4[0]), // expected_vtt_contents
  ABISELECT(176,104), // object size
  NSPAIRA(_ZTI8S20753C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20753C4),26, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20753C4),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names24,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20753C2  : virtual S5266C29 , virtual S20753C4 , S20753C8 {
  short s20753c2f0;
  virtual  ~S20753C2(); // _ZN8S20753C2D2Ev
  S20753C2(); // tgen
};
//SIG(-1 S20753C2) C1{ VBC2{ m} VBC3{ VBC4{ VBC5{ vd m} BC6{ VBC5 VBC7{ VBC5 FD Fc Fs[4]} vd Fi} BC8{ m Fp} vd Fs FL Fp FL} BC8 BC5 BC7 vd Fi} BC7 vd Fs}


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

static void Test_S20753C2()
{
  extern Class_Descriptor cd_S20753C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,34)];
    init_test(&cd_S20753C2, buf);
    S20753C2 *dp, &lv = *(dp=new (buf) S20753C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,132), "sizeof(S20753C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20753C2)");
    check_base_class_offset(lv, (S5266C29*), 0, "S20753C2");
    check_base_class_offset(lv, (S19905C19*)(S20753C5*), ABISELECT(112,68), "S20753C2");
    check_base_class_offset(lv, (S19905C19*)(S20753C7*)(S20753C5*), ABISELECT(112,68), "S20753C2");
    /*is_ambiguous_... S20753C2::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*), ABISELECT(112,68), "S20753C2");
    /*is_ambiguous_... S20753C4::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*)(S20753C4*), ABISELECT(112,68), "S20753C2");
    /*is_ambiguous_... S20753C2::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*), ABISELECT(112,68), "S20753C2");
    check_base_class_offset(lv, (S20753C8*)(S20753C7*)(S20753C5*), ABISELECT(176,104), "S20753C2");
    check_base_class_offset(lv, (S20753C7*)(S20753C5*), ABISELECT(112,68), "S20753C2");
    check_base_class_offset(lv, (S17777C6_nt*)(S20753C5*), ABISELECT(128,76), "S20753C2");
    check_base_class_offset(lv, (S20753C5*)(S20753C4*), ABISELECT(112,68), "S20753C2");
    /*is_ambiguous_... S20753C4::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C4*), ABISELECT(56,32), "S20753C2");
    /*is_ambiguous_... S20753C4::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C4*), ABISELECT(48,28), "S20753C2");
    /*is_ambiguous_... S20753C4::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C4*), ABISELECT(64,36), "S20753C2");
    check_base_class_offset(lv, (S20753C4*), ABISELECT(48,28), "S20753C2");
    /*is_ambiguous_... S20753C2::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*), 0, "S20753C2");
    check_field_offset(lv, s20753c2f0, ABISELECT(42,26), "S20753C2.s20753c2f0");
    test_class_info(&lv, &cd_S20753C2);
    dp->~S20753C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20753C2(Test_S20753C2, "S20753C2", ABISELECT(224,132));

#else // __cplusplus

extern void _ZN8S20753C2C1Ev();
extern void _ZN8S20753C2D2Ev();
Name_Map name_map_S20753C2[] = {
  NSPAIR(_ZN8S20753C2C1Ev),
  NSPAIR(_ZN8S20753C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C7;
extern VTBL_ENTRY _ZTI8S20753C7[];
extern  VTBL_ENTRY _ZTV8S20753C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C7[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S20753C5;
extern VTBL_ENTRY _ZTI8S20753C5[];
extern  VTBL_ENTRY _ZTV8S20753C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C5[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C4;
extern VTBL_ENTRY _ZTI8S20753C4[];
extern  VTBL_ENTRY _ZTV8S20753C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C4[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
static Base_Class bases_S20753C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19905C19,    ABISELECT(112,68), //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
    2, //immediately_derived
  0, 1},
  {&cd_S20753C8,    ABISELECT(176,104), //bcp->offset
    31, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20753C7,    ABISELECT(112,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(128,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
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20753C5,    ABISELECT(112,68), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19905C19,    ABISELECT(48,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
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20753C8,    ABISELECT(64,36), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20753C4,    ABISELECT(48,28), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20753C8,    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 _ZTI8S20753C2[];
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void _ZN8S20753C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
extern void _ZN8S20753C2D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20753C2D1Ev,_ZTv0_n24_N8S20753C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S20753C2D1Ev,_ZThn28_N8S20753C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20753C2D0Ev,_ZTv0_n24_N8S20753C2D0Ev)();
extern void ABISELECT(_ZThn48_N8S20753C2D0Ev,_ZThn28_N8S20753C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C2D1Ev,_ZThn36_N8S20753C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C2D0Ev,_ZThn36_N8S20753C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void ABISELECT(_ZThn112_N8S20753C2D1Ev,_ZThn68_N8S20753C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
extern void ABISELECT(_ZThn112_N8S20753C2D0Ev,_ZThn68_N8S20753C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void ABISELECT(_ZThn176_N8S20753C2D1Ev,_ZThn104_N8S20753C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
extern void ABISELECT(_ZThn176_N8S20753C2D0Ev,_ZThn104_N8S20753C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20753C2[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  0,
  ABISELECT(112,68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20753C2D1Ev,_ZTv0_n24_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20753C2D0Ev,_ZTv0_n24_N8S20753C2D0Ev),
  ABISELECT(48,32),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
  ABISELECT(64,36),
  0,
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S20753C2[];
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__A__8S20753C2[] = {
  ABISELECT(112,68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZThn112_N8S20753C8D1Ev,_ZThn68_N8S20753C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void ABISELECT(_ZThn112_N8S20753C8D0Ev,_ZThn68_N8S20753C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C8__A__8S20753C2[] = {
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void _ZN8S20753C4D1Ev();
extern void _ZN8S20753C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20753C4__8S20753C2[] = {
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&_ZN8S20753C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20753C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A1__8S20753C2[] = {
  ABISELECT(48,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZThn48_N8S20753C8D1Ev,_ZThn32_N8S20753C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void ABISELECT(_ZThn48_N8S20753C8D0Ev,_ZThn32_N8S20753C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C88S20753C4__A1__8S20753C2[] = {
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C4D1Ev,_ZThn40_N8S20753C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C4D0Ev,_ZThn40_N8S20753C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__8S20753C4__8S20753C2[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZThn128_N8S20753C4D1Ev,_ZThn76_N8S20753C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
extern void ABISELECT(_ZThn128_N8S20753C4D0Ev,_ZThn76_N8S20753C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C4__8S20753C2[] = {
  ABISELECT(-64,-36),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZThn16_N8S20753C4D1Ev,_ZThn8_N8S20753C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
extern void ABISELECT(_ZThn16_N8S20753C4D0Ev,_ZThn8_N8S20753C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__A__8S20753C4__8S20753C2[] = {
  ABISELECT(48,32),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void _ZN8S20753C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void _ZN8S20753C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__8S20753C2[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void _ZN8S20753C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void _ZN8S20753C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C78S20753C5__8S20753C2[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C7D1Ev,_ZThn36_N8S20753C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C7D0Ev,_ZThn36_N8S20753C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C78S20753C5__8S20753C2[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C5D1Ev,_ZThn36_N8S20753C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C5D0Ev,_ZThn36_N8S20753C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C5__8S20753C2[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C2[] = {
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C8__8S20753C2[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
static  VTT_ENTRY vtt_S20753C2[] = {
  {&(_ZTV8S20753C2[8]),  8,37},
  {&(_tg__ZTV8S20753C8__A__8S20753C2[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C8__A__8S20753C2[3]),  3,5},
  {&(_ZTV8S20753C2[16]),  16,37},
  {&(_ZTV8S20753C2[29]),  29,37},
  {&(_ZTV8S20753C2[29]),  29,37},
  {&(_ZTV8S20753C2[35]),  35,37},
  {&(_ZTV8S20753C2[22]),  22,37},
  {&(_tg__ZTV8S20753C4__8S20753C2[5]),  5,7},
  {&(_tg__ZTV8S20753C88S20753C4__A1__8S20753C2[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C88S20753C4__A1__8S20753C2[3]),  3,5},
  {&(_tg__ZTV8S20753C5__8S20753C4__8S20753C2[5]),  5,7},
  {&(_tg__ZTV8S20753C5__8S20753C4__8S20753C2[5]),  5,7},
  {&(_tg__ZTV8S20753C8__8S20753C4__8S20753C2[4]),  4,6},
  {&(_tg__ZTV8S20753C8__A__8S20753C4__8S20753C2[4]),  4,6},
  {&(_tg__ZTV8S20753C5__8S20753C2[5]),  5,7},
  {&(_tg__ZTV8S20753C78S20753C5__8S20753C2[5]),  5,7},
  {&(_tg__ZTV8S20753C78S20753C5__8S20753C2[5]),  5,7},
  {&(_tg__ZTV8S20753C8__8S20753C78S20753C5__8S20753C2[4]),  4,6},
  {&(_tg__ZTV8S20753C5__8S20753C2[5]),  5,7},
  {&(_tg__ZTV8S20753C8__8S20753C5__8S20753C2[4]),  4,6},
  {&(_tg__ZTV8S20753C8__8S20753C2[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C8__8S20753C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20753C2[];
extern  VTBL_ENTRY _ZTV8S20753C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C2[];
static VTBL_ENTRY alt_thunk_names25[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C7D0Ev,_ZThn36_N8S20753C7D0Ev),
  (VTBL_ENTRY)_ZN8S20753C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C7D1Ev,_ZThn36_N8S20753C7D1Ev),
  (VTBL_ENTRY)_ZN8S20753C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C5D0Ev,_ZThn36_N8S20753C5D0Ev),
  (VTBL_ENTRY)_ZN8S20753C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C5D1Ev,_ZThn36_N8S20753C5D1Ev),
  (VTBL_ENTRY)_ZN8S20753C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20753C4D0Ev,_ZThn8_N8S20753C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20753C4D0Ev,_ZThn76_N8S20753C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C4D0Ev,_ZThn40_N8S20753C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20753C4D1Ev,_ZThn8_N8S20753C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20753C4D1Ev,_ZThn76_N8S20753C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C4D1Ev,_ZThn40_N8S20753C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev), // 
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20753C8D0Ev,_ZThn32_N8S20753C8D0Ev),
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20753C8D0Ev,_ZThn68_N8S20753C8D0Ev),
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev), // 
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20753C8D1Ev,_ZThn32_N8S20753C8D1Ev),
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20753C8D1Ev,_ZThn68_N8S20753C8D1Ev),
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20753C2D0Ev,_ZTv0_n24_N8S20753C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20753C2D0Ev,_ZThn28_N8S20753C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20753C2D1Ev,_ZTv0_n24_N8S20753C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20753C2D1Ev,_ZThn28_N8S20753C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20753C2D0Ev,_ZThn104_N8S20753C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20753C2D0Ev,_ZThn68_N8S20753C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C2D0Ev,_ZThn36_N8S20753C2D0Ev),
  (VTBL_ENTRY)_ZN8S20753C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20753C2D1Ev,_ZThn104_N8S20753C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20753C2D1Ev,_ZThn68_N8S20753C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C2D1Ev,_ZThn36_N8S20753C2D1Ev),
  (VTBL_ENTRY)_ZN8S20753C2D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20753C2 = {  "S20753C2", // class name
  bases_S20753C2, 11,
  &(vtc_S20753C2[0]), // expected_vtbl_contents
  &(vtt_S20753C2[0]), // expected_vtt_contents
  ABISELECT(224,132), // object size
  NSPAIRA(_ZTI8S20753C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20753C2),37, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20753C2),23, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names25,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20753C11  : virtual S19905C19 , S20753C8 , virtual S20753C2 , S20753C5 {
  void *s20753c11f0;
  ~S20753C11(); // tgen
  S20753C11(); // tgen
};
//SIG(-1 S20753C11) C1{ VBC2{ vd m} BC3{ VBC2 FD Fc Fs[4]} VBC4{ VBC5{ m} VBC6{ VBC7{ VBC2 BC8{ VBC2 VBC3 vd Fi} BC9{ m Fp} vd Fs FL Fp FL} BC9 BC2 BC3 vd Fi} BC3 vd Fs} BC7 Fp}


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

static void Test_S20753C11()
{
  extern Class_Descriptor cd_S20753C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,51)];
    init_test(&cd_S20753C11, buf);
    S20753C11 *dp, &lv = *(dp=new (buf) S20753C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,200), "sizeof(S20753C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20753C11)");
    /*is_ambiguous_... S20753C11::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*), 0, "S20753C11");
    /*is_ambiguous_... S20753C11::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*), 0, "S20753C11");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C5*), 0, "S20753C11");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C7*)(S20753C5*), 0, "S20753C11");
    /*is_ambiguous_... S20753C11::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*), 0, "S20753C11");
    /*is_ambiguous_... S20753C4::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*)(S20753C4*), 0, "S20753C11");
    /*is_ambiguous_... S20753C2::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*)(S20753C2*), 0, "S20753C11");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C5*), 0, "S20753C11");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C7*)(S20753C5*), 0, "S20753C11");
    /*is_ambiguous_... S20753C11::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*), 0, "S20753C11");
    check_base_class_offset(lv, (S5266C29*)(S20753C2*), 0, "S20753C11");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C7*)(S20753C5*), ABISELECT(288,172), "S20753C11");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C7*)(S20753C5*), ABISELECT(288,172), "S20753C11");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C7*)(S20753C5*), ABISELECT(224,136), "S20753C11");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C5*), ABISELECT(240,144), "S20753C11");
    check_base_class_offset(lv, (S20753C5*)(S20753C4*), ABISELECT(224,136), "S20753C11");
    /*is_ambiguous_... S20753C4::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C4*), ABISELECT(168,100), "S20753C11");
    /*is_ambiguous_... S20753C4::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C4*), ABISELECT(160,96), "S20753C11");
    /*is_ambiguous_... S20753C4::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C4*), ABISELECT(176,104), "S20753C11");
    check_base_class_offset(lv, (S20753C4*)(S20753C2*), ABISELECT(160,96), "S20753C11");
    /*is_ambiguous_... S20753C2::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C2*), ABISELECT(112,68), "S20753C11");
    check_base_class_offset(lv, (S20753C2*), ABISELECT(112,68), "S20753C11");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C7*)(S20753C5*), ABISELECT(48,28), "S20753C11");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C5*), ABISELECT(64,36), "S20753C11");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C5*), ABISELECT(48,28), "S20753C11");
    check_field_offset(lv, s20753c11f0, ABISELECT(104,64), "S20753C11.s20753c11f0");
    test_class_info(&lv, &cd_S20753C11);
    dp->~S20753C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20753C11(Test_S20753C11, "S20753C11", ABISELECT(336,200));

#else // __cplusplus

extern void _ZN9S20753C11C1Ev();
extern void _ZN9S20753C11D1Ev();
Name_Map name_map_S20753C11[] = {
  NSPAIR(_ZN9S20753C11C1Ev),
  NSPAIR(_ZN9S20753C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C7;
extern VTBL_ENTRY _ZTI8S20753C7[];
extern  VTBL_ENTRY _ZTV8S20753C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C7[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S20753C5;
extern VTBL_ENTRY _ZTI8S20753C5[];
extern  VTBL_ENTRY _ZTV8S20753C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C5[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C4;
extern VTBL_ENTRY _ZTI8S20753C4[];
extern  VTBL_ENTRY _ZTV8S20753C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C4[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C2;
extern VTBL_ENTRY _ZTI8S20753C2[];
extern  VTBL_ENTRY _ZTV8S20753C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C2[];
extern Class_Descriptor cd_S20753C7;
extern VTBL_ENTRY _ZTI8S20753C7[];
extern  VTBL_ENTRY _ZTV8S20753C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C7[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S20753C5;
extern VTBL_ENTRY _ZTI8S20753C5[];
extern  VTBL_ENTRY _ZTV8S20753C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C5[];
static Base_Class bases_S20753C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    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
  1, 1},
  {&cd_S20753C8,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20753C8,    ABISELECT(288,172), //bcp->offset
    49, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20753C7,    ABISELECT(224,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(240,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20753C5,    ABISELECT(224,136), //bcp->offset
    42, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19905C19,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S20753C8,    ABISELECT(176,104), //bcp->offset
    36, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20753C4,    ABISELECT(160,96), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20753C8,    ABISELECT(112,68), //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
    12, //immediately_derived
  0, 0},
  {&cd_S20753C2,    ABISELECT(112,68), //bcp->offset
    18, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20753C7,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S17777C6_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
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20753C5,    ABISELECT(48,28), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20753C11[];
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void _ZN9S20753C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
extern void _ZN9S20753C11D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZThn48_N9S20753C11D1Ev,_ZThn28_N9S20753C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
extern void ABISELECT(_ZThn48_N9S20753C11D0Ev,_ZThn28_N9S20753C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZThn112_N9S20753C11D1Ev,_ZThn68_N9S20753C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
extern void ABISELECT(_ZThn112_N9S20753C11D0Ev,_ZThn68_N9S20753C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20753C11D1Ev,_ZTv0_n24_N9S20753C11D1Ev)();
extern void ABISELECT(_ZThn160_N9S20753C11D1Ev,_ZThn96_N9S20753C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20753C11D0Ev,_ZTv0_n24_N9S20753C11D0Ev)();
extern void ABISELECT(_ZThn160_N9S20753C11D0Ev,_ZThn96_N9S20753C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZThn176_N9S20753C11D1Ev,_ZThn104_N9S20753C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
extern void ABISELECT(_ZThn176_N9S20753C11D0Ev,_ZThn104_N9S20753C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZThn224_N9S20753C11D1Ev,_ZThn136_N9S20753C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
extern void ABISELECT(_ZThn224_N9S20753C11D0Ev,_ZThn136_N9S20753C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZThn288_N9S20753C11D1Ev,_ZThn172_N9S20753C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
extern void ABISELECT(_ZThn288_N9S20753C11D0Ev,_ZThn172_N9S20753C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20753C11[] = {
  ABISELECT(288,172),
  ABISELECT(224,136),
  ABISELECT(160,96),
  0,
  ABISELECT(112,68),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
  ABISELECT(240,144),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
  ABISELECT(-160,-96),
  ABISELECT(128,76),
  ABISELECT(-160,-96),
  ABISELECT(64,40),
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C11D1Ev,_ZTv0_n24_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C11D0Ev,_ZTv0_n24_N9S20753C11D0Ev),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
  ABISELECT(64,36),
  ABISELECT(-224,-136),
  ABISELECT(-224,-136),
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
  ABISELECT(-288,-172),
  ABISELECT(-288,-172),
  ABISELECT(-288,-172),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S20753C11[];
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__A__9S20753C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void _ZN8S20753C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void _ZN8S20753C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__A__9S20753C11[] = {
  ABISELECT(240,144),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void _ZN8S20753C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void _ZN8S20753C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C78S20753C5__A1__9S20753C11[] = {
  ABISELECT(240,144),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C78S20753C5__A1__9S20753C11[] = {
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZThn240_N8S20753C7D1Ev,_ZThn144_N8S20753C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void ABISELECT(_ZThn240_N8S20753C7D0Ev,_ZThn144_N8S20753C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C78S20753C5__A1__9S20753C11[] = {
  ABISELECT(-288,-172),
  ABISELECT(-240,-144),
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C5__A__9S20753C11[] = {
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZThn240_N8S20753C5D1Ev,_ZThn144_N8S20753C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void ABISELECT(_ZThn240_N8S20753C5D0Ev,_ZThn144_N8S20753C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C5__A__9S20753C11[] = {
  ABISELECT(-288,-172),
  ABISELECT(-240,-144),
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void _ZN8S20753C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
extern void _ZN8S20753C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C2__9S20753C11[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C2__A3__9S20753C11[] = {
  ABISELECT(-112,-68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C88S20753C2__A3__9S20753C11[] = {
  ABISELECT(112,68),
  ABISELECT(112,68),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20753C2D1Ev,_ZTv0_n24_N8S20753C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S20753C2D1Ev,_ZThn28_N8S20753C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20753C2D0Ev,_ZTv0_n24_N8S20753C2D0Ev)();
extern void ABISELECT(_ZThn48_N8S20753C2D0Ev,_ZThn28_N8S20753C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C4__8S20753C2__9S20753C11[] = {
  ABISELECT(-48,-28),
  ABISELECT(128,76),
  ABISELECT(-160,-96),
  ABISELECT(64,40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20753C2D1Ev,_ZTv0_n24_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20753C2D0Ev,_ZTv0_n24_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void ABISELECT(_ZThn112_N8S20753C2D1Ev,_ZThn68_N8S20753C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
extern void ABISELECT(_ZThn112_N8S20753C2D0Ev,_ZThn68_N8S20753C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__8S20753C2__9S20753C11[] = {
  ABISELECT(64,36),
  ABISELECT(-224,-136),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C2__9S20753C11[] = {
  ABISELECT(112,68),
  ABISELECT(112,68),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void ABISELECT(_ZThn176_N8S20753C2D1Ev,_ZThn104_N8S20753C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
extern void ABISELECT(_ZThn176_N8S20753C2D0Ev,_ZThn104_N8S20753C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C2__9S20753C11[] = {
  ABISELECT(-288,-172),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C2D1Ev,_ZThn36_N8S20753C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C2D0Ev,_ZThn36_N8S20753C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A1__8S20753C2__9S20753C11[] = {
  ABISELECT(-176,-104),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void _ZN8S20753C4D1Ev();
extern void _ZN8S20753C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20753C4__9S20753C11[] = {
  ABISELECT(128,76),
  ABISELECT(-160,-96),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&_ZN8S20753C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20753C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A2__9S20753C11[] = {
  ABISELECT(-176,-104),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C88S20753C4__A2__9S20753C11[] = {
  ABISELECT(176,104),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C4D1Ev,_ZThn40_N8S20753C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C4D0Ev,_ZThn40_N8S20753C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__8S20753C4__9S20753C11[] = {
  ABISELECT(64,36),
  ABISELECT(-224,-136),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C4__9S20753C11[] = {
  ABISELECT(160,96),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZThn128_N8S20753C4D1Ev,_ZThn76_N8S20753C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
extern void ABISELECT(_ZThn128_N8S20753C4D0Ev,_ZThn76_N8S20753C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C4__9S20753C11[] = {
  ABISELECT(-288,-172),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZThn16_N8S20753C4D1Ev,_ZThn8_N8S20753C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
extern void ABISELECT(_ZThn16_N8S20753C4D0Ev,_ZThn8_N8S20753C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__A__8S20753C4__9S20753C11[] = {
  ABISELECT(-176,-104),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void _ZN8S20753C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void _ZN8S20753C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C11[] = {
  ABISELECT(64,36),
  ABISELECT(-224,-136),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void _ZN8S20753C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void _ZN8S20753C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C78S20753C5__9S20753C11[] = {
  ABISELECT(64,36),
  ABISELECT(-224,-136),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C78S20753C5__9S20753C11[] = {
  ABISELECT(224,136),
  ABISELECT(224,136),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C7D1Ev,_ZThn36_N8S20753C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C7D0Ev,_ZThn36_N8S20753C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C78S20753C5__9S20753C11[] = {
  ABISELECT(-288,-172),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C5__9S20753C11[] = {
  ABISELECT(224,136),
  ABISELECT(224,136),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C5D1Ev,_ZThn36_N8S20753C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C5D0Ev,_ZThn36_N8S20753C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C5__9S20753C11[] = {
  ABISELECT(-288,-172),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__A1__9S20753C11[] = {
  ABISELECT(-288,-172),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C8__A1__9S20753C11[] = {
  ABISELECT(288,172),
  ABISELECT(288,172),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
static  VTT_ENTRY vtt_S20753C11[] = {
  {&(_ZTV9S20753C11[9]),  9,55},
  {&(_tg__ZTV8S20753C8__A__9S20753C11[4]),  4,6},
  {&(_tg__ZTV8S20753C8__A__9S20753C11[4]),  4,6},
  {&(_tg__ZTV8S20753C5__A__9S20753C11[5]),  5,7},
  {&(_tg__ZTV8S20753C78S20753C5__A1__9S20753C11[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S20753C78S20753C5__A1__9S20753C11[3]),  3,5},
  {&(_tg__ZTV8S20753C8__8S20753C78S20753C5__A1__9S20753C11[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C5__A__9S20753C11[3]),  3,5},
  {&(_tg__ZTV8S20753C8__8S20753C5__A__9S20753C11[4]),  4,6},
  {&(_ZTV9S20753C11[9]),  9,55},
  {&(_ZTV9S20753C11[26]),  26,55},
  {&(_ZTV9S20753C11[34]),  34,55},
  {&(_ZTV9S20753C11[47]),  47,55},
  {&(_ZTV9S20753C11[53]),  53,55},
  {&(_ZTV9S20753C11[40]),  40,55},
  {&(_ZTV9S20753C11[16]),  16,55},
  {&(_tg__ZTV8S20753C2__9S20753C11[8]),  8,10},
  {&(_tg__ZTV8S20753C88S20753C2__A3__9S20753C11[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C88S20753C2__A3__9S20753C11[3]),  3,5},
  {&(_tg__ZTV8S20753C4__8S20753C2__9S20753C11[6]),  6,8},
  {&(_tg__ZTV8S20753C5__8S20753C2__9S20753C11[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S20753C2__9S20753C11[3]),  3,5},
  {&(_tg__ZTV8S20753C8__8S20753C2__9S20753C11[4]),  4,6},
  {&(_tg__ZTV8S20753C88S20753C4__A1__8S20753C2__9S20753C11[4]),  4,6},
  {&(_tg__ZTV8S20753C4__9S20753C11[5]),  5,7},
  {&(_tg__ZTV8S20753C88S20753C4__A2__9S20753C11[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C88S20753C4__A2__9S20753C11[3]),  3,5},
  {&(_tg__ZTV8S20753C5__8S20753C4__9S20753C11[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S20753C4__9S20753C11[3]),  3,5},
  {&(_tg__ZTV8S20753C8__8S20753C4__9S20753C11[4]),  4,6},
  {&(_tg__ZTV8S20753C8__A__8S20753C4__9S20753C11[4]),  4,6},
  {&(_tg__ZTV8S20753C5__9S20753C11[5]),  5,7},
  {&(_tg__ZTV8S20753C78S20753C5__9S20753C11[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S20753C78S20753C5__9S20753C11[3]),  3,5},
  {&(_tg__ZTV8S20753C8__8S20753C78S20753C5__9S20753C11[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C5__9S20753C11[3]),  3,5},
  {&(_tg__ZTV8S20753C8__8S20753C5__9S20753C11[4]),  4,6},
  {&(_tg__ZTV8S20753C8__A1__9S20753C11[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C8__A1__9S20753C11[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20753C11[];
extern  VTBL_ENTRY _ZTV9S20753C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C11[];
static VTBL_ENTRY alt_thunk_names26[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20753C4D0Ev,_ZThn8_N8S20753C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20753C4D0Ev,_ZThn76_N8S20753C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C4D0Ev,_ZThn40_N8S20753C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20753C4D1Ev,_ZThn8_N8S20753C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20753C4D1Ev,_ZThn76_N8S20753C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C4D1Ev,_ZThn40_N8S20753C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20753C2D0Ev,_ZTv0_n24_N8S20753C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20753C2D0Ev,_ZThn28_N8S20753C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20753C2D1Ev,_ZTv0_n24_N8S20753C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20753C2D1Ev,_ZThn28_N8S20753C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C2D0Ev,_ZThn36_N8S20753C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20753C2D0Ev,_ZThn104_N8S20753C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20753C2D0Ev,_ZThn68_N8S20753C2D0Ev),
  (VTBL_ENTRY)_ZN8S20753C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C2D1Ev,_ZThn36_N8S20753C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20753C2D1Ev,_ZThn104_N8S20753C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20753C2D1Ev,_ZThn68_N8S20753C2D1Ev),
  (VTBL_ENTRY)_ZN8S20753C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C7D0Ev,_ZThn36_N8S20753C7D0Ev),
  (VTBL_ENTRY)_ZN8S20753C7D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20753C7D0Ev,_ZThn144_N8S20753C7D0Ev),
  (VTBL_ENTRY)_ZN8S20753C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C7D1Ev,_ZThn36_N8S20753C7D1Ev),
  (VTBL_ENTRY)_ZN8S20753C7D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20753C7D1Ev,_ZThn144_N8S20753C7D1Ev),
  (VTBL_ENTRY)_ZN8S20753C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C5D0Ev,_ZThn36_N8S20753C5D0Ev),
  (VTBL_ENTRY)_ZN8S20753C5D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20753C5D0Ev,_ZThn144_N8S20753C5D0Ev),
  (VTBL_ENTRY)_ZN8S20753C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C5D1Ev,_ZThn36_N8S20753C5D1Ev),
  (VTBL_ENTRY)_ZN8S20753C5D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20753C5D1Ev,_ZThn144_N8S20753C5D1Ev),
  (VTBL_ENTRY)_ZN8S20753C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev), // 
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev), // 
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20753C11D0Ev,_ZTv0_n24_N9S20753C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S20753C11D0Ev,_ZThn96_N9S20753C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20753C11D1Ev,_ZTv0_n24_N9S20753C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S20753C11D1Ev,_ZThn96_N9S20753C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S20753C11D0Ev,_ZThn172_N9S20753C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20753C11D0Ev,_ZThn136_N9S20753C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20753C11D0Ev,_ZThn104_N9S20753C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20753C11D0Ev,_ZThn68_N9S20753C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20753C11D0Ev,_ZThn28_N9S20753C11D0Ev),
  (VTBL_ENTRY)_ZN9S20753C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S20753C11D1Ev,_ZThn172_N9S20753C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20753C11D1Ev,_ZThn136_N9S20753C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20753C11D1Ev,_ZThn104_N9S20753C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20753C11D1Ev,_ZThn68_N9S20753C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20753C11D1Ev,_ZThn28_N9S20753C11D1Ev),
  (VTBL_ENTRY)_ZN9S20753C11D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20753C11 = {  "S20753C11", // class name
  bases_S20753C11, 16,
  &(vtc_S20753C11[0]), // expected_vtbl_contents
  &(vtt_S20753C11[0]), // expected_vtt_contents
  ABISELECT(336,200), // object size
  NSPAIRA(_ZTI9S20753C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20753C11),55, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20753C11),39, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names26,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20753C12  : S5266C26 , virtual S20753C5 , S17777C6_nt , virtual S5266C29 {
  ::S20753C7 s20753c12f0;
  short s20753c12f1;
  virtual  ~S20753C12(); // _ZN9S20753C12D2Ev
  S20753C12(); // tgen
};
//SIG(-1 S20753C12) C1{ BC2{ m} VBC3{ VBC4{ vd m} BC5{ VBC4 VBC6{ VBC4 FD Fc Fs[4]} vd Fi} BC7{ m Fp} vd Fs FL Fp FL} BC7 VBC8{ m} vd FC5 Fs}


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

static void Test_S20753C12()
{
  extern Class_Descriptor cd_S20753C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,29)];
    init_test(&cd_S20753C12, buf);
    S20753C12 *dp, &lv = *(dp=new (buf) S20753C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,112), "sizeof(S20753C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20753C12)");
    check_base_class_offset(lv, (S5266C26*), 0, "S20753C12");
    check_base_class_offset(lv, (S19905C19*)(S20753C5*), 0, "S20753C12");
    check_base_class_offset(lv, (S19905C19*)(S20753C7*)(S20753C5*), 0, "S20753C12");
    check_base_class_offset(lv, (S19905C19*)(S20753C8*), 0, "S20753C12");
    check_base_class_offset(lv, (S20753C8*)(S20753C7*)(S20753C5*), ABISELECT(144,84), "S20753C12");
    check_base_class_offset(lv, (S20753C7*)(S20753C5*), ABISELECT(88,48), "S20753C12");
    check_base_class_offset(lv, (S17777C6_nt*)(S20753C5*), ABISELECT(104,56), "S20753C12");
    check_base_class_offset(lv, (S20753C5*), ABISELECT(88,48), "S20753C12");
    /*is_ambiguous_... S20753C12::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*), ABISELECT(8,4), "S20753C12");
    check_base_class_offset(lv, (S5266C29*), 0, "S20753C12");
    check_field_offset(lv, s20753c12f0, ABISELECT(16,8), "S20753C12.s20753c12f0");
    check_field_offset(lv, s20753c12f1, ABISELECT(80,44), "S20753C12.s20753c12f1");
    test_class_info(&lv, &cd_S20753C12);
    dp->~S20753C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20753C12(Test_S20753C12, "S20753C12", ABISELECT(192,112));

#else // __cplusplus

extern void _ZN9S20753C12C1Ev();
extern void _ZN9S20753C12D2Ev();
Name_Map name_map_S20753C12[] = {
  NSPAIR(_ZN9S20753C12C1Ev),
  NSPAIR(_ZN9S20753C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C7;
extern VTBL_ENTRY _ZTI8S20753C7[];
extern  VTBL_ENTRY _ZTV8S20753C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C7[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S20753C5;
extern VTBL_ENTRY _ZTI8S20753C5[];
extern  VTBL_ENTRY _ZTV8S20753C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C5[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
static Base_Class bases_S20753C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19905C19,    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
    2, //immediately_derived
  0, 1},
  {&cd_S20753C8,    ABISELECT(144,84), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20753C7,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(104,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
    5, //immediately_derived
  0, 0},
  {&cd_S20753C5,    ABISELECT(88,48), //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S17777C6_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, 0},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S20753C12[];
extern void _ZN9S20753C12D1Ev();
extern void _ZN9S20753C12D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev)();
extern void ABISELECT(_ZThn88_N9S20753C12D1Ev,_ZThn48_N9S20753C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev)();
extern void ABISELECT(_ZThn88_N9S20753C12D0Ev,_ZThn48_N9S20753C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S20753C12D1Ev,_ZThn84_N9S20753C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev)();
extern void ABISELECT(_ZThn144_N9S20753C12D0Ev,_ZThn84_N9S20753C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20753C12[] = {
  0,
  ABISELECT(144,84),
  0,
  ABISELECT(88,48),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C12[0]),
  (VTBL_ENTRY)&_ZN9S20753C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20753C12D0Ev,
  ABISELECT(56,36),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI9S20753C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev),
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S20753C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S20753C12[];
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void _ZN8S20753C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void _ZN8S20753C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C12[] = {
  ABISELECT(56,36),
  ABISELECT(-88,-48),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void _ZN8S20753C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void _ZN8S20753C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C78S20753C5__9S20753C12[] = {
  ABISELECT(56,36),
  ABISELECT(-88,-48),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C78S20753C5__9S20753C12[] = {
  ABISELECT(88,48),
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZThn56_N8S20753C7D1Ev,_ZThn36_N8S20753C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void ABISELECT(_ZThn56_N8S20753C7D0Ev,_ZThn36_N8S20753C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C78S20753C5__9S20753C12[] = {
  ABISELECT(-144,-84),
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C5__9S20753C12[] = {
  ABISELECT(88,48),
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZThn56_N8S20753C5D1Ev,_ZThn36_N8S20753C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void ABISELECT(_ZThn56_N8S20753C5D0Ev,_ZThn36_N8S20753C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C5__9S20753C12[] = {
  ABISELECT(-144,-84),
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__9S20753C12[] = {
  ABISELECT(-144,-84),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C8__9S20753C12[] = {
  ABISELECT(144,84),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
static  VTT_ENTRY vtt_S20753C12[] = {
  {&(_ZTV9S20753C12[7]),  7,22},
  {&(_ZTV9S20753C12[14]),  14,22},
  {&(_ZTV9S20753C12[7]),  7,22},
  {&(_ZTV9S20753C12[20]),  20,22},
  {&(_tg__ZTV8S20753C5__9S20753C12[5]),  5,7},
  {&(_tg__ZTV8S20753C78S20753C5__9S20753C12[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S20753C78S20753C5__9S20753C12[3]),  3,5},
  {&(_tg__ZTV8S20753C8__8S20753C78S20753C5__9S20753C12[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C5__9S20753C12[3]),  3,5},
  {&(_tg__ZTV8S20753C8__8S20753C5__9S20753C12[4]),  4,6},
  {&(_tg__ZTV8S20753C8__9S20753C12[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C8__9S20753C12[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20753C12[];
extern  VTBL_ENTRY _ZTV9S20753C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C12[];
static VTBL_ENTRY alt_thunk_names27[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev), // 
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev), // 
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20753C7D0Ev,_ZThn36_N8S20753C7D0Ev),
  (VTBL_ENTRY)_ZN8S20753C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20753C7D1Ev,_ZThn36_N8S20753C7D1Ev),
  (VTBL_ENTRY)_ZN8S20753C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20753C5D0Ev,_ZThn36_N8S20753C5D0Ev),
  (VTBL_ENTRY)_ZN8S20753C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20753C5D1Ev,_ZThn36_N8S20753C5D1Ev),
  (VTBL_ENTRY)_ZN8S20753C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20753C12D0Ev,_ZThn84_N9S20753C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S20753C12D0Ev,_ZThn48_N9S20753C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20753C12D1Ev,_ZThn84_N9S20753C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S20753C12D1Ev,_ZThn48_N9S20753C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20753C12 = {  "S20753C12", // class name
  bases_S20753C12, 8,
  &(vtc_S20753C12[0]), // expected_vtbl_contents
  &(vtt_S20753C12[0]), // expected_vtt_contents
  ABISELECT(192,112), // object size
  NSPAIRA(_ZTI9S20753C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20753C12),22, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20753C12),12, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names27,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20753C10  : virtual S20753C8 , virtual S20753C11 , virtual S17777C6_nt , S20753C12 {
  int s20753c10f0;
  ::S19905C17_nt s20753c10f1;
  virtual  ~S20753C10(); // _ZN9S20753C10D2Ev
  S20753C10(); // tgen
};
//SIG(-1 S20753C10) C1{ VBC2{ VBC3{ vd m} FD Fc Fs[4]} VBC4{ VBC3 BC2 VBC5{ VBC6{ m} VBC7{ VBC8{ VBC3 BC9{ VBC3 VBC2 vd Fi} BC10{ m Fp} vd Fs FL Fp FL} BC10 BC3 BC2 vd Fi} BC2 vd Fs} BC8 Fp} VBC10 BC11{ BC12{ m} VBC8 BC10 VBC6 vd FC9 Fs} vd Fi FC13{}}


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

static void Test_S20753C10()
{
  extern Class_Descriptor cd_S20753C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,66)];
    init_test(&cd_S20753C10, buf);
    S20753C10 *dp, &lv = *(dp=new (buf) S20753C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,260), "sizeof(S20753C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20753C10)");
    /*is_ambiguous_... S20753C10::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*), ABISELECT(96,56), "S20753C10");
    /*is_ambiguous_... S20753C11::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C11*), ABISELECT(96,56), "S20753C10");
    /*is_ambiguous_... S20753C11::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*)(S20753C11*), ABISELECT(96,56), "S20753C10");
    /*is_ambiguous_... S20753C10::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C5*), ABISELECT(96,56), "S20753C10");
    /*is_ambiguous_... S20753C10::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C7*)(S20753C5*), ABISELECT(96,56), "S20753C10");
    /*is_ambiguous_... S20753C4::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*)(S20753C4*), ABISELECT(96,56), "S20753C10");
    /*is_ambiguous_... S20753C2::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*)(S20753C2*), ABISELECT(96,56), "S20753C10");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C5*)(S20753C11*), ABISELECT(96,56), "S20753C10");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C7*)(S20753C5*)(S20753C11*), ABISELECT(96,56), "S20753C10");
    /*is_ambiguous_... S20753C10::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*), ABISELECT(96,56), "S20753C10");
    /*is_ambiguous_... S20753C10::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C7*)(S20753C5*), ABISELECT(96,56), "S20753C10");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C7*)(S20753C5*)(S20753C11*), ABISELECT(96,56), "S20753C10");
    /*is_ambiguous_... S20753C11::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C11*), ABISELECT(144,84), "S20753C10");
    check_base_class_offset(lv, (S5266C29*)(S20753C2*), 0, "S20753C10");
    check_base_class_offset(lv, (S5266C29*)(S20753C12*), 0, "S20753C10");
    /*is_ambiguous_... S20753C10::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C7*)(S20753C5*), ABISELECT(368,220), "S20753C10");
    /*is_ambiguous_... S20753C10::S20753C5 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C5*), ABISELECT(384,228), "S20753C10");
    check_base_class_offset(lv, (S20753C5*)(S20753C4*), ABISELECT(368,220), "S20753C10");
    check_base_class_offset(lv, (S20753C5*)(S20753C12*), ABISELECT(368,220), "S20753C10");
    /*is_ambiguous_... S20753C4::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C4*), ABISELECT(312,184), "S20753C10");
    /*is_ambiguous_... S20753C4::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C4*), ABISELECT(304,180), "S20753C10");
    /*is_ambiguous_... S20753C4::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C4*), ABISELECT(320,188), "S20753C10");
    check_base_class_offset(lv, (S20753C4*)(S20753C2*), ABISELECT(304,180), "S20753C10");
    /*is_ambiguous_... S20753C2::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C2*), ABISELECT(256,152), "S20753C10");
    check_base_class_offset(lv, (S20753C2*)(S20753C11*), ABISELECT(256,152), "S20753C10");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C7*)(S20753C5*)(S20753C11*), ABISELECT(192,112), "S20753C10");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C5*)(S20753C11*), ABISELECT(208,120), "S20753C10");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C5*)(S20753C11*), ABISELECT(192,112), "S20753C10");
    check_base_class_offset(lv, (S20753C11*), ABISELECT(144,84), "S20753C10");
    /*is_ambiguous_... S20753C10::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*), ABISELECT(424,256), "S20753C10");
    check_base_class_offset(lv, (S5266C26*)(S20753C12*), 0, "S20753C10");
    /*is_ambiguous_... S20753C12::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C12*), ABISELECT(8,4), "S20753C10");
    check_base_class_offset(lv, (S20753C12*), 0, "S20753C10");
    check_field_offset(lv, s20753c10f0, ABISELECT(84,48), "S20753C10.s20753c10f0");
    check_field_offset(lv, s20753c10f1, ABISELECT(88,52), "S20753C10.s20753c10f1");
    test_class_info(&lv, &cd_S20753C10);
    dp->~S20753C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20753C10(Test_S20753C10, "S20753C10", ABISELECT(432,260));

#else // __cplusplus

extern void _ZN9S20753C10C1Ev();
extern void _ZN9S20753C10D2Ev();
Name_Map name_map_S20753C10[] = {
  NSPAIR(_ZN9S20753C10C1Ev),
  NSPAIR(_ZN9S20753C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S20753C7;
extern VTBL_ENTRY _ZTI8S20753C7[];
extern  VTBL_ENTRY _ZTV8S20753C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C7[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S20753C5;
extern VTBL_ENTRY _ZTI8S20753C5[];
extern  VTBL_ENTRY _ZTV8S20753C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C5[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C4;
extern VTBL_ENTRY _ZTI8S20753C4[];
extern  VTBL_ENTRY _ZTV8S20753C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C4[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C2;
extern VTBL_ENTRY _ZTI8S20753C2[];
extern  VTBL_ENTRY _ZTV8S20753C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C2[];
extern Class_Descriptor cd_S20753C7;
extern VTBL_ENTRY _ZTI8S20753C7[];
extern  VTBL_ENTRY _ZTV8S20753C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C7[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S20753C5;
extern VTBL_ENTRY _ZTI8S20753C5[];
extern  VTBL_ENTRY _ZTV8S20753C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C5[];
extern Class_Descriptor cd_S20753C11;
extern VTBL_ENTRY _ZTI9S20753C11[];
extern  VTBL_ENTRY _ZTV9S20753C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C11[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S20753C12;
extern VTBL_ENTRY _ZTI9S20753C12[];
extern  VTBL_ENTRY _ZTV9S20753C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C12[];
static Base_Class bases_S20753C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    ABISELECT(96,56), //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
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20753C8,    ABISELECT(96,56), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20753C8,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20753C7,    ABISELECT(368,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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_S17777C6_nt,    ABISELECT(384,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
    6, //immediately_derived
  0, 0},
  {&cd_S20753C5,    ABISELECT(368,220), //bcp->offset
    61, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(312,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
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19905C19,    ABISELECT(304,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
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20753C8,    ABISELECT(320,188), //bcp->offset
    55, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20753C4,    ABISELECT(304,180), //bcp->offset
    47, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20753C8,    ABISELECT(256,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20753C2,    ABISELECT(256,152), //bcp->offset
    37, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S20753C7,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S17777C6_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
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20753C5,    ABISELECT(192,112), //bcp->offset
    30, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20753C11,    ABISELECT(144,84), //bcp->offset
    19, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S17777C6_nt,    ABISELECT(424,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S17777C6_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
    20, //immediately_derived
  0, 0},
  {&cd_S20753C12,    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
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20753C10[];
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void _ZN9S20753C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void _ZN9S20753C10D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn96_N9S20753C10D1Ev,_ZThn56_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn96_N9S20753C10D0Ev,_ZThn56_N9S20753C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn144_N9S20753C10D1Ev,_ZThn84_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn144_N9S20753C10D0Ev,_ZThn84_N9S20753C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn192_N9S20753C10D1Ev,_ZThn112_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn192_N9S20753C10D0Ev,_ZThn112_N9S20753C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn256_N9S20753C10D1Ev,_ZThn152_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn256_N9S20753C10D0Ev,_ZThn152_N9S20753C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20753C10D1Ev,_ZTv0_n24_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn304_N9S20753C10D1Ev,_ZThn180_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20753C10D0Ev,_ZTv0_n24_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn304_N9S20753C10D0Ev,_ZThn180_N9S20753C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn320_N9S20753C10D1Ev,_ZThn188_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn320_N9S20753C10D0Ev,_ZThn188_N9S20753C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn368_N9S20753C10D1Ev,_ZThn220_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn368_N9S20753C10D0Ev,_ZThn220_N9S20753C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20753C10[] = {
  ABISELECT(424,256),
  ABISELECT(304,180),
  ABISELECT(256,152),
  ABISELECT(144,84),
  0,
  ABISELECT(96,56),
  ABISELECT(96,56),
  ABISELECT(368,220),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
  0,
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(224,136),
  ABISELECT(160,96),
  ABISELECT(-144,-84),
  ABISELECT(112,68),
  ABISELECT(-48,-28),
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
  ABISELECT(-160,-96),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-256,-152),
  ABISELECT(-160,-96),
  ABISELECT(-256,-152),
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
  ABISELECT(-304,-180),
  ABISELECT(-208,-124),
  ABISELECT(-208,-124),
  ABISELECT(64,40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C10D1Ev,_ZTv0_n24_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C10D0Ev,_ZTv0_n24_N9S20753C10D0Ev),
  ABISELECT(-224,-132),
  ABISELECT(-320,-188),
  ABISELECT(-320,-188),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-368,-220),
  ABISELECT(-368,-220),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S20753C10[];
extern void ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev)();
extern void _ZN9S20753C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev)();
extern void _ZN9S20753C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C12__9S20753C10[] = {
  0,
  ABISELECT(96,56),
  ABISELECT(96,56),
  ABISELECT(368,220),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev)();
extern void ABISELECT(_ZThn368_N9S20753C12D1Ev,_ZThn220_N9S20753C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev)();
extern void ABISELECT(_ZThn368_N9S20753C12D0Ev,_ZThn220_N9S20753C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C12__9S20753C10[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-368,-220),
  ABISELECT(-368,-220),
  (VTBL_ENTRY)&(_ZTI9S20753C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev)();
extern void ABISELECT(_ZThn96_N9S20753C12D1Ev,_ZThn56_N9S20753C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev)();
extern void ABISELECT(_ZThn96_N9S20753C12D0Ev,_ZThn56_N9S20753C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__9S20753C12__9S20753C10[] = {
  0,
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S20753C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__9S20753C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void _ZN9S20753C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
extern void _ZN9S20753C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C11__9S20753C10[] = {
  ABISELECT(-48,-28),
  ABISELECT(224,136),
  ABISELECT(160,96),
  ABISELECT(-144,-84),
  ABISELECT(112,68),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C89S20753C11__A1__9S20753C10[] = {
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C89S20753C11__A1__9S20753C10[] = {
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void _ZN8S20753C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void _ZN8S20753C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C59S20753C11__A1__9S20753C10[] = {
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void _ZN8S20753C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void _ZN8S20753C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C78S20753C59S20753C11__A1__9S20753C10[] = {
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C78S20753C59S20753C11__A1__9S20753C10[] = {
  0,
  ABISELECT(96,56),
  ABISELECT(96,56),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C59S20753C11__A1__9S20753C10[] = {
  0,
  ABISELECT(96,56),
  ABISELECT(96,56),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__A1__9S20753C11__9S20753C10[] = {
  0,
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZThn112_N9S20753C11D1Ev,_ZThn68_N9S20753C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
extern void ABISELECT(_ZThn112_N9S20753C11D0Ev,_ZThn68_N9S20753C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C2__9S20753C11__9S20753C10[] = {
  ABISELECT(-160,-96),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-256,-152),
  ABISELECT(-160,-96),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20753C11D1Ev,_ZTv0_n24_N9S20753C11D1Ev)();
extern void ABISELECT(_ZThn160_N9S20753C11D1Ev,_ZThn96_N9S20753C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20753C11D0Ev,_ZTv0_n24_N9S20753C11D0Ev)();
extern void ABISELECT(_ZThn160_N9S20753C11D0Ev,_ZThn96_N9S20753C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C4__9S20753C11__9S20753C10[] = {
  ABISELECT(-160,-96),
  ABISELECT(-208,-124),
  ABISELECT(-208,-124),
  ABISELECT(64,40),
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C11D1Ev,_ZTv0_n24_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C11D0Ev,_ZTv0_n24_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZThn224_N9S20753C11D1Ev,_ZThn136_N9S20753C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
extern void ABISELECT(_ZThn224_N9S20753C11D0Ev,_ZThn136_N9S20753C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C11__9S20753C10[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-224,-136),
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZThn176_N9S20753C11D1Ev,_ZThn104_N9S20753C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
extern void ABISELECT(_ZThn176_N9S20753C11D0Ev,_ZThn104_N9S20753C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A2__9S20753C11__9S20753C10[] = {
  ABISELECT(-224,-132),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZThn48_N9S20753C11D1Ev,_ZThn28_N9S20753C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
extern void ABISELECT(_ZThn48_N9S20753C11D0Ev,_ZThn28_N9S20753C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__A__9S20753C11__9S20753C10[] = {
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void _ZN8S20753C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
extern void _ZN8S20753C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C2__9S20753C10[] = {
  ABISELECT(-160,-96),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-256,-152),
  ABISELECT(-160,-96),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C2__A3__9S20753C10[] = {
  ABISELECT(-160,-96),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C88S20753C2__A3__9S20753C10[] = {
  ABISELECT(160,96),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20753C2D1Ev,_ZTv0_n24_N8S20753C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S20753C2D1Ev,_ZThn28_N8S20753C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20753C2D0Ev,_ZTv0_n24_N8S20753C2D0Ev)();
extern void ABISELECT(_ZThn48_N8S20753C2D0Ev,_ZThn28_N8S20753C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C4__8S20753C2__9S20753C10[] = {
  ABISELECT(-48,-28),
  ABISELECT(-208,-124),
  ABISELECT(-208,-124),
  ABISELECT(64,40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20753C2D1Ev,_ZTv0_n24_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20753C2D0Ev,_ZTv0_n24_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void ABISELECT(_ZThn112_N8S20753C2D1Ev,_ZThn68_N8S20753C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
extern void ABISELECT(_ZThn112_N8S20753C2D0Ev,_ZThn68_N8S20753C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__8S20753C2__9S20753C10[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C2__9S20753C10[] = {
  0,
  ABISELECT(160,96),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C2D1Ev,_ZThn36_N8S20753C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C2D0Ev,_ZThn36_N8S20753C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A1__8S20753C2__9S20753C10[] = {
  ABISELECT(-224,-132),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void _ZN8S20753C4D1Ev();
extern void _ZN8S20753C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20753C4__9S20753C10[] = {
  ABISELECT(-208,-124),
  ABISELECT(-208,-124),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&_ZN8S20753C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20753C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A2__9S20753C10[] = {
  ABISELECT(-224,-132),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C88S20753C4__A2__9S20753C10[] = {
  ABISELECT(224,132),
  ABISELECT(224,132),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C4D1Ev,_ZThn40_N8S20753C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C4D0Ev,_ZThn40_N8S20753C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__8S20753C4__9S20753C10[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C4__9S20753C10[] = {
  0,
  ABISELECT(208,124),
  ABISELECT(208,124),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZThn16_N8S20753C4D1Ev,_ZThn8_N8S20753C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
extern void ABISELECT(_ZThn16_N8S20753C4D0Ev,_ZThn8_N8S20753C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__A__8S20753C4__9S20753C10[] = {
  ABISELECT(-224,-132),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void _ZN8S20753C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void _ZN8S20753C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C10[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void _ZN8S20753C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void _ZN8S20753C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C78S20753C5__9S20753C10[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C78S20753C5__9S20753C10[] = {
  0,
  ABISELECT(272,164),
  ABISELECT(272,164),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C5__9S20753C10[] = {
  0,
  ABISELECT(272,164),
  ABISELECT(272,164),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
static  VTT_ENTRY vtt_S20753C10[] = {
  {&(_ZTV9S20753C10[11]),  11,68},
  {&(_tg__ZTV9S20753C12__9S20753C10[7]),  7,9},
  {&(_tg__ZTV8S20753C5__9S20753C12__9S20753C10[5]),  5,7},
  {&(_tg__ZTV8S20753C8__9S20753C12__9S20753C10[4]),  4,6},
  {&(_tg__ZTV8S20753C8__9S20753C12__9S20753C10[4]),  4,6},
  {&(_ZTV9S20753C10[17]),  17,68},
  {&(_ZTV9S20753C10[17]),  17,68},
  {&(_ZTV9S20753C10[28]),  28,68},
  {&(_ZTV9S20753C10[45]),  45,68},
  {&(_ZTV9S20753C10[53]),  53,68},
  {&(_ZTV9S20753C10[66]),  66,68},
  {&(_ZTV9S20753C10[59]),  59,68},
  {&(_ZTV9S20753C10[35]),  35,68},
  {&(_tg__ZTV8S20753C8__9S20753C10[4]),  4,6},
  {&(_tg__ZTV8S20753C8__9S20753C10[4]),  4,6},
  {&(_tg__ZTV9S20753C11__9S20753C10[9]),  9,11},
  {&(_tg__ZTV8S20753C89S20753C11__A1__9S20753C10[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C89S20753C11__A1__9S20753C10[3]),  3,5},
  {&(_tg__ZTV8S20753C59S20753C11__A1__9S20753C10[5]),  5,7},
  {&(_tg__ZTV8S20753C78S20753C59S20753C11__A1__9S20753C10[5]),  5,7},
  {&(_tg__ZTV8S20753C8__8S20753C78S20753C59S20753C11__A1__9S20753C10[4]),  4,6},
  {&(_tg__ZTV8S20753C8__8S20753C78S20753C59S20753C11__A1__9S20753C10[4]),  4,6},
  {&(_tg__ZTV8S20753C8__8S20753C59S20753C11__A1__9S20753C10[4]),  4,6},
  {&(_tg__ZTV8S20753C8__8S20753C59S20753C11__A1__9S20753C10[4]),  4,6},
  {&(_tg__ZTV8S20753C8__A1__9S20753C11__9S20753C10[4]),  4,6},
  {&(_tg__ZTV8S20753C2__9S20753C11__9S20753C10[8]),  8,10},
  {&(_tg__ZTV8S20753C4__9S20753C11__9S20753C10[6]),  6,8},
  {&(_tg__ZTV8S20753C5__9S20753C11__9S20753C10[5]),  5,7},
  {&(_tg__ZTV8S20753C8__A1__9S20753C11__9S20753C10[4]),  4,6},
  {&(_tg__ZTV8S20753C88S20753C4__A2__9S20753C11__9S20753C10[4]),  4,6},
  {&(_tg__ZTV8S20753C5__A__9S20753C11__9S20753C10[5]),  5,7},
  {&(_tg__ZTV8S20753C2__9S20753C10[8]),  8,10},
  {&(_tg__ZTV8S20753C88S20753C2__A3__9S20753C10[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C88S20753C2__A3__9S20753C10[3]),  3,5},
  {&(_tg__ZTV8S20753C4__8S20753C2__9S20753C10[6]),  6,8},
  {&(_tg__ZTV8S20753C5__8S20753C2__9S20753C10[5]),  5,7},
  {&(_tg__ZTV8S20753C8__8S20753C2__9S20753C10[4]),  4,6},
  {&(_tg__ZTV8S20753C8__8S20753C2__9S20753C10[4]),  4,6},
  {&(_tg__ZTV8S20753C88S20753C4__A1__8S20753C2__9S20753C10[4]),  4,6},
  {&(_tg__ZTV8S20753C4__9S20753C10[5]),  5,7},
  {&(_tg__ZTV8S20753C88S20753C4__A2__9S20753C10[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C88S20753C4__A2__9S20753C10[3]),  3,5},
  {&(_tg__ZTV8S20753C5__8S20753C4__9S20753C10[5]),  5,7},
  {&(_tg__ZTV8S20753C8__8S20753C4__9S20753C10[4]),  4,6},
  {&(_tg__ZTV8S20753C8__8S20753C4__9S20753C10[4]),  4,6},
  {&(_tg__ZTV8S20753C8__A__8S20753C4__9S20753C10[4]),  4,6},
  {&(_tg__ZTV8S20753C5__9S20753C10[5]),  5,7},
  {&(_tg__ZTV8S20753C78S20753C5__9S20753C10[5]),  5,7},
  {&(_tg__ZTV8S20753C8__8S20753C78S20753C5__9S20753C10[4]),  4,6},
  {&(_tg__ZTV8S20753C8__8S20753C78S20753C5__9S20753C10[4]),  4,6},
  {&(_tg__ZTV8S20753C8__8S20753C5__9S20753C10[4]),  4,6},
  {&(_tg__ZTV8S20753C8__8S20753C5__9S20753C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S20753C10[];
extern  VTBL_ENTRY _ZTV9S20753C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C10[];
static VTBL_ENTRY alt_thunk_names28[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20753C4D0Ev,_ZThn8_N8S20753C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C4D0Ev,_ZThn40_N8S20753C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20753C4D1Ev,_ZThn8_N8S20753C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C4D1Ev,_ZThn40_N8S20753C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20753C2D0Ev,_ZTv0_n24_N8S20753C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20753C2D0Ev,_ZThn28_N8S20753C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20753C2D1Ev,_ZTv0_n24_N8S20753C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20753C2D1Ev,_ZThn28_N8S20753C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C2D0Ev,_ZThn36_N8S20753C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20753C2D0Ev,_ZThn68_N8S20753C2D0Ev),
  (VTBL_ENTRY)_ZN8S20753C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C2D1Ev,_ZThn36_N8S20753C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20753C2D1Ev,_ZThn68_N8S20753C2D1Ev),
  (VTBL_ENTRY)_ZN8S20753C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20753C11D0Ev,_ZTv0_n24_N9S20753C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S20753C11D0Ev,_ZThn96_N9S20753C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20753C11D1Ev,_ZTv0_n24_N9S20753C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S20753C11D1Ev,_ZThn96_N9S20753C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S20753C7D0Ev,
  (VTBL_ENTRY)_ZN8S20753C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S20753C7D1Ev,
  (VTBL_ENTRY)_ZN8S20753C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20753C5D0Ev,
  (VTBL_ENTRY)_ZN8S20753C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20753C5D1Ev,
  (VTBL_ENTRY)_ZN8S20753C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20753C11D0Ev,_ZThn28_N9S20753C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20753C11D0Ev,_ZThn104_N9S20753C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20753C11D0Ev,_ZThn136_N9S20753C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20753C11D0Ev,_ZThn68_N9S20753C11D0Ev),
  (VTBL_ENTRY)_ZN9S20753C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20753C11D1Ev,_ZThn28_N9S20753C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20753C11D1Ev,_ZThn104_N9S20753C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20753C11D1Ev,_ZThn136_N9S20753C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20753C11D1Ev,_ZThn68_N9S20753C11D1Ev),
  (VTBL_ENTRY)_ZN9S20753C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev), // 
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev), // 
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20753C12D0Ev,_ZThn56_N9S20753C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S20753C12D0Ev,_ZThn220_N9S20753C12D0Ev),
  (VTBL_ENTRY)_ZN9S20753C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20753C12D1Ev,_ZThn56_N9S20753C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S20753C12D1Ev,_ZThn220_N9S20753C12D1Ev),
  (VTBL_ENTRY)_ZN9S20753C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20753C10D0Ev,_ZTv0_n24_N9S20753C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S20753C10D0Ev,_ZThn180_N9S20753C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20753C10D1Ev,_ZTv0_n24_N9S20753C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S20753C10D1Ev,_ZThn180_N9S20753C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S20753C10D0Ev,_ZThn220_N9S20753C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S20753C10D0Ev,_ZThn188_N9S20753C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S20753C10D0Ev,_ZThn152_N9S20753C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20753C10D0Ev,_ZThn112_N9S20753C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20753C10D0Ev,_ZThn84_N9S20753C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20753C10D0Ev,_ZThn56_N9S20753C10D0Ev),
  (VTBL_ENTRY)_ZN9S20753C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S20753C10D1Ev,_ZThn220_N9S20753C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S20753C10D1Ev,_ZThn188_N9S20753C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S20753C10D1Ev,_ZThn152_N9S20753C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20753C10D1Ev,_ZThn112_N9S20753C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20753C10D1Ev,_ZThn84_N9S20753C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20753C10D1Ev,_ZThn56_N9S20753C10D1Ev),
  (VTBL_ENTRY)_ZN9S20753C10D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20753C10 = {  "S20753C10", // class name
  bases_S20753C10, 21,
  &(vtc_S20753C10[0]), // expected_vtbl_contents
  &(vtt_S20753C10[0]), // expected_vtt_contents
  ABISELECT(432,260), // object size
  NSPAIRA(_ZTI9S20753C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20753C10),68, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20753C10),52, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names28,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20753C15  : virtual S20753C2 , S20753C10 , S19905C5_nt {
  int s20753c15f0;
  virtual  ~S20753C15(); // _ZN9S20753C15D2Ev
  S20753C15(); // tgen
};
//SIG(-1 S20753C15) C1{ VBC2{ VBC3{ m} VBC4{ VBC5{ VBC6{ vd m} BC7{ VBC6 VBC8{ VBC6 FD Fc Fs[4]} vd Fi} BC9{ m Fp} vd Fs FL Fp FL} BC9 BC6 BC8 vd Fi} BC8 vd Fs} BC10{ VBC8 VBC11{ VBC6 BC8 VBC2 BC5 Fp} VBC9 BC12{ BC13{ m} VBC5 BC9 VBC3 vd FC7 Fs} vd Fi FC14{}} BC15{ vd m} vd Fi}


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

static void Test_S20753C15()
{
  extern Class_Descriptor cd_S20753C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,68)];
    init_test(&cd_S20753C15, buf);
    S20753C15 *dp, &lv = *(dp=new (buf) S20753C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,268), "sizeof(S20753C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20753C15)");
    check_base_class_offset(lv, (S5266C29*)(S20753C2*), 0, "S20753C15");
    check_base_class_offset(lv, (S5266C29*)(S20753C12*)(S20753C10*), 0, "S20753C15");
    /*is_ambiguous_... S20753C15::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C5*), ABISELECT(224,132), "S20753C15");
    /*is_ambiguous_... S20753C15::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C7*)(S20753C5*), ABISELECT(224,132), "S20753C15");
    /*is_ambiguous_... S20753C15::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*), ABISELECT(224,132), "S20753C15");
    /*is_ambiguous_... S20753C4::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*)(S20753C4*), ABISELECT(224,132), "S20753C15");
    /*is_ambiguous_... S20753C2::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*)(S20753C2*), ABISELECT(224,132), "S20753C15");
    /*is_ambiguous_... S20753C11::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C11*), ABISELECT(224,132), "S20753C15");
    /*is_ambiguous_... S20753C11::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*)(S20753C11*), ABISELECT(224,132), "S20753C15");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C5*)(S20753C11*), ABISELECT(224,132), "S20753C15");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C7*)(S20753C5*)(S20753C11*), ABISELECT(224,132), "S20753C15");
    /*is_ambiguous_... S20753C15::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C7*)(S20753C5*), ABISELECT(288,168), "S20753C15");
    /*is_ambiguous_... S20753C10::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C10*), ABISELECT(288,168), "S20753C15");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C7*)(S20753C5*)(S20753C11*), ABISELECT(288,168), "S20753C15");
    /*is_ambiguous_... S20753C15::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C7*)(S20753C5*), ABISELECT(224,132), "S20753C15");
    /*is_ambiguous_... S20753C15::S20753C5 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C5*), ABISELECT(240,140), "S20753C15");
    check_base_class_offset(lv, (S20753C5*)(S20753C4*), ABISELECT(224,132), "S20753C15");
    check_base_class_offset(lv, (S20753C5*)(S20753C12*)(S20753C10*), ABISELECT(224,132), "S20753C15");
    /*is_ambiguous_... S20753C4::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C4*), ABISELECT(168,96), "S20753C15");
    /*is_ambiguous_... S20753C4::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C4*), ABISELECT(160,92), "S20753C15");
    /*is_ambiguous_... S20753C4::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C4*), ABISELECT(176,100), "S20753C15");
    check_base_class_offset(lv, (S20753C4*)(S20753C2*), ABISELECT(160,92), "S20753C15");
    /*is_ambiguous_... S20753C2::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C2*), ABISELECT(112,64), "S20753C15");
    check_base_class_offset(lv, (S20753C2*), ABISELECT(112,64), "S20753C15");
    check_base_class_offset(lv, (S20753C2*)(S20753C11*), ABISELECT(112,64), "S20753C15");
    /*is_ambiguous_... S20753C11::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C11*), ABISELECT(336,196), "S20753C15");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C7*)(S20753C5*)(S20753C11*), ABISELECT(384,224), "S20753C15");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C5*)(S20753C11*), ABISELECT(400,232), "S20753C15");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C5*)(S20753C11*), ABISELECT(384,224), "S20753C15");
    check_base_class_offset(lv, (S20753C11*)(S20753C10*), ABISELECT(336,196), "S20753C15");
    /*is_ambiguous_... S20753C10::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C10*), ABISELECT(448,264), "S20753C15");
    check_base_class_offset(lv, (S5266C26*)(S20753C12*)(S20753C10*), 0, "S20753C15");
    /*is_ambiguous_... S20753C12::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C12*)(S20753C10*), ABISELECT(8,4), "S20753C15");
    check_base_class_offset(lv, (S20753C12*)(S20753C10*), 0, "S20753C15");
    check_base_class_offset(lv, (S20753C10*), 0, "S20753C15");
    check_base_class_offset(lv, (S19905C5_nt*), ABISELECT(96,56), "S20753C15");
    check_field_offset(lv, s20753c15f0, ABISELECT(104,60), "S20753C15.s20753c15f0");
    test_class_info(&lv, &cd_S20753C15);
    dp->~S20753C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20753C15(Test_S20753C15, "S20753C15", ABISELECT(464,268));

#else // __cplusplus

extern void _ZN9S20753C15C1Ev();
extern void _ZN9S20753C15D2Ev();
Name_Map name_map_S20753C15[] = {
  NSPAIR(_ZN9S20753C15C1Ev),
  NSPAIR(_ZN9S20753C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C7;
extern VTBL_ENTRY _ZTI8S20753C7[];
extern  VTBL_ENTRY _ZTV8S20753C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C7[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S20753C5;
extern VTBL_ENTRY _ZTI8S20753C5[];
extern  VTBL_ENTRY _ZTV8S20753C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C5[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C4;
extern VTBL_ENTRY _ZTI8S20753C4[];
extern  VTBL_ENTRY _ZTV8S20753C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C4[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C2;
extern VTBL_ENTRY _ZTI8S20753C2[];
extern  VTBL_ENTRY _ZTV8S20753C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C2[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C7;
extern VTBL_ENTRY _ZTI8S20753C7[];
extern  VTBL_ENTRY _ZTV8S20753C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C7[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S20753C5;
extern VTBL_ENTRY _ZTI8S20753C5[];
extern  VTBL_ENTRY _ZTV8S20753C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C5[];
extern Class_Descriptor cd_S20753C11;
extern VTBL_ENTRY _ZTI9S20753C11[];
extern  VTBL_ENTRY _ZTV9S20753C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C11[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S20753C12;
extern VTBL_ENTRY _ZTI9S20753C12[];
extern  VTBL_ENTRY _ZTV9S20753C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C12[];
extern Class_Descriptor cd_S20753C10;
extern VTBL_ENTRY _ZTI9S20753C10[];
extern  VTBL_ENTRY _ZTV9S20753C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C10[];
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
static Base_Class bases_S20753C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19905C19,    ABISELECT(224,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20753C8,    ABISELECT(288,168), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20753C7,    ABISELECT(224,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20753C5,    ABISELECT(224,132), //bcp->offset
    41, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(168,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19905C19,    ABISELECT(160,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
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20753C8,    ABISELECT(176,100), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20753C4,    ABISELECT(160,92), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20753C8,    ABISELECT(112,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20753C2,    ABISELECT(112,64), //bcp->offset
    17, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20753C8,    ABISELECT(336,196), //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
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20753C7,    ABISELECT(384,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(400,232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20753C5,    ABISELECT(384,224), //bcp->offset
    65, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20753C11,    ABISELECT(336,196), //bcp->offset
    54, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(448,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S17777C6_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
    20, //immediately_derived
  0, 0},
  {&cd_S20753C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20753C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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_S19905C5_nt,    ABISELECT(96,56), //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
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20753C15[];
extern void ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev)();
extern void _ZN9S20753C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev)();
extern void _ZN9S20753C15D0Ev() __attribute__((weak));
extern void ABISELECT(_ZThn96_N9S20753C15D1Ev,_ZThn56_N9S20753C15D1Ev)();
extern void ABISELECT(_ZThn96_N9S20753C15D0Ev,_ZThn56_N9S20753C15D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev)();
extern void ABISELECT(_ZThn112_N9S20753C15D1Ev,_ZThn64_N9S20753C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev)();
extern void ABISELECT(_ZThn112_N9S20753C15D0Ev,_ZThn64_N9S20753C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20753C15D1Ev,_ZTv0_n24_N9S20753C15D1Ev)();
extern void ABISELECT(_ZThn160_N9S20753C15D1Ev,_ZThn92_N9S20753C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20753C15D0Ev,_ZTv0_n24_N9S20753C15D0Ev)();
extern void ABISELECT(_ZThn160_N9S20753C15D0Ev,_ZThn92_N9S20753C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev)();
extern void ABISELECT(_ZThn176_N9S20753C15D1Ev,_ZThn100_N9S20753C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev)();
extern void ABISELECT(_ZThn176_N9S20753C15D0Ev,_ZThn100_N9S20753C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev)();
extern void ABISELECT(_ZThn224_N9S20753C15D1Ev,_ZThn132_N9S20753C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev)();
extern void ABISELECT(_ZThn224_N9S20753C15D0Ev,_ZThn132_N9S20753C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev)();
extern void ABISELECT(_ZThn288_N9S20753C15D1Ev,_ZThn168_N9S20753C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev)();
extern void ABISELECT(_ZThn288_N9S20753C15D0Ev,_ZThn168_N9S20753C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev)();
extern void ABISELECT(_ZThn336_N9S20753C15D1Ev,_ZThn196_N9S20753C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev)();
extern void ABISELECT(_ZThn336_N9S20753C15D0Ev,_ZThn196_N9S20753C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev)();
extern void ABISELECT(_ZThn384_N9S20753C15D1Ev,_ZThn224_N9S20753C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev)();
extern void ABISELECT(_ZThn384_N9S20753C15D0Ev,_ZThn224_N9S20753C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20753C15[] = {
  ABISELECT(448,264),
  ABISELECT(160,92),
  ABISELECT(112,64),
  ABISELECT(336,196),
  0,
  ABISELECT(288,168),
  ABISELECT(224,132),
  ABISELECT(224,132),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S20753C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N9S20753C15D1Ev,_ZThn56_N9S20753C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N9S20753C15D0Ev,_ZThn56_N9S20753C15D0Ev),
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-112,-64),
  ABISELECT(112,68),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI9S20753C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev),
  ABISELECT(-160,-92),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(-160,-92),
  (VTBL_ENTRY)&(_ZTI9S20753C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C15D1Ev,_ZTv0_n24_N9S20753C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C15D0Ev,_ZTv0_n24_N9S20753C15D0Ev),
  ABISELECT(48,32),
  ABISELECT(-176,-100),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI9S20753C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev),
  ABISELECT(64,36),
  0,
  ABISELECT(-224,-132),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI9S20753C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-288,-168),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI9S20753C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-112,-64),
  ABISELECT(-176,-104),
  ABISELECT(-336,-196),
  ABISELECT(-224,-132),
  ABISELECT(-112,-64),
  ABISELECT(-336,-196),
  ABISELECT(-336,-196),
  (VTBL_ENTRY)&(_ZTI9S20753C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev),
  ABISELECT(-96,-56),
  ABISELECT(-160,-92),
  ABISELECT(-384,-224),
  ABISELECT(-384,-224),
  (VTBL_ENTRY)&(_ZTI9S20753C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S20753C15[];
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void _ZN9S20753C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void _ZN9S20753C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C10__9S20753C15[] = {
  ABISELECT(448,264),
  ABISELECT(160,92),
  ABISELECT(112,64),
  ABISELECT(336,196),
  0,
  ABISELECT(288,168),
  ABISELECT(224,132),
  ABISELECT(224,132),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev)();
extern void _ZN9S20753C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev)();
extern void _ZN9S20753C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C129S20753C10__9S20753C15[] = {
  0,
  ABISELECT(288,168),
  ABISELECT(224,132),
  ABISELECT(224,132),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev)();
extern void ABISELECT(_ZThn224_N9S20753C12D1Ev,_ZThn132_N9S20753C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev)();
extern void ABISELECT(_ZThn224_N9S20753C12D0Ev,_ZThn132_N9S20753C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C129S20753C10__9S20753C15[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(-224,-132),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI9S20753C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev)();
extern void ABISELECT(_ZThn288_N9S20753C12D1Ev,_ZThn168_N9S20753C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev)();
extern void ABISELECT(_ZThn288_N9S20753C12D0Ev,_ZThn168_N9S20753C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__9S20753C129S20753C10__9S20753C15[] = {
  ABISELECT(-64,-36),
  ABISELECT(-288,-168),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI9S20753C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn288_N9S20753C10D1Ev,_ZThn168_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn288_N9S20753C10D0Ev,_ZThn168_N9S20753C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__9S20753C10__9S20753C15[] = {
  ABISELECT(-64,-36),
  ABISELECT(-288,-168),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn224_N9S20753C10D1Ev,_ZThn132_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn224_N9S20753C10D0Ev,_ZThn132_N9S20753C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C10__9S20753C15[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(-224,-132),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn336_N9S20753C10D1Ev,_ZThn196_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn336_N9S20753C10D0Ev,_ZThn196_N9S20753C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C11__9S20753C10__9S20753C15[] = {
  ABISELECT(-48,-28),
  ABISELECT(-112,-64),
  ABISELECT(-176,-104),
  ABISELECT(-336,-196),
  ABISELECT(-224,-132),
  ABISELECT(-112,-64),
  ABISELECT(-336,-196),
  ABISELECT(-336,-196),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn112_N9S20753C10D1Ev,_ZThn64_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn112_N9S20753C10D0Ev,_ZThn64_N9S20753C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C2__9S20753C10__9S20753C15[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-112,-64),
  ABISELECT(112,68),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20753C10D1Ev,_ZTv0_n24_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn160_N9S20753C10D1Ev,_ZThn92_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20753C10D0Ev,_ZTv0_n24_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn160_N9S20753C10D0Ev,_ZThn92_N9S20753C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C4__9S20753C10__9S20753C15[] = {
  ABISELECT(-160,-92),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(-160,-92),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C10D1Ev,_ZTv0_n24_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C10D0Ev,_ZTv0_n24_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn176_N9S20753C10D1Ev,_ZThn100_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn176_N9S20753C10D0Ev,_ZThn100_N9S20753C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A2__9S20753C10__9S20753C15[] = {
  ABISELECT(48,32),
  ABISELECT(-176,-100),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn384_N9S20753C10D1Ev,_ZThn224_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn384_N9S20753C10D0Ev,_ZThn224_N9S20753C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C59S20753C11__A1__9S20753C10__9S20753C15[] = {
  ABISELECT(-96,-56),
  ABISELECT(-160,-92),
  ABISELECT(-384,-224),
  ABISELECT(-384,-224),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void _ZN8S20753C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
extern void _ZN8S20753C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C2__9S20753C15[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-112,-64),
  ABISELECT(112,68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C2__A2__9S20753C15[] = {
  ABISELECT(112,68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZThn112_N8S20753C8D1Ev,_ZThn68_N8S20753C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void ABISELECT(_ZThn112_N8S20753C8D0Ev,_ZThn68_N8S20753C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C88S20753C2__A2__9S20753C15[] = {
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20753C2D1Ev,_ZTv0_n24_N8S20753C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S20753C2D1Ev,_ZThn28_N8S20753C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20753C2D0Ev,_ZTv0_n24_N8S20753C2D0Ev)();
extern void ABISELECT(_ZThn48_N8S20753C2D0Ev,_ZThn28_N8S20753C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C4__8S20753C2__9S20753C15[] = {
  ABISELECT(-48,-28),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20753C2D1Ev,_ZTv0_n24_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20753C2D0Ev,_ZTv0_n24_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void ABISELECT(_ZThn112_N8S20753C2D1Ev,_ZThn68_N8S20753C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
extern void ABISELECT(_ZThn112_N8S20753C2D0Ev,_ZThn68_N8S20753C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__8S20753C2__9S20753C15[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void ABISELECT(_ZThn176_N8S20753C2D1Ev,_ZThn104_N8S20753C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
extern void ABISELECT(_ZThn176_N8S20753C2D0Ev,_ZThn104_N8S20753C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C2__9S20753C15[] = {
  ABISELECT(-64,-36),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C2D1Ev,_ZThn36_N8S20753C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C2D0Ev,_ZThn36_N8S20753C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A1__8S20753C2__9S20753C15[] = {
  ABISELECT(48,32),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void _ZN8S20753C4D1Ev();
extern void _ZN8S20753C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20753C4__9S20753C15[] = {
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&_ZN8S20753C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20753C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A1__9S20753C15[] = {
  ABISELECT(48,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZThn48_N8S20753C8D1Ev,_ZThn32_N8S20753C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void ABISELECT(_ZThn48_N8S20753C8D0Ev,_ZThn32_N8S20753C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C88S20753C4__A1__9S20753C15[] = {
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C4D1Ev,_ZThn40_N8S20753C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C4D0Ev,_ZThn40_N8S20753C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__8S20753C4__9S20753C15[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZThn128_N8S20753C4D1Ev,_ZThn76_N8S20753C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
extern void ABISELECT(_ZThn128_N8S20753C4D0Ev,_ZThn76_N8S20753C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C4__9S20753C15[] = {
  ABISELECT(-64,-36),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZThn16_N8S20753C4D1Ev,_ZThn8_N8S20753C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
extern void ABISELECT(_ZThn16_N8S20753C4D0Ev,_ZThn8_N8S20753C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__A__8S20753C4__9S20753C15[] = {
  ABISELECT(48,32),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void _ZN8S20753C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void _ZN8S20753C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C15[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void _ZN8S20753C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void _ZN8S20753C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C78S20753C5__9S20753C15[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C7D1Ev,_ZThn36_N8S20753C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C7D0Ev,_ZThn36_N8S20753C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C78S20753C5__9S20753C15[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C5D1Ev,_ZThn36_N8S20753C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C5D0Ev,_ZThn36_N8S20753C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C5__9S20753C15[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__9S20753C15[] = {
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C8__9S20753C15[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void _ZN9S20753C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
extern void _ZN9S20753C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C11__9S20753C15[] = {
  ABISELECT(-48,-28),
  ABISELECT(-112,-64),
  ABISELECT(-176,-104),
  ABISELECT(-336,-196),
  ABISELECT(-224,-132),
  ABISELECT(-112,-64),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C89S20753C11__A3__9S20753C15[] = {
  ABISELECT(-112,-64),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C89S20753C11__A3__9S20753C15[] = {
  ABISELECT(112,64),
  ABISELECT(112,64),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void _ZN8S20753C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void _ZN8S20753C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C59S20753C11__A1__9S20753C15[] = {
  ABISELECT(-96,-56),
  ABISELECT(-160,-92),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void _ZN8S20753C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void _ZN8S20753C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C78S20753C59S20753C11__A1__9S20753C15[] = {
  ABISELECT(-96,-56),
  ABISELECT(-160,-92),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C78S20753C59S20753C11__A1__9S20753C15[] = {
  ABISELECT(160,92),
  ABISELECT(160,92),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C78S20753C59S20753C11__A1__9S20753C15[] = {
  ABISELECT(-64,-36),
  ABISELECT(96,56),
  ABISELECT(96,56),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C59S20753C11__A1__9S20753C15[] = {
  ABISELECT(160,92),
  ABISELECT(160,92),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C59S20753C11__A1__9S20753C15[] = {
  ABISELECT(-64,-36),
  ABISELECT(96,56),
  ABISELECT(96,56),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C11__9S20753C15[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(112,64),
  ABISELECT(112,64),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C2__9S20753C11__9S20753C15[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-112,-64),
  ABISELECT(112,68),
  ABISELECT(224,132),
  ABISELECT(224,132),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20753C11D1Ev,_ZTv0_n24_N9S20753C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20753C11D0Ev,_ZTv0_n24_N9S20753C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C4__9S20753C11__9S20753C15[] = {
  ABISELECT(176,104),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C11D1Ev,_ZTv0_n24_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C11D0Ev,_ZTv0_n24_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__A1__9S20753C11__9S20753C15[] = {
  ABISELECT(-64,-36),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A2__9S20753C11__9S20753C15[] = {
  ABISELECT(48,32),
  ABISELECT(160,96),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZThn48_N9S20753C11D1Ev,_ZThn28_N9S20753C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
extern void ABISELECT(_ZThn48_N9S20753C11D0Ev,_ZThn28_N9S20753C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__A__9S20753C11__9S20753C15[] = {
  ABISELECT(-96,-56),
  ABISELECT(-160,-92),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
static  VTT_ENTRY vtt_S20753C15[] = {
  {&(_ZTV9S20753C15[11]),  11,72},
  {&(_tg__ZTV9S20753C10__9S20753C15[11]),  11,13},
  {&(_tg__ZTV9S20753C129S20753C10__9S20753C15[7]),  7,9},
  {&(_tg__ZTV8S20753C5__9S20753C129S20753C10__9S20753C15[5]),  5,7},
  {&(_tg__ZTV8S20753C5__9S20753C129S20753C10__9S20753C15[5]),  5,7},
  {&(_tg__ZTV8S20753C8__9S20753C129S20753C10__9S20753C15[4]),  4,6},
  {&(_tg__ZTV8S20753C8__9S20753C10__9S20753C15[4]),  4,6},
  {&(_tg__ZTV8S20753C5__9S20753C10__9S20753C15[5]),  5,7},
  {&(_tg__ZTV9S20753C11__9S20753C10__9S20753C15[9]),  9,11},
  {&(_tg__ZTV8S20753C2__9S20753C10__9S20753C15[8]),  8,10},
  {&(_tg__ZTV8S20753C4__9S20753C10__9S20753C15[6]),  6,8},
  {&(_tg__ZTV8S20753C5__9S20753C10__9S20753C15[5]),  5,7},
  {&(_tg__ZTV8S20753C88S20753C4__A2__9S20753C10__9S20753C15[4]),  4,6},
  {&(_tg__ZTV8S20753C59S20753C11__A1__9S20753C10__9S20753C15[5]),  5,7},
  {&(_ZTV9S20753C15[25]),  25,72},
  {&(_ZTV9S20753C15[33]),  33,72},
  {&(_ZTV9S20753C15[46]),  46,72},
  {&(_ZTV9S20753C15[46]),  46,72},
  {&(_ZTV9S20753C15[52]),  52,72},
  {&(_ZTV9S20753C15[39]),  39,72},
  {&(_ZTV9S20753C15[63]),  63,72},
  {&(_ZTV9S20753C15[70]),  70,72},
  {&(_tg__ZTV8S20753C2__9S20753C15[8]),  8,10},
  {&(_tg__ZTV8S20753C88S20753C2__A2__9S20753C15[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C88S20753C2__A2__9S20753C15[3]),  3,5},
  {&(_tg__ZTV8S20753C4__8S20753C2__9S20753C15[6]),  6,8},
  {&(_tg__ZTV8S20753C5__8S20753C2__9S20753C15[5]),  5,7},
  {&(_tg__ZTV8S20753C5__8S20753C2__9S20753C15[5]),  5,7},
  {&(_tg__ZTV8S20753C8__8S20753C2__9S20753C15[4]),  4,6},
  {&(_tg__ZTV8S20753C88S20753C4__A1__8S20753C2__9S20753C15[4]),  4,6},
  {&(_tg__ZTV8S20753C4__9S20753C15[5]),  5,7},
  {&(_tg__ZTV8S20753C88S20753C4__A1__9S20753C15[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C88S20753C4__A1__9S20753C15[3]),  3,5},
  {&(_tg__ZTV8S20753C5__8S20753C4__9S20753C15[5]),  5,7},
  {&(_tg__ZTV8S20753C5__8S20753C4__9S20753C15[5]),  5,7},
  {&(_tg__ZTV8S20753C8__8S20753C4__9S20753C15[4]),  4,6},
  {&(_tg__ZTV8S20753C8__A__8S20753C4__9S20753C15[4]),  4,6},
  {&(_tg__ZTV8S20753C5__9S20753C15[5]),  5,7},
  {&(_tg__ZTV8S20753C78S20753C5__9S20753C15[5]),  5,7},
  {&(_tg__ZTV8S20753C78S20753C5__9S20753C15[5]),  5,7},
  {&(_tg__ZTV8S20753C8__8S20753C78S20753C5__9S20753C15[4]),  4,6},
  {&(_tg__ZTV8S20753C5__9S20753C15[5]),  5,7},
  {&(_tg__ZTV8S20753C8__8S20753C5__9S20753C15[4]),  4,6},
  {&(_tg__ZTV8S20753C8__9S20753C15[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C8__9S20753C15[3]),  3,5},
  {&(_tg__ZTV9S20753C11__9S20753C15[9]),  9,11},
  {&(_tg__ZTV8S20753C89S20753C11__A3__9S20753C15[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C89S20753C11__A3__9S20753C15[3]),  3,5},
  {&(_tg__ZTV8S20753C59S20753C11__A1__9S20753C15[5]),  5,7},
  {&(_tg__ZTV8S20753C78S20753C59S20753C11__A1__9S20753C15[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S20753C78S20753C59S20753C11__A1__9S20753C15[3]),  3,5},
  {&(_tg__ZTV8S20753C8__8S20753C78S20753C59S20753C11__A1__9S20753C15[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C59S20753C11__A1__9S20753C15[3]),  3,5},
  {&(_tg__ZTV8S20753C8__8S20753C59S20753C11__A1__9S20753C15[4]),  4,6},
  {&(_tg__ZTV8S20753C5__9S20753C11__9S20753C15[5]),  5,7},
  {&(_tg__ZTV8S20753C2__9S20753C11__9S20753C15[8]),  8,10},
  {&(_tg__ZTV8S20753C4__9S20753C11__9S20753C15[6]),  6,8},
  {&(_tg__ZTV8S20753C5__9S20753C11__9S20753C15[5]),  5,7},
  {&(_tg__ZTV8S20753C8__A1__9S20753C11__9S20753C15[4]),  4,6},
  {&(_tg__ZTV8S20753C88S20753C4__A2__9S20753C11__9S20753C15[4]),  4,6},
  {&(_tg__ZTV8S20753C5__A__9S20753C11__9S20753C15[5]),  5,7},
};
extern VTBL_ENTRY _ZTI9S20753C15[];
extern  VTBL_ENTRY _ZTV9S20753C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C15[];
static VTBL_ENTRY alt_thunk_names29[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20753C11D0Ev,_ZThn28_N9S20753C11D0Ev),
  (VTBL_ENTRY)_ZN9S20753C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20753C11D1Ev,_ZThn28_N9S20753C11D1Ev),
  (VTBL_ENTRY)_ZN9S20753C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S20753C7D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C7D0Ev,_ZThn36_N8S20753C7D0Ev),
  (VTBL_ENTRY)_ZN8S20753C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S20753C7D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C7D1Ev,_ZThn36_N8S20753C7D1Ev),
  (VTBL_ENTRY)_ZN8S20753C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20753C5D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C5D0Ev,_ZThn36_N8S20753C5D0Ev),
  (VTBL_ENTRY)_ZN8S20753C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20753C5D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C5D1Ev,_ZThn36_N8S20753C5D1Ev),
  (VTBL_ENTRY)_ZN8S20753C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20753C4D0Ev,_ZThn8_N8S20753C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20753C4D0Ev,_ZThn76_N8S20753C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C4D0Ev,_ZThn40_N8S20753C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20753C4D1Ev,_ZThn8_N8S20753C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20753C4D1Ev,_ZThn76_N8S20753C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C4D1Ev,_ZThn40_N8S20753C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20753C2D0Ev,_ZTv0_n24_N8S20753C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20753C2D0Ev,_ZThn28_N8S20753C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20753C2D1Ev,_ZTv0_n24_N8S20753C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20753C2D1Ev,_ZThn28_N8S20753C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev), // 
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20753C8D0Ev,_ZThn32_N8S20753C8D0Ev),
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20753C8D0Ev,_ZThn68_N8S20753C8D0Ev),
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev), // 
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20753C8D1Ev,_ZThn32_N8S20753C8D1Ev),
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20753C8D1Ev,_ZThn68_N8S20753C8D1Ev),
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C2D0Ev,_ZThn36_N8S20753C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20753C2D0Ev,_ZThn104_N8S20753C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20753C2D0Ev,_ZThn68_N8S20753C2D0Ev),
  (VTBL_ENTRY)_ZN8S20753C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C2D1Ev,_ZThn36_N8S20753C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20753C2D1Ev,_ZThn104_N8S20753C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20753C2D1Ev,_ZThn68_N8S20753C2D1Ev),
  (VTBL_ENTRY)_ZN8S20753C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20753C10D0Ev,_ZTv0_n24_N9S20753C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S20753C10D0Ev,_ZThn92_N9S20753C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20753C10D1Ev,_ZTv0_n24_N9S20753C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S20753C10D1Ev,_ZThn92_N9S20753C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S20753C12D0Ev,_ZThn168_N9S20753C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20753C12D0Ev,_ZThn132_N9S20753C12D0Ev),
  (VTBL_ENTRY)_ZN9S20753C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S20753C12D1Ev,_ZThn168_N9S20753C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20753C12D1Ev,_ZThn132_N9S20753C12D1Ev),
  (VTBL_ENTRY)_ZN9S20753C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S20753C10D0Ev,_ZThn224_N9S20753C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20753C10D0Ev,_ZThn100_N9S20753C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20753C10D0Ev,_ZThn64_N9S20753C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn336_N9S20753C10D0Ev,_ZThn196_N9S20753C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20753C10D0Ev,_ZThn132_N9S20753C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S20753C10D0Ev,_ZThn168_N9S20753C10D0Ev),
  (VTBL_ENTRY)_ZN9S20753C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S20753C10D1Ev,_ZThn224_N9S20753C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20753C10D1Ev,_ZThn100_N9S20753C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20753C10D1Ev,_ZThn64_N9S20753C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn336_N9S20753C10D1Ev,_ZThn196_N9S20753C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20753C10D1Ev,_ZThn132_N9S20753C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S20753C10D1Ev,_ZThn168_N9S20753C10D1Ev),
  (VTBL_ENTRY)_ZN9S20753C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20753C15D0Ev,_ZTv0_n24_N9S20753C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S20753C15D0Ev,_ZThn92_N9S20753C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20753C15D1Ev,_ZTv0_n24_N9S20753C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S20753C15D1Ev,_ZThn92_N9S20753C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S20753C15D0Ev,_ZThn224_N9S20753C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn336_N9S20753C15D0Ev,_ZThn196_N9S20753C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S20753C15D0Ev,_ZThn168_N9S20753C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20753C15D0Ev,_ZThn132_N9S20753C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20753C15D0Ev,_ZThn100_N9S20753C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20753C15D0Ev,_ZThn64_N9S20753C15D0Ev),
  (VTBL_ENTRY)_ZN9S20753C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S20753C15D1Ev,_ZThn224_N9S20753C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn336_N9S20753C15D1Ev,_ZThn196_N9S20753C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S20753C15D1Ev,_ZThn168_N9S20753C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20753C15D1Ev,_ZThn132_N9S20753C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20753C15D1Ev,_ZThn100_N9S20753C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20753C15D1Ev,_ZThn64_N9S20753C15D1Ev),
  (VTBL_ENTRY)_ZN9S20753C15D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20753C15 = {  "S20753C15", // class name
  bases_S20753C15, 23,
  &(vtc_S20753C15[0]), // expected_vtbl_contents
  &(vtt_S20753C15[0]), // expected_vtt_contents
  ABISELECT(464,268), // object size
  NSPAIRA(_ZTI9S20753C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20753C15),72, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20753C15),61, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names29,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20753C18  : virtual S20753C8 , virtual S20753C7 , virtual S5266C26 , virtual S20753C2 , S20753C5 {
  ::S20753C4 s20753c18f0;
  int s20753c18f1;
  short s20753c18f2;
  virtual  ~S20753C18(); // _ZN9S20753C18D2Ev
  S20753C18(); // tgen
};
//SIG(-1 S20753C18) C1{ VBC2{ VBC3{ vd m} FD Fc Fs[4]} VBC4{ VBC3 VBC2 vd Fi} VBC5{ m} VBC6{ VBC7{ m} VBC8{ VBC9{ VBC3 BC4 BC10{ m Fp} vd Fs FL Fp FL} BC10 BC3 BC2 vd Fi} BC2 vd Fs} BC9 vd FC8 Fi Fs}


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

static void Test_S20753C18()
{
  extern Class_Descriptor cd_S20753C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(32,73)];
    init_test(&cd_S20753C18, buf);
    S20753C18 *dp, &lv = *(dp=new (buf) S20753C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(496,288), "sizeof(S20753C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20753C18)");
    /*is_ambiguous_... S20753C18::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*), ABISELECT(256,148), "S20753C18");
    /*is_ambiguous_... S20753C18::S20753C7 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C7*), ABISELECT(256,148), "S20753C18");
    /*is_ambiguous_... S20753C18::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C5*), ABISELECT(256,148), "S20753C18");
    /*is_ambiguous_... S20753C18::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C7*)(S20753C5*), ABISELECT(256,148), "S20753C18");
    /*is_ambiguous_... S20753C4::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*)(S20753C4*), ABISELECT(256,148), "S20753C18");
    /*is_ambiguous_... S20753C2::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*)(S20753C2*), ABISELECT(256,148), "S20753C18");
    /*is_ambiguous_... S20753C18::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C5*), ABISELECT(256,148), "S20753C18");
    /*is_ambiguous_... S20753C18::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C7*)(S20753C5*), ABISELECT(256,148), "S20753C18");
    /*is_ambiguous_... S20753C18::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*), ABISELECT(256,148), "S20753C18");
    /*is_ambiguous_... S20753C18::S20753C7 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C7*), ABISELECT(256,148), "S20753C18");
    /*is_ambiguous_... S20753C18::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C7*)(S20753C5*), ABISELECT(256,148), "S20753C18");
    /*is_ambiguous_... S20753C18::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C7*)(S20753C5*), ABISELECT(256,148), "S20753C18");
    /*is_ambiguous_... S20753C18::S20753C7 */ AMB_check_base_class_offset(lv, (S20753C7*), ABISELECT(304,176), "S20753C18");
    check_base_class_offset(lv, (S5266C26*), 0, "S20753C18");
    check_base_class_offset(lv, (S5266C29*)(S20753C2*), 0, "S20753C18");
    /*is_ambiguous_... S20753C18::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C7*)(S20753C5*), ABISELECT(432,252), "S20753C18");
    /*is_ambiguous_... S20753C18::S20753C5 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C5*), ABISELECT(448,260), "S20753C18");
    check_base_class_offset(lv, (S20753C5*)(S20753C4*), ABISELECT(432,252), "S20753C18");
    /*is_ambiguous_... S20753C4::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C4*), ABISELECT(376,216), "S20753C18");
    /*is_ambiguous_... S20753C4::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C4*), ABISELECT(368,212), "S20753C18");
    /*is_ambiguous_... S20753C4::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C4*), ABISELECT(384,220), "S20753C18");
    check_base_class_offset(lv, (S20753C4*)(S20753C2*), ABISELECT(368,212), "S20753C18");
    /*is_ambiguous_... S20753C2::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C2*), ABISELECT(320,184), "S20753C18");
    check_base_class_offset(lv, (S20753C2*), ABISELECT(320,184), "S20753C18");
    /*is_ambiguous_... S20753C18::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C7*)(S20753C5*), 0, "S20753C18");
    /*is_ambiguous_... S20753C18::S20753C5 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C5*), ABISELECT(16,8), "S20753C18");
    /*is_ambiguous_... S20753C18::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C5*), 0, "S20753C18");
    check_field_offset(lv, s20753c18f0, ABISELECT(64,36), "S20753C18.s20753c18f0");
    check_field_offset(lv, s20753c18f1, ABISELECT(240,140), "S20753C18.s20753c18f1");
    check_field_offset(lv, s20753c18f2, ABISELECT(244,144), "S20753C18.s20753c18f2");
    test_class_info(&lv, &cd_S20753C18);
    dp->~S20753C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20753C18(Test_S20753C18, "S20753C18", ABISELECT(496,288));

#else // __cplusplus

extern void _ZN9S20753C18C1Ev();
extern void _ZN9S20753C18D2Ev();
Name_Map name_map_S20753C18[] = {
  NSPAIR(_ZN9S20753C18C1Ev),
  NSPAIR(_ZN9S20753C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C7;
extern VTBL_ENTRY _ZTI8S20753C7[];
extern  VTBL_ENTRY _ZTV8S20753C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C7[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S20753C7;
extern VTBL_ENTRY _ZTI8S20753C7[];
extern  VTBL_ENTRY _ZTV8S20753C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C7[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S20753C5;
extern VTBL_ENTRY _ZTI8S20753C5[];
extern  VTBL_ENTRY _ZTV8S20753C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C5[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C4;
extern VTBL_ENTRY _ZTI8S20753C4[];
extern  VTBL_ENTRY _ZTV8S20753C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C4[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C2;
extern VTBL_ENTRY _ZTI8S20753C2[];
extern  VTBL_ENTRY _ZTV8S20753C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C2[];
extern Class_Descriptor cd_S20753C7;
extern VTBL_ENTRY _ZTI8S20753C7[];
extern  VTBL_ENTRY _ZTV8S20753C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C7[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S20753C5;
extern VTBL_ENTRY _ZTI8S20753C5[];
extern  VTBL_ENTRY _ZTV8S20753C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C5[];
static Base_Class bases_S20753C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    ABISELECT(256,148), //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
    1, //immediately_derived
  0, 1},
  {&cd_S20753C8,    ABISELECT(256,148), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20753C7,    ABISELECT(304,176), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20753C7,    ABISELECT(432,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(448,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20753C5,    ABISELECT(432,252), //bcp->offset
    50, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(376,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
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19905C19,    ABISELECT(368,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
    6, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20753C8,    ABISELECT(384,220), //bcp->offset
    44, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20753C4,    ABISELECT(368,212), //bcp->offset
    36, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20753C8,    ABISELECT(320,184), //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
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20753C2,    ABISELECT(320,184), //bcp->offset
    26, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20753C7,    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
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S17777C6_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
    16, //immediately_derived
  0, 0},
  {&cd_S20753C5,    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},
  {0}};
extern VTBL_ENTRY _ZTI9S20753C18[];
extern void ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev)();
extern void _ZN9S20753C18D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev)();
extern void _ZN9S20753C18D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev)();
extern void ABISELECT(_ZThn256_N9S20753C18D1Ev,_ZThn148_N9S20753C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev)();
extern void ABISELECT(_ZThn256_N9S20753C18D0Ev,_ZThn148_N9S20753C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev)();
extern void ABISELECT(_ZThn304_N9S20753C18D1Ev,_ZThn176_N9S20753C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev)();
extern void ABISELECT(_ZThn304_N9S20753C18D0Ev,_ZThn176_N9S20753C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev)();
extern void ABISELECT(_ZThn320_N9S20753C18D1Ev,_ZThn184_N9S20753C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev)();
extern void ABISELECT(_ZThn320_N9S20753C18D0Ev,_ZThn184_N9S20753C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20753C18D1Ev,_ZTv0_n24_N9S20753C18D1Ev)();
extern void ABISELECT(_ZThn368_N9S20753C18D1Ev,_ZThn212_N9S20753C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20753C18D0Ev,_ZTv0_n24_N9S20753C18D0Ev)();
extern void ABISELECT(_ZThn368_N9S20753C18D0Ev,_ZThn212_N9S20753C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev)();
extern void ABISELECT(_ZThn384_N9S20753C18D1Ev,_ZThn220_N9S20753C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev)();
extern void ABISELECT(_ZThn384_N9S20753C18D0Ev,_ZThn220_N9S20753C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev)();
extern void ABISELECT(_ZThn432_N9S20753C18D1Ev,_ZThn252_N9S20753C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev)();
extern void ABISELECT(_ZThn432_N9S20753C18D0Ev,_ZThn252_N9S20753C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20753C18[] = {
  ABISELECT(432,252),
  ABISELECT(368,212),
  0,
  ABISELECT(320,184),
  0,
  ABISELECT(304,176),
  ABISELECT(256,148),
  ABISELECT(256,148),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev),
  0,
  ABISELECT(-256,-148),
  ABISELECT(-256,-148),
  (VTBL_ENTRY)&(_ZTI9S20753C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-304,-176),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI9S20753C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-320,-184),
  ABISELECT(-64,-36),
  ABISELECT(-320,-184),
  ABISELECT(-320,-184),
  (VTBL_ENTRY)&(_ZTI9S20753C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev),
  ABISELECT(-368,-212),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  ABISELECT(64,40),
  ABISELECT(-368,-212),
  (VTBL_ENTRY)&(_ZTI9S20753C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C18D1Ev,_ZTv0_n24_N9S20753C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C18D0Ev,_ZTv0_n24_N9S20753C18D0Ev),
  ABISELECT(-128,-72),
  ABISELECT(-384,-220),
  ABISELECT(-384,-220),
  (VTBL_ENTRY)&(_ZTI9S20753C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  ABISELECT(-432,-252),
  ABISELECT(-432,-252),
  (VTBL_ENTRY)&(_ZTI9S20753C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev),
};
extern VTBL_ENTRY _ZTV9S20753C18[];
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void _ZN8S20753C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void _ZN8S20753C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__A__9S20753C18[] = {
  ABISELECT(256,148),
  ABISELECT(256,148),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void _ZN8S20753C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void _ZN8S20753C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C78S20753C5__A2__9S20753C18[] = {
  ABISELECT(256,148),
  ABISELECT(256,148),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZThn256_N8S20753C7D1Ev,_ZThn148_N8S20753C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void ABISELECT(_ZThn256_N8S20753C7D0Ev,_ZThn148_N8S20753C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C78S20753C5__A2__9S20753C18[] = {
  0,
  ABISELECT(-256,-148),
  ABISELECT(-256,-148),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZThn256_N8S20753C5D1Ev,_ZThn148_N8S20753C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void ABISELECT(_ZThn256_N8S20753C5D0Ev,_ZThn148_N8S20753C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C5__A__9S20753C18[] = {
  0,
  ABISELECT(-256,-148),
  ABISELECT(-256,-148),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__9S20753C18[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void _ZN8S20753C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void _ZN8S20753C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C7__9S20753C18[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C7__9S20753C18[] = {
  0,
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void _ZN8S20753C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
extern void _ZN8S20753C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C2__9S20753C18[] = {
  ABISELECT(-64,-36),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-320,-184),
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C2__A2__9S20753C18[] = {
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C88S20753C2__A2__9S20753C18[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20753C2D1Ev,_ZTv0_n24_N8S20753C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S20753C2D1Ev,_ZThn28_N8S20753C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20753C2D0Ev,_ZTv0_n24_N8S20753C2D0Ev)();
extern void ABISELECT(_ZThn48_N8S20753C2D0Ev,_ZThn28_N8S20753C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C4__8S20753C2__9S20753C18[] = {
  ABISELECT(-48,-28),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  ABISELECT(64,40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20753C2D1Ev,_ZTv0_n24_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20753C2D0Ev,_ZTv0_n24_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void ABISELECT(_ZThn112_N8S20753C2D1Ev,_ZThn68_N8S20753C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
extern void ABISELECT(_ZThn112_N8S20753C2D0Ev,_ZThn68_N8S20753C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__8S20753C2__9S20753C18[] = {
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C2__9S20753C18[] = {
  0,
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C2D1Ev,_ZThn36_N8S20753C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C2D0Ev,_ZThn36_N8S20753C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A1__8S20753C2__9S20753C18[] = {
  ABISELECT(-128,-72),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void _ZN8S20753C4D1Ev();
extern void _ZN8S20753C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20753C4__9S20753C18[] = {
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&_ZN8S20753C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20753C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A1__9S20753C18[] = {
  ABISELECT(-128,-72),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C88S20753C4__A1__9S20753C18[] = {
  ABISELECT(128,72),
  ABISELECT(128,72),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C4D1Ev,_ZThn40_N8S20753C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C4D0Ev,_ZThn40_N8S20753C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__8S20753C4__9S20753C18[] = {
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C4__9S20753C18[] = {
  0,
  ABISELECT(112,64),
  ABISELECT(112,64),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZThn16_N8S20753C4D1Ev,_ZThn8_N8S20753C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
extern void ABISELECT(_ZThn16_N8S20753C4D0Ev,_ZThn8_N8S20753C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__A__8S20753C4__9S20753C18[] = {
  ABISELECT(-128,-72),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void _ZN8S20753C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void _ZN8S20753C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C18[] = {
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void _ZN8S20753C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void _ZN8S20753C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C78S20753C5__A1__9S20753C18[] = {
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C78S20753C5__A1__9S20753C18[] = {
  0,
  ABISELECT(176,104),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C5__9S20753C18[] = {
  0,
  ABISELECT(176,104),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
static  VTT_ENTRY vtt_S20753C18[] = {
  {&(_ZTV9S20753C18[11]),  11,57},
  {&(_tg__ZTV8S20753C5__A__9S20753C18[5]),  5,7},
  {&(_tg__ZTV8S20753C78S20753C5__A2__9S20753C18[5]),  5,7},
  {&(_tg__ZTV8S20753C8__8S20753C78S20753C5__A2__9S20753C18[4]),  4,6},
  {&(_tg__ZTV8S20753C8__8S20753C78S20753C5__A2__9S20753C18[4]),  4,6},
  {&(_tg__ZTV8S20753C8__8S20753C5__A__9S20753C18[4]),  4,6},
  {&(_tg__ZTV8S20753C8__8S20753C5__A__9S20753C18[4]),  4,6},
  {&(_ZTV9S20753C18[17]),  17,57},
  {&(_ZTV9S20753C18[17]),  17,57},
  {&(_ZTV9S20753C18[24]),  24,57},
  {&(_ZTV9S20753C18[34]),  34,57},
  {&(_ZTV9S20753C18[42]),  42,57},
  {&(_ZTV9S20753C18[55]),  55,57},
  {&(_ZTV9S20753C18[48]),  48,57},
  {&(_tg__ZTV8S20753C8__9S20753C18[4]),  4,6},
  {&(_tg__ZTV8S20753C8__9S20753C18[4]),  4,6},
  {&(_tg__ZTV8S20753C7__9S20753C18[5]),  5,7},
  {&(_tg__ZTV8S20753C8__8S20753C7__9S20753C18[4]),  4,6},
  {&(_tg__ZTV8S20753C8__8S20753C7__9S20753C18[4]),  4,6},
  {&(_tg__ZTV8S20753C2__9S20753C18[8]),  8,10},
  {&(_tg__ZTV8S20753C88S20753C2__A2__9S20753C18[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C88S20753C2__A2__9S20753C18[3]),  3,5},
  {&(_tg__ZTV8S20753C4__8S20753C2__9S20753C18[6]),  6,8},
  {&(_tg__ZTV8S20753C5__8S20753C2__9S20753C18[5]),  5,7},
  {&(_tg__ZTV8S20753C8__8S20753C2__9S20753C18[4]),  4,6},
  {&(_tg__ZTV8S20753C8__8S20753C2__9S20753C18[4]),  4,6},
  {&(_tg__ZTV8S20753C88S20753C4__A1__8S20753C2__9S20753C18[4]),  4,6},
  {&(_tg__ZTV8S20753C4__9S20753C18[5]),  5,7},
  {&(_tg__ZTV8S20753C88S20753C4__A1__9S20753C18[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C88S20753C4__A1__9S20753C18[3]),  3,5},
  {&(_tg__ZTV8S20753C5__8S20753C4__9S20753C18[5]),  5,7},
  {&(_tg__ZTV8S20753C8__8S20753C4__9S20753C18[4]),  4,6},
  {&(_tg__ZTV8S20753C8__8S20753C4__9S20753C18[4]),  4,6},
  {&(_tg__ZTV8S20753C8__A__8S20753C4__9S20753C18[4]),  4,6},
  {&(_tg__ZTV8S20753C5__9S20753C18[5]),  5,7},
  {&(_tg__ZTV8S20753C78S20753C5__A1__9S20753C18[5]),  5,7},
  {&(_tg__ZTV8S20753C8__8S20753C78S20753C5__A1__9S20753C18[4]),  4,6},
  {&(_tg__ZTV8S20753C8__8S20753C78S20753C5__A1__9S20753C18[4]),  4,6},
  {&(_tg__ZTV8S20753C8__8S20753C5__9S20753C18[4]),  4,6},
  {&(_tg__ZTV8S20753C8__8S20753C5__9S20753C18[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S20753C18[];
extern  VTBL_ENTRY _ZTV9S20753C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C18[];
static VTBL_ENTRY alt_thunk_names30[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20753C4D0Ev,_ZThn8_N8S20753C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C4D0Ev,_ZThn40_N8S20753C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20753C4D1Ev,_ZThn8_N8S20753C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C4D1Ev,_ZThn40_N8S20753C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20753C2D0Ev,_ZTv0_n24_N8S20753C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20753C2D0Ev,_ZThn28_N8S20753C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20753C2D1Ev,_ZTv0_n24_N8S20753C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20753C2D1Ev,_ZThn28_N8S20753C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C2D0Ev,_ZThn36_N8S20753C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20753C2D0Ev,_ZThn68_N8S20753C2D0Ev),
  (VTBL_ENTRY)_ZN8S20753C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C2D1Ev,_ZThn36_N8S20753C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20753C2D1Ev,_ZThn68_N8S20753C2D1Ev),
  (VTBL_ENTRY)_ZN8S20753C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev), // 
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev), // 
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S20753C7D0Ev,
  (VTBL_ENTRY)_ZN8S20753C7D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S20753C7D0Ev,_ZThn148_N8S20753C7D0Ev),
  (VTBL_ENTRY)_ZN8S20753C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S20753C7D1Ev,
  (VTBL_ENTRY)_ZN8S20753C7D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S20753C7D1Ev,_ZThn148_N8S20753C7D1Ev),
  (VTBL_ENTRY)_ZN8S20753C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20753C5D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S20753C5D0Ev,_ZThn148_N8S20753C5D0Ev),
  (VTBL_ENTRY)_ZN8S20753C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20753C5D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S20753C5D1Ev,_ZThn148_N8S20753C5D1Ev),
  (VTBL_ENTRY)_ZN8S20753C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20753C18D0Ev,_ZTv0_n24_N9S20753C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S20753C18D0Ev,_ZThn212_N9S20753C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20753C18D1Ev,_ZTv0_n24_N9S20753C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S20753C18D1Ev,_ZThn212_N9S20753C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S20753C18D0Ev,_ZThn252_N9S20753C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S20753C18D0Ev,_ZThn220_N9S20753C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S20753C18D0Ev,_ZThn184_N9S20753C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S20753C18D0Ev,_ZThn176_N9S20753C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S20753C18D0Ev,_ZThn148_N9S20753C18D0Ev),
  (VTBL_ENTRY)_ZN9S20753C18D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S20753C18D1Ev,_ZThn252_N9S20753C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S20753C18D1Ev,_ZThn220_N9S20753C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S20753C18D1Ev,_ZThn184_N9S20753C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S20753C18D1Ev,_ZThn176_N9S20753C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S20753C18D1Ev,_ZThn148_N9S20753C18D1Ev),
  (VTBL_ENTRY)_ZN9S20753C18D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20753C18 = {  "S20753C18", // class name
  bases_S20753C18, 17,
  &(vtc_S20753C18[0]), // expected_vtbl_contents
  &(vtt_S20753C18[0]), // expected_vtt_contents
  ABISELECT(496,288), // object size
  NSPAIRA(_ZTI9S20753C18),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20753C18),57, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20753C18),40, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names30,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20753C19  : virtual S5266C26 , S20753C10 , S5266C29 {
  virtual  ~S20753C19(); // _ZN9S20753C19D2Ev
  S20753C19(); // tgen
};
//SIG(-1 S20753C19) C1{ VBC2{ m} BC3{ VBC4{ VBC5{ vd m} FD Fc Fs[4]} VBC6{ VBC5 BC4 VBC7{ VBC8{ m} VBC9{ VBC10{ VBC5 BC11{ VBC5 VBC4 vd Fi} BC12{ m Fp} vd Fs FL Fp FL} BC12 BC5 BC4 vd Fi} BC4 vd Fs} BC10 Fp} VBC12 BC13{ BC2 VBC10 BC12 VBC8 vd FC11 Fs} vd Fi FC14{}} BC8 vd}


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

static void Test_S20753C19()
{
  extern Class_Descriptor cd_S20753C19;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,66)];
    init_test(&cd_S20753C19, buf);
    S20753C19 *dp, &lv = *(dp=new (buf) S20753C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,260), "sizeof(S20753C19)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20753C19)");
    /*is_ambiguous_... S20753C19::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*), ABISELECT(89,53), "S20753C19");
    /*is_ambiguous_... S20753C19::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*), ABISELECT(96,56), "S20753C19");
    /*is_ambiguous_... S20753C11::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C11*), ABISELECT(96,56), "S20753C19");
    /*is_ambiguous_... S20753C11::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*)(S20753C11*), ABISELECT(96,56), "S20753C19");
    /*is_ambiguous_... S20753C19::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C5*), ABISELECT(96,56), "S20753C19");
    /*is_ambiguous_... S20753C19::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C7*)(S20753C5*), ABISELECT(96,56), "S20753C19");
    /*is_ambiguous_... S20753C4::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*)(S20753C4*), ABISELECT(96,56), "S20753C19");
    /*is_ambiguous_... S20753C2::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*)(S20753C2*), ABISELECT(96,56), "S20753C19");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C5*)(S20753C11*), ABISELECT(96,56), "S20753C19");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C7*)(S20753C5*)(S20753C11*), ABISELECT(96,56), "S20753C19");
    /*is_ambiguous_... S20753C10::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C10*), ABISELECT(96,56), "S20753C19");
    /*is_ambiguous_... S20753C19::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C7*)(S20753C5*), ABISELECT(96,56), "S20753C19");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C7*)(S20753C5*)(S20753C11*), ABISELECT(96,56), "S20753C19");
    /*is_ambiguous_... S20753C11::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C11*), ABISELECT(144,84), "S20753C19");
    check_base_class_offset(lv, (S5266C29*)(S20753C2*), ABISELECT(300,180), "S20753C19");
    check_base_class_offset(lv, (S5266C29*)(S20753C12*)(S20753C10*), ABISELECT(300,180), "S20753C19");
    /*is_ambiguous_... S20753C19::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C7*)(S20753C5*), ABISELECT(368,220), "S20753C19");
    /*is_ambiguous_... S20753C19::S20753C5 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C5*), ABISELECT(384,228), "S20753C19");
    check_base_class_offset(lv, (S20753C5*)(S20753C4*), ABISELECT(368,220), "S20753C19");
    check_base_class_offset(lv, (S20753C5*)(S20753C12*)(S20753C10*), ABISELECT(368,220), "S20753C19");
    /*is_ambiguous_... S20753C4::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C4*), ABISELECT(312,184), "S20753C19");
    /*is_ambiguous_... S20753C4::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C4*), ABISELECT(304,180), "S20753C19");
    /*is_ambiguous_... S20753C4::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C4*), ABISELECT(320,188), "S20753C19");
    check_base_class_offset(lv, (S20753C4*)(S20753C2*), ABISELECT(304,180), "S20753C19");
    /*is_ambiguous_... S20753C2::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C2*), ABISELECT(256,152), "S20753C19");
    check_base_class_offset(lv, (S20753C2*)(S20753C11*), ABISELECT(256,152), "S20753C19");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C7*)(S20753C5*)(S20753C11*), ABISELECT(192,112), "S20753C19");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C5*)(S20753C11*), ABISELECT(208,120), "S20753C19");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C5*)(S20753C11*), ABISELECT(192,112), "S20753C19");
    check_base_class_offset(lv, (S20753C11*)(S20753C10*), ABISELECT(144,84), "S20753C19");
    /*is_ambiguous_... S20753C10::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C10*), ABISELECT(424,256), "S20753C19");
    check_base_class_offset(lv, (S5266C26*)(S20753C12*)(S20753C10*), 0, "S20753C19");
    /*is_ambiguous_... S20753C12::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C12*)(S20753C10*), ABISELECT(8,4), "S20753C19");
    check_base_class_offset(lv, (S20753C12*)(S20753C10*), 0, "S20753C19");
    check_base_class_offset(lv, (S20753C10*), 0, "S20753C19");
    /*is_ambiguous_... S20753C19::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*), 0, "S20753C19");
    test_class_info(&lv, &cd_S20753C19);
    dp->~S20753C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20753C19(Test_S20753C19, "S20753C19", ABISELECT(432,260));

#else // __cplusplus

extern void _ZN9S20753C19C1Ev();
extern void _ZN9S20753C19D2Ev();
Name_Map name_map_S20753C19[] = {
  NSPAIR(_ZN9S20753C19C1Ev),
  NSPAIR(_ZN9S20753C19D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S20753C7;
extern VTBL_ENTRY _ZTI8S20753C7[];
extern  VTBL_ENTRY _ZTV8S20753C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C7[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S20753C5;
extern VTBL_ENTRY _ZTI8S20753C5[];
extern  VTBL_ENTRY _ZTV8S20753C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C5[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C4;
extern VTBL_ENTRY _ZTI8S20753C4[];
extern  VTBL_ENTRY _ZTV8S20753C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C4[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C2;
extern VTBL_ENTRY _ZTI8S20753C2[];
extern  VTBL_ENTRY _ZTV8S20753C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C2[];
extern Class_Descriptor cd_S20753C7;
extern VTBL_ENTRY _ZTI8S20753C7[];
extern  VTBL_ENTRY _ZTV8S20753C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C7[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S20753C5;
extern VTBL_ENTRY _ZTI8S20753C5[];
extern  VTBL_ENTRY _ZTV8S20753C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C5[];
extern Class_Descriptor cd_S20753C11;
extern VTBL_ENTRY _ZTI9S20753C11[];
extern  VTBL_ENTRY _ZTV9S20753C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C11[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S20753C12;
extern VTBL_ENTRY _ZTI9S20753C12[];
extern  VTBL_ENTRY _ZTV9S20753C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C12[];
extern Class_Descriptor cd_S20753C10;
extern VTBL_ENTRY _ZTI9S20753C10[];
extern  VTBL_ENTRY _ZTV9S20753C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C10[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
static Base_Class bases_S20753C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C26,    ABISELECT(89,53), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19905C19,    ABISELECT(96,56), //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
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20753C8,    ABISELECT(96,56), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20753C8,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S5266C29,    ABISELECT(300,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
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20753C7,    ABISELECT(368,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(384,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
    7, //immediately_derived
  0, 0},
  {&cd_S20753C5,    ABISELECT(368,220), //bcp->offset
    62, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(312,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
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19905C19,    ABISELECT(304,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
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20753C8,    ABISELECT(320,188), //bcp->offset
    56, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20753C4,    ABISELECT(304,180), //bcp->offset
    48, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20753C8,    ABISELECT(256,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20753C2,    ABISELECT(256,152), //bcp->offset
    38, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S20753C7,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S17777C6_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
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20753C5,    ABISELECT(192,112), //bcp->offset
    31, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20753C11,    ABISELECT(144,84), //bcp->offset
    20, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(424,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S17777C6_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
    21, //immediately_derived
  0, 0},
  {&cd_S20753C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20753C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S20753C19[];
extern void ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev)();
extern void _ZN9S20753C19D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev)();
extern void _ZN9S20753C19D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev)();
extern void ABISELECT(_ZThn96_N9S20753C19D1Ev,_ZThn56_N9S20753C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev)();
extern void ABISELECT(_ZThn96_N9S20753C19D0Ev,_ZThn56_N9S20753C19D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev)();
extern void ABISELECT(_ZThn144_N9S20753C19D1Ev,_ZThn84_N9S20753C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev)();
extern void ABISELECT(_ZThn144_N9S20753C19D0Ev,_ZThn84_N9S20753C19D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev)();
extern void ABISELECT(_ZThn192_N9S20753C19D1Ev,_ZThn112_N9S20753C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev)();
extern void ABISELECT(_ZThn192_N9S20753C19D0Ev,_ZThn112_N9S20753C19D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev)();
extern void ABISELECT(_ZThn256_N9S20753C19D1Ev,_ZThn152_N9S20753C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev)();
extern void ABISELECT(_ZThn256_N9S20753C19D0Ev,_ZThn152_N9S20753C19D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20753C19D1Ev,_ZTv0_n24_N9S20753C19D1Ev)();
extern void ABISELECT(_ZThn304_N9S20753C19D1Ev,_ZThn180_N9S20753C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20753C19D0Ev,_ZTv0_n24_N9S20753C19D0Ev)();
extern void ABISELECT(_ZThn304_N9S20753C19D0Ev,_ZThn180_N9S20753C19D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev)();
extern void ABISELECT(_ZThn320_N9S20753C19D1Ev,_ZThn188_N9S20753C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev)();
extern void ABISELECT(_ZThn320_N9S20753C19D0Ev,_ZThn188_N9S20753C19D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev)();
extern void ABISELECT(_ZThn368_N9S20753C19D1Ev,_ZThn220_N9S20753C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev)();
extern void ABISELECT(_ZThn368_N9S20753C19D0Ev,_ZThn220_N9S20753C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20753C19[] = {
  ABISELECT(89,53),
  ABISELECT(424,256),
  ABISELECT(304,180),
  ABISELECT(256,152),
  ABISELECT(144,84),
  ABISELECT(300,180),
  ABISELECT(96,56),
  ABISELECT(96,56),
  ABISELECT(368,220),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev),
  0,
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S20753C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(224,136),
  ABISELECT(160,96),
  ABISELECT(156,96),
  ABISELECT(112,68),
  ABISELECT(-48,-28),
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S20753C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev),
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI9S20753C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev),
  ABISELECT(-160,-96),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(44,28),
  ABISELECT(-160,-96),
  ABISELECT(-256,-152),
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI9S20753C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev),
  ABISELECT(-304,-180),
  ABISELECT(-208,-124),
  ABISELECT(-208,-124),
  ABISELECT(64,40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI9S20753C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C19D1Ev,_ZTv0_n24_N9S20753C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C19D0Ev,_ZTv0_n24_N9S20753C19D0Ev),
  ABISELECT(-224,-132),
  ABISELECT(-320,-188),
  ABISELECT(-320,-188),
  (VTBL_ENTRY)&(_ZTI9S20753C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-368,-220),
  ABISELECT(-368,-220),
  (VTBL_ENTRY)&(_ZTI9S20753C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev),
};
extern VTBL_ENTRY _ZTV9S20753C19[];
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void _ZN9S20753C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void _ZN9S20753C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C10__9S20753C19[] = {
  ABISELECT(424,256),
  ABISELECT(304,180),
  ABISELECT(256,152),
  ABISELECT(144,84),
  ABISELECT(300,180),
  ABISELECT(96,56),
  ABISELECT(96,56),
  ABISELECT(368,220),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev)();
extern void _ZN9S20753C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev)();
extern void _ZN9S20753C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C129S20753C10__9S20753C19[] = {
  ABISELECT(300,180),
  ABISELECT(96,56),
  ABISELECT(96,56),
  ABISELECT(368,220),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev)();
extern void ABISELECT(_ZThn368_N9S20753C12D1Ev,_ZThn220_N9S20753C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev)();
extern void ABISELECT(_ZThn368_N9S20753C12D0Ev,_ZThn220_N9S20753C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C129S20753C10__9S20753C19[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-368,-220),
  ABISELECT(-368,-220),
  (VTBL_ENTRY)&(_ZTI9S20753C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev)();
extern void ABISELECT(_ZThn96_N9S20753C12D1Ev,_ZThn56_N9S20753C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev)();
extern void ABISELECT(_ZThn96_N9S20753C12D0Ev,_ZThn56_N9S20753C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__9S20753C129S20753C10__9S20753C19[] = {
  0,
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S20753C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn96_N9S20753C10D1Ev,_ZThn56_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn96_N9S20753C10D0Ev,_ZThn56_N9S20753C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__9S20753C10__9S20753C19[] = {
  0,
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn144_N9S20753C10D1Ev,_ZThn84_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn144_N9S20753C10D0Ev,_ZThn84_N9S20753C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C11__9S20753C10__9S20753C19[] = {
  ABISELECT(-48,-28),
  ABISELECT(224,136),
  ABISELECT(160,96),
  ABISELECT(156,96),
  ABISELECT(112,68),
  ABISELECT(-48,-28),
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn256_N9S20753C10D1Ev,_ZThn152_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn256_N9S20753C10D0Ev,_ZThn152_N9S20753C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C2__9S20753C10__9S20753C19[] = {
  ABISELECT(-160,-96),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(44,28),
  ABISELECT(-160,-96),
  ABISELECT(-256,-152),
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20753C10D1Ev,_ZTv0_n24_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn304_N9S20753C10D1Ev,_ZThn180_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20753C10D0Ev,_ZTv0_n24_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn304_N9S20753C10D0Ev,_ZThn180_N9S20753C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C4__9S20753C10__9S20753C19[] = {
  ABISELECT(-304,-180),
  ABISELECT(-208,-124),
  ABISELECT(-208,-124),
  ABISELECT(64,40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C10D1Ev,_ZTv0_n24_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C10D0Ev,_ZTv0_n24_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn368_N9S20753C10D1Ev,_ZThn220_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn368_N9S20753C10D0Ev,_ZThn220_N9S20753C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C10__9S20753C19[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-368,-220),
  ABISELECT(-368,-220),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn320_N9S20753C10D1Ev,_ZThn188_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn320_N9S20753C10D0Ev,_ZThn188_N9S20753C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A2__9S20753C10__9S20753C19[] = {
  ABISELECT(-224,-132),
  ABISELECT(-320,-188),
  ABISELECT(-320,-188),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn192_N9S20753C10D1Ev,_ZThn112_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn192_N9S20753C10D0Ev,_ZThn112_N9S20753C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C59S20753C11__A1__9S20753C10__9S20753C19[] = {
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__9S20753C19[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void _ZN9S20753C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
extern void _ZN9S20753C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C11__9S20753C19[] = {
  ABISELECT(-48,-28),
  ABISELECT(224,136),
  ABISELECT(160,96),
  ABISELECT(156,96),
  ABISELECT(112,68),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C89S20753C11__A1__9S20753C19[] = {
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C89S20753C11__A1__9S20753C19[] = {
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void _ZN8S20753C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void _ZN8S20753C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C59S20753C11__A1__9S20753C19[] = {
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void _ZN8S20753C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void _ZN8S20753C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C78S20753C59S20753C11__A1__9S20753C19[] = {
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C78S20753C59S20753C11__A1__9S20753C19[] = {
  0,
  ABISELECT(96,56),
  ABISELECT(96,56),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C59S20753C11__A1__9S20753C19[] = {
  0,
  ABISELECT(96,56),
  ABISELECT(96,56),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__A1__9S20753C11__9S20753C19[] = {
  0,
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZThn112_N9S20753C11D1Ev,_ZThn68_N9S20753C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
extern void ABISELECT(_ZThn112_N9S20753C11D0Ev,_ZThn68_N9S20753C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C2__9S20753C11__9S20753C19[] = {
  ABISELECT(-160,-96),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(44,28),
  ABISELECT(-160,-96),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20753C11D1Ev,_ZTv0_n24_N9S20753C11D1Ev)();
extern void ABISELECT(_ZThn160_N9S20753C11D1Ev,_ZThn96_N9S20753C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20753C11D0Ev,_ZTv0_n24_N9S20753C11D0Ev)();
extern void ABISELECT(_ZThn160_N9S20753C11D0Ev,_ZThn96_N9S20753C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C4__9S20753C11__9S20753C19[] = {
  ABISELECT(-160,-96),
  ABISELECT(-208,-124),
  ABISELECT(-208,-124),
  ABISELECT(64,40),
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C11D1Ev,_ZTv0_n24_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C11D0Ev,_ZTv0_n24_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZThn224_N9S20753C11D1Ev,_ZThn136_N9S20753C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
extern void ABISELECT(_ZThn224_N9S20753C11D0Ev,_ZThn136_N9S20753C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C11__9S20753C19[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-224,-136),
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZThn176_N9S20753C11D1Ev,_ZThn104_N9S20753C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
extern void ABISELECT(_ZThn176_N9S20753C11D0Ev,_ZThn104_N9S20753C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A2__9S20753C11__9S20753C19[] = {
  ABISELECT(-224,-132),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZThn48_N9S20753C11D1Ev,_ZThn28_N9S20753C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
extern void ABISELECT(_ZThn48_N9S20753C11D0Ev,_ZThn28_N9S20753C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__A__9S20753C11__9S20753C19[] = {
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void _ZN8S20753C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
extern void _ZN8S20753C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C2__9S20753C19[] = {
  ABISELECT(-160,-96),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(44,28),
  ABISELECT(-160,-96),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C2__A3__9S20753C19[] = {
  ABISELECT(-160,-96),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C88S20753C2__A3__9S20753C19[] = {
  ABISELECT(160,96),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20753C2D1Ev,_ZTv0_n24_N8S20753C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S20753C2D1Ev,_ZThn28_N8S20753C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20753C2D0Ev,_ZTv0_n24_N8S20753C2D0Ev)();
extern void ABISELECT(_ZThn48_N8S20753C2D0Ev,_ZThn28_N8S20753C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C4__8S20753C2__9S20753C19[] = {
  ABISELECT(-48,-28),
  ABISELECT(-208,-124),
  ABISELECT(-208,-124),
  ABISELECT(64,40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20753C2D1Ev,_ZTv0_n24_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20753C2D0Ev,_ZTv0_n24_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void ABISELECT(_ZThn112_N8S20753C2D1Ev,_ZThn68_N8S20753C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
extern void ABISELECT(_ZThn112_N8S20753C2D0Ev,_ZThn68_N8S20753C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__8S20753C2__9S20753C19[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C2__9S20753C19[] = {
  0,
  ABISELECT(160,96),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C2D1Ev,_ZThn36_N8S20753C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C2D0Ev,_ZThn36_N8S20753C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A1__8S20753C2__9S20753C19[] = {
  ABISELECT(-224,-132),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void _ZN8S20753C4D1Ev();
extern void _ZN8S20753C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20753C4__9S20753C19[] = {
  ABISELECT(-208,-124),
  ABISELECT(-208,-124),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&_ZN8S20753C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20753C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A2__9S20753C19[] = {
  ABISELECT(-224,-132),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C88S20753C4__A2__9S20753C19[] = {
  ABISELECT(224,132),
  ABISELECT(224,132),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C4D1Ev,_ZThn40_N8S20753C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C4D0Ev,_ZThn40_N8S20753C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__8S20753C4__9S20753C19[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C4__9S20753C19[] = {
  0,
  ABISELECT(208,124),
  ABISELECT(208,124),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZThn16_N8S20753C4D1Ev,_ZThn8_N8S20753C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
extern void ABISELECT(_ZThn16_N8S20753C4D0Ev,_ZThn8_N8S20753C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__A__8S20753C4__9S20753C19[] = {
  ABISELECT(-224,-132),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void _ZN8S20753C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void _ZN8S20753C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C19[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void _ZN8S20753C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void _ZN8S20753C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C78S20753C5__9S20753C19[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C78S20753C5__9S20753C19[] = {
  0,
  ABISELECT(272,164),
  ABISELECT(272,164),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C5__9S20753C19[] = {
  0,
  ABISELECT(272,164),
  ABISELECT(272,164),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
static  VTT_ENTRY vtt_S20753C19[] = {
  {&(_ZTV9S20753C19[12]),  12,69},
  {&(_tg__ZTV9S20753C10__9S20753C19[11]),  11,13},
  {&(_tg__ZTV9S20753C129S20753C10__9S20753C19[7]),  7,9},
  {&(_tg__ZTV8S20753C5__9S20753C129S20753C10__9S20753C19[5]),  5,7},
  {&(_tg__ZTV8S20753C8__9S20753C129S20753C10__9S20753C19[4]),  4,6},
  {&(_tg__ZTV8S20753C8__9S20753C129S20753C10__9S20753C19[4]),  4,6},
  {&(_tg__ZTV8S20753C8__9S20753C10__9S20753C19[4]),  4,6},
  {&(_tg__ZTV8S20753C8__9S20753C10__9S20753C19[4]),  4,6},
  {&(_tg__ZTV9S20753C11__9S20753C10__9S20753C19[9]),  9,11},
  {&(_tg__ZTV8S20753C2__9S20753C10__9S20753C19[8]),  8,10},
  {&(_tg__ZTV8S20753C4__9S20753C10__9S20753C19[6]),  6,8},
  {&(_tg__ZTV8S20753C5__9S20753C10__9S20753C19[5]),  5,7},
  {&(_tg__ZTV8S20753C88S20753C4__A2__9S20753C10__9S20753C19[4]),  4,6},
  {&(_tg__ZTV8S20753C59S20753C11__A1__9S20753C10__9S20753C19[5]),  5,7},
  {&(_ZTV9S20753C19[18]),  18,69},
  {&(_ZTV9S20753C19[18]),  18,69},
  {&(_ZTV9S20753C19[29]),  29,69},
  {&(_ZTV9S20753C19[46]),  46,69},
  {&(_ZTV9S20753C19[54]),  54,69},
  {&(_ZTV9S20753C19[67]),  67,69},
  {&(_ZTV9S20753C19[60]),  60,69},
  {&(_ZTV9S20753C19[36]),  36,69},
  {&(_tg__ZTV8S20753C8__9S20753C19[4]),  4,6},
  {&(_tg__ZTV8S20753C8__9S20753C19[4]),  4,6},
  {&(_tg__ZTV9S20753C11__9S20753C19[9]),  9,11},
  {&(_tg__ZTV8S20753C89S20753C11__A1__9S20753C19[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C89S20753C11__A1__9S20753C19[3]),  3,5},
  {&(_tg__ZTV8S20753C59S20753C11__A1__9S20753C19[5]),  5,7},
  {&(_tg__ZTV8S20753C78S20753C59S20753C11__A1__9S20753C19[5]),  5,7},
  {&(_tg__ZTV8S20753C8__8S20753C78S20753C59S20753C11__A1__9S20753C19[4]),  4,6},
  {&(_tg__ZTV8S20753C8__8S20753C78S20753C59S20753C11__A1__9S20753C19[4]),  4,6},
  {&(_tg__ZTV8S20753C8__8S20753C59S20753C11__A1__9S20753C19[4]),  4,6},
  {&(_tg__ZTV8S20753C8__8S20753C59S20753C11__A1__9S20753C19[4]),  4,6},
  {&(_tg__ZTV8S20753C8__A1__9S20753C11__9S20753C19[4]),  4,6},
  {&(_tg__ZTV8S20753C2__9S20753C11__9S20753C19[8]),  8,10},
  {&(_tg__ZTV8S20753C4__9S20753C11__9S20753C19[6]),  6,8},
  {&(_tg__ZTV8S20753C5__9S20753C11__9S20753C19[5]),  5,7},
  {&(_tg__ZTV8S20753C8__A1__9S20753C11__9S20753C19[4]),  4,6},
  {&(_tg__ZTV8S20753C88S20753C4__A2__9S20753C11__9S20753C19[4]),  4,6},
  {&(_tg__ZTV8S20753C5__A__9S20753C11__9S20753C19[5]),  5,7},
  {&(_tg__ZTV8S20753C2__9S20753C19[8]),  8,10},
  {&(_tg__ZTV8S20753C88S20753C2__A3__9S20753C19[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C88S20753C2__A3__9S20753C19[3]),  3,5},
  {&(_tg__ZTV8S20753C4__8S20753C2__9S20753C19[6]),  6,8},
  {&(_tg__ZTV8S20753C5__8S20753C2__9S20753C19[5]),  5,7},
  {&(_tg__ZTV8S20753C8__8S20753C2__9S20753C19[4]),  4,6},
  {&(_tg__ZTV8S20753C8__8S20753C2__9S20753C19[4]),  4,6},
  {&(_tg__ZTV8S20753C88S20753C4__A1__8S20753C2__9S20753C19[4]),  4,6},
  {&(_tg__ZTV8S20753C4__9S20753C19[5]),  5,7},
  {&(_tg__ZTV8S20753C88S20753C4__A2__9S20753C19[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C88S20753C4__A2__9S20753C19[3]),  3,5},
  {&(_tg__ZTV8S20753C5__8S20753C4__9S20753C19[5]),  5,7},
  {&(_tg__ZTV8S20753C8__8S20753C4__9S20753C19[4]),  4,6},
  {&(_tg__ZTV8S20753C8__8S20753C4__9S20753C19[4]),  4,6},
  {&(_tg__ZTV8S20753C8__A__8S20753C4__9S20753C19[4]),  4,6},
  {&(_tg__ZTV8S20753C5__9S20753C19[5]),  5,7},
  {&(_tg__ZTV8S20753C78S20753C5__9S20753C19[5]),  5,7},
  {&(_tg__ZTV8S20753C8__8S20753C78S20753C5__9S20753C19[4]),  4,6},
  {&(_tg__ZTV8S20753C8__8S20753C78S20753C5__9S20753C19[4]),  4,6},
  {&(_tg__ZTV8S20753C8__8S20753C5__9S20753C19[4]),  4,6},
  {&(_tg__ZTV8S20753C8__8S20753C5__9S20753C19[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S20753C19[];
extern  VTBL_ENTRY _ZTV9S20753C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C19[];
static VTBL_ENTRY alt_thunk_names31[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20753C4D0Ev,_ZThn8_N8S20753C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C4D0Ev,_ZThn40_N8S20753C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20753C4D1Ev,_ZThn8_N8S20753C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C4D1Ev,_ZThn40_N8S20753C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20753C2D0Ev,_ZTv0_n24_N8S20753C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20753C2D0Ev,_ZThn28_N8S20753C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20753C2D1Ev,_ZTv0_n24_N8S20753C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20753C2D1Ev,_ZThn28_N8S20753C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C2D0Ev,_ZThn36_N8S20753C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20753C2D0Ev,_ZThn68_N8S20753C2D0Ev),
  (VTBL_ENTRY)_ZN8S20753C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C2D1Ev,_ZThn36_N8S20753C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20753C2D1Ev,_ZThn68_N8S20753C2D1Ev),
  (VTBL_ENTRY)_ZN8S20753C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20753C11D0Ev,_ZTv0_n24_N9S20753C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S20753C11D0Ev,_ZThn96_N9S20753C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20753C11D1Ev,_ZTv0_n24_N9S20753C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S20753C11D1Ev,_ZThn96_N9S20753C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S20753C7D0Ev,
  (VTBL_ENTRY)_ZN8S20753C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S20753C7D1Ev,
  (VTBL_ENTRY)_ZN8S20753C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20753C5D0Ev,
  (VTBL_ENTRY)_ZN8S20753C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20753C5D1Ev,
  (VTBL_ENTRY)_ZN8S20753C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20753C11D0Ev,_ZThn28_N9S20753C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20753C11D0Ev,_ZThn104_N9S20753C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20753C11D0Ev,_ZThn136_N9S20753C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20753C11D0Ev,_ZThn68_N9S20753C11D0Ev),
  (VTBL_ENTRY)_ZN9S20753C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20753C11D1Ev,_ZThn28_N9S20753C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20753C11D1Ev,_ZThn104_N9S20753C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20753C11D1Ev,_ZThn136_N9S20753C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20753C11D1Ev,_ZThn68_N9S20753C11D1Ev),
  (VTBL_ENTRY)_ZN9S20753C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev), // 
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev), // 
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20753C10D0Ev,_ZTv0_n24_N9S20753C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S20753C10D0Ev,_ZThn180_N9S20753C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20753C10D1Ev,_ZTv0_n24_N9S20753C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S20753C10D1Ev,_ZThn180_N9S20753C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20753C12D0Ev,_ZThn56_N9S20753C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S20753C12D0Ev,_ZThn220_N9S20753C12D0Ev),
  (VTBL_ENTRY)_ZN9S20753C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20753C12D1Ev,_ZThn56_N9S20753C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S20753C12D1Ev,_ZThn220_N9S20753C12D1Ev),
  (VTBL_ENTRY)_ZN9S20753C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20753C10D0Ev,_ZThn112_N9S20753C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S20753C10D0Ev,_ZThn188_N9S20753C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S20753C10D0Ev,_ZThn220_N9S20753C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S20753C10D0Ev,_ZThn152_N9S20753C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20753C10D0Ev,_ZThn84_N9S20753C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20753C10D0Ev,_ZThn56_N9S20753C10D0Ev),
  (VTBL_ENTRY)_ZN9S20753C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20753C10D1Ev,_ZThn112_N9S20753C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S20753C10D1Ev,_ZThn188_N9S20753C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S20753C10D1Ev,_ZThn220_N9S20753C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S20753C10D1Ev,_ZThn152_N9S20753C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20753C10D1Ev,_ZThn84_N9S20753C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20753C10D1Ev,_ZThn56_N9S20753C10D1Ev),
  (VTBL_ENTRY)_ZN9S20753C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20753C19D0Ev,_ZTv0_n24_N9S20753C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S20753C19D0Ev,_ZThn180_N9S20753C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20753C19D1Ev,_ZTv0_n24_N9S20753C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S20753C19D1Ev,_ZThn180_N9S20753C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S20753C19D0Ev,_ZThn220_N9S20753C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S20753C19D0Ev,_ZThn188_N9S20753C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S20753C19D0Ev,_ZThn152_N9S20753C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20753C19D0Ev,_ZThn112_N9S20753C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20753C19D0Ev,_ZThn84_N9S20753C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20753C19D0Ev,_ZThn56_N9S20753C19D0Ev),
  (VTBL_ENTRY)_ZN9S20753C19D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S20753C19D1Ev,_ZThn220_N9S20753C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S20753C19D1Ev,_ZThn188_N9S20753C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S20753C19D1Ev,_ZThn152_N9S20753C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20753C19D1Ev,_ZThn112_N9S20753C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20753C19D1Ev,_ZThn84_N9S20753C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20753C19D1Ev,_ZThn56_N9S20753C19D1Ev),
  (VTBL_ENTRY)_ZN9S20753C19D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20753C19 = {  "S20753C19", // class name
  bases_S20753C19, 24,
  &(vtc_S20753C19[0]), // expected_vtbl_contents
  &(vtt_S20753C19[0]), // expected_vtt_contents
  ABISELECT(432,260), // object size
  NSPAIRA(_ZTI9S20753C19),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20753C19),69, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20753C19),61, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names31,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20753C17  : virtual S19905C19 , virtual S20753C18 , virtual S17777C6_nt , virtual S20753C19 , S5266C26 {
  ~S20753C17(); // tgen
  S20753C17(); // tgen
};
//SIG(-1 S20753C17) C1{ VBC2{ vd m} VBC3{ VBC4{ VBC2 FD Fc Fs[4]} VBC5{ VBC2 VBC4 vd Fi} VBC6{ m} VBC7{ VBC8{ m} VBC9{ VBC10{ VBC2 BC5 BC11{ m Fp} vd Fs FL Fp FL} BC11 BC2 BC4 vd Fi} BC4 vd Fs} BC10 vd FC9 Fi Fs} VBC11 VBC12{ VBC6 BC13{ VBC4 VBC14{ VBC2 BC4 VBC7 BC10 Fp} VBC11 BC15{ BC6 VBC10 BC11 VBC8 vd FC5 Fs} vd Fi FC16{}} BC8 vd} BC6}


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

static void Test_S20753C17()
{
  extern Class_Descriptor cd_S20753C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(46,106)];
    init_test(&cd_S20753C17, buf);
    S20753C17 *dp, &lv = *(dp=new (buf) S20753C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(720,420), "sizeof(S20753C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20753C17)");
    /*is_ambiguous_... S20753C17::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*), 0, "S20753C17");
    /*is_ambiguous_... S20753C17::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*), 0, "S20753C17");
    /*is_ambiguous_... S20753C17::S20753C7 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C7*), 0, "S20753C17");
    /*is_ambiguous_... S20753C17::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C5*), 0, "S20753C17");
    /*is_ambiguous_... S20753C17::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C7*)(S20753C5*), 0, "S20753C17");
    /*is_ambiguous_... S20753C4::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*)(S20753C4*), 0, "S20753C17");
    /*is_ambiguous_... S20753C2::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*)(S20753C2*), 0, "S20753C17");
    /*is_ambiguous_... S20753C18::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C5*)(S20753C18*), 0, "S20753C17");
    /*is_ambiguous_... S20753C18::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C7*)(S20753C5*)(S20753C18*), 0, "S20753C17");
    /*is_ambiguous_... S20753C11::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C11*), 0, "S20753C17");
    /*is_ambiguous_... S20753C11::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*)(S20753C11*), 0, "S20753C17");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C5*)(S20753C11*), 0, "S20753C17");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C7*)(S20753C5*)(S20753C11*), 0, "S20753C17");
    /*is_ambiguous_... S20753C18::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C18*), ABISELECT(272,152), "S20753C17");
    /*is_ambiguous_... S20753C17::S20753C7 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C7*), ABISELECT(272,152), "S20753C17");
    /*is_ambiguous_... S20753C17::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C7*)(S20753C5*), ABISELECT(272,152), "S20753C17");
    /*is_ambiguous_... S20753C18::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C7*)(S20753C5*)(S20753C18*), ABISELECT(272,152), "S20753C17");
    /*is_ambiguous_... S20753C10::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C10*)(S20753C19*), ABISELECT(272,152), "S20753C17");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C7*)(S20753C5*)(S20753C11*), ABISELECT(272,152), "S20753C17");
    /*is_ambiguous_... S20753C18::S20753C7 */ AMB_check_base_class_offset(lv, (S20753C7*)(S20753C18*), ABISELECT(320,180), "S20753C17");
    check_base_class_offset(lv, (S5266C26*)(S20753C18*), ABISELECT(332,188), "S20753C17");
    /*is_ambiguous_... S20753C19::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S20753C19*), ABISELECT(332,188), "S20753C17");
    check_base_class_offset(lv, (S5266C29*)(S20753C2*), 0, "S20753C17");
    check_base_class_offset(lv, (S5266C29*)(S20753C12*)(S20753C10*)(S20753C19*), 0, "S20753C17");
    /*is_ambiguous_... S20753C17::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C7*)(S20753C5*), ABISELECT(448,256), "S20753C17");
    /*is_ambiguous_... S20753C17::S20753C5 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C5*), ABISELECT(464,264), "S20753C17");
    check_base_class_offset(lv, (S20753C5*)(S20753C4*), ABISELECT(448,256), "S20753C17");
    check_base_class_offset(lv, (S20753C5*)(S20753C12*)(S20753C10*)(S20753C19*), ABISELECT(448,256), "S20753C17");
    /*is_ambiguous_... S20753C4::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C4*), ABISELECT(392,220), "S20753C17");
    /*is_ambiguous_... S20753C4::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C4*), ABISELECT(384,216), "S20753C17");
    /*is_ambiguous_... S20753C4::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C4*), ABISELECT(400,224), "S20753C17");
    check_base_class_offset(lv, (S20753C4*)(S20753C2*), ABISELECT(384,216), "S20753C17");
    /*is_ambiguous_... S20753C2::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C2*), ABISELECT(336,188), "S20753C17");
    check_base_class_offset(lv, (S20753C2*)(S20753C18*), ABISELECT(336,188), "S20753C17");
    check_base_class_offset(lv, (S20753C2*)(S20753C11*), ABISELECT(336,188), "S20753C17");
    /*is_ambiguous_... S20753C18::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C7*)(S20753C5*)(S20753C18*), ABISELECT(16,4), "S20753C17");
    /*is_ambiguous_... S20753C18::S20753C5 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C5*)(S20753C18*), ABISELECT(32,12), "S20753C17");
    /*is_ambiguous_... S20753C18::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C5*)(S20753C18*), ABISELECT(16,4), "S20753C17");
    check_base_class_offset(lv, (S20753C18*), ABISELECT(16,4), "S20753C17");
    /*is_ambiguous_... S20753C17::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*), ABISELECT(504,292), "S20753C17");
    /*is_ambiguous_... S20753C10::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C10*)(S20753C19*), ABISELECT(504,292), "S20753C17");
    /*is_ambiguous_... S20753C11::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C11*), ABISELECT(608,352), "S20753C17");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C7*)(S20753C5*)(S20753C11*), ABISELECT(656,380), "S20753C17");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C5*)(S20753C11*), ABISELECT(672,388), "S20753C17");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C5*)(S20753C11*), ABISELECT(656,380), "S20753C17");
    check_base_class_offset(lv, (S20753C11*)(S20753C10*)(S20753C19*), ABISELECT(608,352), "S20753C17");
    check_base_class_offset(lv, (S5266C26*)(S20753C12*)(S20753C10*)(S20753C19*), ABISELECT(512,296), "S20753C17");
    /*is_ambiguous_... S20753C12::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C12*)(S20753C10*)(S20753C19*), ABISELECT(520,300), "S20753C17");
    check_base_class_offset(lv, (S20753C12*)(S20753C10*)(S20753C19*), ABISELECT(512,296), "S20753C17");
    check_base_class_offset(lv, (S20753C10*)(S20753C19*), ABISELECT(512,296), "S20753C17");
    /*is_ambiguous_... S20753C19::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S20753C19*), ABISELECT(512,296), "S20753C17");
    check_base_class_offset(lv, (S20753C19*), ABISELECT(512,296), "S20753C17");
    /*is_ambiguous_... S20753C17::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*), 0, "S20753C17");
    test_class_info(&lv, &cd_S20753C17);
    dp->~S20753C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20753C17(Test_S20753C17, "S20753C17", ABISELECT(720,420));

#else // __cplusplus

extern void _ZN9S20753C17C1Ev();
extern void _ZN9S20753C17D1Ev();
Name_Map name_map_S20753C17[] = {
  NSPAIR(_ZN9S20753C17C1Ev),
  NSPAIR(_ZN9S20753C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C7;
extern VTBL_ENTRY _ZTI8S20753C7[];
extern  VTBL_ENTRY _ZTV8S20753C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C7[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S20753C7;
extern VTBL_ENTRY _ZTI8S20753C7[];
extern  VTBL_ENTRY _ZTV8S20753C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C7[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S20753C5;
extern VTBL_ENTRY _ZTI8S20753C5[];
extern  VTBL_ENTRY _ZTV8S20753C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C5[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C4;
extern VTBL_ENTRY _ZTI8S20753C4[];
extern  VTBL_ENTRY _ZTV8S20753C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C4[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C2;
extern VTBL_ENTRY _ZTI8S20753C2[];
extern  VTBL_ENTRY _ZTV8S20753C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C2[];
extern Class_Descriptor cd_S20753C7;
extern VTBL_ENTRY _ZTI8S20753C7[];
extern  VTBL_ENTRY _ZTV8S20753C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C7[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S20753C5;
extern VTBL_ENTRY _ZTI8S20753C5[];
extern  VTBL_ENTRY _ZTV8S20753C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C5[];
extern Class_Descriptor cd_S20753C18;
extern VTBL_ENTRY _ZTI9S20753C18[];
extern  VTBL_ENTRY _ZTV9S20753C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C18[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C7;
extern VTBL_ENTRY _ZTI8S20753C7[];
extern  VTBL_ENTRY _ZTV8S20753C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C7[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S20753C5;
extern VTBL_ENTRY _ZTI8S20753C5[];
extern  VTBL_ENTRY _ZTV8S20753C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C5[];
extern Class_Descriptor cd_S20753C11;
extern VTBL_ENTRY _ZTI9S20753C11[];
extern  VTBL_ENTRY _ZTV9S20753C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C11[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S20753C12;
extern VTBL_ENTRY _ZTI9S20753C12[];
extern  VTBL_ENTRY _ZTV9S20753C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C12[];
extern Class_Descriptor cd_S20753C10;
extern VTBL_ENTRY _ZTI9S20753C10[];
extern  VTBL_ENTRY _ZTV9S20753C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C10[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S20753C19;
extern VTBL_ENTRY _ZTI9S20753C19[];
extern  VTBL_ENTRY _ZTV9S20753C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C19[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
static Base_Class bases_S20753C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    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_S20753C8,    ABISELECT(272,152), //bcp->offset
    30, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20753C7,    ABISELECT(320,180), //bcp->offset
    36, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S5266C26,    ABISELECT(332,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20753C7,    ABISELECT(448,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(464,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20753C5,    ABISELECT(448,256), //bcp->offset
    67, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(392,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19905C19,    ABISELECT(384,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
    11, //immediately_derived
  0, 0},
  {&cd_S20753C8,    ABISELECT(400,224), //bcp->offset
    61, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20753C4,    ABISELECT(384,216), //bcp->offset
    53, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20753C8,    ABISELECT(336,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20753C2,    ABISELECT(336,188), //bcp->offset
    43, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S20753C7,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(32,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
    16, //immediately_derived
  0, 0},
  {&cd_S20753C5,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20753C18,    ABISELECT(16,4), //bcp->offset
    17, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S17777C6_nt,    ABISELECT(504,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20753C8,    ABISELECT(608,352), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20753C7,    ABISELECT(656,380), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    79, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(672,388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20753C5,    ABISELECT(656,380), //bcp->offset
    99, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20753C11,    ABISELECT(608,352), //bcp->offset
    88, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    75, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S5266C26,    ABISELECT(512,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(520,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
    26, //immediately_derived
  0, 0},
  {&cd_S20753C12,    ABISELECT(512,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //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
    27, //immediately_derived
  0, 0},
  {&cd_S20753C10,    ABISELECT(512,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S5266C29,    ABISELECT(512,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20753C19,    ABISELECT(512,296), //bcp->offset
    74, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S20753C17[];
extern void ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev)();
extern void _ZN9S20753C17D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev)();
extern void _ZN9S20753C17D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S20753C17D1Ev,_ZThn4_N9S20753C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev)();
extern void ABISELECT(_ZThn16_N9S20753C17D0Ev,_ZThn4_N9S20753C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev)();
extern void ABISELECT(_ZThn272_N9S20753C17D1Ev,_ZThn152_N9S20753C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev)();
extern void ABISELECT(_ZThn272_N9S20753C17D0Ev,_ZThn152_N9S20753C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev)();
extern void ABISELECT(_ZThn320_N9S20753C17D1Ev,_ZThn180_N9S20753C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev)();
extern void ABISELECT(_ZThn320_N9S20753C17D0Ev,_ZThn180_N9S20753C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev)();
extern void ABISELECT(_ZThn336_N9S20753C17D1Ev,_ZThn188_N9S20753C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev)();
extern void ABISELECT(_ZThn336_N9S20753C17D0Ev,_ZThn188_N9S20753C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20753C17D1Ev,_ZTv0_n24_N9S20753C17D1Ev)();
extern void ABISELECT(_ZThn384_N9S20753C17D1Ev,_ZThn216_N9S20753C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20753C17D0Ev,_ZTv0_n24_N9S20753C17D0Ev)();
extern void ABISELECT(_ZThn384_N9S20753C17D0Ev,_ZThn216_N9S20753C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev)();
extern void ABISELECT(_ZThn400_N9S20753C17D1Ev,_ZThn224_N9S20753C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev)();
extern void ABISELECT(_ZThn400_N9S20753C17D0Ev,_ZThn224_N9S20753C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev)();
extern void ABISELECT(_ZThn448_N9S20753C17D1Ev,_ZThn256_N9S20753C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev)();
extern void ABISELECT(_ZThn448_N9S20753C17D0Ev,_ZThn256_N9S20753C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev)();
extern void ABISELECT(_ZThn512_N9S20753C17D1Ev,_ZThn296_N9S20753C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev)();
extern void ABISELECT(_ZThn512_N9S20753C17D0Ev,_ZThn296_N9S20753C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev)();
extern void ABISELECT(_ZThn608_N9S20753C17D1Ev,_ZThn352_N9S20753C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev)();
extern void ABISELECT(_ZThn608_N9S20753C17D0Ev,_ZThn352_N9S20753C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev)();
extern void ABISELECT(_ZThn656_N9S20753C17D1Ev,_ZThn380_N9S20753C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev)();
extern void ABISELECT(_ZThn656_N9S20753C17D0Ev,_ZThn380_N9S20753C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20753C17[] = {
  ABISELECT(608,352),
  ABISELECT(512,296),
  ABISELECT(504,292),
  ABISELECT(448,256),
  ABISELECT(384,216),
  0,
  ABISELECT(336,188),
  ABISELECT(332,188),
  ABISELECT(320,180),
  ABISELECT(272,152),
  ABISELECT(16,4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev),
  ABISELECT(432,252),
  ABISELECT(368,212),
  ABISELECT(-16,-4),
  ABISELECT(320,184),
  ABISELECT(316,184),
  ABISELECT(304,176),
  ABISELECT(256,148),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI9S20753C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev),
  ABISELECT(-272,-152),
  ABISELECT(-272,-152),
  ABISELECT(-272,-152),
  (VTBL_ENTRY)&(_ZTI9S20753C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-320,-180),
  ABISELECT(-320,-180),
  ABISELECT(-320,-180),
  (VTBL_ENTRY)&(_ZTI9S20753C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-336,-188),
  ABISELECT(-336,-188),
  ABISELECT(-336,-188),
  ABISELECT(-336,-188),
  (VTBL_ENTRY)&(_ZTI9S20753C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev),
  ABISELECT(-384,-216),
  ABISELECT(-112,-64),
  ABISELECT(-384,-216),
  ABISELECT(64,40),
  ABISELECT(-384,-216),
  (VTBL_ENTRY)&(_ZTI9S20753C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C17D1Ev,_ZTv0_n24_N9S20753C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C17D0Ev,_ZTv0_n24_N9S20753C17D0Ev),
  ABISELECT(-400,-224),
  ABISELECT(-400,-224),
  ABISELECT(-400,-224),
  (VTBL_ENTRY)&(_ZTI9S20753C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev),
  ABISELECT(-176,-104),
  ABISELECT(-448,-256),
  ABISELECT(-448,-256),
  ABISELECT(-448,-256),
  (VTBL_ENTRY)&(_ZTI9S20753C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev),
  ABISELECT(-180,-108),
  ABISELECT(-8,-4),
  ABISELECT(-128,-80),
  ABISELECT(-176,-108),
  ABISELECT(96,56),
  ABISELECT(-512,-296),
  ABISELECT(-240,-144),
  ABISELECT(-512,-296),
  ABISELECT(-64,-40),
  ABISELECT(-512,-296),
  ABISELECT(-512,-296),
  (VTBL_ENTRY)&(_ZTI9S20753C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev),
  ABISELECT(-336,-200),
  ABISELECT(-160,-96),
  ABISELECT(-224,-136),
  ABISELECT(-608,-352),
  ABISELECT(-272,-164),
  ABISELECT(-608,-352),
  ABISELECT(-608,-352),
  ABISELECT(-608,-352),
  (VTBL_ENTRY)&(_ZTI9S20753C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev),
  ABISELECT(-384,-228),
  ABISELECT(-656,-380),
  ABISELECT(-656,-380),
  ABISELECT(-656,-380),
  (VTBL_ENTRY)&(_ZTI9S20753C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev),
};
extern VTBL_ENTRY _ZTV9S20753C17[];
extern void ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev)();
extern void _ZN9S20753C18D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev)();
extern void _ZN9S20753C18D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C18__9S20753C17[] = {
  ABISELECT(432,252),
  ABISELECT(368,212),
  ABISELECT(-16,-4),
  ABISELECT(320,184),
  ABISELECT(316,184),
  ABISELECT(304,176),
  ABISELECT(256,148),
  ABISELECT(-16,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void _ZN8S20753C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void _ZN8S20753C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C59S20753C18__A1__9S20753C17[] = {
  ABISELECT(256,148),
  ABISELECT(-16,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void _ZN8S20753C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void _ZN8S20753C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C78S20753C59S20753C18__A2__9S20753C17[] = {
  ABISELECT(256,148),
  ABISELECT(-16,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C78S20753C59S20753C18__A2__9S20753C17[] = {
  ABISELECT(16,4),
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZThn256_N8S20753C7D1Ev,_ZThn148_N8S20753C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void ABISELECT(_ZThn256_N8S20753C7D0Ev,_ZThn148_N8S20753C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C78S20753C59S20753C18__A2__9S20753C17[] = {
  ABISELECT(-272,-152),
  ABISELECT(-256,-148),
  ABISELECT(-256,-148),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C59S20753C18__A1__9S20753C17[] = {
  ABISELECT(16,4),
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZThn256_N8S20753C5D1Ev,_ZThn148_N8S20753C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void ABISELECT(_ZThn256_N8S20753C5D0Ev,_ZThn148_N8S20753C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C59S20753C18__A1__9S20753C17[] = {
  ABISELECT(-272,-152),
  ABISELECT(-256,-148),
  ABISELECT(-256,-148),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev)();
extern void ABISELECT(_ZThn256_N9S20753C18D1Ev,_ZThn148_N9S20753C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev)();
extern void ABISELECT(_ZThn256_N9S20753C18D0Ev,_ZThn148_N9S20753C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__9S20753C18__9S20753C17[] = {
  ABISELECT(-272,-152),
  ABISELECT(-256,-148),
  ABISELECT(-256,-148),
  (VTBL_ENTRY)&(_ZTI9S20753C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__9S20753C18__9S20753C17[] = {
  ABISELECT(16,4),
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI9S20753C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev)();
extern void ABISELECT(_ZThn304_N9S20753C18D1Ev,_ZThn176_N9S20753C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev)();
extern void ABISELECT(_ZThn304_N9S20753C18D0Ev,_ZThn176_N9S20753C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C7__9S20753C18__9S20753C17[] = {
  ABISELECT(-48,-28),
  ABISELECT(-320,-180),
  ABISELECT(-304,-176),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI9S20753C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev)();
extern void ABISELECT(_ZThn320_N9S20753C18D1Ev,_ZThn184_N9S20753C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev)();
extern void ABISELECT(_ZThn320_N9S20753C18D0Ev,_ZThn184_N9S20753C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C2__9S20753C18__9S20753C17[] = {
  ABISELECT(-64,-36),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-336,-188),
  ABISELECT(-336,-188),
  ABISELECT(-320,-184),
  ABISELECT(-320,-184),
  (VTBL_ENTRY)&(_ZTI9S20753C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20753C18D1Ev,_ZTv0_n24_N9S20753C18D1Ev)();
extern void ABISELECT(_ZThn368_N9S20753C18D1Ev,_ZThn212_N9S20753C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20753C18D0Ev,_ZTv0_n24_N9S20753C18D0Ev)();
extern void ABISELECT(_ZThn368_N9S20753C18D0Ev,_ZThn212_N9S20753C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C4__9S20753C18__9S20753C17[] = {
  ABISELECT(-368,-212),
  ABISELECT(-112,-64),
  ABISELECT(-384,-216),
  ABISELECT(64,40),
  ABISELECT(-368,-212),
  (VTBL_ENTRY)&(_ZTI9S20753C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C18D1Ev,_ZTv0_n24_N9S20753C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C18D0Ev,_ZTv0_n24_N9S20753C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev)();
extern void ABISELECT(_ZThn432_N9S20753C18D1Ev,_ZThn252_N9S20753C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev)();
extern void ABISELECT(_ZThn432_N9S20753C18D0Ev,_ZThn252_N9S20753C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C18__9S20753C17[] = {
  ABISELECT(-176,-104),
  ABISELECT(-448,-256),
  ABISELECT(-432,-252),
  ABISELECT(-432,-252),
  (VTBL_ENTRY)&(_ZTI9S20753C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev)();
extern void ABISELECT(_ZThn384_N9S20753C18D1Ev,_ZThn220_N9S20753C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev)();
extern void ABISELECT(_ZThn384_N9S20753C18D0Ev,_ZThn220_N9S20753C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A1__9S20753C18__9S20753C17[] = {
  ABISELECT(-400,-224),
  ABISELECT(-384,-220),
  ABISELECT(-384,-220),
  (VTBL_ENTRY)&(_ZTI9S20753C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__9S20753C17[] = {
  ABISELECT(-272,-152),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C8__9S20753C17[] = {
  ABISELECT(272,152),
  ABISELECT(272,152),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void _ZN8S20753C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void _ZN8S20753C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C7__9S20753C17[] = {
  ABISELECT(-48,-28),
  ABISELECT(-320,-180),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C7__9S20753C17[] = {
  ABISELECT(320,180),
  ABISELECT(320,180),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C7__9S20753C17[] = {
  ABISELECT(-272,-152),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void _ZN8S20753C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
extern void _ZN8S20753C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C2__9S20753C17[] = {
  ABISELECT(-64,-36),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-336,-188),
  ABISELECT(-336,-188),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C2__A2__9S20753C17[] = {
  ABISELECT(-336,-188),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C88S20753C2__A2__9S20753C17[] = {
  ABISELECT(336,188),
  ABISELECT(336,188),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20753C2D1Ev,_ZTv0_n24_N8S20753C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S20753C2D1Ev,_ZThn28_N8S20753C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20753C2D0Ev,_ZTv0_n24_N8S20753C2D0Ev)();
extern void ABISELECT(_ZThn48_N8S20753C2D0Ev,_ZThn28_N8S20753C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C4__8S20753C2__9S20753C17[] = {
  ABISELECT(-48,-28),
  ABISELECT(-112,-64),
  ABISELECT(-384,-216),
  ABISELECT(64,40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20753C2D1Ev,_ZTv0_n24_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20753C2D0Ev,_ZTv0_n24_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void ABISELECT(_ZThn112_N8S20753C2D1Ev,_ZThn68_N8S20753C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
extern void ABISELECT(_ZThn112_N8S20753C2D0Ev,_ZThn68_N8S20753C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__8S20753C2__9S20753C17[] = {
  ABISELECT(-176,-104),
  ABISELECT(-448,-256),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C2__9S20753C17[] = {
  ABISELECT(336,188),
  ABISELECT(336,188),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C2__9S20753C17[] = {
  ABISELECT(-272,-152),
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C2D1Ev,_ZThn36_N8S20753C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C2D0Ev,_ZThn36_N8S20753C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A1__8S20753C2__9S20753C17[] = {
  ABISELECT(-400,-224),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void _ZN8S20753C4D1Ev();
extern void _ZN8S20753C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20753C4__9S20753C17[] = {
  ABISELECT(-112,-64),
  ABISELECT(-384,-216),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&_ZN8S20753C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20753C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A1__9S20753C17[] = {
  ABISELECT(-400,-224),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C88S20753C4__A1__9S20753C17[] = {
  ABISELECT(400,224),
  ABISELECT(400,224),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C4D1Ev,_ZThn40_N8S20753C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C4D0Ev,_ZThn40_N8S20753C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__8S20753C4__9S20753C17[] = {
  ABISELECT(-176,-104),
  ABISELECT(-448,-256),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C4__9S20753C17[] = {
  ABISELECT(384,216),
  ABISELECT(384,216),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C4__9S20753C17[] = {
  ABISELECT(-272,-152),
  ABISELECT(112,64),
  ABISELECT(112,64),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZThn16_N8S20753C4D1Ev,_ZThn8_N8S20753C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
extern void ABISELECT(_ZThn16_N8S20753C4D0Ev,_ZThn8_N8S20753C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__A__8S20753C4__9S20753C17[] = {
  ABISELECT(-400,-224),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void _ZN8S20753C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void _ZN8S20753C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C17[] = {
  ABISELECT(-176,-104),
  ABISELECT(-448,-256),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void _ZN8S20753C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void _ZN8S20753C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C78S20753C5__A1__9S20753C17[] = {
  ABISELECT(-176,-104),
  ABISELECT(-448,-256),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C78S20753C5__A1__9S20753C17[] = {
  ABISELECT(448,256),
  ABISELECT(448,256),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C78S20753C5__A1__9S20753C17[] = {
  ABISELECT(-272,-152),
  ABISELECT(176,104),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C5__9S20753C17[] = {
  ABISELECT(448,256),
  ABISELECT(448,256),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C5__9S20753C17[] = {
  ABISELECT(-272,-152),
  ABISELECT(176,104),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev)();
extern void _ZN9S20753C19D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev)();
extern void _ZN9S20753C19D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C19__9S20753C17[] = {
  ABISELECT(-180,-108),
  ABISELECT(-8,-4),
  ABISELECT(-128,-80),
  ABISELECT(-176,-108),
  ABISELECT(96,56),
  ABISELECT(-512,-296),
  ABISELECT(-240,-144),
  ABISELECT(-512,-296),
  ABISELECT(-64,-40),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void _ZN9S20753C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void _ZN9S20753C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C109S20753C19__9S20753C17[] = {
  ABISELECT(-8,-4),
  ABISELECT(-128,-80),
  ABISELECT(-176,-108),
  ABISELECT(96,56),
  ABISELECT(-512,-296),
  ABISELECT(-240,-144),
  ABISELECT(-512,-296),
  ABISELECT(-64,-40),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev)();
extern void _ZN9S20753C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev)();
extern void _ZN9S20753C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C129S20753C109S20753C19__9S20753C17[] = {
  ABISELECT(-512,-296),
  ABISELECT(-240,-144),
  ABISELECT(-512,-296),
  ABISELECT(-64,-40),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C129S20753C109S20753C19__9S20753C17[] = {
  ABISELECT(-176,-104),
  ABISELECT(-448,-256),
  ABISELECT(64,40),
  ABISELECT(64,40),
  (VTBL_ENTRY)&(_ZTI9S20753C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__9S20753C129S20753C109S20753C19__9S20753C17[] = {
  ABISELECT(512,296),
  ABISELECT(512,296),
  (VTBL_ENTRY)&(_ZTI9S20753C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__9S20753C129S20753C109S20753C19__9S20753C17[] = {
  ABISELECT(-272,-152),
  ABISELECT(240,144),
  ABISELECT(240,144),
  (VTBL_ENTRY)&(_ZTI9S20753C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__9S20753C109S20753C19__9S20753C17[] = {
  ABISELECT(-272,-152),
  ABISELECT(240,144),
  ABISELECT(240,144),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__9S20753C109S20753C19__9S20753C17[] = {
  ABISELECT(512,296),
  ABISELECT(512,296),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn96_N9S20753C10D1Ev,_ZThn56_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn96_N9S20753C10D0Ev,_ZThn56_N9S20753C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C11__9S20753C109S20753C19__9S20753C17[] = {
  ABISELECT(-336,-200),
  ABISELECT(-160,-96),
  ABISELECT(-224,-136),
  ABISELECT(-608,-352),
  ABISELECT(-272,-164),
  ABISELECT(-608,-352),
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C2__9S20753C109S20753C19__9S20753C17[] = {
  ABISELECT(-64,-36),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-336,-188),
  ABISELECT(-336,-188),
  ABISELECT(176,108),
  ABISELECT(176,108),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20753C10D1Ev,_ZTv0_n24_N9S20753C10D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20753C10D0Ev,_ZTv0_n24_N9S20753C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C4__9S20753C109S20753C19__9S20753C17[] = {
  ABISELECT(128,80),
  ABISELECT(-112,-64),
  ABISELECT(-384,-216),
  ABISELECT(64,40),
  ABISELECT(128,80),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C10D1Ev,_ZTv0_n24_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C10D0Ev,_ZTv0_n24_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C109S20753C19__9S20753C17[] = {
  ABISELECT(-176,-104),
  ABISELECT(-448,-256),
  ABISELECT(64,40),
  ABISELECT(64,40),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A2__9S20753C109S20753C19__9S20753C17[] = {
  ABISELECT(-400,-224),
  ABISELECT(112,72),
  ABISELECT(112,72),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn144_N9S20753C10D1Ev,_ZThn84_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn144_N9S20753C10D0Ev,_ZThn84_N9S20753C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C59S20753C11__A1__9S20753C109S20753C19__9S20753C17[] = {
  ABISELECT(-384,-228),
  ABISELECT(-656,-380),
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__9S20753C19__9S20753C17[] = {
  ABISELECT(-272,-152),
  ABISELECT(240,144),
  ABISELECT(240,144),
  (VTBL_ENTRY)&(_ZTI9S20753C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__9S20753C19__9S20753C17[] = {
  ABISELECT(512,296),
  ABISELECT(512,296),
  (VTBL_ENTRY)&(_ZTI9S20753C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev)();
extern void ABISELECT(_ZThn96_N9S20753C19D1Ev,_ZThn56_N9S20753C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev)();
extern void ABISELECT(_ZThn96_N9S20753C19D0Ev,_ZThn56_N9S20753C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C11__9S20753C19__9S20753C17[] = {
  ABISELECT(-336,-200),
  ABISELECT(-160,-96),
  ABISELECT(-224,-136),
  ABISELECT(-608,-352),
  ABISELECT(-272,-164),
  ABISELECT(-608,-352),
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S20753C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C2__9S20753C19__9S20753C17[] = {
  ABISELECT(-64,-36),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-336,-188),
  ABISELECT(-336,-188),
  ABISELECT(176,108),
  ABISELECT(176,108),
  (VTBL_ENTRY)&(_ZTI9S20753C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20753C19D1Ev,_ZTv0_n24_N9S20753C19D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20753C19D0Ev,_ZTv0_n24_N9S20753C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C4__9S20753C19__9S20753C17[] = {
  ABISELECT(128,80),
  ABISELECT(-112,-64),
  ABISELECT(-384,-216),
  ABISELECT(64,40),
  ABISELECT(128,80),
  (VTBL_ENTRY)&(_ZTI9S20753C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C19D1Ev,_ZTv0_n24_N9S20753C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C19D0Ev,_ZTv0_n24_N9S20753C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C19__9S20753C17[] = {
  ABISELECT(-176,-104),
  ABISELECT(-448,-256),
  ABISELECT(64,40),
  ABISELECT(64,40),
  (VTBL_ENTRY)&(_ZTI9S20753C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A2__9S20753C19__9S20753C17[] = {
  ABISELECT(-400,-224),
  ABISELECT(112,72),
  ABISELECT(112,72),
  (VTBL_ENTRY)&(_ZTI9S20753C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev)();
extern void ABISELECT(_ZThn144_N9S20753C19D1Ev,_ZThn84_N9S20753C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev)();
extern void ABISELECT(_ZThn144_N9S20753C19D0Ev,_ZThn84_N9S20753C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C59S20753C11__A1__9S20753C19__9S20753C17[] = {
  ABISELECT(-384,-228),
  ABISELECT(-656,-380),
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S20753C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void _ZN9S20753C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
extern void _ZN9S20753C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C11__9S20753C17[] = {
  ABISELECT(-336,-200),
  ABISELECT(-160,-96),
  ABISELECT(-224,-136),
  ABISELECT(-608,-352),
  ABISELECT(-272,-164),
  ABISELECT(-608,-352),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C89S20753C11__A3__9S20753C17[] = {
  ABISELECT(-608,-352),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C89S20753C11__A3__9S20753C17[] = {
  ABISELECT(608,352),
  ABISELECT(608,352),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void _ZN8S20753C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void _ZN8S20753C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C59S20753C11__A2__9S20753C17[] = {
  ABISELECT(-384,-228),
  ABISELECT(-656,-380),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void _ZN8S20753C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void _ZN8S20753C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C78S20753C59S20753C11__A3__9S20753C17[] = {
  ABISELECT(-384,-228),
  ABISELECT(-656,-380),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C78S20753C59S20753C11__A3__9S20753C17[] = {
  ABISELECT(656,380),
  ABISELECT(656,380),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C78S20753C59S20753C11__A3__9S20753C17[] = {
  ABISELECT(-272,-152),
  ABISELECT(384,228),
  ABISELECT(384,228),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C59S20753C11__A2__9S20753C17[] = {
  ABISELECT(656,380),
  ABISELECT(656,380),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C59S20753C11__A2__9S20753C17[] = {
  ABISELECT(-272,-152),
  ABISELECT(384,228),
  ABISELECT(384,228),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__9S20753C11__9S20753C17[] = {
  ABISELECT(608,352),
  ABISELECT(608,352),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C2__9S20753C11__9S20753C17[] = {
  ABISELECT(-64,-36),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-336,-188),
  ABISELECT(-336,-188),
  ABISELECT(272,164),
  ABISELECT(272,164),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20753C11D1Ev,_ZTv0_n24_N9S20753C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20753C11D0Ev,_ZTv0_n24_N9S20753C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C4__9S20753C11__9S20753C17[] = {
  ABISELECT(224,136),
  ABISELECT(-112,-64),
  ABISELECT(-384,-216),
  ABISELECT(64,40),
  ABISELECT(224,136),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C11D1Ev,_ZTv0_n24_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C11D0Ev,_ZTv0_n24_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C11__9S20753C17[] = {
  ABISELECT(-176,-104),
  ABISELECT(-448,-256),
  ABISELECT(160,96),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__A1__9S20753C11__9S20753C17[] = {
  ABISELECT(-272,-152),
  ABISELECT(336,200),
  ABISELECT(336,200),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A2__9S20753C11__9S20753C17[] = {
  ABISELECT(-400,-224),
  ABISELECT(208,128),
  ABISELECT(208,128),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZThn48_N9S20753C11D1Ev,_ZThn28_N9S20753C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
extern void ABISELECT(_ZThn48_N9S20753C11D0Ev,_ZThn28_N9S20753C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__A__9S20753C11__9S20753C17[] = {
  ABISELECT(-384,-228),
  ABISELECT(-656,-380),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
static  VTT_ENTRY vtt_S20753C17[] = {
  {&(_ZTV9S20753C17[15]),  15,106},
  {&(_ZTV9S20753C17[15]),  15,106},
  {&(_ZTV9S20753C17[28]),  28,106},
  {&(_ZTV9S20753C17[34]),  34,106},
  {&(_ZTV9S20753C17[41]),  41,106},
  {&(_ZTV9S20753C17[51]),  51,106},
  {&(_ZTV9S20753C17[59]),  59,106},
  {&(_ZTV9S20753C17[72]),  72,106},
  {&(_ZTV9S20753C17[65]),  65,106},
  {&(_ZTV9S20753C17[86]),  86,106},
  {&(_ZTV9S20753C17[97]),  97,106},
  {&(_ZTV9S20753C17[104]),  104,106},
  {&(_tg__ZTV9S20753C18__9S20753C17[11]),  11,13},
  {&(_tg__ZTV8S20753C59S20753C18__A1__9S20753C17[5]),  5,7},
  {&(_tg__ZTV8S20753C78S20753C59S20753C18__A2__9S20753C17[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S20753C78S20753C59S20753C18__A2__9S20753C17[3]),  3,5},
  {&(_tg__ZTV8S20753C8__8S20753C78S20753C59S20753C18__A2__9S20753C17[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C59S20753C18__A1__9S20753C17[3]),  3,5},
  {&(_tg__ZTV8S20753C8__8S20753C59S20753C18__A1__9S20753C17[4]),  4,6},
  {&(_tg__ZTV8S20753C8__9S20753C18__9S20753C17[4]),  4,6},
  {&(_tg__ZTV9S19905C19__9S20753C18__9S20753C17[3]),  3,5},
  {&(_tg__ZTV8S20753C7__9S20753C18__9S20753C17[5]),  5,7},
  {&(_tg__ZTV8S20753C2__9S20753C18__9S20753C17[8]),  8,10},
  {&(_tg__ZTV8S20753C4__9S20753C18__9S20753C17[6]),  6,8},
  {&(_tg__ZTV8S20753C5__9S20753C18__9S20753C17[5]),  5,7},
  {&(_tg__ZTV8S20753C88S20753C4__A1__9S20753C18__9S20753C17[4]),  4,6},
  {&(_tg__ZTV8S20753C8__9S20753C17[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C8__9S20753C17[3]),  3,5},
  {&(_tg__ZTV8S20753C7__9S20753C17[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S20753C7__9S20753C17[3]),  3,5},
  {&(_tg__ZTV8S20753C8__8S20753C7__9S20753C17[4]),  4,6},
  {&(_tg__ZTV8S20753C2__9S20753C17[8]),  8,10},
  {&(_tg__ZTV8S20753C88S20753C2__A2__9S20753C17[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C88S20753C2__A2__9S20753C17[3]),  3,5},
  {&(_tg__ZTV8S20753C4__8S20753C2__9S20753C17[6]),  6,8},
  {&(_tg__ZTV8S20753C5__8S20753C2__9S20753C17[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S20753C2__9S20753C17[3]),  3,5},
  {&(_tg__ZTV8S20753C8__8S20753C2__9S20753C17[4]),  4,6},
  {&(_tg__ZTV8S20753C88S20753C4__A1__8S20753C2__9S20753C17[4]),  4,6},
  {&(_tg__ZTV8S20753C4__9S20753C17[5]),  5,7},
  {&(_tg__ZTV8S20753C88S20753C4__A1__9S20753C17[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C88S20753C4__A1__9S20753C17[3]),  3,5},
  {&(_tg__ZTV8S20753C5__8S20753C4__9S20753C17[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S20753C4__9S20753C17[3]),  3,5},
  {&(_tg__ZTV8S20753C8__8S20753C4__9S20753C17[4]),  4,6},
  {&(_tg__ZTV8S20753C8__A__8S20753C4__9S20753C17[4]),  4,6},
  {&(_tg__ZTV8S20753C5__9S20753C17[5]),  5,7},
  {&(_tg__ZTV8S20753C78S20753C5__A1__9S20753C17[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S20753C78S20753C5__A1__9S20753C17[3]),  3,5},
  {&(_tg__ZTV8S20753C8__8S20753C78S20753C5__A1__9S20753C17[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C5__9S20753C17[3]),  3,5},
  {&(_tg__ZTV8S20753C8__8S20753C5__9S20753C17[4]),  4,6},
  {&(_tg__ZTV9S20753C19__9S20753C17[12]),  12,14},
  {&(_tg__ZTV9S20753C109S20753C19__9S20753C17[11]),  11,13},
  {&(_tg__ZTV9S20753C129S20753C109S20753C19__9S20753C17[7]),  7,9},
  {&(_tg__ZTV8S20753C5__9S20753C129S20753C109S20753C19__9S20753C17[5]),  5,7},
  {&(_tg__ZTV9S19905C19__9S20753C129S20753C109S20753C19__9S20753C17[3]),  3,5},
  {&(_tg__ZTV8S20753C8__9S20753C129S20753C109S20753C19__9S20753C17[4]),  4,6},
  {&(_tg__ZTV8S20753C8__9S20753C109S20753C19__9S20753C17[4]),  4,6},
  {&(_tg__ZTV9S19905C19__9S20753C109S20753C19__9S20753C17[3]),  3,5},
  {&(_tg__ZTV9S20753C11__9S20753C109S20753C19__9S20753C17[9]),  9,11},
  {&(_tg__ZTV8S20753C2__9S20753C109S20753C19__9S20753C17[8]),  8,10},
  {&(_tg__ZTV8S20753C4__9S20753C109S20753C19__9S20753C17[6]),  6,8},
  {&(_tg__ZTV8S20753C5__9S20753C109S20753C19__9S20753C17[5]),  5,7},
  {&(_tg__ZTV8S20753C88S20753C4__A2__9S20753C109S20753C19__9S20753C17[4]),  4,6},
  {&(_tg__ZTV8S20753C59S20753C11__A1__9S20753C109S20753C19__9S20753C17[5]),  5,7},
  {&(_tg__ZTV8S20753C8__9S20753C19__9S20753C17[4]),  4,6},
  {&(_tg__ZTV9S19905C19__9S20753C19__9S20753C17[3]),  3,5},
  {&(_tg__ZTV9S20753C11__9S20753C19__9S20753C17[9]),  9,11},
  {&(_tg__ZTV8S20753C2__9S20753C19__9S20753C17[8]),  8,10},
  {&(_tg__ZTV8S20753C4__9S20753C19__9S20753C17[6]),  6,8},
  {&(_tg__ZTV8S20753C5__9S20753C19__9S20753C17[5]),  5,7},
  {&(_tg__ZTV8S20753C88S20753C4__A2__9S20753C19__9S20753C17[4]),  4,6},
  {&(_tg__ZTV8S20753C59S20753C11__A1__9S20753C19__9S20753C17[5]),  5,7},
  {&(_tg__ZTV9S20753C11__9S20753C17[9]),  9,11},
  {&(_tg__ZTV8S20753C89S20753C11__A3__9S20753C17[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C89S20753C11__A3__9S20753C17[3]),  3,5},
  {&(_tg__ZTV8S20753C59S20753C11__A2__9S20753C17[5]),  5,7},
  {&(_tg__ZTV8S20753C78S20753C59S20753C11__A3__9S20753C17[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S20753C78S20753C59S20753C11__A3__9S20753C17[3]),  3,5},
  {&(_tg__ZTV8S20753C8__8S20753C78S20753C59S20753C11__A3__9S20753C17[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C59S20753C11__A2__9S20753C17[3]),  3,5},
  {&(_tg__ZTV8S20753C8__8S20753C59S20753C11__A2__9S20753C17[4]),  4,6},
  {&(_tg__ZTV9S19905C19__9S20753C11__9S20753C17[3]),  3,5},
  {&(_tg__ZTV8S20753C2__9S20753C11__9S20753C17[8]),  8,10},
  {&(_tg__ZTV8S20753C4__9S20753C11__9S20753C17[6]),  6,8},
  {&(_tg__ZTV8S20753C5__9S20753C11__9S20753C17[5]),  5,7},
  {&(_tg__ZTV8S20753C8__A1__9S20753C11__9S20753C17[4]),  4,6},
  {&(_tg__ZTV8S20753C88S20753C4__A2__9S20753C11__9S20753C17[4]),  4,6},
  {&(_tg__ZTV8S20753C5__A__9S20753C11__9S20753C17[5]),  5,7},
};
extern VTBL_ENTRY _ZTI9S20753C17[];
extern  VTBL_ENTRY _ZTV9S20753C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C17[];
static VTBL_ENTRY alt_thunk_names32[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20753C11D0Ev,_ZThn28_N9S20753C11D0Ev),
  (VTBL_ENTRY)_ZN9S20753C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20753C11D1Ev,_ZThn28_N9S20753C11D1Ev),
  (VTBL_ENTRY)_ZN9S20753C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev), // 
  (VTBL_ENTRY)_ZN9S20753C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev), // 
  (VTBL_ENTRY)_ZN9S20753C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20753C10D0Ev,_ZThn84_N9S20753C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20753C10D0Ev,_ZThn56_N9S20753C10D0Ev),
  (VTBL_ENTRY)_ZN9S20753C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20753C10D1Ev,_ZThn84_N9S20753C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20753C10D1Ev,_ZThn56_N9S20753C10D1Ev),
  (VTBL_ENTRY)_ZN9S20753C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20753C19D0Ev,_ZThn84_N9S20753C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20753C19D0Ev,_ZThn56_N9S20753C19D0Ev),
  (VTBL_ENTRY)_ZN9S20753C19D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20753C19D1Ev,_ZThn84_N9S20753C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20753C19D1Ev,_ZThn56_N9S20753C19D1Ev),
  (VTBL_ENTRY)_ZN9S20753C19D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20753C4D0Ev,_ZThn8_N8S20753C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C4D0Ev,_ZThn40_N8S20753C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20753C4D1Ev,_ZThn8_N8S20753C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C4D1Ev,_ZThn40_N8S20753C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20753C2D0Ev,_ZTv0_n24_N8S20753C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20753C2D0Ev,_ZThn28_N8S20753C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20753C2D1Ev,_ZTv0_n24_N8S20753C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20753C2D1Ev,_ZThn28_N8S20753C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C2D0Ev,_ZThn36_N8S20753C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20753C2D0Ev,_ZThn68_N8S20753C2D0Ev),
  (VTBL_ENTRY)_ZN8S20753C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C2D1Ev,_ZThn36_N8S20753C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20753C2D1Ev,_ZThn68_N8S20753C2D1Ev),
  (VTBL_ENTRY)_ZN8S20753C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev), // 
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev), // 
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20753C18D0Ev,_ZTv0_n24_N9S20753C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S20753C18D0Ev,_ZThn212_N9S20753C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20753C18D1Ev,_ZTv0_n24_N9S20753C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S20753C18D1Ev,_ZThn212_N9S20753C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S20753C7D0Ev,
  (VTBL_ENTRY)_ZN8S20753C7D0Ev,
  (VTBL_ENTRY)_ZN8S20753C7D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S20753C7D0Ev,_ZThn148_N8S20753C7D0Ev),
  (VTBL_ENTRY)_ZN8S20753C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S20753C7D1Ev,
  (VTBL_ENTRY)_ZN8S20753C7D1Ev,
  (VTBL_ENTRY)_ZN8S20753C7D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S20753C7D1Ev,_ZThn148_N8S20753C7D1Ev),
  (VTBL_ENTRY)_ZN8S20753C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20753C5D0Ev,
  (VTBL_ENTRY)_ZN8S20753C5D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S20753C5D0Ev,_ZThn148_N8S20753C5D0Ev),
  (VTBL_ENTRY)_ZN8S20753C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20753C5D1Ev,
  (VTBL_ENTRY)_ZN8S20753C5D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S20753C5D1Ev,_ZThn148_N8S20753C5D1Ev),
  (VTBL_ENTRY)_ZN8S20753C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S20753C18D0Ev,_ZThn220_N9S20753C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S20753C18D0Ev,_ZThn252_N9S20753C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S20753C18D0Ev,_ZThn184_N9S20753C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S20753C18D0Ev,_ZThn176_N9S20753C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S20753C18D0Ev,_ZThn148_N9S20753C18D0Ev),
  (VTBL_ENTRY)_ZN9S20753C18D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S20753C18D1Ev,_ZThn220_N9S20753C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S20753C18D1Ev,_ZThn252_N9S20753C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S20753C18D1Ev,_ZThn184_N9S20753C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S20753C18D1Ev,_ZThn176_N9S20753C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S20753C18D1Ev,_ZThn148_N9S20753C18D1Ev),
  (VTBL_ENTRY)_ZN9S20753C18D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20753C17D0Ev,_ZTv0_n24_N9S20753C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S20753C17D0Ev,_ZThn216_N9S20753C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20753C17D1Ev,_ZTv0_n24_N9S20753C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S20753C17D1Ev,_ZThn216_N9S20753C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N9S20753C17D0Ev,_ZThn380_N9S20753C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn608_N9S20753C17D0Ev,_ZThn352_N9S20753C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn512_N9S20753C17D0Ev,_ZThn296_N9S20753C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn448_N9S20753C17D0Ev,_ZThn256_N9S20753C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn400_N9S20753C17D0Ev,_ZThn224_N9S20753C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn336_N9S20753C17D0Ev,_ZThn188_N9S20753C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S20753C17D0Ev,_ZThn180_N9S20753C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N9S20753C17D0Ev,_ZThn152_N9S20753C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20753C17D0Ev,_ZThn4_N9S20753C17D0Ev),
  (VTBL_ENTRY)_ZN9S20753C17D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N9S20753C17D1Ev,_ZThn380_N9S20753C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn608_N9S20753C17D1Ev,_ZThn352_N9S20753C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn512_N9S20753C17D1Ev,_ZThn296_N9S20753C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn448_N9S20753C17D1Ev,_ZThn256_N9S20753C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn400_N9S20753C17D1Ev,_ZThn224_N9S20753C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn336_N9S20753C17D1Ev,_ZThn188_N9S20753C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S20753C17D1Ev,_ZThn180_N9S20753C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N9S20753C17D1Ev,_ZThn152_N9S20753C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20753C17D1Ev,_ZThn4_N9S20753C17D1Ev),
  (VTBL_ENTRY)_ZN9S20753C17D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20753C17 = {  "S20753C17", // class name
  bases_S20753C17, 31,
  &(vtc_S20753C17[0]), // expected_vtbl_contents
  &(vtt_S20753C17[0]), // expected_vtt_contents
  ABISELECT(720,420), // object size
  NSPAIRA(_ZTI9S20753C17),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20753C17),106, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20753C17),90, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names32,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20753C1  : virtual S20753C2 , virtual S20753C10 , S20753C15 , S20753C17 , S5266C26 {
  int s20753c1f0;
  ~S20753C1(); // tgen
  S20753C1(); // tgen
};
//SIG(1 S20753C1) C1{ VBC2{ VBC3{ m} VBC4{ VBC5{ VBC6{ vd m} BC7{ VBC6 VBC8{ VBC6 FD Fc Fs[4]} vd Fi} BC9{ m Fp} vd Fs FL Fp FL} BC9 BC6 BC8 vd Fi} BC8 vd Fs} VBC10{ VBC8 VBC11{ VBC6 BC8 VBC2 BC5 Fp} VBC9 BC12{ BC13{ m} VBC5 BC9 VBC3 vd FC7 Fs} vd Fi FC14{}} BC15{ VBC2 BC10 BC16{ vd m} vd Fi} BC17{ VBC6 VBC18{ VBC8 VBC7 VBC13 VBC2 BC5 vd FC4 Fi Fs} VBC9 VBC19{ VBC13 BC10 BC3 vd} BC13} BC13 Fi}


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

static void Test_S20753C1()
{
  extern Class_Descriptor cd_S20753C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(60,138)];
    init_test(&cd_S20753C1, buf);
    S20753C1 *dp, &lv = *(dp=new (buf) S20753C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(944,548), "sizeof(S20753C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20753C1)");
    check_base_class_offset(lv, (S5266C29*)(S20753C2*), 0, "S20753C1");
    /*is_ambiguous_... S20753C1::S20753C10 */ AMB_check_base_class_offset(lv, (S5266C29*)(S20753C12*)(S20753C10*), 0, "S20753C1");
    check_base_class_offset(lv, (S5266C29*)(S20753C12*)(S20753C10*)(S20753C15*), 0, "S20753C1");
    check_base_class_offset(lv, (S5266C29*)(S20753C12*)(S20753C10*)(S20753C19*), 0, "S20753C1");
    /*is_ambiguous_... S20753C1::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C5*), ABISELECT(240,140), "S20753C1");
    /*is_ambiguous_... S20753C1::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C7*)(S20753C5*), ABISELECT(240,140), "S20753C1");
    /*is_ambiguous_... S20753C1::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*), ABISELECT(240,140), "S20753C1");
    /*is_ambiguous_... S20753C4::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*)(S20753C4*), ABISELECT(240,140), "S20753C1");
    /*is_ambiguous_... S20753C2::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*)(S20753C2*), ABISELECT(240,140), "S20753C1");
    /*is_ambiguous_... S20753C11::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C11*), ABISELECT(240,140), "S20753C1");
    /*is_ambiguous_... S20753C11::S20753C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C8*)(S20753C11*), ABISELECT(240,140), "S20753C1");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C5*)(S20753C11*), ABISELECT(240,140), "S20753C1");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C7*)(S20753C5*)(S20753C11*), ABISELECT(240,140), "S20753C1");
    /*is_ambiguous_... S20753C17::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C17*), ABISELECT(240,140), "S20753C1");
    /*is_ambiguous_... S20753C1::S20753C7 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C7*), ABISELECT(240,140), "S20753C1");
    /*is_ambiguous_... S20753C18::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C5*)(S20753C18*), ABISELECT(240,140), "S20753C1");
    /*is_ambiguous_... S20753C18::S20753C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C7*)(S20753C5*)(S20753C18*), ABISELECT(240,140), "S20753C1");
    /*is_ambiguous_... S20753C1::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C7*)(S20753C5*), ABISELECT(304,176), "S20753C1");
    /*is_ambiguous_... S20753C1::S20753C10 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C10*), ABISELECT(304,176), "S20753C1");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C7*)(S20753C5*)(S20753C11*), ABISELECT(304,176), "S20753C1");
    /*is_ambiguous_... S20753C10::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C10*)(S20753C15*), ABISELECT(304,176), "S20753C1");
    /*is_ambiguous_... S20753C18::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C18*), ABISELECT(304,176), "S20753C1");
    /*is_ambiguous_... S20753C1::S20753C7 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C7*), ABISELECT(304,176), "S20753C1");
    /*is_ambiguous_... S20753C18::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C7*)(S20753C5*)(S20753C18*), ABISELECT(304,176), "S20753C1");
    /*is_ambiguous_... S20753C10::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C10*)(S20753C19*), ABISELECT(304,176), "S20753C1");
    /*is_ambiguous_... S20753C1::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C7*)(S20753C5*), ABISELECT(240,140), "S20753C1");
    /*is_ambiguous_... S20753C1::S20753C5 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C5*), ABISELECT(256,148), "S20753C1");
    check_base_class_offset(lv, (S20753C5*)(S20753C4*), ABISELECT(240,140), "S20753C1");
    /*is_ambiguous_... S20753C1::S20753C10 */ AMB_check_base_class_offset(lv, (S20753C5*)(S20753C12*)(S20753C10*), ABISELECT(240,140), "S20753C1");
    check_base_class_offset(lv, (S20753C5*)(S20753C12*)(S20753C10*)(S20753C15*), ABISELECT(240,140), "S20753C1");
    check_base_class_offset(lv, (S20753C5*)(S20753C12*)(S20753C10*)(S20753C19*), ABISELECT(240,140), "S20753C1");
    /*is_ambiguous_... S20753C4::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C4*), ABISELECT(184,104), "S20753C1");
    /*is_ambiguous_... S20753C4::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S20753C4*), ABISELECT(176,100), "S20753C1");
    /*is_ambiguous_... S20753C4::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C4*), ABISELECT(192,108), "S20753C1");
    check_base_class_offset(lv, (S20753C4*)(S20753C2*), ABISELECT(176,100), "S20753C1");
    /*is_ambiguous_... S20753C2::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C2*), ABISELECT(128,72), "S20753C1");
    check_base_class_offset(lv, (S20753C2*), ABISELECT(128,72), "S20753C1");
    check_base_class_offset(lv, (S20753C2*)(S20753C11*), ABISELECT(128,72), "S20753C1");
    check_base_class_offset(lv, (S20753C2*)(S20753C15*), ABISELECT(128,72), "S20753C1");
    check_base_class_offset(lv, (S20753C2*)(S20753C18*), ABISELECT(128,72), "S20753C1");
    /*is_ambiguous_... S20753C11::S20753C8 */ AMB_check_base_class_offset(lv, (S20753C8*)(S20753C11*), ABISELECT(448,260), "S20753C1");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C7*)(S20753C5*)(S20753C11*), ABISELECT(496,288), "S20753C1");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C5*)(S20753C11*), ABISELECT(512,296), "S20753C1");
    /*is_ambiguous_... S20753C11::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C5*)(S20753C11*), ABISELECT(496,288), "S20753C1");
    /*is_ambiguous_... S20753C1::S20753C10 */ AMB_check_base_class_offset(lv, (S20753C11*)(S20753C10*), ABISELECT(448,260), "S20753C1");
    check_base_class_offset(lv, (S20753C11*)(S20753C10*)(S20753C15*), ABISELECT(448,260), "S20753C1");
    check_base_class_offset(lv, (S20753C11*)(S20753C10*)(S20753C19*), ABISELECT(448,260), "S20753C1");
    /*is_ambiguous_... S20753C1::S20753C10 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C10*), ABISELECT(560,328), "S20753C1");
    /*is_ambiguous_... S20753C10::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C10*)(S20753C15*), ABISELECT(560,328), "S20753C1");
    /*is_ambiguous_... S20753C17::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C17*), ABISELECT(560,328), "S20753C1");
    /*is_ambiguous_... S20753C10::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C10*)(S20753C19*), ABISELECT(560,328), "S20753C1");
    /*is_ambiguous_... S20753C1::S20753C10 */ AMB_check_base_class_offset(lv, (S5266C26*)(S20753C12*)(S20753C10*), ABISELECT(352,204), "S20753C1");
    /*is_ambiguous_... S20753C1::S20753C10 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C12*)(S20753C10*), ABISELECT(360,208), "S20753C1");
    /*is_ambiguous_... S20753C1::S20753C10 */ AMB_check_base_class_offset(lv, (S20753C12*)(S20753C10*), ABISELECT(352,204), "S20753C1");
    /*is_ambiguous_... S20753C1::S20753C10 */ AMB_check_base_class_offset(lv, (S20753C10*), ABISELECT(352,204), "S20753C1");
    check_base_class_offset(lv, (S5266C26*)(S20753C12*)(S20753C10*)(S20753C15*), 0, "S20753C1");
    /*is_ambiguous_... S20753C12::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C12*)(S20753C10*)(S20753C15*), ABISELECT(8,4), "S20753C1");
    check_base_class_offset(lv, (S20753C12*)(S20753C10*)(S20753C15*), 0, "S20753C1");
    check_base_class_offset(lv, (S20753C10*)(S20753C15*), 0, "S20753C1");
    check_base_class_offset(lv, (S19905C5_nt*)(S20753C15*), ABISELECT(96,56), "S20753C1");
    check_base_class_offset(lv, (S20753C15*), 0, "S20753C1");
    /*is_ambiguous_... S20753C18::S20753C7 */ AMB_check_base_class_offset(lv, (S20753C7*)(S20753C18*), ABISELECT(824,480), "S20753C1");
    check_base_class_offset(lv, (S5266C26*)(S20753C18*), ABISELECT(836,488), "S20753C1");
    /*is_ambiguous_... S20753C19::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S20753C19*), ABISELECT(836,488), "S20753C1");
    /*is_ambiguous_... S20753C18::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C7*)(S20753C5*)(S20753C18*), ABISELECT(576,332), "S20753C1");
    /*is_ambiguous_... S20753C18::S20753C5 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C5*)(S20753C18*), ABISELECT(592,340), "S20753C1");
    /*is_ambiguous_... S20753C18::S20753C5 */ AMB_check_base_class_offset(lv, (S20753C5*)(S20753C18*), ABISELECT(576,332), "S20753C1");
    check_base_class_offset(lv, (S20753C18*)(S20753C17*), ABISELECT(576,332), "S20753C1");
    check_base_class_offset(lv, (S5266C26*)(S20753C12*)(S20753C10*)(S20753C19*), ABISELECT(848,492), "S20753C1");
    /*is_ambiguous_... S20753C12::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S20753C12*)(S20753C10*)(S20753C19*), ABISELECT(856,496), "S20753C1");
    check_base_class_offset(lv, (S20753C12*)(S20753C10*)(S20753C19*), ABISELECT(848,492), "S20753C1");
    check_base_class_offset(lv, (S20753C10*)(S20753C19*), ABISELECT(848,492), "S20753C1");
    /*is_ambiguous_... S20753C19::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S20753C19*), ABISELECT(848,492), "S20753C1");
    check_base_class_offset(lv, (S20753C19*)(S20753C17*), ABISELECT(848,492), "S20753C1");
    /*is_ambiguous_... S20753C17::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S20753C17*), ABISELECT(112,64), "S20753C1");
    check_base_class_offset(lv, (S20753C17*), ABISELECT(112,64), "S20753C1");
    /*is_ambiguous_... S20753C1::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*), ABISELECT(120,68), "S20753C1");
    check_field_offset(lv, s20753c1f0, ABISELECT(120,68), "S20753C1.s20753c1f0");
    test_class_info(&lv, &cd_S20753C1);
    dp->~S20753C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20753C1(Test_S20753C1, "S20753C1", ABISELECT(944,548));

#else // __cplusplus

extern void _ZN8S20753C1C1Ev();
extern void _ZN8S20753C1D1Ev();
Name_Map name_map_S20753C1[] = {
  NSPAIR(_ZN8S20753C1C1Ev),
  NSPAIR(_ZN8S20753C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C7;
extern VTBL_ENTRY _ZTI8S20753C7[];
extern  VTBL_ENTRY _ZTV8S20753C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C7[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S20753C5;
extern VTBL_ENTRY _ZTI8S20753C5[];
extern  VTBL_ENTRY _ZTV8S20753C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C5[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C4;
extern VTBL_ENTRY _ZTI8S20753C4[];
extern  VTBL_ENTRY _ZTV8S20753C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C4[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C2;
extern VTBL_ENTRY _ZTI8S20753C2[];
extern  VTBL_ENTRY _ZTV8S20753C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C2[];
extern Class_Descriptor cd_S20753C8;
extern VTBL_ENTRY _ZTI8S20753C8[];
extern  VTBL_ENTRY _ZTV8S20753C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C8[];
extern Class_Descriptor cd_S20753C7;
extern VTBL_ENTRY _ZTI8S20753C7[];
extern  VTBL_ENTRY _ZTV8S20753C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C7[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S20753C5;
extern VTBL_ENTRY _ZTI8S20753C5[];
extern  VTBL_ENTRY _ZTV8S20753C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C5[];
extern Class_Descriptor cd_S20753C11;
extern VTBL_ENTRY _ZTI9S20753C11[];
extern  VTBL_ENTRY _ZTV9S20753C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C11[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S20753C12;
extern VTBL_ENTRY _ZTI9S20753C12[];
extern  VTBL_ENTRY _ZTV9S20753C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C12[];
extern Class_Descriptor cd_S20753C10;
extern VTBL_ENTRY _ZTI9S20753C10[];
extern  VTBL_ENTRY _ZTV9S20753C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C10[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S20753C12;
extern VTBL_ENTRY _ZTI9S20753C12[];
extern  VTBL_ENTRY _ZTV9S20753C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C12[];
extern Class_Descriptor cd_S20753C10;
extern VTBL_ENTRY _ZTI9S20753C10[];
extern  VTBL_ENTRY _ZTV9S20753C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C10[];
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S20753C15;
extern VTBL_ENTRY _ZTI9S20753C15[];
extern  VTBL_ENTRY _ZTV9S20753C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C15[];
extern Class_Descriptor cd_S20753C7;
extern VTBL_ENTRY _ZTI8S20753C7[];
extern  VTBL_ENTRY _ZTV8S20753C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C7[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S20753C7;
extern VTBL_ENTRY _ZTI8S20753C7[];
extern  VTBL_ENTRY _ZTV8S20753C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C7[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S20753C5;
extern VTBL_ENTRY _ZTI8S20753C5[];
extern  VTBL_ENTRY _ZTV8S20753C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C5[];
extern Class_Descriptor cd_S20753C18;
extern VTBL_ENTRY _ZTI9S20753C18[];
extern  VTBL_ENTRY _ZTV9S20753C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C18[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S20753C12;
extern VTBL_ENTRY _ZTI9S20753C12[];
extern  VTBL_ENTRY _ZTV9S20753C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C12[];
extern Class_Descriptor cd_S20753C10;
extern VTBL_ENTRY _ZTI9S20753C10[];
extern  VTBL_ENTRY _ZTV9S20753C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C10[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S20753C19;
extern VTBL_ENTRY _ZTI9S20753C19[];
extern  VTBL_ENTRY _ZTV9S20753C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C19[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S20753C17;
extern VTBL_ENTRY _ZTI9S20753C17[];
extern  VTBL_ENTRY _ZTV9S20753C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20753C17[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
static Base_Class bases_S20753C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19905C19,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20753C8,    ABISELECT(304,176), //bcp->offset
    70, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20753C7,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    5, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(256,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
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20753C5,    ABISELECT(240,140), //bcp->offset
    63, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(184,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
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19905C19,    ABISELECT(176,100), //bcp->offset
    -1, //bcp->virtual_function_table_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_S20753C8,    ABISELECT(192,108), //bcp->offset
    57, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20753C4,    ABISELECT(176,100), //bcp->offset
    49, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20753C8,    ABISELECT(128,72), //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
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20753C2,    ABISELECT(128,72), //bcp->offset
    39, //bcp->virtual_function_table_offset
    8, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20753C8,    ABISELECT(448,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    86, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20753C7,    ABISELECT(496,288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    89, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(512,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20753C5,    ABISELECT(496,288), //bcp->offset
    100, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    88, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20753C11,    ABISELECT(448,260), //bcp->offset
    89, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    85, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(560,328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S5266C26,    ABISELECT(352,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
    20, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(360,208), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20753C12,    ABISELECT(352,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20753C10,    ABISELECT(352,204), //bcp->offset
    76, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    72, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S17777C6_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
    24, //immediately_derived
  0, 0},
  {&cd_S20753C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S20753C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19905C5_nt,    ABISELECT(96,56), //bcp->offset
    18, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20753C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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_S20753C7,    ABISELECT(824,480), //bcp->offset
    120, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    115, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    33, //immediately_derived
  0, 1},
  {&cd_S5266C26,    ABISELECT(836,488), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20753C7,    ABISELECT(576,332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    103, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(592,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
    32, //immediately_derived
  0, 0},
  {&cd_S20753C5,    ABISELECT(576,332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    102, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S20753C18,    ABISELECT(576,332), //bcp->offset
    107, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    101, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    41, //immediately_derived
  0, 1},
  {&cd_S5266C26,    ABISELECT(848,492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S17777C6_nt,    ABISELECT(856,496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20753C12,    ABISELECT(848,492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    120, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S20753C10,    ABISELECT(848,492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    119, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S5266C29,    ABISELECT(848,492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20753C19,    ABISELECT(848,492), //bcp->offset
    127, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    118, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    41, //immediately_derived
  0, 1},
  {&cd_S5266C26,    ABISELECT(112,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
    -1, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S20753C17,    ABISELECT(112,64), //bcp->offset
    22, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5266C26,    ABISELECT(120,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
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20753C1[];
extern void ABISELECT(_ZTv0_n24_N8S20753C1D1Ev,_ZTv0_n12_N8S20753C1D1Ev)();
extern void _ZN8S20753C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C1D0Ev,_ZTv0_n12_N8S20753C1D0Ev)();
extern void _ZN8S20753C1D0Ev() __attribute__((weak));
extern void ABISELECT(_ZThn96_N8S20753C1D1Ev,_ZThn56_N8S20753C1D1Ev)();
extern void ABISELECT(_ZThn96_N8S20753C1D0Ev,_ZThn56_N8S20753C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C1D1Ev,_ZTv0_n12_N8S20753C1D1Ev)();
extern void ABISELECT(_ZThn112_N8S20753C1D1Ev,_ZThn64_N8S20753C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C1D0Ev,_ZTv0_n12_N8S20753C1D0Ev)();
extern void ABISELECT(_ZThn112_N8S20753C1D0Ev,_ZThn64_N8S20753C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C1D1Ev,_ZTv0_n12_N8S20753C1D1Ev)();
extern void ABISELECT(_ZThn128_N8S20753C1D1Ev,_ZThn72_N8S20753C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C1D0Ev,_ZTv0_n12_N8S20753C1D0Ev)();
extern void ABISELECT(_ZThn128_N8S20753C1D0Ev,_ZThn72_N8S20753C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20753C1D1Ev,_ZTv0_n24_N8S20753C1D1Ev)();
extern void ABISELECT(_ZThn176_N8S20753C1D1Ev,_ZThn100_N8S20753C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20753C1D0Ev,_ZTv0_n24_N8S20753C1D0Ev)();
extern void ABISELECT(_ZThn176_N8S20753C1D0Ev,_ZThn100_N8S20753C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C1D1Ev,_ZTv0_n12_N8S20753C1D1Ev)();
extern void ABISELECT(_ZThn192_N8S20753C1D1Ev,_ZThn108_N8S20753C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C1D0Ev,_ZTv0_n12_N8S20753C1D0Ev)();
extern void ABISELECT(_ZThn192_N8S20753C1D0Ev,_ZThn108_N8S20753C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C1D1Ev,_ZTv0_n12_N8S20753C1D1Ev)();
extern void ABISELECT(_ZThn240_N8S20753C1D1Ev,_ZThn140_N8S20753C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C1D0Ev,_ZTv0_n12_N8S20753C1D0Ev)();
extern void ABISELECT(_ZThn240_N8S20753C1D0Ev,_ZThn140_N8S20753C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C1D1Ev,_ZTv0_n12_N8S20753C1D1Ev)();
extern void ABISELECT(_ZThn304_N8S20753C1D1Ev,_ZThn176_N8S20753C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C1D0Ev,_ZTv0_n12_N8S20753C1D0Ev)();
extern void ABISELECT(_ZThn304_N8S20753C1D0Ev,_ZThn176_N8S20753C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C1D1Ev,_ZTv0_n12_N8S20753C1D1Ev)();
extern void ABISELECT(_ZThn352_N8S20753C1D1Ev,_ZThn204_N8S20753C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C1D0Ev,_ZTv0_n12_N8S20753C1D0Ev)();
extern void ABISELECT(_ZThn352_N8S20753C1D0Ev,_ZThn204_N8S20753C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C1D1Ev,_ZTv0_n12_N8S20753C1D1Ev)();
extern void ABISELECT(_ZThn448_N8S20753C1D1Ev,_ZThn260_N8S20753C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C1D0Ev,_ZTv0_n12_N8S20753C1D0Ev)();
extern void ABISELECT(_ZThn448_N8S20753C1D0Ev,_ZThn260_N8S20753C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C1D1Ev,_ZTv0_n12_N8S20753C1D1Ev)();
extern void ABISELECT(_ZThn496_N8S20753C1D1Ev,_ZThn288_N8S20753C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C1D0Ev,_ZTv0_n12_N8S20753C1D0Ev)();
extern void ABISELECT(_ZThn496_N8S20753C1D0Ev,_ZThn288_N8S20753C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C1D1Ev,_ZTv0_n12_N8S20753C1D1Ev)();
extern void ABISELECT(_ZThn576_N8S20753C1D1Ev,_ZThn332_N8S20753C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C1D0Ev,_ZTv0_n12_N8S20753C1D0Ev)();
extern void ABISELECT(_ZThn576_N8S20753C1D0Ev,_ZThn332_N8S20753C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C1D1Ev,_ZTv0_n12_N8S20753C1D1Ev)();
extern void ABISELECT(_ZThn824_N8S20753C1D1Ev,_ZThn480_N8S20753C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C1D0Ev,_ZTv0_n12_N8S20753C1D0Ev)();
extern void ABISELECT(_ZThn824_N8S20753C1D0Ev,_ZThn480_N8S20753C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C1D1Ev,_ZTv0_n12_N8S20753C1D1Ev)();
extern void ABISELECT(_ZThn848_N8S20753C1D1Ev,_ZThn492_N8S20753C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C1D0Ev,_ZTv0_n12_N8S20753C1D0Ev)();
extern void ABISELECT(_ZThn848_N8S20753C1D0Ev,_ZThn492_N8S20753C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20753C1[] = {
  ABISELECT(848,492),
  ABISELECT(836,488),
  ABISELECT(824,480),
  ABISELECT(576,332),
  ABISELECT(352,204),
  ABISELECT(560,328),
  ABISELECT(176,100),
  ABISELECT(128,72),
  ABISELECT(448,260),
  0,
  ABISELECT(304,176),
  ABISELECT(240,140),
  ABISELECT(240,140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C1D1Ev,_ZTv0_n12_N8S20753C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C1D0Ev,_ZTv0_n12_N8S20753C1D0Ev),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20753C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S20753C1D1Ev,_ZThn56_N8S20753C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S20753C1D0Ev,_ZThn56_N8S20753C1D0Ev),
  ABISELECT(336,196),
  ABISELECT(736,428),
  ABISELECT(448,264),
  ABISELECT(128,76),
  ABISELECT(64,36),
  ABISELECT(-112,-64),
  ABISELECT(16,8),
  ABISELECT(724,424),
  ABISELECT(712,416),
  ABISELECT(192,112),
  ABISELECT(464,268),
  ABISELECT(128,76),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI8S20753C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C1D1Ev,_ZTv0_n12_N8S20753C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C1D0Ev,_ZTv0_n12_N8S20753C1D0Ev),
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-128,-72),
  ABISELECT(112,68),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S20753C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C1D1Ev,_ZTv0_n12_N8S20753C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C1D0Ev,_ZTv0_n12_N8S20753C1D0Ev),
  ABISELECT(-176,-100),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S20753C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20753C1D1Ev,_ZTv0_n24_N8S20753C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20753C1D0Ev,_ZTv0_n24_N8S20753C1D0Ev),
  ABISELECT(48,32),
  ABISELECT(-192,-108),
  ABISELECT(-192,-108),
  (VTBL_ENTRY)&(_ZTI8S20753C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C1D1Ev,_ZTv0_n12_N8S20753C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C1D0Ev,_ZTv0_n12_N8S20753C1D0Ev),
  ABISELECT(64,36),
  0,
  ABISELECT(-240,-140),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI8S20753C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C1D1Ev,_ZTv0_n12_N8S20753C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C1D0Ev,_ZTv0_n12_N8S20753C1D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-304,-176),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI8S20753C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C1D1Ev,_ZTv0_n12_N8S20753C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C1D0Ev,_ZTv0_n12_N8S20753C1D0Ev),
  ABISELECT(208,124),
  ABISELECT(-176,-104),
  ABISELECT(-224,-132),
  ABISELECT(96,56),
  ABISELECT(-352,-204),
  ABISELECT(-48,-28),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  ABISELECT(-352,-204),
  ABISELECT(-352,-204),
  (VTBL_ENTRY)&(_ZTI8S20753C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C1D1Ev,_ZTv0_n12_N8S20753C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C1D0Ev,_ZTv0_n12_N8S20753C1D0Ev),
  ABISELECT(-144,-84),
  ABISELECT(-208,-120),
  ABISELECT(-272,-160),
  ABISELECT(-448,-260),
  ABISELECT(-320,-188),
  ABISELECT(-208,-120),
  ABISELECT(-448,-260),
  ABISELECT(-448,-260),
  (VTBL_ENTRY)&(_ZTI8S20753C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C1D1Ev,_ZTv0_n12_N8S20753C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C1D0Ev,_ZTv0_n12_N8S20753C1D0Ev),
  ABISELECT(-192,-112),
  ABISELECT(-256,-148),
  ABISELECT(-496,-288),
  ABISELECT(-496,-288),
  (VTBL_ENTRY)&(_ZTI8S20753C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C1D1Ev,_ZTv0_n12_N8S20753C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C1D0Ev,_ZTv0_n12_N8S20753C1D0Ev),
  ABISELECT(-336,-192),
  ABISELECT(-400,-232),
  ABISELECT(-576,-332),
  ABISELECT(-448,-260),
  ABISELECT(260,156),
  ABISELECT(248,148),
  ABISELECT(-272,-156),
  ABISELECT(-336,-192),
  ABISELECT(-576,-332),
  ABISELECT(-576,-332),
  (VTBL_ENTRY)&(_ZTI8S20753C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C1D1Ev,_ZTv0_n12_N8S20753C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C1D0Ev,_ZTv0_n12_N8S20753C1D0Ev),
  ABISELECT(-520,-304),
  ABISELECT(-584,-340),
  ABISELECT(-824,-480),
  ABISELECT(-824,-480),
  (VTBL_ENTRY)&(_ZTI8S20753C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C1D1Ev,_ZTv0_n12_N8S20753C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C1D0Ev,_ZTv0_n12_N8S20753C1D0Ev),
  ABISELECT(-12,-4),
  ABISELECT(-288,-164),
  ABISELECT(-672,-392),
  ABISELECT(-720,-420),
  ABISELECT(-400,-232),
  ABISELECT(-848,-492),
  ABISELECT(-544,-316),
  ABISELECT(-608,-352),
  ABISELECT(-608,-352),
  ABISELECT(-848,-492),
  ABISELECT(-848,-492),
  (VTBL_ENTRY)&(_ZTI8S20753C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C1D1Ev,_ZTv0_n12_N8S20753C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C1D0Ev,_ZTv0_n12_N8S20753C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20753C1[];
extern void ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev)();
extern void _ZN9S20753C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev)();
extern void _ZN9S20753C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C15__8S20753C1[] = {
  ABISELECT(560,328),
  ABISELECT(176,100),
  ABISELECT(128,72),
  ABISELECT(448,260),
  0,
  ABISELECT(304,176),
  ABISELECT(240,140),
  ABISELECT(240,140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void _ZN9S20753C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void _ZN9S20753C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C109S20753C15__A1__8S20753C1[] = {
  ABISELECT(560,328),
  ABISELECT(176,100),
  ABISELECT(128,72),
  ABISELECT(448,260),
  0,
  ABISELECT(304,176),
  ABISELECT(240,140),
  ABISELECT(240,140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev)();
extern void _ZN9S20753C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev)();
extern void _ZN9S20753C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C129S20753C109S20753C15__A1__8S20753C1[] = {
  0,
  ABISELECT(304,176),
  ABISELECT(240,140),
  ABISELECT(240,140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev)();
extern void ABISELECT(_ZThn240_N9S20753C12D1Ev,_ZThn140_N9S20753C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev)();
extern void ABISELECT(_ZThn240_N9S20753C12D0Ev,_ZThn140_N9S20753C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C129S20753C109S20753C15__A1__8S20753C1[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(-240,-140),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI9S20753C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev)();
extern void ABISELECT(_ZThn304_N9S20753C12D1Ev,_ZThn176_N9S20753C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev)();
extern void ABISELECT(_ZThn304_N9S20753C12D0Ev,_ZThn176_N9S20753C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__9S20753C129S20753C109S20753C15__A1__8S20753C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-304,-176),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI9S20753C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn304_N9S20753C10D1Ev,_ZThn176_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn304_N9S20753C10D0Ev,_ZThn176_N9S20753C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__9S20753C109S20753C15__A1__8S20753C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-304,-176),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn240_N9S20753C10D1Ev,_ZThn140_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn240_N9S20753C10D0Ev,_ZThn140_N9S20753C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C109S20753C15__A1__8S20753C1[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(-240,-140),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn448_N9S20753C10D1Ev,_ZThn260_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn448_N9S20753C10D0Ev,_ZThn260_N9S20753C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C11__9S20753C109S20753C15__A1__8S20753C1[] = {
  ABISELECT(-144,-84),
  ABISELECT(-208,-120),
  ABISELECT(-272,-160),
  ABISELECT(-448,-260),
  ABISELECT(-320,-188),
  ABISELECT(-208,-120),
  ABISELECT(-448,-260),
  ABISELECT(-448,-260),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn128_N9S20753C10D1Ev,_ZThn72_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn128_N9S20753C10D0Ev,_ZThn72_N9S20753C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C2__9S20753C109S20753C15__A1__8S20753C1[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-128,-72),
  ABISELECT(112,68),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20753C10D1Ev,_ZTv0_n24_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn176_N9S20753C10D1Ev,_ZThn100_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20753C10D0Ev,_ZTv0_n24_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn176_N9S20753C10D0Ev,_ZThn100_N9S20753C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C4__9S20753C109S20753C15__A1__8S20753C1[] = {
  ABISELECT(-176,-100),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C10D1Ev,_ZTv0_n24_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C10D0Ev,_ZTv0_n24_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn192_N9S20753C10D1Ev,_ZThn108_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn192_N9S20753C10D0Ev,_ZThn108_N9S20753C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A2__9S20753C109S20753C15__A1__8S20753C1[] = {
  ABISELECT(48,32),
  ABISELECT(-192,-108),
  ABISELECT(-192,-108),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn496_N9S20753C10D1Ev,_ZThn288_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn496_N9S20753C10D0Ev,_ZThn288_N9S20753C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C59S20753C11__A1__9S20753C109S20753C15__A1__8S20753C1[] = {
  ABISELECT(-192,-112),
  ABISELECT(-256,-148),
  ABISELECT(-496,-288),
  ABISELECT(-496,-288),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev)();
extern void ABISELECT(_ZThn128_N9S20753C15D1Ev,_ZThn72_N9S20753C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev)();
extern void ABISELECT(_ZThn128_N9S20753C15D0Ev,_ZThn72_N9S20753C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C2__9S20753C15__8S20753C1[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-128,-72),
  ABISELECT(112,68),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI9S20753C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20753C15D1Ev,_ZTv0_n24_N9S20753C15D1Ev)();
extern void ABISELECT(_ZThn176_N9S20753C15D1Ev,_ZThn100_N9S20753C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20753C15D0Ev,_ZTv0_n24_N9S20753C15D0Ev)();
extern void ABISELECT(_ZThn176_N9S20753C15D0Ev,_ZThn100_N9S20753C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C4__9S20753C15__8S20753C1[] = {
  ABISELECT(-176,-100),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI9S20753C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C15D1Ev,_ZTv0_n24_N9S20753C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C15D0Ev,_ZTv0_n24_N9S20753C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev)();
extern void ABISELECT(_ZThn240_N9S20753C15D1Ev,_ZThn140_N9S20753C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev)();
extern void ABISELECT(_ZThn240_N9S20753C15D0Ev,_ZThn140_N9S20753C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C15__8S20753C1[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(-240,-140),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI9S20753C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev)();
extern void ABISELECT(_ZThn304_N9S20753C15D1Ev,_ZThn176_N9S20753C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev)();
extern void ABISELECT(_ZThn304_N9S20753C15D0Ev,_ZThn176_N9S20753C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__9S20753C15__8S20753C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-304,-176),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI9S20753C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev)();
extern void ABISELECT(_ZThn192_N9S20753C15D1Ev,_ZThn108_N9S20753C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev)();
extern void ABISELECT(_ZThn192_N9S20753C15D0Ev,_ZThn108_N9S20753C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A1__9S20753C15__8S20753C1[] = {
  ABISELECT(48,32),
  ABISELECT(-192,-108),
  ABISELECT(-192,-108),
  (VTBL_ENTRY)&(_ZTI9S20753C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev)();
extern void ABISELECT(_ZThn448_N9S20753C15D1Ev,_ZThn260_N9S20753C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev)();
extern void ABISELECT(_ZThn448_N9S20753C15D0Ev,_ZThn260_N9S20753C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C11__9S20753C15__8S20753C1[] = {
  ABISELECT(-144,-84),
  ABISELECT(-208,-120),
  ABISELECT(-272,-160),
  ABISELECT(-448,-260),
  ABISELECT(-320,-188),
  ABISELECT(-208,-120),
  ABISELECT(-448,-260),
  ABISELECT(-448,-260),
  (VTBL_ENTRY)&(_ZTI9S20753C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev)();
extern void ABISELECT(_ZThn496_N9S20753C15D1Ev,_ZThn288_N9S20753C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev)();
extern void ABISELECT(_ZThn496_N9S20753C15D0Ev,_ZThn288_N9S20753C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C59S20753C11__A1__9S20753C15__8S20753C1[] = {
  ABISELECT(-192,-112),
  ABISELECT(-256,-148),
  ABISELECT(-496,-288),
  ABISELECT(-496,-288),
  (VTBL_ENTRY)&(_ZTI9S20753C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev)();
extern void _ZN9S20753C17D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev)();
extern void _ZN9S20753C17D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C17__8S20753C1[] = {
  ABISELECT(336,196),
  ABISELECT(736,428),
  ABISELECT(448,264),
  ABISELECT(128,76),
  ABISELECT(64,36),
  ABISELECT(-112,-64),
  ABISELECT(16,8),
  ABISELECT(724,424),
  ABISELECT(712,416),
  ABISELECT(192,112),
  ABISELECT(464,268),
  ABISELECT(128,76),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev)();
extern void ABISELECT(_ZThn128_N9S20753C17D1Ev,_ZThn76_N9S20753C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev)();
extern void ABISELECT(_ZThn128_N9S20753C17D0Ev,_ZThn76_N9S20753C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C17__8S20753C1[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI9S20753C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev)();
extern void ABISELECT(_ZThn464_N9S20753C17D1Ev,_ZThn268_N9S20753C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev)();
extern void ABISELECT(_ZThn464_N9S20753C17D0Ev,_ZThn268_N9S20753C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C18__9S20753C17__8S20753C1[] = {
  ABISELECT(-336,-192),
  ABISELECT(-400,-232),
  ABISELECT(-576,-332),
  ABISELECT(-448,-260),
  ABISELECT(260,156),
  ABISELECT(248,148),
  ABISELECT(-272,-156),
  ABISELECT(-336,-192),
  ABISELECT(-464,-268),
  ABISELECT(-464,-268),
  (VTBL_ENTRY)&(_ZTI9S20753C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev)();
extern void ABISELECT(_ZThn192_N9S20753C17D1Ev,_ZThn112_N9S20753C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev)();
extern void ABISELECT(_ZThn192_N9S20753C17D0Ev,_ZThn112_N9S20753C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__9S20753C17__8S20753C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI9S20753C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev)();
extern void ABISELECT(_ZThn712_N9S20753C17D1Ev,_ZThn416_N9S20753C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev)();
extern void ABISELECT(_ZThn712_N9S20753C17D0Ev,_ZThn416_N9S20753C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C7__9S20753C17__8S20753C1[] = {
  ABISELECT(-520,-304),
  ABISELECT(-584,-340),
  ABISELECT(-712,-416),
  ABISELECT(-712,-416),
  (VTBL_ENTRY)&(_ZTI9S20753C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S20753C17D1Ev,_ZThn8_N9S20753C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev)();
extern void ABISELECT(_ZThn16_N9S20753C17D0Ev,_ZThn8_N9S20753C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C2__9S20753C17__8S20753C1[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-128,-72),
  ABISELECT(112,68),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20753C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20753C17D1Ev,_ZTv0_n24_N9S20753C17D1Ev)();
extern void ABISELECT(_ZThn64_N9S20753C17D1Ev,_ZThn36_N9S20753C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20753C17D0Ev,_ZTv0_n24_N9S20753C17D0Ev)();
extern void ABISELECT(_ZThn64_N9S20753C17D0Ev,_ZThn36_N9S20753C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C4__9S20753C17__8S20753C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S20753C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C17D1Ev,_ZTv0_n24_N9S20753C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C17D0Ev,_ZTv0_n24_N9S20753C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev)();
extern void ABISELECT(_ZThn80_N9S20753C17D1Ev,_ZThn44_N9S20753C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev)();
extern void ABISELECT(_ZThn80_N9S20753C17D0Ev,_ZThn44_N9S20753C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A1__9S20753C17__8S20753C1[] = {
  ABISELECT(48,32),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI9S20753C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev)();
extern void ABISELECT(_ZThn736_N9S20753C17D1Ev,_ZThn428_N9S20753C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev)();
extern void ABISELECT(_ZThn736_N9S20753C17D0Ev,_ZThn428_N9S20753C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C19__9S20753C17__8S20753C1[] = {
  ABISELECT(-12,-4),
  ABISELECT(-288,-164),
  ABISELECT(-672,-392),
  ABISELECT(-720,-420),
  ABISELECT(-400,-232),
  ABISELECT(-848,-492),
  ABISELECT(-544,-316),
  ABISELECT(-608,-352),
  ABISELECT(-608,-352),
  ABISELECT(-736,-428),
  ABISELECT(-736,-428),
  (VTBL_ENTRY)&(_ZTI9S20753C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev)();
extern void ABISELECT(_ZThn336_N9S20753C17D1Ev,_ZThn196_N9S20753C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev)();
extern void ABISELECT(_ZThn336_N9S20753C17D0Ev,_ZThn196_N9S20753C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C11__9S20753C17__8S20753C1[] = {
  ABISELECT(-144,-84),
  ABISELECT(-208,-120),
  ABISELECT(-272,-160),
  ABISELECT(-448,-260),
  ABISELECT(-320,-188),
  ABISELECT(-208,-120),
  ABISELECT(-336,-196),
  ABISELECT(-336,-196),
  (VTBL_ENTRY)&(_ZTI9S20753C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev)();
extern void ABISELECT(_ZThn384_N9S20753C17D1Ev,_ZThn224_N9S20753C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev)();
extern void ABISELECT(_ZThn384_N9S20753C17D0Ev,_ZThn224_N9S20753C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C59S20753C11__A2__9S20753C17__8S20753C1[] = {
  ABISELECT(-192,-112),
  ABISELECT(-256,-148),
  ABISELECT(-384,-224),
  ABISELECT(-384,-224),
  (VTBL_ENTRY)&(_ZTI9S20753C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void _ZN8S20753C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
extern void _ZN8S20753C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C2__8S20753C1[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-128,-72),
  ABISELECT(112,68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C2__A2__8S20753C1[] = {
  ABISELECT(112,68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZThn112_N8S20753C8D1Ev,_ZThn68_N8S20753C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void ABISELECT(_ZThn112_N8S20753C8D0Ev,_ZThn68_N8S20753C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C88S20753C2__A2__8S20753C1[] = {
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20753C2D1Ev,_ZTv0_n24_N8S20753C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S20753C2D1Ev,_ZThn28_N8S20753C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20753C2D0Ev,_ZTv0_n24_N8S20753C2D0Ev)();
extern void ABISELECT(_ZThn48_N8S20753C2D0Ev,_ZThn28_N8S20753C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C4__8S20753C2__8S20753C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20753C2D1Ev,_ZTv0_n24_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20753C2D0Ev,_ZTv0_n24_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void ABISELECT(_ZThn112_N8S20753C2D1Ev,_ZThn68_N8S20753C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
extern void ABISELECT(_ZThn112_N8S20753C2D0Ev,_ZThn68_N8S20753C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__8S20753C2__8S20753C1[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void ABISELECT(_ZThn176_N8S20753C2D1Ev,_ZThn104_N8S20753C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
extern void ABISELECT(_ZThn176_N8S20753C2D0Ev,_ZThn104_N8S20753C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C2__8S20753C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C2D1Ev,_ZThn36_N8S20753C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C2D0Ev,_ZThn36_N8S20753C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A1__8S20753C2__8S20753C1[] = {
  ABISELECT(48,32),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20753C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev),
};
extern void _ZN8S20753C4D1Ev();
extern void _ZN8S20753C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20753C4__8S20753C1[] = {
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&_ZN8S20753C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20753C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A1__8S20753C1[] = {
  ABISELECT(48,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZThn48_N8S20753C8D1Ev,_ZThn32_N8S20753C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void ABISELECT(_ZThn48_N8S20753C8D0Ev,_ZThn32_N8S20753C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C88S20753C4__A1__8S20753C1[] = {
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C4D1Ev,_ZThn40_N8S20753C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C4D0Ev,_ZThn40_N8S20753C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__8S20753C4__8S20753C1[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZThn128_N8S20753C4D1Ev,_ZThn76_N8S20753C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
extern void ABISELECT(_ZThn128_N8S20753C4D0Ev,_ZThn76_N8S20753C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C4__8S20753C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev)();
extern void ABISELECT(_ZThn16_N8S20753C4D1Ev,_ZThn8_N8S20753C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev)();
extern void ABISELECT(_ZThn16_N8S20753C4D0Ev,_ZThn8_N8S20753C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__A__8S20753C4__8S20753C1[] = {
  ABISELECT(48,32),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20753C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void _ZN8S20753C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void _ZN8S20753C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__8S20753C1[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void _ZN8S20753C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void _ZN8S20753C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C78S20753C5__8S20753C1[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C7D1Ev,_ZThn36_N8S20753C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C7D0Ev,_ZThn36_N8S20753C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C78S20753C5__8S20753C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZThn64_N8S20753C5D1Ev,_ZThn36_N8S20753C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void ABISELECT(_ZThn64_N8S20753C5D0Ev,_ZThn36_N8S20753C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C5__8S20753C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C1[] = {
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C8__8S20753C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void _ZN9S20753C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void _ZN9S20753C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C10__8S20753C1[] = {
  ABISELECT(208,124),
  ABISELECT(-176,-104),
  ABISELECT(-224,-132),
  ABISELECT(96,56),
  ABISELECT(-352,-204),
  ABISELECT(-48,-28),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev)();
extern void _ZN9S20753C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev)();
extern void _ZN9S20753C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C129S20753C10__8S20753C1[] = {
  ABISELECT(-352,-204),
  ABISELECT(-48,-28),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C129S20753C10__8S20753C1[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(112,64),
  ABISELECT(112,64),
  (VTBL_ENTRY)&(_ZTI9S20753C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__9S20753C129S20753C10__8S20753C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI9S20753C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__9S20753C10__8S20753C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C10__8S20753C1[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(112,64),
  ABISELECT(112,64),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn96_N9S20753C10D1Ev,_ZThn56_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn96_N9S20753C10D0Ev,_ZThn56_N9S20753C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C11__9S20753C10__8S20753C1[] = {
  ABISELECT(-144,-84),
  ABISELECT(-208,-120),
  ABISELECT(-272,-160),
  ABISELECT(-448,-260),
  ABISELECT(-320,-188),
  ABISELECT(-208,-120),
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C2__9S20753C10__8S20753C1[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-128,-72),
  ABISELECT(112,68),
  ABISELECT(224,132),
  ABISELECT(224,132),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20753C10D1Ev,_ZTv0_n24_N9S20753C10D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20753C10D0Ev,_ZTv0_n24_N9S20753C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C4__9S20753C10__8S20753C1[] = {
  ABISELECT(176,104),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C10D1Ev,_ZTv0_n24_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C10D0Ev,_ZTv0_n24_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A2__9S20753C10__8S20753C1[] = {
  ABISELECT(48,32),
  ABISELECT(160,96),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZThn144_N9S20753C10D1Ev,_ZThn84_N9S20753C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void ABISELECT(_ZThn144_N9S20753C10D0Ev,_ZThn84_N9S20753C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C59S20753C11__A1__9S20753C10__8S20753C1[] = {
  ABISELECT(-192,-112),
  ABISELECT(-256,-148),
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void _ZN9S20753C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
extern void _ZN9S20753C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C11__8S20753C1[] = {
  ABISELECT(-144,-84),
  ABISELECT(-208,-120),
  ABISELECT(-272,-160),
  ABISELECT(-448,-260),
  ABISELECT(-320,-188),
  ABISELECT(-208,-120),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void _ZN8S20753C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
extern void _ZN8S20753C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C89S20753C11__A3__8S20753C1[] = {
  ABISELECT(-208,-120),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C89S20753C11__A3__8S20753C1[] = {
  ABISELECT(208,120),
  ABISELECT(208,120),
  (VTBL_ENTRY)&(_ZTI8S20753C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void _ZN8S20753C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void _ZN8S20753C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C59S20753C11__A1__8S20753C1[] = {
  ABISELECT(-192,-112),
  ABISELECT(-256,-148),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void _ZN8S20753C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void _ZN8S20753C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C78S20753C59S20753C11__A1__8S20753C1[] = {
  ABISELECT(-192,-112),
  ABISELECT(-256,-148),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C78S20753C59S20753C11__A1__8S20753C1[] = {
  ABISELECT(256,148),
  ABISELECT(256,148),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C78S20753C59S20753C11__A1__8S20753C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(192,112),
  ABISELECT(192,112),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C59S20753C11__A1__8S20753C1[] = {
  ABISELECT(256,148),
  ABISELECT(256,148),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C59S20753C11__A1__8S20753C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(192,112),
  ABISELECT(192,112),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C11__8S20753C1[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(208,120),
  ABISELECT(208,120),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C2__9S20753C11__8S20753C1[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-128,-72),
  ABISELECT(112,68),
  ABISELECT(320,188),
  ABISELECT(320,188),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20753C11D1Ev,_ZTv0_n24_N9S20753C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20753C11D0Ev,_ZTv0_n24_N9S20753C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C4__9S20753C11__8S20753C1[] = {
  ABISELECT(272,160),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(272,160),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C11D1Ev,_ZTv0_n24_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C11D0Ev,_ZTv0_n24_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__A1__9S20753C11__8S20753C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(144,84),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A2__9S20753C11__8S20753C1[] = {
  ABISELECT(48,32),
  ABISELECT(256,152),
  ABISELECT(256,152),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev)();
extern void ABISELECT(_ZThn48_N9S20753C11D1Ev,_ZThn28_N9S20753C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev)();
extern void ABISELECT(_ZThn48_N9S20753C11D0Ev,_ZThn28_N9S20753C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C5__A__9S20753C11__8S20753C1[] = {
  ABISELECT(-192,-112),
  ABISELECT(-256,-148),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S20753C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev)();
extern void _ZN9S20753C18D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev)();
extern void _ZN9S20753C18D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C18__8S20753C1[] = {
  ABISELECT(-336,-192),
  ABISELECT(-400,-232),
  ABISELECT(-576,-332),
  ABISELECT(-448,-260),
  ABISELECT(260,156),
  ABISELECT(248,148),
  ABISELECT(-272,-156),
  ABISELECT(-336,-192),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void _ZN8S20753C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
extern void _ZN8S20753C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C59S20753C18__A2__8S20753C1[] = {
  ABISELECT(-272,-156),
  ABISELECT(-336,-192),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void _ZN8S20753C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void _ZN8S20753C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C78S20753C59S20753C18__A3__8S20753C1[] = {
  ABISELECT(-272,-156),
  ABISELECT(-336,-192),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C78S20753C59S20753C18__A3__8S20753C1[] = {
  ABISELECT(336,192),
  ABISELECT(336,192),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C78S20753C59S20753C18__A3__8S20753C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(272,156),
  ABISELECT(272,156),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C59S20753C18__A2__8S20753C1[] = {
  ABISELECT(336,192),
  ABISELECT(336,192),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C59S20753C18__A2__8S20753C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(272,156),
  ABISELECT(272,156),
  (VTBL_ENTRY)&(_ZTI8S20753C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__9S20753C18__8S20753C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(272,156),
  ABISELECT(272,156),
  (VTBL_ENTRY)&(_ZTI9S20753C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C18__8S20753C1[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(336,192),
  ABISELECT(336,192),
  (VTBL_ENTRY)&(_ZTI9S20753C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev)();
extern void ABISELECT(_ZThn248_N9S20753C18D1Ev,_ZThn148_N9S20753C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev)();
extern void ABISELECT(_ZThn248_N9S20753C18D0Ev,_ZThn148_N9S20753C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C7__9S20753C18__8S20753C1[] = {
  ABISELECT(-520,-304),
  ABISELECT(-584,-340),
  ABISELECT(-248,-148),
  ABISELECT(-248,-148),
  (VTBL_ENTRY)&(_ZTI9S20753C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C2__9S20753C18__8S20753C1[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-128,-72),
  ABISELECT(112,68),
  ABISELECT(448,260),
  ABISELECT(448,260),
  (VTBL_ENTRY)&(_ZTI9S20753C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20753C18D1Ev,_ZTv0_n24_N9S20753C18D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20753C18D0Ev,_ZTv0_n24_N9S20753C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C4__9S20753C18__8S20753C1[] = {
  ABISELECT(400,232),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(400,232),
  (VTBL_ENTRY)&(_ZTI9S20753C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C18D1Ev,_ZTv0_n24_N9S20753C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C18D0Ev,_ZTv0_n24_N9S20753C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A1__9S20753C18__8S20753C1[] = {
  ABISELECT(48,32),
  ABISELECT(384,224),
  ABISELECT(384,224),
  (VTBL_ENTRY)&(_ZTI9S20753C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void _ZN8S20753C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
extern void _ZN8S20753C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20753C7__A2__8S20753C1[] = {
  ABISELECT(-520,-304),
  ABISELECT(-584,-340),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S20753C7__A2__8S20753C1[] = {
  ABISELECT(584,340),
  ABISELECT(584,340),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__8S20753C7__A2__8S20753C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(520,304),
  ABISELECT(520,304),
  (VTBL_ENTRY)&(_ZTI8S20753C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev)();
extern void _ZN9S20753C19D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev)();
extern void _ZN9S20753C19D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C19__8S20753C1[] = {
  ABISELECT(-12,-4),
  ABISELECT(-288,-164),
  ABISELECT(-672,-392),
  ABISELECT(-720,-420),
  ABISELECT(-400,-232),
  ABISELECT(-848,-492),
  ABISELECT(-544,-316),
  ABISELECT(-608,-352),
  ABISELECT(-608,-352),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void _ZN9S20753C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
extern void _ZN9S20753C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C109S20753C19__A2__8S20753C1[] = {
  ABISELECT(-288,-164),
  ABISELECT(-672,-392),
  ABISELECT(-720,-420),
  ABISELECT(-400,-232),
  ABISELECT(-848,-492),
  ABISELECT(-544,-316),
  ABISELECT(-608,-352),
  ABISELECT(-608,-352),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev)();
extern void _ZN9S20753C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev)();
extern void _ZN9S20753C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20753C129S20753C109S20753C19__A2__8S20753C1[] = {
  ABISELECT(-848,-492),
  ABISELECT(-544,-316),
  ABISELECT(-608,-352),
  ABISELECT(-608,-352),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20753C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C129S20753C109S20753C19__A2__8S20753C1[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(608,352),
  ABISELECT(608,352),
  (VTBL_ENTRY)&(_ZTI9S20753C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__9S20753C129S20753C109S20753C19__A2__8S20753C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(544,316),
  ABISELECT(544,316),
  (VTBL_ENTRY)&(_ZTI9S20753C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__9S20753C109S20753C19__A2__8S20753C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(544,316),
  ABISELECT(544,316),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C109S20753C19__A2__8S20753C1[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(608,352),
  ABISELECT(608,352),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20753C11__9S20753C109S20753C19__A2__8S20753C1[] = {
  ABISELECT(-144,-84),
  ABISELECT(-208,-120),
  ABISELECT(-272,-160),
  ABISELECT(-448,-260),
  ABISELECT(-320,-188),
  ABISELECT(-208,-120),
  ABISELECT(400,232),
  ABISELECT(400,232),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C2__9S20753C109S20753C19__A2__8S20753C1[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-128,-72),
  ABISELECT(112,68),
  ABISELECT(720,420),
  ABISELECT(720,420),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20753C10D1Ev,_ZTv0_n24_N9S20753C10D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20753C10D0Ev,_ZTv0_n24_N9S20753C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C4__9S20753C109S20753C19__A2__8S20753C1[] = {
  ABISELECT(672,392),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(672,392),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C10D1Ev,_ZTv0_n24_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C10D0Ev,_ZTv0_n24_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A2__9S20753C109S20753C19__A2__8S20753C1[] = {
  ABISELECT(48,32),
  ABISELECT(656,384),
  ABISELECT(656,384),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C59S20753C11__A1__9S20753C109S20753C19__A2__8S20753C1[] = {
  ABISELECT(-192,-112),
  ABISELECT(-256,-148),
  ABISELECT(352,204),
  ABISELECT(352,204),
  (VTBL_ENTRY)&(_ZTI9S20753C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C8__9S20753C19__8S20753C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(544,316),
  ABISELECT(544,316),
  (VTBL_ENTRY)&(_ZTI9S20753C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C5__9S20753C19__8S20753C1[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(608,352),
  ABISELECT(608,352),
  (VTBL_ENTRY)&(_ZTI9S20753C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20753C11__9S20753C19__8S20753C1[] = {
  ABISELECT(-144,-84),
  ABISELECT(-208,-120),
  ABISELECT(-272,-160),
  ABISELECT(-448,-260),
  ABISELECT(-320,-188),
  ABISELECT(-208,-120),
  ABISELECT(400,232),
  ABISELECT(400,232),
  (VTBL_ENTRY)&(_ZTI9S20753C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C2__9S20753C19__8S20753C1[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-128,-72),
  ABISELECT(112,68),
  ABISELECT(720,420),
  ABISELECT(720,420),
  (VTBL_ENTRY)&(_ZTI9S20753C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20753C19D1Ev,_ZTv0_n24_N9S20753C19D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20753C19D0Ev,_ZTv0_n24_N9S20753C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C4__9S20753C19__8S20753C1[] = {
  ABISELECT(672,392),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(672,392),
  (VTBL_ENTRY)&(_ZTI9S20753C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C19D1Ev,_ZTv0_n24_N9S20753C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20753C19D0Ev,_ZTv0_n24_N9S20753C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C88S20753C4__A2__9S20753C19__8S20753C1[] = {
  ABISELECT(48,32),
  ABISELECT(656,384),
  ABISELECT(656,384),
  (VTBL_ENTRY)&(_ZTI9S20753C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20753C59S20753C11__A1__9S20753C19__8S20753C1[] = {
  ABISELECT(-192,-112),
  ABISELECT(-256,-148),
  ABISELECT(352,204),
  ABISELECT(352,204),
  (VTBL_ENTRY)&(_ZTI9S20753C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev),
};
static  VTT_ENTRY vtt_S20753C1[] = {
  {&(_ZTV8S20753C1[16]),  16,141},
  {&(_tg__ZTV9S20753C15__8S20753C1[11]),  11,13},
  {&(_tg__ZTV9S20753C109S20753C15__A1__8S20753C1[11]),  11,13},
  {&(_tg__ZTV9S20753C129S20753C109S20753C15__A1__8S20753C1[7]),  7,9},
  {&(_tg__ZTV8S20753C5__9S20753C129S20753C109S20753C15__A1__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C5__9S20753C129S20753C109S20753C15__A1__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C8__9S20753C129S20753C109S20753C15__A1__8S20753C1[4]),  4,6},
  {&(_tg__ZTV8S20753C8__9S20753C109S20753C15__A1__8S20753C1[4]),  4,6},
  {&(_tg__ZTV8S20753C5__9S20753C109S20753C15__A1__8S20753C1[5]),  5,7},
  {&(_tg__ZTV9S20753C11__9S20753C109S20753C15__A1__8S20753C1[9]),  9,11},
  {&(_tg__ZTV8S20753C2__9S20753C109S20753C15__A1__8S20753C1[8]),  8,10},
  {&(_tg__ZTV8S20753C4__9S20753C109S20753C15__A1__8S20753C1[6]),  6,8},
  {&(_tg__ZTV8S20753C5__9S20753C109S20753C15__A1__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C88S20753C4__A2__9S20753C109S20753C15__A1__8S20753C1[4]),  4,6},
  {&(_tg__ZTV8S20753C59S20753C11__A1__9S20753C109S20753C15__A1__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C2__9S20753C15__8S20753C1[8]),  8,10},
  {&(_tg__ZTV8S20753C4__9S20753C15__8S20753C1[6]),  6,8},
  {&(_tg__ZTV8S20753C5__9S20753C15__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C5__9S20753C15__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C8__9S20753C15__8S20753C1[4]),  4,6},
  {&(_tg__ZTV8S20753C88S20753C4__A1__9S20753C15__8S20753C1[4]),  4,6},
  {&(_tg__ZTV9S20753C11__9S20753C15__8S20753C1[9]),  9,11},
  {&(_tg__ZTV8S20753C59S20753C11__A1__9S20753C15__8S20753C1[5]),  5,7},
  {&(_tg__ZTV9S20753C17__8S20753C1[15]),  15,17},
  {&(_tg__ZTV8S20753C5__9S20753C17__8S20753C1[5]),  5,7},
  {&(_tg__ZTV9S20753C18__9S20753C17__8S20753C1[11]),  11,13},
  {&(_tg__ZTV8S20753C8__9S20753C17__8S20753C1[4]),  4,6},
  {&(_tg__ZTV8S20753C7__9S20753C17__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C2__9S20753C17__8S20753C1[8]),  8,10},
  {&(_tg__ZTV8S20753C4__9S20753C17__8S20753C1[6]),  6,8},
  {&(_tg__ZTV8S20753C5__9S20753C17__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C88S20753C4__A1__9S20753C17__8S20753C1[4]),  4,6},
  {&(_tg__ZTV9S20753C19__9S20753C17__8S20753C1[12]),  12,14},
  {&(_tg__ZTV9S20753C11__9S20753C17__8S20753C1[9]),  9,11},
  {&(_tg__ZTV8S20753C59S20753C11__A2__9S20753C17__8S20753C1[5]),  5,7},
  {&(_ZTV8S20753C1[47]),  47,141},
  {&(_ZTV8S20753C1[55]),  55,141},
  {&(_ZTV8S20753C1[68]),  68,141},
  {&(_ZTV8S20753C1[68]),  68,141},
  {&(_ZTV8S20753C1[74]),  74,141},
  {&(_ZTV8S20753C1[61]),  61,141},
  {&(_ZTV8S20753C1[87]),  87,141},
  {&(_ZTV8S20753C1[98]),  98,141},
  {&(_ZTV8S20753C1[105]),  105,141},
  {&(_ZTV8S20753C1[37]),  37,141},
  {&(_ZTV8S20753C1[118]),  118,141},
  {&(_ZTV8S20753C1[125]),  125,141},
  {&(_ZTV8S20753C1[139]),  139,141},
  {&(_tg__ZTV8S20753C2__8S20753C1[8]),  8,10},
  {&(_tg__ZTV8S20753C88S20753C2__A2__8S20753C1[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C88S20753C2__A2__8S20753C1[3]),  3,5},
  {&(_tg__ZTV8S20753C4__8S20753C2__8S20753C1[6]),  6,8},
  {&(_tg__ZTV8S20753C5__8S20753C2__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C5__8S20753C2__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C8__8S20753C2__8S20753C1[4]),  4,6},
  {&(_tg__ZTV8S20753C88S20753C4__A1__8S20753C2__8S20753C1[4]),  4,6},
  {&(_tg__ZTV8S20753C4__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C88S20753C4__A1__8S20753C1[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C88S20753C4__A1__8S20753C1[3]),  3,5},
  {&(_tg__ZTV8S20753C5__8S20753C4__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C5__8S20753C4__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C8__8S20753C4__8S20753C1[4]),  4,6},
  {&(_tg__ZTV8S20753C8__A__8S20753C4__8S20753C1[4]),  4,6},
  {&(_tg__ZTV8S20753C5__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C78S20753C5__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C78S20753C5__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C8__8S20753C78S20753C5__8S20753C1[4]),  4,6},
  {&(_tg__ZTV8S20753C5__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C8__8S20753C5__8S20753C1[4]),  4,6},
  {&(_tg__ZTV8S20753C8__8S20753C1[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C8__8S20753C1[3]),  3,5},
  {&(_tg__ZTV9S20753C10__8S20753C1[11]),  11,13},
  {&(_tg__ZTV9S20753C129S20753C10__8S20753C1[7]),  7,9},
  {&(_tg__ZTV8S20753C5__9S20753C129S20753C10__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C5__9S20753C129S20753C10__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C8__9S20753C129S20753C10__8S20753C1[4]),  4,6},
  {&(_tg__ZTV8S20753C8__9S20753C10__8S20753C1[4]),  4,6},
  {&(_tg__ZTV8S20753C5__9S20753C10__8S20753C1[5]),  5,7},
  {&(_tg__ZTV9S20753C11__9S20753C10__8S20753C1[9]),  9,11},
  {&(_tg__ZTV8S20753C2__9S20753C10__8S20753C1[8]),  8,10},
  {&(_tg__ZTV8S20753C4__9S20753C10__8S20753C1[6]),  6,8},
  {&(_tg__ZTV8S20753C5__9S20753C10__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C88S20753C4__A2__9S20753C10__8S20753C1[4]),  4,6},
  {&(_tg__ZTV8S20753C59S20753C11__A1__9S20753C10__8S20753C1[5]),  5,7},
  {&(_tg__ZTV9S20753C11__8S20753C1[9]),  9,11},
  {&(_tg__ZTV8S20753C89S20753C11__A3__8S20753C1[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C89S20753C11__A3__8S20753C1[3]),  3,5},
  {&(_tg__ZTV8S20753C59S20753C11__A1__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C78S20753C59S20753C11__A1__8S20753C1[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S20753C78S20753C59S20753C11__A1__8S20753C1[3]),  3,5},
  {&(_tg__ZTV8S20753C8__8S20753C78S20753C59S20753C11__A1__8S20753C1[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C59S20753C11__A1__8S20753C1[3]),  3,5},
  {&(_tg__ZTV8S20753C8__8S20753C59S20753C11__A1__8S20753C1[4]),  4,6},
  {&(_tg__ZTV8S20753C5__9S20753C11__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C2__9S20753C11__8S20753C1[8]),  8,10},
  {&(_tg__ZTV8S20753C4__9S20753C11__8S20753C1[6]),  6,8},
  {&(_tg__ZTV8S20753C5__9S20753C11__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C8__A1__9S20753C11__8S20753C1[4]),  4,6},
  {&(_tg__ZTV8S20753C88S20753C4__A2__9S20753C11__8S20753C1[4]),  4,6},
  {&(_tg__ZTV8S20753C5__A__9S20753C11__8S20753C1[5]),  5,7},
  {&(_tg__ZTV9S20753C18__8S20753C1[11]),  11,13},
  {&(_tg__ZTV8S20753C59S20753C18__A2__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C78S20753C59S20753C18__A3__8S20753C1[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S20753C78S20753C59S20753C18__A3__8S20753C1[3]),  3,5},
  {&(_tg__ZTV8S20753C8__8S20753C78S20753C59S20753C18__A3__8S20753C1[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S20753C59S20753C18__A2__8S20753C1[3]),  3,5},
  {&(_tg__ZTV8S20753C8__8S20753C59S20753C18__A2__8S20753C1[4]),  4,6},
  {&(_tg__ZTV8S20753C8__9S20753C18__8S20753C1[4]),  4,6},
  {&(_tg__ZTV8S20753C5__9S20753C18__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C7__9S20753C18__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C2__9S20753C18__8S20753C1[8]),  8,10},
  {&(_tg__ZTV8S20753C4__9S20753C18__8S20753C1[6]),  6,8},
  {&(_tg__ZTV8S20753C5__9S20753C18__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C88S20753C4__A1__9S20753C18__8S20753C1[4]),  4,6},
  {&(_tg__ZTV8S20753C7__A2__8S20753C1[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S20753C7__A2__8S20753C1[3]),  3,5},
  {&(_tg__ZTV8S20753C8__8S20753C7__A2__8S20753C1[4]),  4,6},
  {&(_tg__ZTV9S20753C19__8S20753C1[12]),  12,14},
  {&(_tg__ZTV9S20753C109S20753C19__A2__8S20753C1[11]),  11,13},
  {&(_tg__ZTV9S20753C129S20753C109S20753C19__A2__8S20753C1[7]),  7,9},
  {&(_tg__ZTV8S20753C5__9S20753C129S20753C109S20753C19__A2__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C5__9S20753C129S20753C109S20753C19__A2__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C8__9S20753C129S20753C109S20753C19__A2__8S20753C1[4]),  4,6},
  {&(_tg__ZTV8S20753C8__9S20753C109S20753C19__A2__8S20753C1[4]),  4,6},
  {&(_tg__ZTV8S20753C5__9S20753C109S20753C19__A2__8S20753C1[5]),  5,7},
  {&(_tg__ZTV9S20753C11__9S20753C109S20753C19__A2__8S20753C1[9]),  9,11},
  {&(_tg__ZTV8S20753C2__9S20753C109S20753C19__A2__8S20753C1[8]),  8,10},
  {&(_tg__ZTV8S20753C4__9S20753C109S20753C19__A2__8S20753C1[6]),  6,8},
  {&(_tg__ZTV8S20753C5__9S20753C109S20753C19__A2__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C88S20753C4__A2__9S20753C109S20753C19__A2__8S20753C1[4]),  4,6},
  {&(_tg__ZTV8S20753C59S20753C11__A1__9S20753C109S20753C19__A2__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C8__9S20753C19__8S20753C1[4]),  4,6},
  {&(_tg__ZTV8S20753C5__9S20753C19__8S20753C1[5]),  5,7},
  {&(_tg__ZTV9S20753C11__9S20753C19__8S20753C1[9]),  9,11},
  {&(_tg__ZTV8S20753C2__9S20753C19__8S20753C1[8]),  8,10},
  {&(_tg__ZTV8S20753C4__9S20753C19__8S20753C1[6]),  6,8},
  {&(_tg__ZTV8S20753C5__9S20753C19__8S20753C1[5]),  5,7},
  {&(_tg__ZTV8S20753C88S20753C4__A2__9S20753C19__8S20753C1[4]),  4,6},
  {&(_tg__ZTV8S20753C59S20753C11__A1__9S20753C19__8S20753C1[5]),  5,7},
};
extern VTBL_ENTRY _ZTI8S20753C1[];
extern  VTBL_ENTRY _ZTV8S20753C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20753C1[];
static VTBL_ENTRY alt_thunk_names33[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C19D0Ev,_ZTv0_n12_N9S20753C19D0Ev), // 
  (VTBL_ENTRY)_ZN9S20753C19D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C19D1Ev,_ZTv0_n12_N9S20753C19D1Ev), // 
  (VTBL_ENTRY)_ZN9S20753C19D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C18D0Ev,_ZTv0_n12_N9S20753C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S20753C18D0Ev,_ZThn148_N9S20753C18D0Ev),
  (VTBL_ENTRY)_ZN9S20753C18D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C18D1Ev,_ZTv0_n12_N9S20753C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S20753C18D1Ev,_ZThn148_N9S20753C18D1Ev),
  (VTBL_ENTRY)_ZN9S20753C18D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C11D0Ev,_ZTv0_n12_N9S20753C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20753C11D0Ev,_ZThn28_N9S20753C11D0Ev),
  (VTBL_ENTRY)_ZN9S20753C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C11D1Ev,_ZTv0_n12_N9S20753C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20753C11D1Ev,_ZThn28_N9S20753C11D1Ev),
  (VTBL_ENTRY)_ZN9S20753C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C7D0Ev,_ZTv0_n12_N8S20753C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S20753C7D0Ev,
  (VTBL_ENTRY)_ZN8S20753C7D0Ev,
  (VTBL_ENTRY)_ZN8S20753C7D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C7D0Ev,_ZThn36_N8S20753C7D0Ev),
  (VTBL_ENTRY)_ZN8S20753C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C7D1Ev,_ZTv0_n12_N8S20753C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S20753C7D1Ev,
  (VTBL_ENTRY)_ZN8S20753C7D1Ev,
  (VTBL_ENTRY)_ZN8S20753C7D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C7D1Ev,_ZThn36_N8S20753C7D1Ev),
  (VTBL_ENTRY)_ZN8S20753C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C5D0Ev,_ZTv0_n12_N8S20753C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20753C5D0Ev,
  (VTBL_ENTRY)_ZN8S20753C5D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C5D0Ev,_ZThn36_N8S20753C5D0Ev),
  (VTBL_ENTRY)_ZN8S20753C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C5D1Ev,_ZTv0_n12_N8S20753C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20753C5D1Ev,
  (VTBL_ENTRY)_ZN8S20753C5D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C5D1Ev,_ZThn36_N8S20753C5D1Ev),
  (VTBL_ENTRY)_ZN8S20753C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C4D0Ev,_ZTv0_n12_N8S20753C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20753C4D0Ev,_ZThn8_N8S20753C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20753C4D0Ev,_ZThn76_N8S20753C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C4D0Ev,_ZThn40_N8S20753C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C4D1Ev,_ZTv0_n12_N8S20753C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20753C4D1Ev,_ZThn8_N8S20753C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20753C4D1Ev,_ZThn76_N8S20753C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C4D1Ev,_ZThn40_N8S20753C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20753C2D0Ev,_ZTv0_n24_N8S20753C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20753C2D0Ev,_ZThn28_N8S20753C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20753C2D1Ev,_ZTv0_n24_N8S20753C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20753C2D1Ev,_ZThn28_N8S20753C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C8D0Ev,_ZTv0_n12_N8S20753C8D0Ev), // 
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20753C8D0Ev,_ZThn32_N8S20753C8D0Ev),
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20753C8D0Ev,_ZThn68_N8S20753C8D0Ev),
  (VTBL_ENTRY)_ZN8S20753C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C8D1Ev,_ZTv0_n12_N8S20753C8D1Ev), // 
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20753C8D1Ev,_ZThn32_N8S20753C8D1Ev),
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20753C8D1Ev,_ZThn68_N8S20753C8D1Ev),
  (VTBL_ENTRY)_ZN8S20753C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C2D0Ev,_ZTv0_n12_N8S20753C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C2D0Ev,_ZThn36_N8S20753C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20753C2D0Ev,_ZThn104_N8S20753C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20753C2D0Ev,_ZThn68_N8S20753C2D0Ev),
  (VTBL_ENTRY)_ZN8S20753C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C2D1Ev,_ZTv0_n12_N8S20753C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20753C2D1Ev,_ZThn36_N8S20753C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20753C2D1Ev,_ZThn104_N8S20753C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20753C2D1Ev,_ZThn68_N8S20753C2D1Ev),
  (VTBL_ENTRY)_ZN8S20753C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20753C17D0Ev,_ZTv0_n24_N9S20753C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S20753C17D0Ev,_ZThn36_N9S20753C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20753C17D1Ev,_ZTv0_n24_N9S20753C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S20753C17D1Ev,_ZThn36_N9S20753C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C17D0Ev,_ZTv0_n12_N9S20753C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S20753C17D0Ev,_ZThn224_N9S20753C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn336_N9S20753C17D0Ev,_ZThn196_N9S20753C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn736_N9S20753C17D0Ev,_ZThn428_N9S20753C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S20753C17D0Ev,_ZThn44_N9S20753C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20753C17D0Ev,_ZThn8_N9S20753C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn712_N9S20753C17D0Ev,_ZThn416_N9S20753C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20753C17D0Ev,_ZThn112_N9S20753C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn464_N9S20753C17D0Ev,_ZThn268_N9S20753C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20753C17D0Ev,_ZThn76_N9S20753C17D0Ev),
  (VTBL_ENTRY)_ZN9S20753C17D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C17D1Ev,_ZTv0_n12_N9S20753C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S20753C17D1Ev,_ZThn224_N9S20753C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn336_N9S20753C17D1Ev,_ZThn196_N9S20753C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn736_N9S20753C17D1Ev,_ZThn428_N9S20753C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S20753C17D1Ev,_ZThn44_N9S20753C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20753C17D1Ev,_ZThn8_N9S20753C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn712_N9S20753C17D1Ev,_ZThn416_N9S20753C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20753C17D1Ev,_ZThn112_N9S20753C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn464_N9S20753C17D1Ev,_ZThn268_N9S20753C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20753C17D1Ev,_ZThn76_N9S20753C17D1Ev),
  (VTBL_ENTRY)_ZN9S20753C17D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20753C15D0Ev,_ZTv0_n24_N9S20753C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20753C15D0Ev,_ZThn100_N9S20753C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20753C15D1Ev,_ZTv0_n24_N9S20753C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20753C15D1Ev,_ZThn100_N9S20753C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20753C10D0Ev,_ZTv0_n24_N9S20753C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20753C10D0Ev,_ZThn100_N9S20753C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20753C10D1Ev,_ZTv0_n24_N9S20753C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20753C10D1Ev,_ZThn100_N9S20753C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C12D0Ev,_ZTv0_n12_N9S20753C12D0Ev), // 
  (VTBL_ENTRY)_ZN9S20753C12D0Ev,
  (VTBL_ENTRY)_ZN9S20753C12D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S20753C12D0Ev,_ZThn176_N9S20753C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S20753C12D0Ev,_ZThn140_N9S20753C12D0Ev),
  (VTBL_ENTRY)_ZN9S20753C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C12D1Ev,_ZTv0_n12_N9S20753C12D1Ev), // 
  (VTBL_ENTRY)_ZN9S20753C12D1Ev,
  (VTBL_ENTRY)_ZN9S20753C12D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S20753C12D1Ev,_ZThn176_N9S20753C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S20753C12D1Ev,_ZThn140_N9S20753C12D1Ev),
  (VTBL_ENTRY)_ZN9S20753C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C10D0Ev,_ZTv0_n12_N9S20753C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S20753C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20753C10D0Ev,_ZThn84_N9S20753C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20753C10D0Ev,_ZThn56_N9S20753C10D0Ev),
  (VTBL_ENTRY)_ZN9S20753C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn496_N9S20753C10D0Ev,_ZThn288_N9S20753C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20753C10D0Ev,_ZThn108_N9S20753C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20753C10D0Ev,_ZThn72_N9S20753C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn448_N9S20753C10D0Ev,_ZThn260_N9S20753C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S20753C10D0Ev,_ZThn140_N9S20753C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S20753C10D0Ev,_ZThn176_N9S20753C10D0Ev),
  (VTBL_ENTRY)_ZN9S20753C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C10D1Ev,_ZTv0_n12_N9S20753C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S20753C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20753C10D1Ev,_ZThn84_N9S20753C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20753C10D1Ev,_ZThn56_N9S20753C10D1Ev),
  (VTBL_ENTRY)_ZN9S20753C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn496_N9S20753C10D1Ev,_ZThn288_N9S20753C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20753C10D1Ev,_ZThn108_N9S20753C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20753C10D1Ev,_ZThn72_N9S20753C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn448_N9S20753C10D1Ev,_ZThn260_N9S20753C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S20753C10D1Ev,_ZThn140_N9S20753C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S20753C10D1Ev,_ZThn176_N9S20753C10D1Ev),
  (VTBL_ENTRY)_ZN9S20753C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C15D0Ev,_ZTv0_n12_N9S20753C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N9S20753C15D0Ev,_ZThn288_N9S20753C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn448_N9S20753C15D0Ev,_ZThn260_N9S20753C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20753C15D0Ev,_ZThn108_N9S20753C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S20753C15D0Ev,_ZThn176_N9S20753C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S20753C15D0Ev,_ZThn140_N9S20753C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20753C15D0Ev,_ZThn72_N9S20753C15D0Ev),
  (VTBL_ENTRY)_ZN9S20753C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20753C15D1Ev,_ZTv0_n12_N9S20753C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N9S20753C15D1Ev,_ZThn288_N9S20753C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn448_N9S20753C15D1Ev,_ZThn260_N9S20753C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20753C15D1Ev,_ZThn108_N9S20753C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S20753C15D1Ev,_ZThn176_N9S20753C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S20753C15D1Ev,_ZThn140_N9S20753C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20753C15D1Ev,_ZThn72_N9S20753C15D1Ev),
  (VTBL_ENTRY)_ZN9S20753C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20753C1D0Ev,_ZTv0_n24_N8S20753C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20753C1D0Ev,_ZThn100_N8S20753C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20753C1D1Ev,_ZTv0_n24_N8S20753C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20753C1D1Ev,_ZThn100_N8S20753C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C1D0Ev,_ZTv0_n12_N8S20753C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S20753C1D0Ev,_ZThn492_N8S20753C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn824_N8S20753C1D0Ev,_ZThn480_N8S20753C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S20753C1D0Ev,_ZThn332_N8S20753C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S20753C1D0Ev,_ZThn288_N8S20753C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S20753C1D0Ev,_ZThn260_N8S20753C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S20753C1D0Ev,_ZThn204_N8S20753C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20753C1D0Ev,_ZThn176_N8S20753C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20753C1D0Ev,_ZThn140_N8S20753C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20753C1D0Ev,_ZThn108_N8S20753C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20753C1D0Ev,_ZThn72_N8S20753C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20753C1D0Ev,_ZThn64_N8S20753C1D0Ev),
  (VTBL_ENTRY)_ZN8S20753C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20753C1D1Ev,_ZTv0_n12_N8S20753C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S20753C1D1Ev,_ZThn492_N8S20753C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn824_N8S20753C1D1Ev,_ZThn480_N8S20753C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S20753C1D1Ev,_ZThn332_N8S20753C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S20753C1D1Ev,_ZThn288_N8S20753C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S20753C1D1Ev,_ZThn260_N8S20753C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S20753C1D1Ev,_ZThn204_N8S20753C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20753C1D1Ev,_ZThn176_N8S20753C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20753C1D1Ev,_ZThn140_N8S20753C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20753C1D1Ev,_ZThn108_N8S20753C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20753C1D1Ev,_ZThn72_N8S20753C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20753C1D1Ev,_ZThn64_N8S20753C1D1Ev),
  (VTBL_ENTRY)_ZN8S20753C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20753C1 = {  "S20753C1", // class name
  bases_S20753C1, 43,
  &(vtc_S20753C1[0]), // expected_vtbl_contents
  &(vtt_S20753C1[0]), // expected_vtt_contents
  ABISELECT(944,548), // object size
  NSPAIRA(_ZTI8S20753C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20753C1),141, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20753C1),139, //virtual table table var
  27, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names33,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7297C4_nt  {
  virtual  ~S7297C4_nt(); // _ZN10S7297C4_ntD1Ev
  virtual void  v1(); // _ZN10S7297C4_nt2v1Ev
  virtual void  v2(); // _ZN10S7297C4_nt2v2Ev
  S7297C4_nt(); // tgen
};
//SIG(-1 S7297C4_nt) C1{ vd v1 v2}


 S7297C4_nt ::~S7297C4_nt(){ note_dtor("S7297C4_nt", this);}
void  S7297C4_nt ::v1(){vfunc_called(this, "_ZN10S7297C4_nt2v1Ev");}
void  S7297C4_nt ::v2(){vfunc_called(this, "_ZN10S7297C4_nt2v2Ev");}
S7297C4_nt ::S7297C4_nt(){ note_ctor("S7297C4_nt", this);} // tgen

//skip512 S7297C4_nt

#else // __cplusplus

extern void _ZN10S7297C4_ntC1Ev();
extern void _ZN10S7297C4_ntD1Ev();
Name_Map name_map_S7297C4_nt[] = {
  NSPAIR(_ZN10S7297C4_ntC1Ev),
  NSPAIR(_ZN10S7297C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7297C4_nt[];
extern void _ZN10S7297C4_ntD1Ev();
extern void _ZN10S7297C4_ntD0Ev();
extern void _ZN10S7297C4_nt2v1Ev();
extern void _ZN10S7297C4_nt2v2Ev();
static  VTBL_ENTRY vtc_S7297C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7297C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S7297C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7297C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S7297C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7297C4_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI10S7297C4_nt[];
VTBL_ENTRY *P__ZTI10S7297C4_nt = _ZTI10S7297C4_nt; 
extern  VTBL_ENTRY _ZTV10S7297C4_nt[];
Class_Descriptor cd_S7297C4_nt = {  "S7297C4_nt", // class name
  0,0,//no base classes
  &(vtc_S7297C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7297C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7297C4_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  S7297C6  {
  virtual void  v3(); // _ZN7S7297C62v3Ev
  virtual void  v4(); // _ZN7S7297C62v4Ev
  virtual void  v5(); // _ZN7S7297C62v5Ev
  virtual void  v6(); // _ZN7S7297C62v6Ev
  virtual void  v7(); // _ZN7S7297C62v7Ev
  virtual void  v8(); // _ZN7S7297C62v8Ev
  virtual void  v9(); // _ZN7S7297C62v9Ev
  virtual void  v10(); // _ZN7S7297C63v10Ev
  virtual void  v11(); // _ZN7S7297C63v11Ev
  ~S7297C6(); // tgen
  S7297C6(); // tgen
};
//SIG(-1 S7297C6) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S7297C6 ::v3(){vfunc_called(this, "_ZN7S7297C62v3Ev");}
void  S7297C6 ::v4(){vfunc_called(this, "_ZN7S7297C62v4Ev");}
void  S7297C6 ::v5(){vfunc_called(this, "_ZN7S7297C62v5Ev");}
void  S7297C6 ::v6(){vfunc_called(this, "_ZN7S7297C62v6Ev");}
void  S7297C6 ::v7(){vfunc_called(this, "_ZN7S7297C62v7Ev");}
void  S7297C6 ::v8(){vfunc_called(this, "_ZN7S7297C62v8Ev");}
void  S7297C6 ::v9(){vfunc_called(this, "_ZN7S7297C62v9Ev");}
void  S7297C6 ::v10(){vfunc_called(this, "_ZN7S7297C63v10Ev");}
void  S7297C6 ::v11(){vfunc_called(this, "_ZN7S7297C63v11Ev");}
S7297C6 ::~S7297C6(){ note_dtor("S7297C6", this);} // tgen
S7297C6 ::S7297C6(){ note_ctor("S7297C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7297C6C1Ev();
extern void _ZN7S7297C6D1Ev();
Name_Map name_map_S7297C6[] = {
  NSPAIR(_ZN7S7297C6C1Ev),
  NSPAIR(_ZN7S7297C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7297C6[];
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
static  VTBL_ENTRY vtc_S7297C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7297C6[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
};
extern VTBL_ENTRY _ZTI7S7297C6[];
extern  VTBL_ENTRY _ZTV7S7297C6[];
Class_Descriptor cd_S7297C6 = {  "S7297C6", // class name
  0,0,//no base classes
  &(vtc_S7297C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7297C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7297C6),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  S7297C5  : virtual S7297C6 {
  void *s7297c5f0;
  long double s7297c5f1;
  int s7297c5f2;
  virtual void  v12(); // _ZN7S7297C53v12Ev
  virtual void  v13(); // _ZN7S7297C53v13Ev
  virtual void  v14(); // _ZN7S7297C53v14Ev
  ~S7297C5(); // tgen
  S7297C5(); // tgen
};
//SIG(-1 S7297C5) C1{ VBC2{ v4 v5 v6 v7 v8 v9 v10 v11 v12} v1 v2 v3 Fp FD Fi}


void  S7297C5 ::v12(){vfunc_called(this, "_ZN7S7297C53v12Ev");}
void  S7297C5 ::v13(){vfunc_called(this, "_ZN7S7297C53v13Ev");}
void  S7297C5 ::v14(){vfunc_called(this, "_ZN7S7297C53v14Ev");}
S7297C5 ::~S7297C5(){ note_dtor("S7297C5", this);} // tgen
S7297C5 ::S7297C5(){ note_ctor("S7297C5", this);} // tgen

static void Test_S7297C5()
{
  extern Class_Descriptor cd_S7297C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S7297C5, buf);
    S7297C5 *dp, &lv = *(dp=new (buf) S7297C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S7297C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7297C5)");
    check_base_class_offset(lv, (S7297C6*), 0, "S7297C5");
    check_field_offset(lv, s7297c5f0, ABISELECT(8,4), "S7297C5.s7297c5f0");
    check_field_offset(lv, s7297c5f1, ABISELECT(16,8), "S7297C5.s7297c5f1");
    check_field_offset(lv, s7297c5f2, ABISELECT(32,20), "S7297C5.s7297c5f2");
    test_class_info(&lv, &cd_S7297C5);
    dp->~S7297C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7297C5(Test_S7297C5, "S7297C5", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S7297C5C1Ev();
extern void _ZN7S7297C5D1Ev();
Name_Map name_map_S7297C5[] = {
  NSPAIR(_ZN7S7297C5C1Ev),
  NSPAIR(_ZN7S7297C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7297C6;
extern VTBL_ENTRY _ZTI7S7297C6[];
extern  VTBL_ENTRY _ZTV7S7297C6[];
static Base_Class bases_S7297C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7297C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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 _ZTI7S7297C5[];
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN7S7297C53v12Ev();
extern void _ZN7S7297C53v13Ev();
extern void _ZN7S7297C53v14Ev();
static  VTBL_ENTRY vtc_S7297C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7297C5[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v14Ev,
};
extern VTBL_ENTRY _ZTV7S7297C5[];
static  VTT_ENTRY vtt_S7297C5[] = {
  {&(_ZTV7S7297C5[12]),  12,24},
  {&(_ZTV7S7297C5[12]),  12,24},
};
extern VTBL_ENTRY _ZTI7S7297C5[];
extern  VTBL_ENTRY _ZTV7S7297C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7297C5[];
Class_Descriptor cd_S7297C5 = {  "S7297C5", // class name
  bases_S7297C5, 1,
  &(vtc_S7297C5[0]), // expected_vtbl_contents
  &(vtt_S7297C5[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S7297C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7297C5),24, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7297C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7297C3  : S7297C4_nt , S7297C5 {
  void *s7297c3f0;
  virtual  ~S7297C3(); // _ZN7S7297C3D2Ev
  virtual void  v15(); // _ZN7S7297C33v15Ev
  virtual void  v16(); // _ZN7S7297C33v16Ev
  virtual void  v17(); // _ZN7S7297C33v17Ev
  virtual void  v18(); // _ZN7S7297C33v18Ev
  virtual void  v19(); // _ZN7S7297C33v19Ev
  virtual void  v20(); // _ZN7S7297C33v20Ev
  virtual void  v21(); // _ZN7S7297C33v21Ev
  S7297C3(); // tgen
};
//SIG(-1 S7297C3) C1{ BC2{ vd v8 v9} BC3{ VBC4{ v10 v11 v12 v13 v14 v15 v16 v17 v18} v19 v20 v21 Fp FD Fi} vd v1 v2 v3 v4 v5 v6 v7 Fp}


 S7297C3 ::~S7297C3(){ note_dtor("S7297C3", this);}
void  S7297C3 ::v15(){vfunc_called(this, "_ZN7S7297C33v15Ev");}
void  S7297C3 ::v16(){vfunc_called(this, "_ZN7S7297C33v16Ev");}
void  S7297C3 ::v17(){vfunc_called(this, "_ZN7S7297C33v17Ev");}
void  S7297C3 ::v18(){vfunc_called(this, "_ZN7S7297C33v18Ev");}
void  S7297C3 ::v19(){vfunc_called(this, "_ZN7S7297C33v19Ev");}
void  S7297C3 ::v20(){vfunc_called(this, "_ZN7S7297C33v20Ev");}
void  S7297C3 ::v21(){vfunc_called(this, "_ZN7S7297C33v21Ev");}
S7297C3 ::S7297C3(){ note_ctor("S7297C3", this);} // tgen

static void Test_S7297C3()
{
  extern Class_Descriptor cd_S7297C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,9)];
    init_test(&cd_S7297C3, buf);
    S7297C3 *dp, &lv = *(dp=new (buf) S7297C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S7297C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7297C3)");
    check_base_class_offset(lv, (S7297C4_nt*), 0, "S7297C3");
    check_base_class_offset(lv, (S7297C6*)(S7297C5*), ABISELECT(16,4), "S7297C3");
    check_base_class_offset(lv, (S7297C5*), ABISELECT(16,4), "S7297C3");
    check_field_offset(lv, s7297c3f0, ABISELECT(56,28), "S7297C3.s7297c3f0");
    test_class_info(&lv, &cd_S7297C3);
    dp->~S7297C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7297C3(Test_S7297C3, "S7297C3", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S7297C3C1Ev();
extern void _ZN7S7297C3D2Ev();
Name_Map name_map_S7297C3[] = {
  NSPAIR(_ZN7S7297C3C1Ev),
  NSPAIR(_ZN7S7297C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7297C4_nt;
extern VTBL_ENTRY _ZTI10S7297C4_nt[];
extern  VTBL_ENTRY _ZTV10S7297C4_nt[];
extern Class_Descriptor cd_S7297C6;
extern VTBL_ENTRY _ZTI7S7297C6[];
extern  VTBL_ENTRY _ZTV7S7297C6[];
extern Class_Descriptor cd_S7297C5;
extern VTBL_ENTRY _ZTI7S7297C5[];
extern  VTBL_ENTRY _ZTV7S7297C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7297C5[];
static Base_Class bases_S7297C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7297C4_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},
  {&cd_S7297C6,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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
    2, //immediately_derived
  0, 1},
  {&cd_S7297C5,    ABISELECT(16,4), //bcp->offset
    14, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    4, //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 _ZTI7S7297C3[];
extern void _ZN7S7297C3D1Ev();
extern void _ZN7S7297C3D0Ev();
extern void _ZN10S7297C4_nt2v1Ev();
extern void _ZN10S7297C4_nt2v2Ev();
extern void _ZN7S7297C33v15Ev();
extern void _ZN7S7297C33v16Ev();
extern void _ZN7S7297C33v17Ev();
extern void _ZN7S7297C33v18Ev();
extern void _ZN7S7297C33v19Ev();
extern void _ZN7S7297C33v20Ev();
extern void _ZN7S7297C33v21Ev();
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN7S7297C53v12Ev();
extern void _ZN7S7297C53v13Ev();
extern void _ZN7S7297C53v14Ev();
static  VTBL_ENTRY vtc_S7297C3[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7297C3[0]),
  (VTBL_ENTRY)&_ZN7S7297C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7297C3D0Ev,
  (VTBL_ENTRY)&_ZN10S7297C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7297C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S7297C3[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v14Ev,
};
extern VTBL_ENTRY _ZTV7S7297C3[];
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN7S7297C53v12Ev();
extern void _ZN7S7297C53v13Ev();
extern void _ZN7S7297C53v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C5__7S7297C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7297C5[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v14Ev,
};
static  VTT_ENTRY vtt_S7297C3[] = {
  {&(_ZTV7S7297C3[3]),  3,38},
  {&(_tg__ZTV7S7297C5__7S7297C3[12]),  12,24},
  {&(_tg__ZTV7S7297C5__7S7297C3[12]),  12,24},
  {&(_ZTV7S7297C3[26]),  26,38},
  {&(_ZTV7S7297C3[26]),  26,38},
};
extern VTBL_ENTRY _ZTI7S7297C3[];
extern  VTBL_ENTRY _ZTV7S7297C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7297C3[];
Class_Descriptor cd_S7297C3 = {  "S7297C3", // class name
  bases_S7297C3, 3,
  &(vtc_S7297C3[0]), // expected_vtbl_contents
  &(vtt_S7297C3[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S7297C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7297C3),38, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7297C3),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7297C10  {
  virtual void  v22(); // _ZN8S7297C103v22Ev
  ~S7297C10(); // tgen
  S7297C10(); // tgen
};
//SIG(-1 S7297C10) C1{ v1}


void  S7297C10 ::v22(){vfunc_called(this, "_ZN8S7297C103v22Ev");}
S7297C10 ::~S7297C10(){ note_dtor("S7297C10", this);} // tgen
S7297C10 ::S7297C10(){ note_ctor("S7297C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S7297C10C1Ev();
extern void _ZN8S7297C10D1Ev();
Name_Map name_map_S7297C10[] = {
  NSPAIR(_ZN8S7297C10C1Ev),
  NSPAIR(_ZN8S7297C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7297C10[];
extern void _ZN8S7297C103v22Ev();
static  VTBL_ENTRY vtc_S7297C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7297C10[0]),
  (VTBL_ENTRY)&_ZN8S7297C103v22Ev,
};
extern VTBL_ENTRY _ZTI8S7297C10[];
extern  VTBL_ENTRY _ZTV8S7297C10[];
Class_Descriptor cd_S7297C10 = {  "S7297C10", // class name
  0,0,//no base classes
  &(vtc_S7297C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S7297C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7297C10),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  S7297C12  : virtual S7297C6 {
  __tsi64 s7297c12f0;
  virtual void  v23(); // _ZN8S7297C123v23Ev
  virtual void  v24(); // _ZN8S7297C123v24Ev
  virtual void  v25(); // _ZN8S7297C123v25Ev
  virtual void  v26(); // _ZN8S7297C123v26Ev
  ~S7297C12(); // tgen
  S7297C12(); // tgen
};
//SIG(-1 S7297C12) C1{ VBC2{ v5 v6 v7 v8 v9 v10 v11 v12 v13} v1 v2 v3 v4 FL}


void  S7297C12 ::v23(){vfunc_called(this, "_ZN8S7297C123v23Ev");}
void  S7297C12 ::v24(){vfunc_called(this, "_ZN8S7297C123v24Ev");}
void  S7297C12 ::v25(){vfunc_called(this, "_ZN8S7297C123v25Ev");}
void  S7297C12 ::v26(){vfunc_called(this, "_ZN8S7297C123v26Ev");}
S7297C12 ::~S7297C12(){ note_dtor("S7297C12", this);} // tgen
S7297C12 ::S7297C12(){ note_ctor("S7297C12", this);} // tgen

static void Test_S7297C12()
{
  extern Class_Descriptor cd_S7297C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S7297C12, buf);
    S7297C12 *dp, &lv = *(dp=new (buf) S7297C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S7297C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7297C12)");
    check_base_class_offset(lv, (S7297C6*), 0, "S7297C12");
    check_field_offset(lv, s7297c12f0, ABISELECT(8,4), "S7297C12.s7297c12f0");
    test_class_info(&lv, &cd_S7297C12);
    dp->~S7297C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7297C12(Test_S7297C12, "S7297C12", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S7297C12C1Ev();
extern void _ZN8S7297C12D1Ev();
Name_Map name_map_S7297C12[] = {
  NSPAIR(_ZN8S7297C12C1Ev),
  NSPAIR(_ZN8S7297C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7297C6;
extern VTBL_ENTRY _ZTI7S7297C6[];
extern  VTBL_ENTRY _ZTV7S7297C6[];
static Base_Class bases_S7297C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7297C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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 _ZTI8S7297C12[];
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C123v23Ev();
extern void _ZN8S7297C123v24Ev();
extern void _ZN8S7297C123v25Ev();
extern void _ZN8S7297C123v26Ev();
static  VTBL_ENTRY vtc_S7297C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7297C12[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v23Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v24Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v25Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v26Ev,
};
extern VTBL_ENTRY _ZTV8S7297C12[];
static  VTT_ENTRY vtt_S7297C12[] = {
  {&(_ZTV8S7297C12[12]),  12,25},
  {&(_ZTV8S7297C12[12]),  12,25},
};
extern VTBL_ENTRY _ZTI8S7297C12[];
extern  VTBL_ENTRY _ZTV8S7297C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7297C12[];
Class_Descriptor cd_S7297C12 = {  "S7297C12", // class name
  bases_S7297C12, 1,
  &(vtc_S7297C12[0]), // expected_vtbl_contents
  &(vtt_S7297C12[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S7297C12),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7297C12),25, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7297C12),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7297C11  : S7297C6 , S7297C12 {
  virtual void  v27(); // _ZN8S7297C113v27Ev
  virtual void  v28(); // _ZN8S7297C113v28Ev
  ~S7297C11(); // tgen
  S7297C11(); // tgen
};
//SIG(-1 S7297C11) C1{ BC2{ v3 v4 v5 v6 v7 v8 v9 v10 v11} BC3{ VBC2 v12 v13 v14 v15 FL} v1 v2}


void  S7297C11 ::v27(){vfunc_called(this, "_ZN8S7297C113v27Ev");}
void  S7297C11 ::v28(){vfunc_called(this, "_ZN8S7297C113v28Ev");}
S7297C11 ::~S7297C11(){ note_dtor("S7297C11", this);} // tgen
S7297C11 ::S7297C11(){ note_ctor("S7297C11", this);} // tgen

static void Test_S7297C11()
{
  extern Class_Descriptor cd_S7297C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S7297C11, buf);
    S7297C11 *dp, &lv = *(dp=new (buf) S7297C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S7297C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7297C11)");
    /*is_ambiguous_... S7297C11::S7297C6 */ AMB_check_base_class_offset(lv, (S7297C6*), 0, "S7297C11");
    check_base_class_offset(lv, (S7297C6*)(S7297C12*), ABISELECT(8,4), "S7297C11");
    check_base_class_offset(lv, (S7297C12*), ABISELECT(8,4), "S7297C11");
    test_class_info(&lv, &cd_S7297C11);
    dp->~S7297C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7297C11(Test_S7297C11, "S7297C11", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S7297C11C1Ev();
extern void _ZN8S7297C11D1Ev();
Name_Map name_map_S7297C11[] = {
  NSPAIR(_ZN8S7297C11C1Ev),
  NSPAIR(_ZN8S7297C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7297C6;
extern VTBL_ENTRY _ZTI7S7297C6[];
extern  VTBL_ENTRY _ZTV7S7297C6[];
extern Class_Descriptor cd_S7297C6;
extern VTBL_ENTRY _ZTI7S7297C6[];
extern  VTBL_ENTRY _ZTV7S7297C6[];
extern Class_Descriptor cd_S7297C12;
extern VTBL_ENTRY _ZTI8S7297C12[];
extern  VTBL_ENTRY _ZTV8S7297C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7297C12[];
static Base_Class bases_S7297C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7297C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7297C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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
    2, //immediately_derived
  0, 1},
  {&cd_S7297C12,    ABISELECT(8,4), //bcp->offset
    14, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    4, //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 _ZTI8S7297C11[];
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C113v27Ev();
extern void _ZN8S7297C113v28Ev();
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C123v23Ev();
extern void _ZN8S7297C123v24Ev();
extern void _ZN8S7297C123v25Ev();
extern void _ZN8S7297C123v26Ev();
static  VTBL_ENTRY vtc_S7297C11[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7297C11[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v27Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v28Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7297C11[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v23Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v24Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v25Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v26Ev,
};
extern VTBL_ENTRY _ZTV8S7297C11[];
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C123v23Ev();
extern void _ZN8S7297C123v24Ev();
extern void _ZN8S7297C123v25Ev();
extern void _ZN8S7297C123v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C12__8S7297C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7297C12[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v23Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v24Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v25Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v26Ev,
};
static  VTT_ENTRY vtt_S7297C11[] = {
  {&(_ZTV8S7297C11[3]),  3,39},
  {&(_tg__ZTV8S7297C12__8S7297C11[12]),  12,25},
  {&(_tg__ZTV8S7297C12__8S7297C11[12]),  12,25},
  {&(_ZTV8S7297C11[26]),  26,39},
  {&(_ZTV8S7297C11[26]),  26,39},
};
extern VTBL_ENTRY _ZTI8S7297C11[];
extern  VTBL_ENTRY _ZTV8S7297C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7297C11[];
Class_Descriptor cd_S7297C11 = {  "S7297C11", // class name
  bases_S7297C11, 3,
  &(vtc_S7297C11[0]), // expected_vtbl_contents
  &(vtt_S7297C11[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S7297C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7297C11),39, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7297C11),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7297C9  : S7297C10 , S7297C11 {
  virtual  ~S7297C9(); // _ZN7S7297C9D2Ev
  virtual void  v29(); // _ZN7S7297C93v29Ev
  virtual void  v30(); // _ZN7S7297C93v30Ev
  S7297C9(); // tgen
};
//SIG(-1 S7297C9) C1{ BC2{ v3} BC3{ BC4{ v4 v5 v6 v7 v8 v9 v10 v11 v12} BC5{ VBC4 v13 v14 v15 v16 FL} v17 v18} vd v1 v2}


 S7297C9 ::~S7297C9(){ note_dtor("S7297C9", this);}
void  S7297C9 ::v29(){vfunc_called(this, "_ZN7S7297C93v29Ev");}
void  S7297C9 ::v30(){vfunc_called(this, "_ZN7S7297C93v30Ev");}
S7297C9 ::S7297C9(){ note_ctor("S7297C9", this);} // tgen

static void Test_S7297C9()
{
  extern Class_Descriptor cd_S7297C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S7297C9, buf);
    S7297C9 *dp, &lv = *(dp=new (buf) S7297C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S7297C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7297C9)");
    check_base_class_offset(lv, (S7297C10*), 0, "S7297C9");
    /*is_ambiguous_... S7297C11::S7297C6 */ AMB_check_base_class_offset(lv, (S7297C6*)(S7297C11*), ABISELECT(8,4), "S7297C9");
    check_base_class_offset(lv, (S7297C6*)(S7297C12*)(S7297C11*), ABISELECT(16,8), "S7297C9");
    check_base_class_offset(lv, (S7297C12*)(S7297C11*), ABISELECT(16,8), "S7297C9");
    check_base_class_offset(lv, (S7297C11*), ABISELECT(8,4), "S7297C9");
    test_class_info(&lv, &cd_S7297C9);
    dp->~S7297C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7297C9(Test_S7297C9, "S7297C9", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S7297C9C1Ev();
extern void _ZN7S7297C9D2Ev();
Name_Map name_map_S7297C9[] = {
  NSPAIR(_ZN7S7297C9C1Ev),
  NSPAIR(_ZN7S7297C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7297C10;
extern VTBL_ENTRY _ZTI8S7297C10[];
extern  VTBL_ENTRY _ZTV8S7297C10[];
extern Class_Descriptor cd_S7297C6;
extern VTBL_ENTRY _ZTI7S7297C6[];
extern  VTBL_ENTRY _ZTV7S7297C6[];
extern Class_Descriptor cd_S7297C6;
extern VTBL_ENTRY _ZTI7S7297C6[];
extern  VTBL_ENTRY _ZTV7S7297C6[];
extern Class_Descriptor cd_S7297C12;
extern VTBL_ENTRY _ZTI8S7297C12[];
extern  VTBL_ENTRY _ZTV8S7297C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7297C12[];
extern Class_Descriptor cd_S7297C11;
extern VTBL_ENTRY _ZTI8S7297C11[];
extern  VTBL_ENTRY _ZTV8S7297C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7297C11[];
static Base_Class bases_S7297C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7297C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7297C6,    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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7297C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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_S7297C12,    ABISELECT(16,8), //bcp->offset
    22, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7297C11,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //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 _ZTI7S7297C9[];
extern void _ZN8S7297C103v22Ev();
extern void _ZN7S7297C9D1Ev();
extern void _ZN7S7297C9D0Ev();
extern void _ZN7S7297C93v29Ev();
extern void _ZN7S7297C93v30Ev();
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C113v27Ev();
extern void _ZN8S7297C113v28Ev();
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C123v23Ev();
extern void _ZN8S7297C123v24Ev();
extern void _ZN8S7297C123v25Ev();
extern void _ZN8S7297C123v26Ev();
static  VTBL_ENTRY vtc_S7297C9[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7297C9[0]),
  (VTBL_ENTRY)&_ZN8S7297C103v22Ev,
  (VTBL_ENTRY)&_ZN7S7297C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7297C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7297C93v29Ev,
  (VTBL_ENTRY)&_ZN7S7297C93v30Ev,
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7297C9[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v27Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v28Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7297C9[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v23Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v24Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v25Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v26Ev,
};
extern VTBL_ENTRY _ZTV7S7297C9[];
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C113v27Ev();
extern void _ZN8S7297C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C11__7S7297C9[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7297C11[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v27Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v28Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C123v23Ev();
extern void _ZN8S7297C123v24Ev();
extern void _ZN8S7297C123v25Ev();
extern void _ZN8S7297C123v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C128S7297C11__7S7297C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7297C12[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v23Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v24Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v25Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v26Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C123v23Ev();
extern void _ZN8S7297C123v24Ev();
extern void _ZN8S7297C123v25Ev();
extern void _ZN8S7297C123v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C12__8S7297C11__7S7297C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7297C11[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v23Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v24Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v25Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v26Ev,
};
static  VTT_ENTRY vtt_S7297C9[] = {
  {&(_ZTV7S7297C9[3]),  3,47},
  {&(_tg__ZTV8S7297C11__7S7297C9[3]),  3,14},
  {&(_tg__ZTV8S7297C128S7297C11__7S7297C9[12]),  12,25},
  {&(_tg__ZTV8S7297C128S7297C11__7S7297C9[12]),  12,25},
  {&(_tg__ZTV8S7297C12__8S7297C11__7S7297C9[12]),  12,25},
  {&(_tg__ZTV8S7297C12__8S7297C11__7S7297C9[12]),  12,25},
  {&(_ZTV7S7297C9[11]),  11,47},
  {&(_ZTV7S7297C9[34]),  34,47},
  {&(_ZTV7S7297C9[34]),  34,47},
};
extern VTBL_ENTRY _ZTI7S7297C9[];
extern  VTBL_ENTRY _ZTV7S7297C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7297C9[];
Class_Descriptor cd_S7297C9 = {  "S7297C9", // class name
  bases_S7297C9, 5,
  &(vtc_S7297C9[0]), // expected_vtbl_contents
  &(vtt_S7297C9[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S7297C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7297C9),47, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7297C9),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7297C13  {
  __tsi64 s7297c13f0;
  int s7297c13f1;
  virtual  ~S7297C13(); // _ZN8S7297C13D1Ev
  virtual void  v31(); // _ZN8S7297C133v31Ev
  virtual void  v32(); // _ZN8S7297C133v32Ev
  S7297C13(); // tgen
};
//SIG(-1 S7297C13) C1{ vd v1 v2 FL Fi}


 S7297C13 ::~S7297C13(){ note_dtor("S7297C13", this);}
void  S7297C13 ::v31(){vfunc_called(this, "_ZN8S7297C133v31Ev");}
void  S7297C13 ::v32(){vfunc_called(this, "_ZN8S7297C133v32Ev");}
S7297C13 ::S7297C13(){ note_ctor("S7297C13", this);} // tgen

static void Test_S7297C13()
{
  extern Class_Descriptor cd_S7297C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S7297C13, buf);
    S7297C13 *dp, &lv = *(dp=new (buf) S7297C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S7297C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7297C13)");
    check_field_offset(lv, s7297c13f0, ABISELECT(8,4), "S7297C13.s7297c13f0");
    check_field_offset(lv, s7297c13f1, ABISELECT(16,12), "S7297C13.s7297c13f1");
    test_class_info(&lv, &cd_S7297C13);
    dp->~S7297C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7297C13(Test_S7297C13, "S7297C13", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S7297C13C1Ev();
extern void _ZN8S7297C13D1Ev();
Name_Map name_map_S7297C13[] = {
  NSPAIR(_ZN8S7297C13C1Ev),
  NSPAIR(_ZN8S7297C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7297C13[];
extern void _ZN8S7297C13D1Ev();
extern void _ZN8S7297C13D0Ev();
extern void _ZN8S7297C133v31Ev();
extern void _ZN8S7297C133v32Ev();
static  VTBL_ENTRY vtc_S7297C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7297C13[0]),
  (VTBL_ENTRY)&_ZN8S7297C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7297C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7297C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7297C133v32Ev,
};
extern VTBL_ENTRY _ZTI8S7297C13[];
extern  VTBL_ENTRY _ZTV8S7297C13[];
Class_Descriptor cd_S7297C13 = {  "S7297C13", // class name
  0,0,//no base classes
  &(vtc_S7297C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S7297C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7297C13),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  S7297C8  : S7297C9 , virtual S7297C13 {
  int s7297c8f0;
  ::S7297C10 s7297c8f1;
  virtual  ~S7297C8(); // _ZN7S7297C8D2Ev
  virtual void  v33(); // _ZN7S7297C83v33Ev
  virtual void  v34(); // _ZN7S7297C83v34Ev
  virtual void  v35(); // _ZN7S7297C83v35Ev
  virtual void  v36(); // _ZN7S7297C83v36Ev
  virtual void  v37(); // _ZN7S7297C83v37Ev
  S7297C8(); // tgen
};
//SIG(-1 S7297C8) C1{ BC2{ BC3{ v6} BC4{ BC5{ v7 v8 v9 v10 v11 v12 v13 v14 v15} BC6{ VBC5 v16 v17 v18 v19 FL} v20 v21} vd v22 v23} VBC7{ vd v24 v25 FL Fi} vd v1 v2 v3 v4 v5 Fi FC3}


 S7297C8 ::~S7297C8(){ note_dtor("S7297C8", this);}
void  S7297C8 ::v33(){vfunc_called(this, "_ZN7S7297C83v33Ev");}
void  S7297C8 ::v34(){vfunc_called(this, "_ZN7S7297C83v34Ev");}
void  S7297C8 ::v35(){vfunc_called(this, "_ZN7S7297C83v35Ev");}
void  S7297C8 ::v36(){vfunc_called(this, "_ZN7S7297C83v36Ev");}
void  S7297C8 ::v37(){vfunc_called(this, "_ZN7S7297C83v37Ev");}
S7297C8 ::S7297C8(){ note_ctor("S7297C8", this);} // tgen

static void Test_S7297C8()
{
  extern Class_Descriptor cd_S7297C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S7297C8, buf);
    S7297C8 *dp, &lv = *(dp=new (buf) S7297C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S7297C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7297C8)");
    check_base_class_offset(lv, (S7297C10*)(S7297C9*), 0, "S7297C8");
    /*is_ambiguous_... S7297C11::S7297C6 */ AMB_check_base_class_offset(lv, (S7297C6*)(S7297C11*)(S7297C9*), ABISELECT(8,4), "S7297C8");
    check_base_class_offset(lv, (S7297C6*)(S7297C12*)(S7297C11*)(S7297C9*), ABISELECT(16,8), "S7297C8");
    check_base_class_offset(lv, (S7297C12*)(S7297C11*)(S7297C9*), ABISELECT(16,8), "S7297C8");
    check_base_class_offset(lv, (S7297C11*)(S7297C9*), ABISELECT(8,4), "S7297C8");
    check_base_class_offset(lv, (S7297C9*), 0, "S7297C8");
    check_base_class_offset(lv, (S7297C13*), ABISELECT(48,28), "S7297C8");
    check_field_offset(lv, s7297c8f0, ABISELECT(32,20), "S7297C8.s7297c8f0");
    check_field_offset(lv, s7297c8f1, ABISELECT(40,24), "S7297C8.s7297c8f1");
    test_class_info(&lv, &cd_S7297C8);
    dp->~S7297C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7297C8(Test_S7297C8, "S7297C8", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN7S7297C8C1Ev();
extern void _ZN7S7297C8D2Ev();
Name_Map name_map_S7297C8[] = {
  NSPAIR(_ZN7S7297C8C1Ev),
  NSPAIR(_ZN7S7297C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7297C10;
extern VTBL_ENTRY _ZTI8S7297C10[];
extern  VTBL_ENTRY _ZTV8S7297C10[];
extern Class_Descriptor cd_S7297C6;
extern VTBL_ENTRY _ZTI7S7297C6[];
extern  VTBL_ENTRY _ZTV7S7297C6[];
extern Class_Descriptor cd_S7297C6;
extern VTBL_ENTRY _ZTI7S7297C6[];
extern  VTBL_ENTRY _ZTV7S7297C6[];
extern Class_Descriptor cd_S7297C12;
extern VTBL_ENTRY _ZTI8S7297C12[];
extern  VTBL_ENTRY _ZTV8S7297C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7297C12[];
extern Class_Descriptor cd_S7297C11;
extern VTBL_ENTRY _ZTI8S7297C11[];
extern  VTBL_ENTRY _ZTV8S7297C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7297C11[];
extern Class_Descriptor cd_S7297C9;
extern VTBL_ENTRY _ZTI7S7297C9[];
extern  VTBL_ENTRY _ZTV7S7297C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7297C9[];
extern Class_Descriptor cd_S7297C13;
extern VTBL_ENTRY _ZTI8S7297C13[];
extern  VTBL_ENTRY _ZTV8S7297C13[];
static Base_Class bases_S7297C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7297C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S7297C6,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7297C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7297C12,    ABISELECT(16,8), //bcp->offset
    28, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7297C11,    ABISELECT(8,4), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7297C9,    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_S7297C13,    ABISELECT(48,28), //bcp->offset
    53, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //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 _ZTI7S7297C8[];
extern void _ZN8S7297C103v22Ev();
extern void _ZN7S7297C8D1Ev();
extern void _ZN7S7297C8D0Ev();
extern void _ZN7S7297C93v29Ev();
extern void _ZN7S7297C93v30Ev();
extern void _ZN7S7297C83v33Ev();
extern void _ZN7S7297C83v34Ev();
extern void _ZN7S7297C83v35Ev();
extern void _ZN7S7297C83v36Ev();
extern void _ZN7S7297C83v37Ev();
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C113v27Ev();
extern void _ZN8S7297C113v28Ev();
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C123v23Ev();
extern void _ZN8S7297C123v24Ev();
extern void _ZN8S7297C123v25Ev();
extern void _ZN8S7297C123v26Ev();
extern void ABISELECT(_ZTv0_n24_N7S7297C8D1Ev,_ZTv0_n12_N7S7297C8D1Ev)();
extern void ABISELECT(_ZThn48_N7S7297C8D1Ev,_ZThn28_N7S7297C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7297C8D0Ev,_ZTv0_n12_N7S7297C8D0Ev)();
extern void ABISELECT(_ZThn48_N7S7297C8D0Ev,_ZThn28_N7S7297C8D0Ev)() __attribute__((weak));
extern void _ZN8S7297C133v31Ev();
extern void _ZN8S7297C133v32Ev();
static  VTBL_ENTRY vtc_S7297C8[] = {
  ABISELECT(48,28),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7297C8[0]),
  (VTBL_ENTRY)&_ZN8S7297C103v22Ev,
  (VTBL_ENTRY)&_ZN7S7297C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7297C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7297C93v29Ev,
  (VTBL_ENTRY)&_ZN7S7297C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v33Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v34Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v35Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v36Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v37Ev,
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7297C8[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v27Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v28Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7297C8[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v23Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v24Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v25Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v26Ev,
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7297C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7297C8D1Ev,_ZTv0_n12_N7S7297C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7297C8D0Ev,_ZTv0_n12_N7S7297C8D0Ev),
  (VTBL_ENTRY)&_ZN8S7297C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7297C133v32Ev,
};
extern VTBL_ENTRY _ZTV7S7297C8[];
extern void _ZN8S7297C103v22Ev();
extern void _ZN7S7297C9D1Ev();
extern void _ZN7S7297C9D0Ev();
extern void _ZN7S7297C93v29Ev();
extern void _ZN7S7297C93v30Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C9__7S7297C8[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7297C9[0]),
  (VTBL_ENTRY)&_ZN8S7297C103v22Ev,
  (VTBL_ENTRY)&_ZN7S7297C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7297C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7297C93v29Ev,
  (VTBL_ENTRY)&_ZN7S7297C93v30Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C113v27Ev();
extern void _ZN8S7297C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C117S7297C9__7S7297C8[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7297C11[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v27Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v28Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C123v23Ev();
extern void _ZN8S7297C123v24Ev();
extern void _ZN8S7297C123v25Ev();
extern void _ZN8S7297C123v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C128S7297C117S7297C9__7S7297C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7297C12[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v23Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v24Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v25Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v26Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C123v23Ev();
extern void _ZN8S7297C123v24Ev();
extern void _ZN8S7297C123v25Ev();
extern void _ZN8S7297C123v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C12__8S7297C117S7297C9__7S7297C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7297C11[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v23Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v24Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v25Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v26Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C113v27Ev();
extern void _ZN8S7297C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C11__7S7297C9__7S7297C8[] = {
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7297C9[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v27Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v28Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C123v23Ev();
extern void _ZN8S7297C123v24Ev();
extern void _ZN8S7297C123v25Ev();
extern void _ZN8S7297C123v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C128S7297C11__7S7297C9__7S7297C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7297C9[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v23Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v24Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v25Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v26Ev,
};
static  VTT_ENTRY vtt_S7297C8[] = {
  {&(_ZTV7S7297C8[4]),  4,62},
  {&(_tg__ZTV7S7297C9__7S7297C8[3]),  3,8},
  {&(_tg__ZTV8S7297C117S7297C9__7S7297C8[3]),  3,14},
  {&(_tg__ZTV8S7297C128S7297C117S7297C9__7S7297C8[12]),  12,25},
  {&(_tg__ZTV8S7297C128S7297C117S7297C9__7S7297C8[12]),  12,25},
  {&(_tg__ZTV8S7297C12__8S7297C117S7297C9__7S7297C8[12]),  12,25},
  {&(_tg__ZTV8S7297C12__8S7297C117S7297C9__7S7297C8[12]),  12,25},
  {&(_tg__ZTV8S7297C11__7S7297C9__7S7297C8[3]),  3,14},
  {&(_tg__ZTV8S7297C128S7297C11__7S7297C9__7S7297C8[12]),  12,25},
  {&(_tg__ZTV8S7297C128S7297C11__7S7297C9__7S7297C8[12]),  12,25},
  {&(_ZTV7S7297C8[17]),  17,62},
  {&(_ZTV7S7297C8[40]),  40,62},
  {&(_ZTV7S7297C8[40]),  40,62},
  {&(_ZTV7S7297C8[58]),  58,62},
};
extern VTBL_ENTRY _ZTI7S7297C8[];
extern  VTBL_ENTRY _ZTV7S7297C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7297C8[];
static VTBL_ENTRY alt_thunk_names34[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7297C8D0Ev,_ZTv0_n12_N7S7297C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7297C8D0Ev,_ZThn28_N7S7297C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7297C8D1Ev,_ZTv0_n12_N7S7297C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7297C8D1Ev,_ZThn28_N7S7297C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7297C8 = {  "S7297C8", // class name
  bases_S7297C8, 7,
  &(vtc_S7297C8[0]), // expected_vtbl_contents
  &(vtt_S7297C8[0]), // expected_vtt_contents
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI7S7297C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7297C8),62, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7297C8),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names34,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7297C7  : virtual S7297C6 , S7297C8 {
  ::S5266C29 s7297c7f0;
  virtual  ~S7297C7(); // _ZN7S7297C7D2Ev
  virtual void  v38(); // _ZN7S7297C73v38Ev
  virtual void  v39(); // _ZN7S7297C73v39Ev
  S7297C7(); // tgen
};
//SIG(-1 S7297C7) C1{ VBC2{ v3 v4 v5 v6 v7 v8 v9 v10 v11} BC3{ BC4{ BC5{ v12} BC6{ BC2 BC7{ VBC2 v13 v14 v15 v16 FL} v17 v18} vd v19 v20} VBC8{ vd v21 v22 FL Fi} vd v23 v24 v25 v26 v27 Fi FC5} vd v1 v2 FC9{ m}}


 S7297C7 ::~S7297C7(){ note_dtor("S7297C7", this);}
void  S7297C7 ::v38(){vfunc_called(this, "_ZN7S7297C73v38Ev");}
void  S7297C7 ::v39(){vfunc_called(this, "_ZN7S7297C73v39Ev");}
S7297C7 ::S7297C7(){ note_ctor("S7297C7", this);} // tgen

static void Test_S7297C7()
{
  extern Class_Descriptor cd_S7297C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S7297C7, buf);
    S7297C7 *dp, &lv = *(dp=new (buf) S7297C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S7297C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7297C7)");
    /*is_ambiguous_... S7297C7::S7297C6 */ AMB_check_base_class_offset(lv, (S7297C6*), ABISELECT(16,8), "S7297C7");
    check_base_class_offset(lv, (S7297C6*)(S7297C12*)(S7297C11*)(S7297C9*)(S7297C8*), ABISELECT(16,8), "S7297C7");
    check_base_class_offset(lv, (S7297C10*)(S7297C9*)(S7297C8*), 0, "S7297C7");
    /*is_ambiguous_... S7297C11::S7297C6 */ AMB_check_base_class_offset(lv, (S7297C6*)(S7297C11*)(S7297C9*)(S7297C8*), ABISELECT(8,4), "S7297C7");
    check_base_class_offset(lv, (S7297C12*)(S7297C11*)(S7297C9*)(S7297C8*), ABISELECT(16,8), "S7297C7");
    check_base_class_offset(lv, (S7297C11*)(S7297C9*)(S7297C8*), ABISELECT(8,4), "S7297C7");
    check_base_class_offset(lv, (S7297C9*)(S7297C8*), 0, "S7297C7");
    check_base_class_offset(lv, (S7297C13*)(S7297C8*), ABISELECT(56,32), "S7297C7");
    check_base_class_offset(lv, (S7297C8*), 0, "S7297C7");
    check_field_offset(lv, s7297c7f0, ABISELECT(48,28), "S7297C7.s7297c7f0");
    test_class_info(&lv, &cd_S7297C7);
    dp->~S7297C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7297C7(Test_S7297C7, "S7297C7", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S7297C7C1Ev();
extern void _ZN7S7297C7D2Ev();
Name_Map name_map_S7297C7[] = {
  NSPAIR(_ZN7S7297C7C1Ev),
  NSPAIR(_ZN7S7297C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7297C6;
extern VTBL_ENTRY _ZTI7S7297C6[];
extern  VTBL_ENTRY _ZTV7S7297C6[];
extern Class_Descriptor cd_S7297C10;
extern VTBL_ENTRY _ZTI8S7297C10[];
extern  VTBL_ENTRY _ZTV8S7297C10[];
extern Class_Descriptor cd_S7297C6;
extern VTBL_ENTRY _ZTI7S7297C6[];
extern  VTBL_ENTRY _ZTV7S7297C6[];
extern Class_Descriptor cd_S7297C12;
extern VTBL_ENTRY _ZTI8S7297C12[];
extern  VTBL_ENTRY _ZTV8S7297C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7297C12[];
extern Class_Descriptor cd_S7297C11;
extern VTBL_ENTRY _ZTI8S7297C11[];
extern  VTBL_ENTRY _ZTV8S7297C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7297C11[];
extern Class_Descriptor cd_S7297C9;
extern VTBL_ENTRY _ZTI7S7297C9[];
extern  VTBL_ENTRY _ZTV7S7297C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7297C9[];
extern Class_Descriptor cd_S7297C13;
extern VTBL_ENTRY _ZTI8S7297C13[];
extern  VTBL_ENTRY _ZTV8S7297C13[];
extern Class_Descriptor cd_S7297C8;
extern VTBL_ENTRY _ZTI7S7297C8[];
extern  VTBL_ENTRY _ZTV7S7297C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7297C8[];
static Base_Class bases_S7297C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7297C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S7297C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S7297C6,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7297C12,    ABISELECT(16,8), //bcp->offset
    30, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7297C11,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7297C9,    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
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7297C13,    ABISELECT(56,32), //bcp->offset
    55, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7297C8,    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 _ZTI7S7297C7[];
extern void _ZN8S7297C103v22Ev();
extern void _ZN7S7297C7D1Ev();
extern void _ZN7S7297C7D0Ev();
extern void _ZN7S7297C93v29Ev();
extern void _ZN7S7297C93v30Ev();
extern void _ZN7S7297C83v33Ev();
extern void _ZN7S7297C83v34Ev();
extern void _ZN7S7297C83v35Ev();
extern void _ZN7S7297C83v36Ev();
extern void _ZN7S7297C83v37Ev();
extern void _ZN7S7297C73v38Ev();
extern void _ZN7S7297C73v39Ev();
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C113v27Ev();
extern void _ZN8S7297C113v28Ev();
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C123v23Ev();
extern void _ZN8S7297C123v24Ev();
extern void _ZN8S7297C123v25Ev();
extern void _ZN8S7297C123v26Ev();
extern void ABISELECT(_ZTv0_n24_N7S7297C7D1Ev,_ZTv0_n12_N7S7297C7D1Ev)();
extern void ABISELECT(_ZThn56_N7S7297C7D1Ev,_ZThn32_N7S7297C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7297C7D0Ev,_ZTv0_n12_N7S7297C7D0Ev)();
extern void ABISELECT(_ZThn56_N7S7297C7D0Ev,_ZThn32_N7S7297C7D0Ev)() __attribute__((weak));
extern void _ZN8S7297C133v31Ev();
extern void _ZN8S7297C133v32Ev();
static  VTBL_ENTRY vtc_S7297C7[] = {
  ABISELECT(56,32),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7297C7[0]),
  (VTBL_ENTRY)&_ZN8S7297C103v22Ev,
  (VTBL_ENTRY)&_ZN7S7297C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7297C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7297C93v29Ev,
  (VTBL_ENTRY)&_ZN7S7297C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v33Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v34Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v35Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v36Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v37Ev,
  (VTBL_ENTRY)&_ZN7S7297C73v38Ev,
  (VTBL_ENTRY)&_ZN7S7297C73v39Ev,
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7297C7[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v27Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v28Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7297C7[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v23Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v24Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v25Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v26Ev,
  0,
  0,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7297C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7297C7D1Ev,_ZTv0_n12_N7S7297C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7297C7D0Ev,_ZTv0_n12_N7S7297C7D0Ev),
  (VTBL_ENTRY)&_ZN8S7297C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7297C133v32Ev,
};
extern VTBL_ENTRY _ZTV7S7297C7[];
extern void _ZN8S7297C103v22Ev();
extern void _ZN7S7297C8D1Ev();
extern void _ZN7S7297C8D0Ev();
extern void _ZN7S7297C93v29Ev();
extern void _ZN7S7297C93v30Ev();
extern void _ZN7S7297C83v33Ev();
extern void _ZN7S7297C83v34Ev();
extern void _ZN7S7297C83v35Ev();
extern void _ZN7S7297C83v36Ev();
extern void _ZN7S7297C83v37Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C8__7S7297C7[] = {
  ABISELECT(56,32),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7297C8[0]),
  (VTBL_ENTRY)&_ZN8S7297C103v22Ev,
  (VTBL_ENTRY)&_ZN7S7297C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7297C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7297C93v29Ev,
  (VTBL_ENTRY)&_ZN7S7297C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v33Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v34Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v35Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v36Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v37Ev,
};
extern void _ZN8S7297C103v22Ev();
extern void _ZN7S7297C9D1Ev();
extern void _ZN7S7297C9D0Ev();
extern void _ZN7S7297C93v29Ev();
extern void _ZN7S7297C93v30Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C97S7297C8__7S7297C7[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7297C9[0]),
  (VTBL_ENTRY)&_ZN8S7297C103v22Ev,
  (VTBL_ENTRY)&_ZN7S7297C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7297C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7297C93v29Ev,
  (VTBL_ENTRY)&_ZN7S7297C93v30Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C113v27Ev();
extern void _ZN8S7297C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C117S7297C97S7297C8__7S7297C7[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7297C11[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v27Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v28Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C123v23Ev();
extern void _ZN8S7297C123v24Ev();
extern void _ZN8S7297C123v25Ev();
extern void _ZN8S7297C123v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C128S7297C117S7297C97S7297C8__7S7297C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7297C12[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v23Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v24Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v25Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v26Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C123v23Ev();
extern void _ZN8S7297C123v24Ev();
extern void _ZN8S7297C123v25Ev();
extern void _ZN8S7297C123v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C12__8S7297C117S7297C97S7297C8__7S7297C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7297C11[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v23Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v24Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v25Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v26Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C113v27Ev();
extern void _ZN8S7297C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C11__7S7297C97S7297C8__7S7297C7[] = {
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7297C9[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v27Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v28Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C123v23Ev();
extern void _ZN8S7297C123v24Ev();
extern void _ZN8S7297C123v25Ev();
extern void _ZN8S7297C123v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C128S7297C11__7S7297C97S7297C8__7S7297C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7297C9[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v23Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v24Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v25Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v26Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C113v27Ev();
extern void _ZN8S7297C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C117S7297C9__7S7297C8__7S7297C7[] = {
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7297C8[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v27Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v28Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C123v23Ev();
extern void _ZN8S7297C123v24Ev();
extern void _ZN8S7297C123v25Ev();
extern void _ZN8S7297C123v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C128S7297C117S7297C9__7S7297C8__7S7297C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7297C8[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v23Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v24Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v25Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v26Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7297C8D1Ev,_ZTv0_n12_N7S7297C8D1Ev)();
extern void ABISELECT(_ZThn56_N7S7297C8D1Ev,_ZThn32_N7S7297C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7297C8D0Ev,_ZTv0_n12_N7S7297C8D0Ev)();
extern void ABISELECT(_ZThn56_N7S7297C8D0Ev,_ZThn32_N7S7297C8D0Ev)() __attribute__((weak));
extern void _ZN8S7297C133v31Ev();
extern void _ZN8S7297C133v32Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C13__7S7297C8__7S7297C7[] = {
  0,
  0,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7297C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7297C8D1Ev,_ZTv0_n12_N7S7297C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7297C8D0Ev,_ZTv0_n12_N7S7297C8D0Ev),
  (VTBL_ENTRY)&_ZN8S7297C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7297C133v32Ev,
};
static  VTT_ENTRY vtt_S7297C7[] = {
  {&(_ZTV7S7297C7[4]),  4,64},
  {&(_tg__ZTV7S7297C8__7S7297C7[4]),  4,14},
  {&(_tg__ZTV7S7297C97S7297C8__7S7297C7[3]),  3,8},
  {&(_tg__ZTV8S7297C117S7297C97S7297C8__7S7297C7[3]),  3,14},
  {&(_tg__ZTV8S7297C128S7297C117S7297C97S7297C8__7S7297C7[12]),  12,25},
  {&(_tg__ZTV8S7297C128S7297C117S7297C97S7297C8__7S7297C7[12]),  12,25},
  {&(_tg__ZTV8S7297C12__8S7297C117S7297C97S7297C8__7S7297C7[12]),  12,25},
  {&(_tg__ZTV8S7297C12__8S7297C117S7297C97S7297C8__7S7297C7[12]),  12,25},
  {&(_tg__ZTV8S7297C11__7S7297C97S7297C8__7S7297C7[3]),  3,14},
  {&(_tg__ZTV8S7297C128S7297C11__7S7297C97S7297C8__7S7297C7[12]),  12,25},
  {&(_tg__ZTV8S7297C128S7297C11__7S7297C97S7297C8__7S7297C7[12]),  12,25},
  {&(_tg__ZTV8S7297C117S7297C9__7S7297C8__7S7297C7[3]),  3,14},
  {&(_tg__ZTV8S7297C128S7297C117S7297C9__7S7297C8__7S7297C7[12]),  12,25},
  {&(_tg__ZTV8S7297C128S7297C117S7297C9__7S7297C8__7S7297C7[12]),  12,25},
  {&(_tg__ZTV8S7297C13__7S7297C8__7S7297C7[5]),  5,9},
  {&(_ZTV7S7297C7[42]),  42,64},
  {&(_ZTV7S7297C7[19]),  19,64},
  {&(_ZTV7S7297C7[42]),  42,64},
  {&(_ZTV7S7297C7[60]),  60,64},
};
extern VTBL_ENTRY _ZTI7S7297C7[];
extern  VTBL_ENTRY _ZTV7S7297C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7297C7[];
static VTBL_ENTRY alt_thunk_names35[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7297C8D0Ev,_ZTv0_n12_N7S7297C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7297C8D0Ev,_ZThn32_N7S7297C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7297C8D1Ev,_ZTv0_n12_N7S7297C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7297C8D1Ev,_ZThn32_N7S7297C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7297C7D0Ev,_ZTv0_n12_N7S7297C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7297C7D0Ev,_ZThn32_N7S7297C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7297C7D1Ev,_ZTv0_n12_N7S7297C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7297C7D1Ev,_ZThn32_N7S7297C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7297C7 = {  "S7297C7", // class name
  bases_S7297C7, 8,
  &(vtc_S7297C7[0]), // expected_vtbl_contents
  &(vtt_S7297C7[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S7297C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7297C7),64, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7297C7),19, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names35,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7297C2  : virtual S7297C3 , virtual S7297C7 {
  char s7297c2f0;
  virtual void  v40(); // _ZN7S7297C23v40Ev
  virtual void  v41(); // _ZN7S7297C23v41Ev
  virtual void  v42(); // _ZN7S7297C23v42Ev
  virtual void  v43(); // _ZN7S7297C23v43Ev
  virtual void  v44(); // _ZN7S7297C23v44Ev
  virtual void  v45(); // _ZN7S7297C23v45Ev
  ~S7297C2(); // tgen
  S7297C2(); // tgen
};
//SIG(-1 S7297C2) C1{ VBC2{ BC3{ vd v7 v8} BC4{ VBC5{ v9 v10 v11 v12 v13 v14 v15 v16 v17} v18 v19 v20 Fp FD Fi} vd v21 v22 v23 v24 v25 v26 v27 Fp} VBC6{ VBC5 BC7{ BC8{ BC9{ v28} BC10{ BC5 BC11{ VBC5 v29 v30 v31 v32 FL} v33 v34} vd v35 v36} VBC12{ vd v37 v38 FL Fi} vd v39 v40 v41 v42 v43 Fi FC9} vd v44 v45 FC13{ m}} v1 v2 v3 v4 v5 v6 Fc}


void  S7297C2 ::v40(){vfunc_called(this, "_ZN7S7297C23v40Ev");}
void  S7297C2 ::v41(){vfunc_called(this, "_ZN7S7297C23v41Ev");}
void  S7297C2 ::v42(){vfunc_called(this, "_ZN7S7297C23v42Ev");}
void  S7297C2 ::v43(){vfunc_called(this, "_ZN7S7297C23v43Ev");}
void  S7297C2 ::v44(){vfunc_called(this, "_ZN7S7297C23v44Ev");}
void  S7297C2 ::v45(){vfunc_called(this, "_ZN7S7297C23v45Ev");}
S7297C2 ::~S7297C2(){ note_dtor("S7297C2", this);} // tgen
S7297C2 ::S7297C2(){ note_ctor("S7297C2", this);} // tgen

static void Test_S7297C2()
{
  extern Class_Descriptor cd_S7297C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,23)];
    init_test(&cd_S7297C2, buf);
    S7297C2 *dp, &lv = *(dp=new (buf) S7297C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,88), "sizeof(S7297C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7297C2)");
    check_base_class_offset(lv, (S7297C4_nt*)(S7297C3*), ABISELECT(16,8), "S7297C2");
    check_base_class_offset(lv, (S7297C6*)(S7297C5*)(S7297C3*), 0, "S7297C2");
    /*is_ambiguous_... S7297C7::S7297C6 */ AMB_check_base_class_offset(lv, (S7297C6*)(S7297C7*), 0, "S7297C2");
    check_base_class_offset(lv, (S7297C6*)(S7297C12*)(S7297C11*)(S7297C9*)(S7297C8*)(S7297C7*), 0, "S7297C2");
    check_base_class_offset(lv, (S7297C5*)(S7297C3*), ABISELECT(32,12), "S7297C2");
    check_base_class_offset(lv, (S7297C3*), ABISELECT(16,8), "S7297C2");
    check_base_class_offset(lv, (S7297C10*)(S7297C9*)(S7297C8*)(S7297C7*), ABISELECT(80,40), "S7297C2");
    /*is_ambiguous_... S7297C11::S7297C6 */ AMB_check_base_class_offset(lv, (S7297C6*)(S7297C11*)(S7297C9*)(S7297C8*)(S7297C7*), ABISELECT(88,44), "S7297C2");
    check_base_class_offset(lv, (S7297C12*)(S7297C11*)(S7297C9*)(S7297C8*)(S7297C7*), ABISELECT(96,48), "S7297C2");
    check_base_class_offset(lv, (S7297C11*)(S7297C9*)(S7297C8*)(S7297C7*), ABISELECT(88,44), "S7297C2");
    check_base_class_offset(lv, (S7297C9*)(S7297C8*)(S7297C7*), ABISELECT(80,40), "S7297C2");
    check_base_class_offset(lv, (S7297C13*)(S7297C8*)(S7297C7*), ABISELECT(136,72), "S7297C2");
    check_base_class_offset(lv, (S7297C8*)(S7297C7*), ABISELECT(80,40), "S7297C2");
    check_base_class_offset(lv, (S7297C7*), ABISELECT(80,40), "S7297C2");
    check_field_offset(lv, s7297c2f0, ABISELECT(8,4), "S7297C2.s7297c2f0");
    test_class_info(&lv, &cd_S7297C2);
    dp->~S7297C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7297C2(Test_S7297C2, "S7297C2", ABISELECT(160,88));

#else // __cplusplus

extern void _ZN7S7297C2C1Ev();
extern void _ZN7S7297C2D1Ev();
Name_Map name_map_S7297C2[] = {
  NSPAIR(_ZN7S7297C2C1Ev),
  NSPAIR(_ZN7S7297C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7297C4_nt;
extern VTBL_ENTRY _ZTI10S7297C4_nt[];
extern  VTBL_ENTRY _ZTV10S7297C4_nt[];
extern Class_Descriptor cd_S7297C6;
extern VTBL_ENTRY _ZTI7S7297C6[];
extern  VTBL_ENTRY _ZTV7S7297C6[];
extern Class_Descriptor cd_S7297C5;
extern VTBL_ENTRY _ZTI7S7297C5[];
extern  VTBL_ENTRY _ZTV7S7297C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7297C5[];
extern Class_Descriptor cd_S7297C3;
extern VTBL_ENTRY _ZTI7S7297C3[];
extern  VTBL_ENTRY _ZTV7S7297C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7297C3[];
extern Class_Descriptor cd_S7297C10;
extern VTBL_ENTRY _ZTI8S7297C10[];
extern  VTBL_ENTRY _ZTV8S7297C10[];
extern Class_Descriptor cd_S7297C6;
extern VTBL_ENTRY _ZTI7S7297C6[];
extern  VTBL_ENTRY _ZTV7S7297C6[];
extern Class_Descriptor cd_S7297C12;
extern VTBL_ENTRY _ZTI8S7297C12[];
extern  VTBL_ENTRY _ZTV8S7297C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7297C12[];
extern Class_Descriptor cd_S7297C11;
extern VTBL_ENTRY _ZTI8S7297C11[];
extern  VTBL_ENTRY _ZTV8S7297C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7297C11[];
extern Class_Descriptor cd_S7297C9;
extern VTBL_ENTRY _ZTI7S7297C9[];
extern  VTBL_ENTRY _ZTV7S7297C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7297C9[];
extern Class_Descriptor cd_S7297C13;
extern VTBL_ENTRY _ZTI8S7297C13[];
extern  VTBL_ENTRY _ZTV8S7297C13[];
extern Class_Descriptor cd_S7297C8;
extern VTBL_ENTRY _ZTI7S7297C8[];
extern  VTBL_ENTRY _ZTV7S7297C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7297C8[];
extern Class_Descriptor cd_S7297C7;
extern VTBL_ENTRY _ZTI7S7297C7[];
extern  VTBL_ENTRY _ZTV7S7297C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7297C7[];
static Base_Class bases_S7297C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7297C4_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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7297C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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
    2, //immediately_derived
  0, 1},
  {&cd_S7297C5,    ABISELECT(32,12), //bcp->offset
    59, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7297C3,    ABISELECT(16,8), //bcp->offset
    32, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7297C10,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_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_S7297C6,    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
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7297C12,    ABISELECT(96,48), //bcp->offset
    139, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7297C11,    ABISELECT(88,44), //bcp->offset
    125, //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
    9, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7297C9,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7297C13,    ABISELECT(136,72), //bcp->offset
    164, //bcp->virtual_function_table_offset
    5, //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_S7297C8,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7297C7,    ABISELECT(80,40), //bcp->offset
    83, //bcp->virtual_function_table_offset
    30, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7297C2[];
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN7S7297C23v40Ev();
extern void _ZN7S7297C23v41Ev();
extern void _ZN7S7297C23v42Ev();
extern void _ZN7S7297C23v43Ev();
extern void _ZN7S7297C23v44Ev();
extern void _ZN7S7297C23v45Ev();
extern void _ZN7S7297C2D1Ev();
extern void _ZN7S7297C2D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S7297C2D1Ev,_ZTv0_n16_N7S7297C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S7297C2D1Ev,_ZThn8_N7S7297C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7297C2D0Ev,_ZTv0_n16_N7S7297C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S7297C2D0Ev,_ZThn8_N7S7297C2D0Ev)() __attribute__((weak));
extern void _ZN10S7297C4_nt2v1Ev();
extern void _ZN10S7297C4_nt2v2Ev();
extern void _ZN7S7297C33v15Ev();
extern void _ZN7S7297C33v16Ev();
extern void _ZN7S7297C33v17Ev();
extern void _ZN7S7297C33v18Ev();
extern void _ZN7S7297C33v19Ev();
extern void _ZN7S7297C33v20Ev();
extern void _ZN7S7297C33v21Ev();
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN7S7297C53v12Ev();
extern void _ZN7S7297C53v13Ev();
extern void _ZN7S7297C53v14Ev();
extern void _ZN8S7297C103v22Ev();
extern void ABISELECT(_ZTv0_n48_N7S7297C2D1Ev,_ZTv0_n24_N7S7297C2D1Ev)();
extern void ABISELECT(_ZThn80_N7S7297C2D1Ev,_ZThn40_N7S7297C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7297C2D0Ev,_ZTv0_n24_N7S7297C2D0Ev)();
extern void ABISELECT(_ZThn80_N7S7297C2D0Ev,_ZThn40_N7S7297C2D0Ev)() __attribute__((weak));
extern void _ZN7S7297C93v29Ev();
extern void _ZN7S7297C93v30Ev();
extern void _ZN7S7297C83v33Ev();
extern void _ZN7S7297C83v34Ev();
extern void _ZN7S7297C83v35Ev();
extern void _ZN7S7297C83v36Ev();
extern void _ZN7S7297C83v37Ev();
extern void _ZN7S7297C73v38Ev();
extern void _ZN7S7297C73v39Ev();
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C113v27Ev();
extern void _ZN8S7297C113v28Ev();
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C123v23Ev();
extern void _ZN8S7297C123v24Ev();
extern void _ZN8S7297C123v25Ev();
extern void _ZN8S7297C123v26Ev();
extern void ABISELECT(_ZTv0_n24_N7S7297C2D1Ev,_ZTv0_n12_N7S7297C2D1Ev)();
extern void ABISELECT(_ZThn136_N7S7297C2D1Ev,_ZThn72_N7S7297C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7297C2D0Ev,_ZTv0_n12_N7S7297C2D0Ev)();
extern void ABISELECT(_ZThn136_N7S7297C2D0Ev,_ZThn72_N7S7297C2D0Ev)() __attribute__((weak));
extern void _ZN8S7297C133v31Ev();
extern void _ZN8S7297C133v32Ev();
static  VTBL_ENTRY vtc_S7297C2[] = {
  ABISELECT(136,72),
  ABISELECT(80,40),
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7297C2[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7297C23v40Ev,
  (VTBL_ENTRY)&_ZN7S7297C23v41Ev,
  (VTBL_ENTRY)&_ZN7S7297C23v42Ev,
  (VTBL_ENTRY)&_ZN7S7297C23v43Ev,
  (VTBL_ENTRY)&_ZN7S7297C23v44Ev,
  (VTBL_ENTRY)&_ZN7S7297C23v45Ev,
  (VTBL_ENTRY)&_ZN7S7297C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7297C2D0Ev,
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7297C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7297C2D1Ev,_ZTv0_n16_N7S7297C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7297C2D0Ev,_ZTv0_n16_N7S7297C2D0Ev),
  (VTBL_ENTRY)&_ZN10S7297C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7297C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v21Ev,
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S7297C2[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v14Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  ABISELECT(-80,-40),
  0,
  ABISELECT(56,32),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI7S7297C2[0]),
  (VTBL_ENTRY)&_ZN8S7297C103v22Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7297C2D1Ev,_ZTv0_n24_N7S7297C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7297C2D0Ev,_ZTv0_n24_N7S7297C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7297C93v29Ev,
  (VTBL_ENTRY)&_ZN7S7297C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v33Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v34Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v35Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v36Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v37Ev,
  (VTBL_ENTRY)&_ZN7S7297C73v38Ev,
  (VTBL_ENTRY)&_ZN7S7297C73v39Ev,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI7S7297C2[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v27Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v28Ev,
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S7297C2[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v23Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v24Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v25Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v26Ev,
  0,
  0,
  ABISELECT(-136,-72),
  ABISELECT(-136,-72),
  (VTBL_ENTRY)&(_ZTI7S7297C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7297C2D1Ev,_ZTv0_n12_N7S7297C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7297C2D0Ev,_ZTv0_n12_N7S7297C2D0Ev),
  (VTBL_ENTRY)&_ZN8S7297C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7297C133v32Ev,
};
extern VTBL_ENTRY _ZTV7S7297C2[];
extern void _ZN7S7297C3D1Ev();
extern void _ZN7S7297C3D0Ev();
extern void _ZN10S7297C4_nt2v1Ev();
extern void _ZN10S7297C4_nt2v2Ev();
extern void _ZN7S7297C33v15Ev();
extern void _ZN7S7297C33v16Ev();
extern void _ZN7S7297C33v17Ev();
extern void _ZN7S7297C33v18Ev();
extern void _ZN7S7297C33v19Ev();
extern void _ZN7S7297C33v20Ev();
extern void _ZN7S7297C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C3__7S7297C2[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7297C3[0]),
  (VTBL_ENTRY)&_ZN7S7297C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7297C3D0Ev,
  (VTBL_ENTRY)&_ZN10S7297C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7297C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v21Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN7S7297C53v12Ev();
extern void _ZN7S7297C53v13Ev();
extern void _ZN7S7297C53v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C57S7297C3__7S7297C2[] = {
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7297C5[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v14Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C6__7S7297C57S7297C3__7S7297C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  (VTBL_ENTRY)&(_ZTI7S7297C5[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN7S7297C53v12Ev();
extern void _ZN7S7297C53v13Ev();
extern void _ZN7S7297C53v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C5__7S7297C3__7S7297C2[] = {
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S7297C3[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v14Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C6__7S7297C3__7S7297C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7297C3[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
};
extern void _ZN8S7297C103v22Ev();
extern void _ZN7S7297C7D1Ev();
extern void _ZN7S7297C7D0Ev();
extern void _ZN7S7297C93v29Ev();
extern void _ZN7S7297C93v30Ev();
extern void _ZN7S7297C83v33Ev();
extern void _ZN7S7297C83v34Ev();
extern void _ZN7S7297C83v35Ev();
extern void _ZN7S7297C83v36Ev();
extern void _ZN7S7297C83v37Ev();
extern void _ZN7S7297C73v38Ev();
extern void _ZN7S7297C73v39Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C7__7S7297C2[] = {
  ABISELECT(56,32),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7297C7[0]),
  (VTBL_ENTRY)&_ZN8S7297C103v22Ev,
  (VTBL_ENTRY)&_ZN7S7297C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7297C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7297C93v29Ev,
  (VTBL_ENTRY)&_ZN7S7297C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v33Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v34Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v35Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v36Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v37Ev,
  (VTBL_ENTRY)&_ZN7S7297C73v38Ev,
  (VTBL_ENTRY)&_ZN7S7297C73v39Ev,
};
extern void _ZN8S7297C103v22Ev();
extern void _ZN7S7297C8D1Ev();
extern void _ZN7S7297C8D0Ev();
extern void _ZN7S7297C93v29Ev();
extern void _ZN7S7297C93v30Ev();
extern void _ZN7S7297C83v33Ev();
extern void _ZN7S7297C83v34Ev();
extern void _ZN7S7297C83v35Ev();
extern void _ZN7S7297C83v36Ev();
extern void _ZN7S7297C83v37Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C87S7297C7__7S7297C2[] = {
  ABISELECT(56,32),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7297C8[0]),
  (VTBL_ENTRY)&_ZN8S7297C103v22Ev,
  (VTBL_ENTRY)&_ZN7S7297C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7297C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7297C93v29Ev,
  (VTBL_ENTRY)&_ZN7S7297C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v33Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v34Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v35Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v36Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v37Ev,
};
extern void _ZN8S7297C103v22Ev();
extern void _ZN7S7297C9D1Ev();
extern void _ZN7S7297C9D0Ev();
extern void _ZN7S7297C93v29Ev();
extern void _ZN7S7297C93v30Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C97S7297C87S7297C7__7S7297C2[] = {
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7297C9[0]),
  (VTBL_ENTRY)&_ZN8S7297C103v22Ev,
  (VTBL_ENTRY)&_ZN7S7297C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7297C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7297C93v29Ev,
  (VTBL_ENTRY)&_ZN7S7297C93v30Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C113v27Ev();
extern void _ZN8S7297C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C117S7297C97S7297C87S7297C7__7S7297C2[] = {
  ABISELECT(-88,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S7297C11[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v27Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v28Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C123v23Ev();
extern void _ZN8S7297C123v24Ev();
extern void _ZN8S7297C123v25Ev();
extern void _ZN8S7297C123v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C128S7297C117S7297C97S7297C87S7297C7__7S7297C2[] = {
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S7297C12[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v23Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v24Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v25Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v26Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C6__8S7297C128S7297C117S7297C97S7297C87S7297C7__7S7297C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,48),
  (VTBL_ENTRY)&(_ZTI8S7297C12[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C123v23Ev();
extern void _ZN8S7297C123v24Ev();
extern void _ZN8S7297C123v25Ev();
extern void _ZN8S7297C123v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C12__8S7297C117S7297C97S7297C87S7297C7__7S7297C2[] = {
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7297C11[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v23Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v24Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v25Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v26Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C6__A1__8S7297C117S7297C97S7297C87S7297C7__7S7297C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,44),
  (VTBL_ENTRY)&(_ZTI8S7297C11[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C113v27Ev();
extern void _ZN8S7297C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C11__7S7297C97S7297C87S7297C7__7S7297C2[] = {
  ABISELECT(-88,-44),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7297C9[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v27Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v28Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C123v23Ev();
extern void _ZN8S7297C123v24Ev();
extern void _ZN8S7297C123v25Ev();
extern void _ZN8S7297C123v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C128S7297C11__7S7297C97S7297C87S7297C7__7S7297C2[] = {
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7297C9[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v23Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v24Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v25Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v26Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C6__A1__7S7297C97S7297C87S7297C7__7S7297C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI7S7297C9[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C113v27Ev();
extern void _ZN8S7297C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C117S7297C9__7S7297C87S7297C7__7S7297C2[] = {
  ABISELECT(-88,-44),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7297C8[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v27Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v28Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C123v23Ev();
extern void _ZN8S7297C123v24Ev();
extern void _ZN8S7297C123v25Ev();
extern void _ZN8S7297C123v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C128S7297C117S7297C9__7S7297C87S7297C7__7S7297C2[] = {
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7297C8[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v23Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v24Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v25Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v26Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C6__A1__7S7297C87S7297C7__7S7297C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI7S7297C8[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7297C8D1Ev,_ZTv0_n12_N7S7297C8D1Ev)();
extern void ABISELECT(_ZThn56_N7S7297C8D1Ev,_ZThn32_N7S7297C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7297C8D0Ev,_ZTv0_n12_N7S7297C8D0Ev)();
extern void ABISELECT(_ZThn56_N7S7297C8D0Ev,_ZThn32_N7S7297C8D0Ev)() __attribute__((weak));
extern void _ZN8S7297C133v31Ev();
extern void _ZN8S7297C133v32Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C13__7S7297C87S7297C7__7S7297C2[] = {
  0,
  0,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7297C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7297C8D1Ev,_ZTv0_n12_N7S7297C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7297C8D0Ev,_ZTv0_n12_N7S7297C8D0Ev),
  (VTBL_ENTRY)&_ZN8S7297C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7297C133v32Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C6__7S7297C7__7S7297C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI7S7297C7[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C113v27Ev();
extern void _ZN8S7297C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C117S7297C97S7297C8__7S7297C7__7S7297C2[] = {
  ABISELECT(-88,-44),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7297C7[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v27Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v28Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C123v23Ev();
extern void _ZN8S7297C123v24Ev();
extern void _ZN8S7297C123v25Ev();
extern void _ZN8S7297C123v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C128S7297C117S7297C97S7297C8__7S7297C7__7S7297C2[] = {
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7297C7[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v23Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v24Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v25Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v26Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7297C7D1Ev,_ZTv0_n12_N7S7297C7D1Ev)();
extern void ABISELECT(_ZThn56_N7S7297C7D1Ev,_ZThn32_N7S7297C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7297C7D0Ev,_ZTv0_n12_N7S7297C7D0Ev)();
extern void ABISELECT(_ZThn56_N7S7297C7D0Ev,_ZThn32_N7S7297C7D0Ev)() __attribute__((weak));
extern void _ZN8S7297C133v31Ev();
extern void _ZN8S7297C133v32Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C13__7S7297C7__7S7297C2[] = {
  0,
  0,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7297C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7297C7D1Ev,_ZTv0_n12_N7S7297C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7297C7D0Ev,_ZTv0_n12_N7S7297C7D0Ev),
  (VTBL_ENTRY)&_ZN8S7297C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7297C133v32Ev,
};
static  VTT_ENTRY vtt_S7297C2[] = {
  {&(_ZTV7S7297C2[15]),  15,173},
  {&(_ZTV7S7297C2[48]),  48,173},
  {&(_ZTV7S7297C2[71]),  71,173},
  {&(_ZTV7S7297C2[15]),  15,173},
  {&(_ZTV7S7297C2[113]),  113,173},
  {&(_ZTV7S7297C2[128]),  128,173},
  {&(_ZTV7S7297C2[151]),  151,173},
  {&(_ZTV7S7297C2[169]),  169,173},
  {&(_tg__ZTV7S7297C3__7S7297C2[3]),  3,14},
  {&(_tg__ZTV7S7297C57S7297C3__7S7297C2[12]),  12,24},
  {&(_tg__ZTV7S7297C6__7S7297C57S7297C3__7S7297C2[11]),  11,20},
  {&(_tg__ZTV7S7297C5__7S7297C3__7S7297C2[12]),  12,24},
  {&(_tg__ZTV7S7297C6__7S7297C3__7S7297C2[11]),  11,20},
  {&(_tg__ZTV7S7297C7__7S7297C2[4]),  4,16},
  {&(_tg__ZTV7S7297C87S7297C7__7S7297C2[4]),  4,14},
  {&(_tg__ZTV7S7297C97S7297C87S7297C7__7S7297C2[3]),  3,8},
  {&(_tg__ZTV8S7297C117S7297C97S7297C87S7297C7__7S7297C2[3]),  3,14},
  {&(_tg__ZTV8S7297C128S7297C117S7297C97S7297C87S7297C7__7S7297C2[12]),  12,25},
  {&(_tg__ZTV7S7297C6__8S7297C128S7297C117S7297C97S7297C87S7297C7__7S7297C2[11]),  11,20},
  {&(_tg__ZTV8S7297C12__8S7297C117S7297C97S7297C87S7297C7__7S7297C2[12]),  12,25},
  {&(_tg__ZTV7S7297C6__A1__8S7297C117S7297C97S7297C87S7297C7__7S7297C2[11]),  11,20},
  {&(_tg__ZTV8S7297C11__7S7297C97S7297C87S7297C7__7S7297C2[3]),  3,14},
  {&(_tg__ZTV8S7297C128S7297C11__7S7297C97S7297C87S7297C7__7S7297C2[12]),  12,25},
  {&(_tg__ZTV7S7297C6__A1__7S7297C97S7297C87S7297C7__7S7297C2[11]),  11,20},
  {&(_tg__ZTV8S7297C117S7297C9__7S7297C87S7297C7__7S7297C2[3]),  3,14},
  {&(_tg__ZTV8S7297C128S7297C117S7297C9__7S7297C87S7297C7__7S7297C2[12]),  12,25},
  {&(_tg__ZTV7S7297C6__A1__7S7297C87S7297C7__7S7297C2[11]),  11,20},
  {&(_tg__ZTV8S7297C13__7S7297C87S7297C7__7S7297C2[5]),  5,9},
  {&(_tg__ZTV7S7297C6__7S7297C7__7S7297C2[11]),  11,20},
  {&(_tg__ZTV8S7297C117S7297C97S7297C8__7S7297C7__7S7297C2[3]),  3,14},
  {&(_tg__ZTV8S7297C128S7297C117S7297C97S7297C8__7S7297C7__7S7297C2[12]),  12,25},
  {&(_tg__ZTV8S7297C13__7S7297C7__7S7297C2[5]),  5,9},
};
extern VTBL_ENTRY _ZTI7S7297C2[];
extern  VTBL_ENTRY _ZTV7S7297C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7297C2[];
static VTBL_ENTRY alt_thunk_names36[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7297C7D0Ev,_ZTv0_n12_N7S7297C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7297C7D0Ev,_ZThn32_N7S7297C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7297C7D1Ev,_ZTv0_n12_N7S7297C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7297C7D1Ev,_ZThn32_N7S7297C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7297C8D0Ev,_ZTv0_n12_N7S7297C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7297C8D0Ev,_ZThn32_N7S7297C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7297C8D1Ev,_ZTv0_n12_N7S7297C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7297C8D1Ev,_ZThn32_N7S7297C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7297C2D0Ev,_ZTv0_n12_N7S7297C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S7297C2D0Ev,_ZThn72_N7S7297C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7297C2D1Ev,_ZTv0_n12_N7S7297C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S7297C2D1Ev,_ZThn72_N7S7297C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7297C2D0Ev,_ZTv0_n24_N7S7297C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7297C2D0Ev,_ZThn40_N7S7297C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7297C2D1Ev,_ZTv0_n24_N7S7297C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7297C2D1Ev,_ZThn40_N7S7297C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7297C2D0Ev,_ZTv0_n16_N7S7297C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7297C2D0Ev,_ZThn8_N7S7297C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7297C2D1Ev,_ZTv0_n16_N7S7297C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7297C2D1Ev,_ZThn8_N7S7297C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7297C2 = {  "S7297C2", // class name
  bases_S7297C2, 12,
  &(vtc_S7297C2[0]), // expected_vtbl_contents
  &(vtt_S7297C2[0]), // expected_vtt_contents
  ABISELECT(160,88), // object size
  NSPAIRA(_ZTI7S7297C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7297C2),173, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7297C2),32, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names36,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7297C16  {
  char s7297c16f0[7];
  int s7297c16f1[2];
  virtual void  v47(); // _ZN8S7297C163v47Ev
  virtual void  v48(); // _ZN8S7297C163v48Ev
  ~S7297C16(); // tgen
  S7297C16(); // tgen
};
//SIG(-1 S7297C16) C1{ v1 v2 Fc[7] Fi[2]}


void  S7297C16 ::v47(){vfunc_called(this, "_ZN8S7297C163v47Ev");}
void  S7297C16 ::v48(){vfunc_called(this, "_ZN8S7297C163v48Ev");}
S7297C16 ::~S7297C16(){ note_dtor("S7297C16", this);} // tgen
S7297C16 ::S7297C16(){ note_ctor("S7297C16", this);} // tgen

static void Test_S7297C16()
{
  extern Class_Descriptor cd_S7297C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S7297C16, buf);
    S7297C16 *dp, &lv = *(dp=new (buf) S7297C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S7297C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7297C16)");
    check_field_offset(lv, s7297c16f0, ABISELECT(8,4), "S7297C16.s7297c16f0");
    check_field_offset(lv, s7297c16f1, ABISELECT(16,12), "S7297C16.s7297c16f1");
    test_class_info(&lv, &cd_S7297C16);
    dp->~S7297C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7297C16(Test_S7297C16, "S7297C16", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN8S7297C16C1Ev();
extern void _ZN8S7297C16D1Ev();
Name_Map name_map_S7297C16[] = {
  NSPAIR(_ZN8S7297C16C1Ev),
  NSPAIR(_ZN8S7297C16D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7297C16[];
extern void _ZN8S7297C163v47Ev();
extern void _ZN8S7297C163v48Ev();
static  VTBL_ENTRY vtc_S7297C16[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7297C16[0]),
  (VTBL_ENTRY)&_ZN8S7297C163v47Ev,
  (VTBL_ENTRY)&_ZN8S7297C163v48Ev,
};
extern VTBL_ENTRY _ZTI8S7297C16[];
extern  VTBL_ENTRY _ZTV8S7297C16[];
Class_Descriptor cd_S7297C16 = {  "S7297C16", // class name
  0,0,//no base classes
  &(vtc_S7297C16[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI8S7297C16),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7297C16),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  S7297C15  : S7297C16 {
  virtual void  v46(); // _ZN8S7297C153v46Ev
  ~S7297C15(); // tgen
  S7297C15(); // tgen
};
//SIG(-1 S7297C15) C1{ BC2{ v2 v3 Fc[7] Fi[2]} v1}


void  S7297C15 ::v46(){vfunc_called(this, "_ZN8S7297C153v46Ev");}
S7297C15 ::~S7297C15(){ note_dtor("S7297C15", this);} // tgen
S7297C15 ::S7297C15(){ note_ctor("S7297C15", this);} // tgen

static void Test_S7297C15()
{
  extern Class_Descriptor cd_S7297C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S7297C15, buf);
    S7297C15 *dp, &lv = *(dp=new (buf) S7297C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S7297C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7297C15)");
    check_base_class_offset(lv, (S7297C16*), 0, "S7297C15");
    test_class_info(&lv, &cd_S7297C15);
    dp->~S7297C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7297C15(Test_S7297C15, "S7297C15", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN8S7297C15C1Ev();
extern void _ZN8S7297C15D1Ev();
Name_Map name_map_S7297C15[] = {
  NSPAIR(_ZN8S7297C15C1Ev),
  NSPAIR(_ZN8S7297C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7297C16;
extern VTBL_ENTRY _ZTI8S7297C16[];
extern  VTBL_ENTRY _ZTV8S7297C16[];
static Base_Class bases_S7297C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7297C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S7297C15[];
extern void _ZN8S7297C163v47Ev();
extern void _ZN8S7297C163v48Ev();
extern void _ZN8S7297C153v46Ev();
static  VTBL_ENTRY vtc_S7297C15[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7297C15[0]),
  (VTBL_ENTRY)&_ZN8S7297C163v47Ev,
  (VTBL_ENTRY)&_ZN8S7297C163v48Ev,
  (VTBL_ENTRY)&_ZN8S7297C153v46Ev,
};
extern VTBL_ENTRY _ZTI8S7297C15[];
extern  VTBL_ENTRY _ZTV8S7297C15[];
Class_Descriptor cd_S7297C15 = {  "S7297C15", // class name
  bases_S7297C15, 1,
  &(vtc_S7297C15[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI8S7297C15),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7297C15),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  S7297C1  : S7297C2 {
  ::S7297C15 s7297c1f0;
  virtual  ~S7297C1(); // _ZN7S7297C1D2Ev
  S7297C1(); // tgen
};
//SIG(1 S7297C1) C1{ BC2{ VBC3{ BC4{ vd v1 v2} BC5{ VBC6{ v3 v4 v5 v6 v7 v8 v9 v10 v11} v12 v13 v14 Fp FD Fi} vd v15 v16 v17 v18 v19 v20 v21 Fp} VBC7{ VBC6 BC8{ BC9{ BC10{ v22} BC11{ BC6 BC12{ VBC6 v23 v24 v25 v26 FL} v27 v28} vd v29 v30} VBC13{ vd v31 v32 FL Fi} vd v33 v34 v35 v36 v37 Fi FC10} vd v38 v39 FC14{ m}} v40 v41 v42 v43 v44 v45 Fc} vd FC15{ BC16{ v47 v48 Fc[7] Fi[2]} v46}}


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

static void Test_S7297C1()
{
  extern Class_Descriptor cd_S7297C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,28)];
    init_test(&cd_S7297C1, buf);
    S7297C1 *dp, &lv = *(dp=new (buf) S7297C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,108), "sizeof(S7297C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7297C1)");
    check_base_class_offset(lv, (S7297C4_nt*)(S7297C3*), ABISELECT(48,28), "S7297C1");
    check_base_class_offset(lv, (S7297C6*)(S7297C5*)(S7297C3*), 0, "S7297C1");
    /*is_ambiguous_... S7297C7::S7297C6 */ AMB_check_base_class_offset(lv, (S7297C6*)(S7297C7*), 0, "S7297C1");
    check_base_class_offset(lv, (S7297C6*)(S7297C12*)(S7297C11*)(S7297C9*)(S7297C8*)(S7297C7*), 0, "S7297C1");
    check_base_class_offset(lv, (S7297C5*)(S7297C3*), ABISELECT(64,32), "S7297C1");
    check_base_class_offset(lv, (S7297C3*)(S7297C2*), ABISELECT(48,28), "S7297C1");
    check_base_class_offset(lv, (S7297C10*)(S7297C9*)(S7297C8*)(S7297C7*), ABISELECT(112,60), "S7297C1");
    /*is_ambiguous_... S7297C11::S7297C6 */ AMB_check_base_class_offset(lv, (S7297C6*)(S7297C11*)(S7297C9*)(S7297C8*)(S7297C7*), ABISELECT(120,64), "S7297C1");
    check_base_class_offset(lv, (S7297C12*)(S7297C11*)(S7297C9*)(S7297C8*)(S7297C7*), ABISELECT(128,68), "S7297C1");
    check_base_class_offset(lv, (S7297C11*)(S7297C9*)(S7297C8*)(S7297C7*), ABISELECT(120,64), "S7297C1");
    check_base_class_offset(lv, (S7297C9*)(S7297C8*)(S7297C7*), ABISELECT(112,60), "S7297C1");
    check_base_class_offset(lv, (S7297C13*)(S7297C8*)(S7297C7*), ABISELECT(168,92), "S7297C1");
    check_base_class_offset(lv, (S7297C8*)(S7297C7*), ABISELECT(112,60), "S7297C1");
    check_base_class_offset(lv, (S7297C7*)(S7297C2*), ABISELECT(112,60), "S7297C1");
    check_base_class_offset(lv, (S7297C2*), 0, "S7297C1");
    check_field_offset(lv, s7297c1f0, ABISELECT(16,8), "S7297C1.s7297c1f0");
    test_class_info(&lv, &cd_S7297C1);
    dp->~S7297C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7297C1(Test_S7297C1, "S7297C1", ABISELECT(192,108));

#else // __cplusplus

extern void _ZN7S7297C1C1Ev();
extern void _ZN7S7297C1D2Ev();
Name_Map name_map_S7297C1[] = {
  NSPAIR(_ZN7S7297C1C1Ev),
  NSPAIR(_ZN7S7297C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7297C4_nt;
extern VTBL_ENTRY _ZTI10S7297C4_nt[];
extern  VTBL_ENTRY _ZTV10S7297C4_nt[];
extern Class_Descriptor cd_S7297C6;
extern VTBL_ENTRY _ZTI7S7297C6[];
extern  VTBL_ENTRY _ZTV7S7297C6[];
extern Class_Descriptor cd_S7297C5;
extern VTBL_ENTRY _ZTI7S7297C5[];
extern  VTBL_ENTRY _ZTV7S7297C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7297C5[];
extern Class_Descriptor cd_S7297C3;
extern VTBL_ENTRY _ZTI7S7297C3[];
extern  VTBL_ENTRY _ZTV7S7297C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7297C3[];
extern Class_Descriptor cd_S7297C10;
extern VTBL_ENTRY _ZTI8S7297C10[];
extern  VTBL_ENTRY _ZTV8S7297C10[];
extern Class_Descriptor cd_S7297C6;
extern VTBL_ENTRY _ZTI7S7297C6[];
extern  VTBL_ENTRY _ZTV7S7297C6[];
extern Class_Descriptor cd_S7297C12;
extern VTBL_ENTRY _ZTI8S7297C12[];
extern  VTBL_ENTRY _ZTV8S7297C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7297C12[];
extern Class_Descriptor cd_S7297C11;
extern VTBL_ENTRY _ZTI8S7297C11[];
extern  VTBL_ENTRY _ZTV8S7297C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7297C11[];
extern Class_Descriptor cd_S7297C9;
extern VTBL_ENTRY _ZTI7S7297C9[];
extern  VTBL_ENTRY _ZTV7S7297C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7297C9[];
extern Class_Descriptor cd_S7297C13;
extern VTBL_ENTRY _ZTI8S7297C13[];
extern  VTBL_ENTRY _ZTV8S7297C13[];
extern Class_Descriptor cd_S7297C8;
extern VTBL_ENTRY _ZTI7S7297C8[];
extern  VTBL_ENTRY _ZTV7S7297C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7297C8[];
extern Class_Descriptor cd_S7297C7;
extern VTBL_ENTRY _ZTI7S7297C7[];
extern  VTBL_ENTRY _ZTV7S7297C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7297C7[];
extern Class_Descriptor cd_S7297C2;
extern VTBL_ENTRY _ZTI7S7297C2[];
extern  VTBL_ENTRY _ZTV7S7297C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7297C2[];
static Base_Class bases_S7297C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7297C4_nt,    ABISELECT(48,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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7297C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7297C5,    ABISELECT(64,32), //bcp->offset
    59, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7297C3,    ABISELECT(48,28), //bcp->offset
    32, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7297C10,    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
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7297C6,    ABISELECT(120,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
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7297C12,    ABISELECT(128,68), //bcp->offset
    139, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7297C11,    ABISELECT(120,64), //bcp->offset
    125, //bcp->virtual_function_table_offset
    3, //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
    8, //immediately_derived
  0, 0},
  {&cd_S7297C9,    ABISELECT(112,60), //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
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7297C13,    ABISELECT(168,92), //bcp->offset
    164, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7297C8,    ABISELECT(112,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7297C7,    ABISELECT(112,60), //bcp->offset
    83, //bcp->virtual_function_table_offset
    30, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7297C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //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},
  {0}};
extern VTBL_ENTRY _ZTI7S7297C1[];
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN7S7297C23v40Ev();
extern void _ZN7S7297C23v41Ev();
extern void _ZN7S7297C23v42Ev();
extern void _ZN7S7297C23v43Ev();
extern void _ZN7S7297C23v44Ev();
extern void _ZN7S7297C23v45Ev();
extern void _ZN7S7297C1D1Ev();
extern void _ZN7S7297C1D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S7297C1D1Ev,_ZTv0_n16_N7S7297C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S7297C1D1Ev,_ZThn28_N7S7297C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7297C1D0Ev,_ZTv0_n16_N7S7297C1D0Ev)();
extern void ABISELECT(_ZThn48_N7S7297C1D0Ev,_ZThn28_N7S7297C1D0Ev)() __attribute__((weak));
extern void _ZN10S7297C4_nt2v1Ev();
extern void _ZN10S7297C4_nt2v2Ev();
extern void _ZN7S7297C33v15Ev();
extern void _ZN7S7297C33v16Ev();
extern void _ZN7S7297C33v17Ev();
extern void _ZN7S7297C33v18Ev();
extern void _ZN7S7297C33v19Ev();
extern void _ZN7S7297C33v20Ev();
extern void _ZN7S7297C33v21Ev();
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN7S7297C53v12Ev();
extern void _ZN7S7297C53v13Ev();
extern void _ZN7S7297C53v14Ev();
extern void _ZN8S7297C103v22Ev();
extern void ABISELECT(_ZTv0_n48_N7S7297C1D1Ev,_ZTv0_n24_N7S7297C1D1Ev)();
extern void ABISELECT(_ZThn112_N7S7297C1D1Ev,_ZThn60_N7S7297C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7297C1D0Ev,_ZTv0_n24_N7S7297C1D0Ev)();
extern void ABISELECT(_ZThn112_N7S7297C1D0Ev,_ZThn60_N7S7297C1D0Ev)() __attribute__((weak));
extern void _ZN7S7297C93v29Ev();
extern void _ZN7S7297C93v30Ev();
extern void _ZN7S7297C83v33Ev();
extern void _ZN7S7297C83v34Ev();
extern void _ZN7S7297C83v35Ev();
extern void _ZN7S7297C83v36Ev();
extern void _ZN7S7297C83v37Ev();
extern void _ZN7S7297C73v38Ev();
extern void _ZN7S7297C73v39Ev();
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C113v27Ev();
extern void _ZN8S7297C113v28Ev();
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C123v23Ev();
extern void _ZN8S7297C123v24Ev();
extern void _ZN8S7297C123v25Ev();
extern void _ZN8S7297C123v26Ev();
extern void ABISELECT(_ZTv0_n24_N7S7297C1D1Ev,_ZTv0_n12_N7S7297C1D1Ev)();
extern void ABISELECT(_ZThn168_N7S7297C1D1Ev,_ZThn92_N7S7297C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7297C1D0Ev,_ZTv0_n12_N7S7297C1D0Ev)();
extern void ABISELECT(_ZThn168_N7S7297C1D0Ev,_ZThn92_N7S7297C1D0Ev)() __attribute__((weak));
extern void _ZN8S7297C133v31Ev();
extern void _ZN8S7297C133v32Ev();
static  VTBL_ENTRY vtc_S7297C1[] = {
  ABISELECT(168,92),
  ABISELECT(112,60),
  0,
  ABISELECT(48,28),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7297C1[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7297C23v40Ev,
  (VTBL_ENTRY)&_ZN7S7297C23v41Ev,
  (VTBL_ENTRY)&_ZN7S7297C23v42Ev,
  (VTBL_ENTRY)&_ZN7S7297C23v43Ev,
  (VTBL_ENTRY)&_ZN7S7297C23v44Ev,
  (VTBL_ENTRY)&_ZN7S7297C23v45Ev,
  (VTBL_ENTRY)&_ZN7S7297C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7297C1D0Ev,
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7297C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7297C1D1Ev,_ZTv0_n16_N7S7297C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7297C1D0Ev,_ZTv0_n16_N7S7297C1D0Ev),
  (VTBL_ENTRY)&_ZN10S7297C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7297C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v21Ev,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7297C1[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v14Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  ABISELECT(-112,-60),
  0,
  ABISELECT(56,32),
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S7297C1[0]),
  (VTBL_ENTRY)&_ZN8S7297C103v22Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7297C1D1Ev,_ZTv0_n24_N7S7297C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7297C1D0Ev,_ZTv0_n24_N7S7297C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7297C93v29Ev,
  (VTBL_ENTRY)&_ZN7S7297C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v33Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v34Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v35Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v36Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v37Ev,
  (VTBL_ENTRY)&_ZN7S7297C73v38Ev,
  (VTBL_ENTRY)&_ZN7S7297C73v39Ev,
  ABISELECT(-120,-64),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI7S7297C1[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v27Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v28Ev,
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI7S7297C1[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v23Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v24Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v25Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v26Ev,
  0,
  0,
  ABISELECT(-168,-92),
  ABISELECT(-168,-92),
  (VTBL_ENTRY)&(_ZTI7S7297C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7297C1D1Ev,_ZTv0_n12_N7S7297C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7297C1D0Ev,_ZTv0_n12_N7S7297C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7297C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7297C133v32Ev,
};
extern VTBL_ENTRY _ZTV7S7297C1[];
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN7S7297C23v40Ev();
extern void _ZN7S7297C23v41Ev();
extern void _ZN7S7297C23v42Ev();
extern void _ZN7S7297C23v43Ev();
extern void _ZN7S7297C23v44Ev();
extern void _ZN7S7297C23v45Ev();
extern void _ZN7S7297C2D1Ev();
extern void _ZN7S7297C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C2__7S7297C1[] = {
  ABISELECT(168,92),
  ABISELECT(112,60),
  0,
  ABISELECT(48,28),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7297C2[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7297C23v40Ev,
  (VTBL_ENTRY)&_ZN7S7297C23v41Ev,
  (VTBL_ENTRY)&_ZN7S7297C23v42Ev,
  (VTBL_ENTRY)&_ZN7S7297C23v43Ev,
  (VTBL_ENTRY)&_ZN7S7297C23v44Ev,
  (VTBL_ENTRY)&_ZN7S7297C23v45Ev,
  (VTBL_ENTRY)&_ZN7S7297C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7297C2D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7297C2D1Ev,_ZTv0_n16_N7S7297C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S7297C2D1Ev,_ZThn28_N7S7297C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7297C2D0Ev,_ZTv0_n16_N7S7297C2D0Ev)();
extern void ABISELECT(_ZThn48_N7S7297C2D0Ev,_ZThn28_N7S7297C2D0Ev)() __attribute__((weak));
extern void _ZN10S7297C4_nt2v1Ev();
extern void _ZN10S7297C4_nt2v2Ev();
extern void _ZN7S7297C33v15Ev();
extern void _ZN7S7297C33v16Ev();
extern void _ZN7S7297C33v17Ev();
extern void _ZN7S7297C33v18Ev();
extern void _ZN7S7297C33v19Ev();
extern void _ZN7S7297C33v20Ev();
extern void _ZN7S7297C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C3__7S7297C2__7S7297C1[] = {
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7297C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7297C2D1Ev,_ZTv0_n16_N7S7297C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7297C2D0Ev,_ZTv0_n16_N7S7297C2D0Ev),
  (VTBL_ENTRY)&_ZN10S7297C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7297C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v21Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN7S7297C53v12Ev();
extern void _ZN7S7297C53v13Ev();
extern void _ZN7S7297C53v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C57S7297C3__7S7297C2__7S7297C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7297C2[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v14Ev,
};
extern void _ZN8S7297C103v22Ev();
extern void ABISELECT(_ZTv0_n48_N7S7297C2D1Ev,_ZTv0_n24_N7S7297C2D1Ev)();
extern void ABISELECT(_ZThn112_N7S7297C2D1Ev,_ZThn60_N7S7297C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7297C2D0Ev,_ZTv0_n24_N7S7297C2D0Ev)();
extern void ABISELECT(_ZThn112_N7S7297C2D0Ev,_ZThn60_N7S7297C2D0Ev)() __attribute__((weak));
extern void _ZN7S7297C93v29Ev();
extern void _ZN7S7297C93v30Ev();
extern void _ZN7S7297C83v33Ev();
extern void _ZN7S7297C83v34Ev();
extern void _ZN7S7297C83v35Ev();
extern void _ZN7S7297C83v36Ev();
extern void _ZN7S7297C83v37Ev();
extern void _ZN7S7297C73v38Ev();
extern void _ZN7S7297C73v39Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C7__7S7297C2__7S7297C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  ABISELECT(-112,-60),
  0,
  ABISELECT(56,32),
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S7297C2[0]),
  (VTBL_ENTRY)&_ZN8S7297C103v22Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7297C2D1Ev,_ZTv0_n24_N7S7297C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7297C2D0Ev,_ZTv0_n24_N7S7297C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7297C93v29Ev,
  (VTBL_ENTRY)&_ZN7S7297C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v33Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v34Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v35Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v36Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v37Ev,
  (VTBL_ENTRY)&_ZN7S7297C73v38Ev,
  (VTBL_ENTRY)&_ZN7S7297C73v39Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C113v27Ev();
extern void _ZN8S7297C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C117S7297C97S7297C87S7297C7__7S7297C2__7S7297C1[] = {
  ABISELECT(-120,-64),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI7S7297C2[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v27Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v28Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C123v23Ev();
extern void _ZN8S7297C123v24Ev();
extern void _ZN8S7297C123v25Ev();
extern void _ZN8S7297C123v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C128S7297C117S7297C97S7297C87S7297C7__7S7297C2__7S7297C1[] = {
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI7S7297C2[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v23Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v24Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v25Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v26Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7297C2D1Ev,_ZTv0_n12_N7S7297C2D1Ev)();
extern void ABISELECT(_ZThn168_N7S7297C2D1Ev,_ZThn92_N7S7297C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7297C2D0Ev,_ZTv0_n12_N7S7297C2D0Ev)();
extern void ABISELECT(_ZThn168_N7S7297C2D0Ev,_ZThn92_N7S7297C2D0Ev)() __attribute__((weak));
extern void _ZN8S7297C133v31Ev();
extern void _ZN8S7297C133v32Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C13__7S7297C2__7S7297C1[] = {
  0,
  0,
  ABISELECT(-168,-92),
  ABISELECT(-168,-92),
  (VTBL_ENTRY)&(_ZTI7S7297C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7297C2D1Ev,_ZTv0_n12_N7S7297C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7297C2D0Ev,_ZTv0_n12_N7S7297C2D0Ev),
  (VTBL_ENTRY)&_ZN8S7297C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7297C133v32Ev,
};
extern void _ZN7S7297C3D1Ev();
extern void _ZN7S7297C3D0Ev();
extern void _ZN10S7297C4_nt2v1Ev();
extern void _ZN10S7297C4_nt2v2Ev();
extern void _ZN7S7297C33v15Ev();
extern void _ZN7S7297C33v16Ev();
extern void _ZN7S7297C33v17Ev();
extern void _ZN7S7297C33v18Ev();
extern void _ZN7S7297C33v19Ev();
extern void _ZN7S7297C33v20Ev();
extern void _ZN7S7297C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C3__7S7297C1[] = {
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7297C3[0]),
  (VTBL_ENTRY)&_ZN7S7297C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7297C3D0Ev,
  (VTBL_ENTRY)&_ZN10S7297C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7297C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7297C33v21Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN7S7297C53v12Ev();
extern void _ZN7S7297C53v13Ev();
extern void _ZN7S7297C53v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C57S7297C3__7S7297C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7297C5[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v14Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C6__7S7297C57S7297C3__7S7297C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI7S7297C5[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN7S7297C53v12Ev();
extern void _ZN7S7297C53v13Ev();
extern void _ZN7S7297C53v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C5__7S7297C3__7S7297C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S7297C3[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7297C53v14Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C6__7S7297C3__7S7297C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI7S7297C3[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
};
extern void _ZN8S7297C103v22Ev();
extern void _ZN7S7297C7D1Ev();
extern void _ZN7S7297C7D0Ev();
extern void _ZN7S7297C93v29Ev();
extern void _ZN7S7297C93v30Ev();
extern void _ZN7S7297C83v33Ev();
extern void _ZN7S7297C83v34Ev();
extern void _ZN7S7297C83v35Ev();
extern void _ZN7S7297C83v36Ev();
extern void _ZN7S7297C83v37Ev();
extern void _ZN7S7297C73v38Ev();
extern void _ZN7S7297C73v39Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C7__7S7297C1[] = {
  ABISELECT(56,32),
  ABISELECT(-112,-60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7297C7[0]),
  (VTBL_ENTRY)&_ZN8S7297C103v22Ev,
  (VTBL_ENTRY)&_ZN7S7297C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7297C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7297C93v29Ev,
  (VTBL_ENTRY)&_ZN7S7297C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v33Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v34Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v35Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v36Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v37Ev,
  (VTBL_ENTRY)&_ZN7S7297C73v38Ev,
  (VTBL_ENTRY)&_ZN7S7297C73v39Ev,
};
extern void _ZN8S7297C103v22Ev();
extern void _ZN7S7297C8D1Ev();
extern void _ZN7S7297C8D0Ev();
extern void _ZN7S7297C93v29Ev();
extern void _ZN7S7297C93v30Ev();
extern void _ZN7S7297C83v33Ev();
extern void _ZN7S7297C83v34Ev();
extern void _ZN7S7297C83v35Ev();
extern void _ZN7S7297C83v36Ev();
extern void _ZN7S7297C83v37Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C87S7297C7__7S7297C1[] = {
  ABISELECT(56,32),
  ABISELECT(-112,-60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7297C8[0]),
  (VTBL_ENTRY)&_ZN8S7297C103v22Ev,
  (VTBL_ENTRY)&_ZN7S7297C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7297C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7297C93v29Ev,
  (VTBL_ENTRY)&_ZN7S7297C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v33Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v34Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v35Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v36Ev,
  (VTBL_ENTRY)&_ZN7S7297C83v37Ev,
};
extern void _ZN8S7297C103v22Ev();
extern void _ZN7S7297C9D1Ev();
extern void _ZN7S7297C9D0Ev();
extern void _ZN7S7297C93v29Ev();
extern void _ZN7S7297C93v30Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C97S7297C87S7297C7__7S7297C1[] = {
  ABISELECT(-112,-60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7297C9[0]),
  (VTBL_ENTRY)&_ZN8S7297C103v22Ev,
  (VTBL_ENTRY)&_ZN7S7297C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7297C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7297C93v29Ev,
  (VTBL_ENTRY)&_ZN7S7297C93v30Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C113v27Ev();
extern void _ZN8S7297C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C117S7297C97S7297C87S7297C7__7S7297C1[] = {
  ABISELECT(-120,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S7297C11[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v27Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v28Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C123v23Ev();
extern void _ZN8S7297C123v24Ev();
extern void _ZN8S7297C123v25Ev();
extern void _ZN8S7297C123v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C128S7297C117S7297C97S7297C87S7297C7__7S7297C1[] = {
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  0,
  (VTBL_ENTRY)&(_ZTI8S7297C12[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v23Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v24Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v25Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v26Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C6__8S7297C128S7297C117S7297C97S7297C87S7297C7__7S7297C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(128,68),
  (VTBL_ENTRY)&(_ZTI8S7297C12[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C123v23Ev();
extern void _ZN8S7297C123v24Ev();
extern void _ZN8S7297C123v25Ev();
extern void _ZN8S7297C123v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C12__8S7297C117S7297C97S7297C87S7297C7__7S7297C1[] = {
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7297C11[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v23Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v24Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v25Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v26Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C6__A1__8S7297C117S7297C97S7297C87S7297C7__7S7297C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,64),
  (VTBL_ENTRY)&(_ZTI8S7297C11[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C113v27Ev();
extern void _ZN8S7297C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C11__7S7297C97S7297C87S7297C7__7S7297C1[] = {
  ABISELECT(-120,-64),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7297C9[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v27Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v28Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C123v23Ev();
extern void _ZN8S7297C123v24Ev();
extern void _ZN8S7297C123v25Ev();
extern void _ZN8S7297C123v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C128S7297C11__7S7297C97S7297C87S7297C7__7S7297C1[] = {
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7297C9[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v23Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v24Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v25Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v26Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C6__A1__7S7297C97S7297C87S7297C7__7S7297C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(112,60),
  (VTBL_ENTRY)&(_ZTI7S7297C9[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C113v27Ev();
extern void _ZN8S7297C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C117S7297C9__7S7297C87S7297C7__7S7297C1[] = {
  ABISELECT(-120,-64),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7297C8[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v27Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v28Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C123v23Ev();
extern void _ZN8S7297C123v24Ev();
extern void _ZN8S7297C123v25Ev();
extern void _ZN8S7297C123v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C128S7297C117S7297C9__7S7297C87S7297C7__7S7297C1[] = {
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7297C8[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v23Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v24Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v25Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v26Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C6__A1__7S7297C87S7297C7__7S7297C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(112,60),
  (VTBL_ENTRY)&(_ZTI7S7297C8[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7297C8D1Ev,_ZTv0_n12_N7S7297C8D1Ev)();
extern void ABISELECT(_ZThn56_N7S7297C8D1Ev,_ZThn32_N7S7297C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7297C8D0Ev,_ZTv0_n12_N7S7297C8D0Ev)();
extern void ABISELECT(_ZThn56_N7S7297C8D0Ev,_ZThn32_N7S7297C8D0Ev)() __attribute__((weak));
extern void _ZN8S7297C133v31Ev();
extern void _ZN8S7297C133v32Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C13__7S7297C87S7297C7__7S7297C1[] = {
  0,
  0,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7297C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7297C8D1Ev,_ZTv0_n12_N7S7297C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7297C8D0Ev,_ZTv0_n12_N7S7297C8D0Ev),
  (VTBL_ENTRY)&_ZN8S7297C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7297C133v32Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7297C6__7S7297C7__7S7297C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(112,60),
  (VTBL_ENTRY)&(_ZTI7S7297C7[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C113v27Ev();
extern void _ZN8S7297C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C117S7297C97S7297C8__7S7297C7__7S7297C1[] = {
  ABISELECT(-120,-64),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7297C7[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v27Ev,
  (VTBL_ENTRY)&_ZN8S7297C113v28Ev,
};
extern void _ZN7S7297C62v3Ev();
extern void _ZN7S7297C62v4Ev();
extern void _ZN7S7297C62v5Ev();
extern void _ZN7S7297C62v6Ev();
extern void _ZN7S7297C62v7Ev();
extern void _ZN7S7297C62v8Ev();
extern void _ZN7S7297C62v9Ev();
extern void _ZN7S7297C63v10Ev();
extern void _ZN7S7297C63v11Ev();
extern void _ZN8S7297C123v23Ev();
extern void _ZN8S7297C123v24Ev();
extern void _ZN8S7297C123v25Ev();
extern void _ZN8S7297C123v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C128S7297C117S7297C97S7297C8__7S7297C7__7S7297C1[] = {
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7297C7[0]),
  (VTBL_ENTRY)&_ZN7S7297C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7297C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7297C63v11Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v23Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v24Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v25Ev,
  (VTBL_ENTRY)&_ZN8S7297C123v26Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7297C7D1Ev,_ZTv0_n12_N7S7297C7D1Ev)();
extern void ABISELECT(_ZThn56_N7S7297C7D1Ev,_ZThn32_N7S7297C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7297C7D0Ev,_ZTv0_n12_N7S7297C7D0Ev)();
extern void ABISELECT(_ZThn56_N7S7297C7D0Ev,_ZThn32_N7S7297C7D0Ev)() __attribute__((weak));
extern void _ZN8S7297C133v31Ev();
extern void _ZN8S7297C133v32Ev();
static  VTBL_ENTRY _tg__ZTV8S7297C13__7S7297C7__7S7297C1[] = {
  0,
  0,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7297C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7297C7D1Ev,_ZTv0_n12_N7S7297C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7297C7D0Ev,_ZTv0_n12_N7S7297C7D0Ev),
  (VTBL_ENTRY)&_ZN8S7297C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7297C133v32Ev,
};
static  VTT_ENTRY vtt_S7297C1[] = {
  {&(_ZTV7S7297C1[15]),  15,173},
  {&(_tg__ZTV7S7297C2__7S7297C1[15]),  15,32},
  {&(_tg__ZTV7S7297C3__7S7297C2__7S7297C1[16]),  16,27},
  {&(_tg__ZTV7S7297C57S7297C3__7S7297C2__7S7297C1[12]),  12,24},
  {&(_tg__ZTV7S7297C2__7S7297C1[15]),  15,32},
  {&(_tg__ZTV7S7297C7__7S7297C2__7S7297C1[30]),  30,42},
  {&(_tg__ZTV8S7297C117S7297C97S7297C87S7297C7__7S7297C2__7S7297C1[3]),  3,14},
  {&(_tg__ZTV8S7297C128S7297C117S7297C97S7297C87S7297C7__7S7297C2__7S7297C1[12]),  12,25},
  {&(_tg__ZTV8S7297C13__7S7297C2__7S7297C1[5]),  5,9},
  {&(_ZTV7S7297C1[48]),  48,173},
  {&(_ZTV7S7297C1[71]),  71,173},
  {&(_ZTV7S7297C1[15]),  15,173},
  {&(_ZTV7S7297C1[113]),  113,173},
  {&(_ZTV7S7297C1[128]),  128,173},
  {&(_ZTV7S7297C1[151]),  151,173},
  {&(_ZTV7S7297C1[169]),  169,173},
  {&(_tg__ZTV7S7297C3__7S7297C1[3]),  3,14},
  {&(_tg__ZTV7S7297C57S7297C3__7S7297C1[12]),  12,24},
  {&(_tg__ZTV7S7297C6__7S7297C57S7297C3__7S7297C1[11]),  11,20},
  {&(_tg__ZTV7S7297C5__7S7297C3__7S7297C1[12]),  12,24},
  {&(_tg__ZTV7S7297C6__7S7297C3__7S7297C1[11]),  11,20},
  {&(_tg__ZTV7S7297C7__7S7297C1[4]),  4,16},
  {&(_tg__ZTV7S7297C87S7297C7__7S7297C1[4]),  4,14},
  {&(_tg__ZTV7S7297C97S7297C87S7297C7__7S7297C1[3]),  3,8},
  {&(_tg__ZTV8S7297C117S7297C97S7297C87S7297C7__7S7297C1[3]),  3,14},
  {&(_tg__ZTV8S7297C128S7297C117S7297C97S7297C87S7297C7__7S7297C1[12]),  12,25},
  {&(_tg__ZTV7S7297C6__8S7297C128S7297C117S7297C97S7297C87S7297C7__7S7297C1[11]),  11,20},
  {&(_tg__ZTV8S7297C12__8S7297C117S7297C97S7297C87S7297C7__7S7297C1[12]),  12,25},
  {&(_tg__ZTV7S7297C6__A1__8S7297C117S7297C97S7297C87S7297C7__7S7297C1[11]),  11,20},
  {&(_tg__ZTV8S7297C11__7S7297C97S7297C87S7297C7__7S7297C1[3]),  3,14},
  {&(_tg__ZTV8S7297C128S7297C11__7S7297C97S7297C87S7297C7__7S7297C1[12]),  12,25},
  {&(_tg__ZTV7S7297C6__A1__7S7297C97S7297C87S7297C7__7S7297C1[11]),  11,20},
  {&(_tg__ZTV8S7297C117S7297C9__7S7297C87S7297C7__7S7297C1[3]),  3,14},
  {&(_tg__ZTV8S7297C128S7297C117S7297C9__7S7297C87S7297C7__7S7297C1[12]),  12,25},
  {&(_tg__ZTV7S7297C6__A1__7S7297C87S7297C7__7S7297C1[11]),  11,20},
  {&(_tg__ZTV8S7297C13__7S7297C87S7297C7__7S7297C1[5]),  5,9},
  {&(_tg__ZTV7S7297C6__7S7297C7__7S7297C1[11]),  11,20},
  {&(_tg__ZTV8S7297C117S7297C97S7297C8__7S7297C7__7S7297C1[3]),  3,14},
  {&(_tg__ZTV8S7297C128S7297C117S7297C97S7297C8__7S7297C7__7S7297C1[12]),  12,25},
  {&(_tg__ZTV8S7297C13__7S7297C7__7S7297C1[5]),  5,9},
};
extern VTBL_ENTRY _ZTI7S7297C1[];
extern  VTBL_ENTRY _ZTV7S7297C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7297C1[];
static VTBL_ENTRY alt_thunk_names37[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7297C7D0Ev,_ZTv0_n12_N7S7297C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7297C7D0Ev,_ZThn32_N7S7297C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7297C7D1Ev,_ZTv0_n12_N7S7297C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7297C7D1Ev,_ZThn32_N7S7297C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7297C8D0Ev,_ZTv0_n12_N7S7297C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7297C8D0Ev,_ZThn32_N7S7297C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7297C8D1Ev,_ZTv0_n12_N7S7297C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7297C8D1Ev,_ZThn32_N7S7297C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7297C2D0Ev,_ZTv0_n12_N7S7297C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S7297C2D0Ev,_ZThn92_N7S7297C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7297C2D1Ev,_ZTv0_n12_N7S7297C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S7297C2D1Ev,_ZThn92_N7S7297C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7297C2D0Ev,_ZTv0_n24_N7S7297C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7297C2D0Ev,_ZThn60_N7S7297C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7297C2D1Ev,_ZTv0_n24_N7S7297C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7297C2D1Ev,_ZThn60_N7S7297C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7297C2D0Ev,_ZTv0_n16_N7S7297C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7297C2D0Ev,_ZThn28_N7S7297C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7297C2D1Ev,_ZTv0_n16_N7S7297C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7297C2D1Ev,_ZThn28_N7S7297C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7297C1D0Ev,_ZTv0_n12_N7S7297C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S7297C1D0Ev,_ZThn92_N7S7297C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7297C1D1Ev,_ZTv0_n12_N7S7297C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S7297C1D1Ev,_ZThn92_N7S7297C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7297C1D0Ev,_ZTv0_n24_N7S7297C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7297C1D0Ev,_ZThn60_N7S7297C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7297C1D1Ev,_ZTv0_n24_N7S7297C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7297C1D1Ev,_ZThn60_N7S7297C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7297C1D0Ev,_ZTv0_n16_N7S7297C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7297C1D0Ev,_ZThn28_N7S7297C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7297C1D1Ev,_ZTv0_n16_N7S7297C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7297C1D1Ev,_ZThn28_N7S7297C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7297C1 = {  "S7297C1", // class name
  bases_S7297C1, 13,
  &(vtc_S7297C1[0]), // expected_vtbl_contents
  &(vtt_S7297C1[0]), // expected_vtt_contents
  ABISELECT(192,108), // object size
  NSPAIRA(_ZTI7S7297C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7297C1),173, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7297C1),40, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names37,
};
#endif // __cplusplus

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

#ifdef __cplusplus

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


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

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

#else // __cplusplus

extern void _ZN7S7300C4C1Ev();
extern void _ZN7S7300C4D1Ev();
Name_Map name_map_S7300C4[] = {
  NSPAIR(_ZN7S7300C4C1Ev),
  NSPAIR(_ZN7S7300C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7300C4[];
extern void _ZN7S7300C42v1Ev();
static  VTBL_ENTRY vtc_S7300C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C4[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
};
extern VTBL_ENTRY _ZTI7S7300C4[];
extern  VTBL_ENTRY _ZTV7S7300C4[];
Class_Descriptor cd_S7300C4 = {  "S7300C4", // class name
  0,0,//no base classes
  &(vtc_S7300C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7300C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7300C4),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  S7300C5  : S7300C4 {
  virtual void  v2(); // _ZN7S7300C52v2Ev
  virtual void  v3(); // _ZN7S7300C52v3Ev
  virtual void  v4(); // _ZN7S7300C52v4Ev
  ~S7300C5(); // tgen
  S7300C5(); // tgen
};
//SIG(-1 S7300C5) C1{ BC2{ v4} v1 v2 v3}


void  S7300C5 ::v2(){vfunc_called(this, "_ZN7S7300C52v2Ev");}
void  S7300C5 ::v3(){vfunc_called(this, "_ZN7S7300C52v3Ev");}
void  S7300C5 ::v4(){vfunc_called(this, "_ZN7S7300C52v4Ev");}
S7300C5 ::~S7300C5(){ note_dtor("S7300C5", this);} // tgen
S7300C5 ::S7300C5(){ note_ctor("S7300C5", this);} // tgen

static void Test_S7300C5()
{
  extern Class_Descriptor cd_S7300C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7300C5, buf);
    S7300C5 *dp, &lv = *(dp=new (buf) S7300C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7300C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7300C5)");
    check_base_class_offset(lv, (S7300C4*), 0, "S7300C5");
    test_class_info(&lv, &cd_S7300C5);
    dp->~S7300C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7300C5(Test_S7300C5, "S7300C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7300C5C1Ev();
extern void _ZN7S7300C5D1Ev();
Name_Map name_map_S7300C5[] = {
  NSPAIR(_ZN7S7300C5C1Ev),
  NSPAIR(_ZN7S7300C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7300C4;
extern VTBL_ENTRY _ZTI7S7300C4[];
extern  VTBL_ENTRY _ZTV7S7300C4[];
static Base_Class bases_S7300C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7300C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S7300C5[];
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
static  VTBL_ENTRY vtc_S7300C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C5[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
};
extern VTBL_ENTRY _ZTI7S7300C5[];
extern  VTBL_ENTRY _ZTV7S7300C5[];
Class_Descriptor cd_S7300C5 = {  "S7300C5", // class name
  bases_S7300C5, 1,
  &(vtc_S7300C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7300C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7300C5),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  S7300C6  : virtual S7300C5 , S7300C4 {
  int s7300c6f0;
  virtual void  v5(); // _ZN7S7300C62v5Ev
  virtual void  v6(); // _ZN7S7300C62v6Ev
  virtual void  v7(); // _ZN7S7300C62v7Ev
  virtual void  v8(); // _ZN7S7300C62v8Ev
  virtual void  v9(); // _ZN7S7300C62v9Ev
  virtual void  v10(); // _ZN7S7300C63v10Ev
  ~S7300C6(); // tgen
  S7300C6(); // tgen
};
//SIG(-1 S7300C6) C1{ VBC2{ BC3{ v7} v8 v9 v10} BC3 v1 v2 v3 v4 v5 v6 Fi}


void  S7300C6 ::v5(){vfunc_called(this, "_ZN7S7300C62v5Ev");}
void  S7300C6 ::v6(){vfunc_called(this, "_ZN7S7300C62v6Ev");}
void  S7300C6 ::v7(){vfunc_called(this, "_ZN7S7300C62v7Ev");}
void  S7300C6 ::v8(){vfunc_called(this, "_ZN7S7300C62v8Ev");}
void  S7300C6 ::v9(){vfunc_called(this, "_ZN7S7300C62v9Ev");}
void  S7300C6 ::v10(){vfunc_called(this, "_ZN7S7300C63v10Ev");}
S7300C6 ::~S7300C6(){ note_dtor("S7300C6", this);} // tgen
S7300C6 ::S7300C6(){ note_ctor("S7300C6", this);} // tgen

static void Test_S7300C6()
{
  extern Class_Descriptor cd_S7300C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7300C6, buf);
    S7300C6 *dp, &lv = *(dp=new (buf) S7300C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7300C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7300C6)");
    check_base_class_offset(lv, (S7300C4*)(S7300C5*), ABISELECT(16,8), "S7300C6");
    check_base_class_offset(lv, (S7300C5*), ABISELECT(16,8), "S7300C6");
    /*is_ambiguous_... S7300C6::S7300C4 */ AMB_check_base_class_offset(lv, (S7300C4*), 0, "S7300C6");
    check_field_offset(lv, s7300c6f0, ABISELECT(8,4), "S7300C6.s7300c6f0");
    test_class_info(&lv, &cd_S7300C6);
    dp->~S7300C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7300C6(Test_S7300C6, "S7300C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7300C6C1Ev();
extern void _ZN7S7300C6D1Ev();
Name_Map name_map_S7300C6[] = {
  NSPAIR(_ZN7S7300C6C1Ev),
  NSPAIR(_ZN7S7300C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7300C4;
extern VTBL_ENTRY _ZTI7S7300C4[];
extern  VTBL_ENTRY _ZTV7S7300C4[];
extern Class_Descriptor cd_S7300C5;
extern VTBL_ENTRY _ZTI7S7300C5[];
extern  VTBL_ENTRY _ZTV7S7300C5[];
extern Class_Descriptor cd_S7300C4;
extern VTBL_ENTRY _ZTI7S7300C4[];
extern  VTBL_ENTRY _ZTV7S7300C4[];
static Base_Class bases_S7300C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7300C4,    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
  0, 0},
  {&cd_S7300C5,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //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},
  {&cd_S7300C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7300C6[];
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
static  VTBL_ENTRY vtc_S7300C6[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C6[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7300C6[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
};
extern VTBL_ENTRY _ZTV7S7300C6[];
static  VTT_ENTRY vtt_S7300C6[] = {
  {&(_ZTV7S7300C6[3]),  3,20},
  {&(_ZTV7S7300C6[16]),  16,20},
};
extern VTBL_ENTRY _ZTI7S7300C6[];
extern  VTBL_ENTRY _ZTV7S7300C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C6[];
Class_Descriptor cd_S7300C6 = {  "S7300C6", // class name
  bases_S7300C6, 3,
  &(vtc_S7300C6[0]), // expected_vtbl_contents
  &(vtt_S7300C6[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7300C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7300C6),20, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7300C6),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7300C3  : S7300C4 , virtual S7300C5 , S7300C6 {
  char s7300c3f0;
  virtual void  v11(); // _ZN7S7300C33v11Ev
  virtual void  v12(); // _ZN7S7300C33v12Ev
  virtual void  v13(); // _ZN7S7300C33v13Ev
  virtual void  v14(); // _ZN7S7300C33v14Ev
  virtual void  v15(); // _ZN7S7300C33v15Ev
  virtual void  v16(); // _ZN7S7300C33v16Ev
  virtual void  v17(); // _ZN7S7300C33v17Ev
  ~S7300C3(); // tgen
  S7300C3(); // tgen
};
//SIG(-1 S7300C3) C1{ BC2{ v8} VBC3{ BC2 v9 v10 v11} BC4{ VBC3 BC2 v12 v13 v14 v15 v16 v17 Fi} v1 v2 v3 v4 v5 v6 v7 Fc}


void  S7300C3 ::v11(){vfunc_called(this, "_ZN7S7300C33v11Ev");}
void  S7300C3 ::v12(){vfunc_called(this, "_ZN7S7300C33v12Ev");}
void  S7300C3 ::v13(){vfunc_called(this, "_ZN7S7300C33v13Ev");}
void  S7300C3 ::v14(){vfunc_called(this, "_ZN7S7300C33v14Ev");}
void  S7300C3 ::v15(){vfunc_called(this, "_ZN7S7300C33v15Ev");}
void  S7300C3 ::v16(){vfunc_called(this, "_ZN7S7300C33v16Ev");}
void  S7300C3 ::v17(){vfunc_called(this, "_ZN7S7300C33v17Ev");}
S7300C3 ::~S7300C3(){ note_dtor("S7300C3", this);} // tgen
S7300C3 ::S7300C3(){ note_ctor("S7300C3", this);} // tgen

static void Test_S7300C3()
{
  extern Class_Descriptor cd_S7300C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S7300C3, buf);
    S7300C3 *dp, &lv = *(dp=new (buf) S7300C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S7300C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7300C3)");
    /*is_ambiguous_... S7300C3::S7300C4 */ AMB_check_base_class_offset(lv, (S7300C4*), 0, "S7300C3");
    check_base_class_offset(lv, (S7300C4*)(S7300C5*), ABISELECT(24,16), "S7300C3");
    check_base_class_offset(lv, (S7300C5*), ABISELECT(24,16), "S7300C3");
    check_base_class_offset(lv, (S7300C5*)(S7300C6*), ABISELECT(24,16), "S7300C3");
    /*is_ambiguous_... S7300C6::S7300C4 */ AMB_check_base_class_offset(lv, (S7300C4*)(S7300C6*), ABISELECT(8,4), "S7300C3");
    check_base_class_offset(lv, (S7300C6*), ABISELECT(8,4), "S7300C3");
    check_field_offset(lv, s7300c3f0, ABISELECT(20,12), "S7300C3.s7300c3f0");
    test_class_info(&lv, &cd_S7300C3);
    dp->~S7300C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7300C3(Test_S7300C3, "S7300C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S7300C3C1Ev();
extern void _ZN7S7300C3D1Ev();
Name_Map name_map_S7300C3[] = {
  NSPAIR(_ZN7S7300C3C1Ev),
  NSPAIR(_ZN7S7300C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7300C4;
extern VTBL_ENTRY _ZTI7S7300C4[];
extern  VTBL_ENTRY _ZTV7S7300C4[];
extern Class_Descriptor cd_S7300C4;
extern VTBL_ENTRY _ZTI7S7300C4[];
extern  VTBL_ENTRY _ZTV7S7300C4[];
extern Class_Descriptor cd_S7300C5;
extern VTBL_ENTRY _ZTI7S7300C5[];
extern  VTBL_ENTRY _ZTV7S7300C5[];
extern Class_Descriptor cd_S7300C4;
extern VTBL_ENTRY _ZTI7S7300C4[];
extern  VTBL_ENTRY _ZTV7S7300C4[];
extern Class_Descriptor cd_S7300C6;
extern VTBL_ENTRY _ZTI7S7300C6[];
extern  VTBL_ENTRY _ZTV7S7300C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C6[];
static Base_Class bases_S7300C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7300C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7300C4,    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
    2, //immediately_derived
  0, 0},
  {&cd_S7300C5,    ABISELECT(24,16), //bcp->offset
    21, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S7300C4,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7300C6,    ABISELECT(8,4), //bcp->offset
    11, //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7300C3[];
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C33v11Ev();
extern void _ZN7S7300C33v12Ev();
extern void _ZN7S7300C33v13Ev();
extern void _ZN7S7300C33v14Ev();
extern void _ZN7S7300C33v15Ev();
extern void _ZN7S7300C33v16Ev();
extern void _ZN7S7300C33v17Ev();
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
static  VTBL_ENTRY vtc_S7300C3[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C3[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v17Ev,
  ABISELECT(16,12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7300C3[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7300C3[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
};
extern VTBL_ENTRY _ZTV7S7300C3[];
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C6__7S7300C3[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C6[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C5__7S7300C6__7S7300C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7300C6[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
};
static  VTT_ENTRY vtt_S7300C3[] = {
  {&(_ZTV7S7300C3[3]),  3,31},
  {&(_tg__ZTV7S7300C6__7S7300C3[3]),  3,10},
  {&(_tg__ZTV7S7300C5__7S7300C6__7S7300C3[6]),  6,10},
  {&(_ZTV7S7300C3[27]),  27,31},
  {&(_ZTV7S7300C3[14]),  14,31},
};
extern VTBL_ENTRY _ZTI7S7300C3[];
extern  VTBL_ENTRY _ZTV7S7300C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C3[];
Class_Descriptor cd_S7300C3 = {  "S7300C3", // class name
  bases_S7300C3, 5,
  &(vtc_S7300C3[0]), // expected_vtbl_contents
  &(vtt_S7300C3[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S7300C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7300C3),31, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7300C3),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7300C7  {
  virtual void  v18(); // _ZN7S7300C73v18Ev
  virtual void  v19(); // _ZN7S7300C73v19Ev
  virtual void  v20(); // _ZN7S7300C73v20Ev
  virtual void  v21(); // _ZN7S7300C73v21Ev
  virtual void  v22(); // _ZN7S7300C73v22Ev
  ~S7300C7(); // tgen
  S7300C7(); // tgen
};
//SIG(-1 S7300C7) C1{ v1 v2 v3 v4 v5}


void  S7300C7 ::v18(){vfunc_called(this, "_ZN7S7300C73v18Ev");}
void  S7300C7 ::v19(){vfunc_called(this, "_ZN7S7300C73v19Ev");}
void  S7300C7 ::v20(){vfunc_called(this, "_ZN7S7300C73v20Ev");}
void  S7300C7 ::v21(){vfunc_called(this, "_ZN7S7300C73v21Ev");}
void  S7300C7 ::v22(){vfunc_called(this, "_ZN7S7300C73v22Ev");}
S7300C7 ::~S7300C7(){ note_dtor("S7300C7", this);} // tgen
S7300C7 ::S7300C7(){ note_ctor("S7300C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7300C7C1Ev();
extern void _ZN7S7300C7D1Ev();
Name_Map name_map_S7300C7[] = {
  NSPAIR(_ZN7S7300C7C1Ev),
  NSPAIR(_ZN7S7300C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7300C7[];
extern void _ZN7S7300C73v18Ev();
extern void _ZN7S7300C73v19Ev();
extern void _ZN7S7300C73v20Ev();
extern void _ZN7S7300C73v21Ev();
extern void _ZN7S7300C73v22Ev();
static  VTBL_ENTRY vtc_S7300C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C7[0]),
  (VTBL_ENTRY)&_ZN7S7300C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v22Ev,
};
extern VTBL_ENTRY _ZTI7S7300C7[];
extern  VTBL_ENTRY _ZTV7S7300C7[];
Class_Descriptor cd_S7300C7 = {  "S7300C7", // class name
  0,0,//no base classes
  &(vtc_S7300C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7300C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7300C7),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  S7300C8  : virtual S7300C4 {
  virtual  ~S7300C8(); // _ZN7S7300C8D2Ev
  virtual void  v23(); // _ZN7S7300C83v23Ev
  S7300C8(); // tgen
};
//SIG(-1 S7300C8) C1{ VBC2{ v2} vd v1}


 S7300C8 ::~S7300C8(){ note_dtor("S7300C8", this);}
void  S7300C8 ::v23(){vfunc_called(this, "_ZN7S7300C83v23Ev");}
S7300C8 ::S7300C8(){ note_ctor("S7300C8", this);} // tgen

static void Test_S7300C8()
{
  extern Class_Descriptor cd_S7300C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7300C8, buf);
    S7300C8 *dp, &lv = *(dp=new (buf) S7300C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7300C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7300C8)");
    check_base_class_offset(lv, (S7300C4*), 0, "S7300C8");
    test_class_info(&lv, &cd_S7300C8);
    dp->~S7300C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7300C8(Test_S7300C8, "S7300C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7300C8C1Ev();
extern void _ZN7S7300C8D2Ev();
Name_Map name_map_S7300C8[] = {
  NSPAIR(_ZN7S7300C8C1Ev),
  NSPAIR(_ZN7S7300C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7300C4;
extern VTBL_ENTRY _ZTI7S7300C4[];
extern  VTBL_ENTRY _ZTV7S7300C4[];
static Base_Class bases_S7300C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7300C4,    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 _ZTI7S7300C8[];
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C8D1Ev();
extern void _ZN7S7300C8D0Ev();
extern void _ZN7S7300C83v23Ev();
static  VTBL_ENTRY vtc_S7300C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C8[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7300C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7300C83v23Ev,
};
extern VTBL_ENTRY _ZTV7S7300C8[];
static  VTT_ENTRY vtt_S7300C8[] = {
  {&(_ZTV7S7300C8[4]),  4,8},
  {&(_ZTV7S7300C8[4]),  4,8},
};
extern VTBL_ENTRY _ZTI7S7300C8[];
extern  VTBL_ENTRY _ZTV7S7300C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C8[];
Class_Descriptor cd_S7300C8 = {  "S7300C8", // class name
  bases_S7300C8, 1,
  &(vtc_S7300C8[0]), // expected_vtbl_contents
  &(vtt_S7300C8[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7300C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7300C8),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7300C8),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7300C2  : virtual S7300C3 , virtual S7300C7 , S7300C8 {
  ::S7300C6 s7300c2f0;
  virtual  ~S7300C2(); // _ZN7S7300C2D2Ev
  virtual void  v24(); // _ZN7S7300C23v24Ev
  virtual void  v25(); // _ZN7S7300C23v25Ev
  virtual void  v26(); // _ZN7S7300C23v26Ev
  S7300C2(); // tgen
};
//SIG(-1 S7300C2) C1{ VBC2{ BC3{ v4} VBC4{ BC3 v5 v6 v7} BC5{ VBC4 BC3 v8 v9 v10 v11 v12 v13 Fi} v14 v15 v16 v17 v18 v19 v20 Fc} VBC6{ v21 v22 v23 v24 v25} BC7{ VBC3 vd v26} vd v1 v2 v3 FC5}


 S7300C2 ::~S7300C2(){ note_dtor("S7300C2", this);}
void  S7300C2 ::v24(){vfunc_called(this, "_ZN7S7300C23v24Ev");}
void  S7300C2 ::v25(){vfunc_called(this, "_ZN7S7300C23v25Ev");}
void  S7300C2 ::v26(){vfunc_called(this, "_ZN7S7300C23v26Ev");}
S7300C2 ::S7300C2(){ note_ctor("S7300C2", this);} // tgen

static void Test_S7300C2()
{
  extern Class_Descriptor cd_S7300C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S7300C2, buf);
    S7300C2 *dp, &lv = *(dp=new (buf) S7300C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S7300C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7300C2)");
    /*is_ambiguous_... S7300C3::S7300C4 */ AMB_check_base_class_offset(lv, (S7300C4*)(S7300C3*), ABISELECT(32,16), "S7300C2");
    check_base_class_offset(lv, (S7300C4*)(S7300C5*), ABISELECT(56,32), "S7300C2");
    check_base_class_offset(lv, (S7300C5*)(S7300C3*), ABISELECT(56,32), "S7300C2");
    check_base_class_offset(lv, (S7300C5*)(S7300C6*)(S7300C3*), ABISELECT(56,32), "S7300C2");
    /*is_ambiguous_... S7300C6::S7300C4 */ AMB_check_base_class_offset(lv, (S7300C4*)(S7300C6*)(S7300C3*), ABISELECT(40,20), "S7300C2");
    check_base_class_offset(lv, (S7300C6*)(S7300C3*), ABISELECT(40,20), "S7300C2");
    check_base_class_offset(lv, (S7300C3*), ABISELECT(32,16), "S7300C2");
    check_base_class_offset(lv, (S7300C7*), ABISELECT(64,36), "S7300C2");
    check_base_class_offset(lv, (S7300C4*)(S7300C8*), 0, "S7300C2");
    check_base_class_offset(lv, (S7300C8*), 0, "S7300C2");
    check_field_offset(lv, s7300c2f0, ABISELECT(8,4), "S7300C2.s7300c2f0");
    test_class_info(&lv, &cd_S7300C2);
    dp->~S7300C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7300C2(Test_S7300C2, "S7300C2", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN7S7300C2C1Ev();
extern void _ZN7S7300C2D2Ev();
Name_Map name_map_S7300C2[] = {
  NSPAIR(_ZN7S7300C2C1Ev),
  NSPAIR(_ZN7S7300C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7300C4;
extern VTBL_ENTRY _ZTI7S7300C4[];
extern  VTBL_ENTRY _ZTV7S7300C4[];
extern Class_Descriptor cd_S7300C4;
extern VTBL_ENTRY _ZTI7S7300C4[];
extern  VTBL_ENTRY _ZTV7S7300C4[];
extern Class_Descriptor cd_S7300C5;
extern VTBL_ENTRY _ZTI7S7300C5[];
extern  VTBL_ENTRY _ZTV7S7300C5[];
extern Class_Descriptor cd_S7300C4;
extern VTBL_ENTRY _ZTI7S7300C4[];
extern  VTBL_ENTRY _ZTV7S7300C4[];
extern Class_Descriptor cd_S7300C6;
extern VTBL_ENTRY _ZTI7S7300C6[];
extern  VTBL_ENTRY _ZTV7S7300C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C6[];
extern Class_Descriptor cd_S7300C3;
extern VTBL_ENTRY _ZTI7S7300C3[];
extern  VTBL_ENTRY _ZTV7S7300C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C3[];
extern Class_Descriptor cd_S7300C7;
extern VTBL_ENTRY _ZTI7S7300C7[];
extern  VTBL_ENTRY _ZTV7S7300C7[];
extern Class_Descriptor cd_S7300C4;
extern VTBL_ENTRY _ZTI7S7300C4[];
extern  VTBL_ENTRY _ZTV7S7300C4[];
extern Class_Descriptor cd_S7300C8;
extern VTBL_ENTRY _ZTI7S7300C8[];
extern  VTBL_ENTRY _ZTV7S7300C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C8[];
static Base_Class bases_S7300C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7300C4,    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
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7300C4,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7300C5,    ABISELECT(56,32), //bcp->offset
    49, //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
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7300C4,    ABISELECT(40,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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7300C6,    ABISELECT(40,20), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7300C3,    ABISELECT(32,16), //bcp->offset
    14, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7300C7,    ABISELECT(64,36), //bcp->offset
    59, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7300C4,    0, //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
    8, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7300C8,    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},
  {0}};
extern VTBL_ENTRY _ZTI7S7300C2[];
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C2D1Ev();
extern void _ZN7S7300C2D0Ev();
extern void _ZN7S7300C83v23Ev();
extern void _ZN7S7300C23v24Ev();
extern void _ZN7S7300C23v25Ev();
extern void _ZN7S7300C23v26Ev();
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C33v11Ev();
extern void _ZN7S7300C33v12Ev();
extern void _ZN7S7300C33v13Ev();
extern void _ZN7S7300C33v14Ev();
extern void _ZN7S7300C33v15Ev();
extern void _ZN7S7300C33v16Ev();
extern void _ZN7S7300C33v17Ev();
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
extern void _ZN7S7300C73v18Ev();
extern void _ZN7S7300C73v19Ev();
extern void _ZN7S7300C73v20Ev();
extern void _ZN7S7300C73v21Ev();
extern void _ZN7S7300C73v22Ev();
static  VTBL_ENTRY vtc_S7300C2[] = {
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(32,16),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7300C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7300C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v26Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v17Ev,
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v22Ev,
};
extern VTBL_ENTRY _ZTV7S7300C2[];
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C8D1Ev();
extern void _ZN7S7300C8D0Ev();
extern void _ZN7S7300C83v23Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C8__7S7300C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C8[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7300C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7300C83v23Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C33v11Ev();
extern void _ZN7S7300C33v12Ev();
extern void _ZN7S7300C33v13Ev();
extern void _ZN7S7300C33v14Ev();
extern void _ZN7S7300C33v15Ev();
extern void _ZN7S7300C33v16Ev();
extern void _ZN7S7300C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C3__7S7300C2[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C3[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v17Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C67S7300C3__7S7300C2[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C6[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C5__7S7300C67S7300C3__7S7300C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7300C6[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C5__7S7300C3__7S7300C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7300C3[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C6__7S7300C3__7S7300C2[] = {
  ABISELECT(16,12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7300C3[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
};
static  VTT_ENTRY vtt_S7300C2[] = {
  {&(_ZTV7S7300C2[7]),  7,71},
  {&(_tg__ZTV7S7300C8__7S7300C2[4]),  4,8},
  {&(_tg__ZTV7S7300C8__7S7300C2[4]),  4,8},
  {&(_ZTV7S7300C2[31]),  31,71},
  {&(_ZTV7S7300C2[55]),  55,71},
  {&(_ZTV7S7300C2[42]),  42,71},
  {&(_ZTV7S7300C2[66]),  66,71},
  {&(_ZTV7S7300C2[7]),  7,71},
  {&(_tg__ZTV7S7300C3__7S7300C2[3]),  3,11},
  {&(_tg__ZTV7S7300C67S7300C3__7S7300C2[3]),  3,10},
  {&(_tg__ZTV7S7300C5__7S7300C67S7300C3__7S7300C2[6]),  6,10},
  {&(_tg__ZTV7S7300C5__7S7300C3__7S7300C2[6]),  6,10},
  {&(_tg__ZTV7S7300C6__7S7300C3__7S7300C2[3]),  3,10},
};
extern VTBL_ENTRY _ZTI7S7300C2[];
extern  VTBL_ENTRY _ZTV7S7300C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C2[];
Class_Descriptor cd_S7300C2 = {  "S7300C2", // class name
  bases_S7300C2, 9,
  &(vtc_S7300C2[0]), // expected_vtbl_contents
  &(vtt_S7300C2[0]), // expected_vtt_contents
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI7S7300C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7300C2),71, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7300C2),13, //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  S7300C9  {
  int s7300c9f0;
  virtual void  v31(); // _ZN7S7300C93v31Ev
  virtual void  v32(); // _ZN7S7300C93v32Ev
  virtual void  v33(); // _ZN7S7300C93v33Ev
  ~S7300C9(); // tgen
  S7300C9(); // tgen
};
//SIG(-1 S7300C9) C1{ v1 v2 v3 Fi}


void  S7300C9 ::v31(){vfunc_called(this, "_ZN7S7300C93v31Ev");}
void  S7300C9 ::v32(){vfunc_called(this, "_ZN7S7300C93v32Ev");}
void  S7300C9 ::v33(){vfunc_called(this, "_ZN7S7300C93v33Ev");}
S7300C9 ::~S7300C9(){ note_dtor("S7300C9", this);} // tgen
S7300C9 ::S7300C9(){ note_ctor("S7300C9", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7300C9C1Ev();
extern void _ZN7S7300C9D1Ev();
Name_Map name_map_S7300C9[] = {
  NSPAIR(_ZN7S7300C9C1Ev),
  NSPAIR(_ZN7S7300C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7300C9[];
extern void _ZN7S7300C93v31Ev();
extern void _ZN7S7300C93v32Ev();
extern void _ZN7S7300C93v33Ev();
static  VTBL_ENTRY vtc_S7300C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C9[0]),
  (VTBL_ENTRY)&_ZN7S7300C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7300C93v32Ev,
  (VTBL_ENTRY)&_ZN7S7300C93v33Ev,
};
extern VTBL_ENTRY _ZTI7S7300C9[];
extern  VTBL_ENTRY _ZTV7S7300C9[];
Class_Descriptor cd_S7300C9 = {  "S7300C9", // class name
  0,0,//no base classes
  &(vtc_S7300C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7300C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7300C9),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  S7300C12  {
  virtual  ~S7300C12(); // _ZN8S7300C12D1Ev
  virtual void  v27(); // _ZN8S7300C123v27Ev
  virtual void  v28(); // _ZN8S7300C123v28Ev
  virtual void  v29(); // _ZN8S7300C123v29Ev
  virtual void  v30(); // _ZN8S7300C123v30Ev
  S7300C12(); // tgen
};
//SIG(-1 S7300C12) C1{ vd v1 v2 v3 v4}


 S7300C12 ::~S7300C12(){ note_dtor("S7300C12", this);}
void  S7300C12 ::v27(){vfunc_called(this, "_ZN8S7300C123v27Ev");}
void  S7300C12 ::v28(){vfunc_called(this, "_ZN8S7300C123v28Ev");}
void  S7300C12 ::v29(){vfunc_called(this, "_ZN8S7300C123v29Ev");}
void  S7300C12 ::v30(){vfunc_called(this, "_ZN8S7300C123v30Ev");}
S7300C12 ::S7300C12(){ note_ctor("S7300C12", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S7300C12C1Ev();
extern void _ZN8S7300C12D1Ev();
Name_Map name_map_S7300C12[] = {
  NSPAIR(_ZN8S7300C12C1Ev),
  NSPAIR(_ZN8S7300C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7300C12[];
extern void _ZN8S7300C12D1Ev();
extern void _ZN8S7300C12D0Ev();
extern void _ZN8S7300C123v27Ev();
extern void _ZN8S7300C123v28Ev();
extern void _ZN8S7300C123v29Ev();
extern void _ZN8S7300C123v30Ev();
static  VTBL_ENTRY vtc_S7300C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7300C12[0]),
  (VTBL_ENTRY)&_ZN8S7300C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7300C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7300C123v27Ev,
  (VTBL_ENTRY)&_ZN8S7300C123v28Ev,
  (VTBL_ENTRY)&_ZN8S7300C123v29Ev,
  (VTBL_ENTRY)&_ZN8S7300C123v30Ev,
};
extern VTBL_ENTRY _ZTI8S7300C12[];
extern  VTBL_ENTRY _ZTV8S7300C12[];
Class_Descriptor cd_S7300C12 = {  "S7300C12", // class name
  0,0,//no base classes
  &(vtc_S7300C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S7300C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7300C12),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  S7300C13  : virtual S7300C3 , virtual S7300C9 {
  void *s7300c13f0;
  char s7300c13f1[7];
  virtual void  v34(); // _ZN8S7300C133v34Ev
  virtual void  v35(); // _ZN8S7300C133v35Ev
  virtual void  v36(); // _ZN8S7300C133v36Ev
  virtual void  v37(); // _ZN8S7300C133v37Ev
  virtual void  v38(); // _ZN8S7300C133v38Ev
  ~S7300C13(); // tgen
  S7300C13(); // tgen
};
//SIG(-1 S7300C13) C1{ VBC2{ BC3{ v6} VBC4{ BC3 v7 v8 v9} BC5{ VBC4 BC3 v10 v11 v12 v13 v14 v15 Fi} v16 v17 v18 v19 v20 v21 v22 Fc} VBC6{ v23 v24 v25 Fi} v1 v2 v3 v4 v5 Fp Fc[7]}


void  S7300C13 ::v34(){vfunc_called(this, "_ZN8S7300C133v34Ev");}
void  S7300C13 ::v35(){vfunc_called(this, "_ZN8S7300C133v35Ev");}
void  S7300C13 ::v36(){vfunc_called(this, "_ZN8S7300C133v36Ev");}
void  S7300C13 ::v37(){vfunc_called(this, "_ZN8S7300C133v37Ev");}
void  S7300C13 ::v38(){vfunc_called(this, "_ZN8S7300C133v38Ev");}
S7300C13 ::~S7300C13(){ note_dtor("S7300C13", this);} // tgen
S7300C13 ::S7300C13(){ note_ctor("S7300C13", this);} // tgen

static void Test_S7300C13()
{
  extern Class_Descriptor cd_S7300C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S7300C13, buf);
    S7300C13 *dp, &lv = *(dp=new (buf) S7300C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S7300C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7300C13)");
    /*is_ambiguous_... S7300C3::S7300C4 */ AMB_check_base_class_offset(lv, (S7300C4*)(S7300C3*), ABISELECT(24,16), "S7300C13");
    check_base_class_offset(lv, (S7300C4*)(S7300C5*), 0, "S7300C13");
    check_base_class_offset(lv, (S7300C5*)(S7300C3*), 0, "S7300C13");
    check_base_class_offset(lv, (S7300C5*)(S7300C6*)(S7300C3*), 0, "S7300C13");
    /*is_ambiguous_... S7300C6::S7300C4 */ AMB_check_base_class_offset(lv, (S7300C4*)(S7300C6*)(S7300C3*), ABISELECT(32,20), "S7300C13");
    check_base_class_offset(lv, (S7300C6*)(S7300C3*), ABISELECT(32,20), "S7300C13");
    check_base_class_offset(lv, (S7300C3*), ABISELECT(24,16), "S7300C13");
    check_base_class_offset(lv, (S7300C9*), ABISELECT(48,32), "S7300C13");
    check_field_offset(lv, s7300c13f0, ABISELECT(8,4), "S7300C13.s7300c13f0");
    check_field_offset(lv, s7300c13f1, ABISELECT(16,8), "S7300C13.s7300c13f1");
    test_class_info(&lv, &cd_S7300C13);
    dp->~S7300C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7300C13(Test_S7300C13, "S7300C13", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S7300C13C1Ev();
extern void _ZN8S7300C13D1Ev();
Name_Map name_map_S7300C13[] = {
  NSPAIR(_ZN8S7300C13C1Ev),
  NSPAIR(_ZN8S7300C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7300C4;
extern VTBL_ENTRY _ZTI7S7300C4[];
extern  VTBL_ENTRY _ZTV7S7300C4[];
extern Class_Descriptor cd_S7300C4;
extern VTBL_ENTRY _ZTI7S7300C4[];
extern  VTBL_ENTRY _ZTV7S7300C4[];
extern Class_Descriptor cd_S7300C5;
extern VTBL_ENTRY _ZTI7S7300C5[];
extern  VTBL_ENTRY _ZTV7S7300C5[];
extern Class_Descriptor cd_S7300C4;
extern VTBL_ENTRY _ZTI7S7300C4[];
extern  VTBL_ENTRY _ZTV7S7300C4[];
extern Class_Descriptor cd_S7300C6;
extern VTBL_ENTRY _ZTI7S7300C6[];
extern  VTBL_ENTRY _ZTV7S7300C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C6[];
extern Class_Descriptor cd_S7300C3;
extern VTBL_ENTRY _ZTI7S7300C3[];
extern  VTBL_ENTRY _ZTV7S7300C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C3[];
extern Class_Descriptor cd_S7300C9;
extern VTBL_ENTRY _ZTI7S7300C9[];
extern  VTBL_ENTRY _ZTV7S7300C9[];
static Base_Class bases_S7300C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7300C4,    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
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7300C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7300C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //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
    4, //immediately_derived
  0, 1},
  {&cd_S7300C4,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7300C6,    ABISELECT(32,20), //bcp->offset
    43, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7300C3,    ABISELECT(24,16), //bcp->offset
    18, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7300C9,    ABISELECT(48,32), //bcp->offset
    53, //bcp->virtual_function_table_offset
    5, //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 _ZTI8S7300C13[];
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
extern void _ZN8S7300C133v34Ev();
extern void _ZN8S7300C133v35Ev();
extern void _ZN8S7300C133v36Ev();
extern void _ZN8S7300C133v37Ev();
extern void _ZN8S7300C133v38Ev();
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C33v11Ev();
extern void _ZN7S7300C33v12Ev();
extern void _ZN7S7300C33v13Ev();
extern void _ZN7S7300C33v14Ev();
extern void _ZN7S7300C33v15Ev();
extern void _ZN7S7300C33v16Ev();
extern void _ZN7S7300C33v17Ev();
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
extern void _ZN7S7300C93v31Ev();
extern void _ZN7S7300C93v32Ev();
extern void _ZN7S7300C93v33Ev();
static  VTBL_ENTRY vtc_S7300C13[] = {
  ABISELECT(48,32),
  0,
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7300C13[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v34Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v35Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v36Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v37Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v38Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S7300C13[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v17Ev,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S7300C13[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
  0,
  0,
  0,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S7300C13[0]),
  (VTBL_ENTRY)&_ZN7S7300C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7300C93v32Ev,
  (VTBL_ENTRY)&_ZN7S7300C93v33Ev,
};
extern VTBL_ENTRY _ZTV8S7300C13[];
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C33v11Ev();
extern void _ZN7S7300C33v12Ev();
extern void _ZN7S7300C33v13Ev();
extern void _ZN7S7300C33v14Ev();
extern void _ZN7S7300C33v15Ev();
extern void _ZN7S7300C33v16Ev();
extern void _ZN7S7300C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C3__8S7300C13[] = {
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C3[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v17Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C67S7300C3__8S7300C13[] = {
  ABISELECT(-32,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C6[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C5__7S7300C67S7300C3__8S7300C13[] = {
  0,
  0,
  0,
  0,
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI7S7300C6[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C5__7S7300C3__8S7300C13[] = {
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI7S7300C3[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C6__7S7300C3__8S7300C13[] = {
  ABISELECT(-32,-20),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7300C3[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
};
static  VTT_ENTRY vtt_S7300C13[] = {
  {&(_ZTV8S7300C13[9]),  9,61},
  {&(_ZTV8S7300C13[35]),  35,61},
  {&(_ZTV8S7300C13[9]),  9,61},
  {&(_ZTV8S7300C13[46]),  46,61},
  {&(_ZTV8S7300C13[58]),  58,61},
  {&(_tg__ZTV7S7300C3__8S7300C13[3]),  3,11},
  {&(_tg__ZTV7S7300C67S7300C3__8S7300C13[3]),  3,10},
  {&(_tg__ZTV7S7300C5__7S7300C67S7300C3__8S7300C13[6]),  6,10},
  {&(_tg__ZTV7S7300C5__7S7300C3__8S7300C13[6]),  6,10},
  {&(_tg__ZTV7S7300C6__7S7300C3__8S7300C13[3]),  3,10},
};
extern VTBL_ENTRY _ZTI8S7300C13[];
extern  VTBL_ENTRY _ZTV8S7300C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7300C13[];
Class_Descriptor cd_S7300C13 = {  "S7300C13", // class name
  bases_S7300C13, 7,
  &(vtc_S7300C13[0]), // expected_vtbl_contents
  &(vtt_S7300C13[0]), // expected_vtt_contents
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S7300C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7300C13),61, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7300C13),10, //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  S7300C11  : virtual S7300C2 , virtual S7300C12 , S7300C13 {
  virtual  ~S7300C11(); // _ZN8S7300C11D2Ev
  virtual void  v39(); // _ZN8S7300C113v39Ev
  virtual void  v40(); // _ZN8S7300C113v40Ev
  virtual void  v41(); // _ZN8S7300C113v41Ev
  virtual void  v42(); // _ZN8S7300C113v42Ev
  virtual void  v43(); // _ZN8S7300C113v43Ev
  S7300C11(); // tgen
};
//SIG(-1 S7300C11) C1{ VBC2{ VBC3{ BC4{ v6} VBC5{ BC4 v7 v8 v9} BC6{ VBC5 BC4 v10 v11 v12 v13 v14 v15 Fi} v16 v17 v18 v19 v20 v21 v22 Fc} VBC7{ v23 v24 v25 v26 v27} BC8{ VBC4 vd v28} vd v29 v30 v31 FC6} VBC9{ vd v32 v33 v34 v35} BC10{ VBC3 VBC11{ v36 v37 v38 Fi} v39 v40 v41 v42 v43 Fp Fc[7]} vd v1 v2 v3 v4 v5}


 S7300C11 ::~S7300C11(){ note_dtor("S7300C11", this);}
void  S7300C11 ::v39(){vfunc_called(this, "_ZN8S7300C113v39Ev");}
void  S7300C11 ::v40(){vfunc_called(this, "_ZN8S7300C113v40Ev");}
void  S7300C11 ::v41(){vfunc_called(this, "_ZN8S7300C113v41Ev");}
void  S7300C11 ::v42(){vfunc_called(this, "_ZN8S7300C113v42Ev");}
void  S7300C11 ::v43(){vfunc_called(this, "_ZN8S7300C113v43Ev");}
S7300C11 ::S7300C11(){ note_ctor("S7300C11", this);} // tgen

static void Test_S7300C11()
{
  extern Class_Descriptor cd_S7300C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,17)];
    init_test(&cd_S7300C11, buf);
    S7300C11 *dp, &lv = *(dp=new (buf) S7300C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S7300C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7300C11)");
    /*is_ambiguous_... S7300C3::S7300C4 */ AMB_check_base_class_offset(lv, (S7300C4*)(S7300C3*), ABISELECT(56,32), "S7300C11");
    check_base_class_offset(lv, (S7300C4*)(S7300C5*), 0, "S7300C11");
    check_base_class_offset(lv, (S7300C5*)(S7300C3*), 0, "S7300C11");
    check_base_class_offset(lv, (S7300C5*)(S7300C6*)(S7300C3*), 0, "S7300C11");
    /*is_ambiguous_... S7300C6::S7300C4 */ AMB_check_base_class_offset(lv, (S7300C4*)(S7300C6*)(S7300C3*), ABISELECT(64,36), "S7300C11");
    check_base_class_offset(lv, (S7300C6*)(S7300C3*), ABISELECT(64,36), "S7300C11");
    check_base_class_offset(lv, (S7300C3*)(S7300C2*), ABISELECT(56,32), "S7300C11");
    check_base_class_offset(lv, (S7300C3*)(S7300C13*), ABISELECT(56,32), "S7300C11");
    check_base_class_offset(lv, (S7300C7*)(S7300C2*), ABISELECT(80,48), "S7300C11");
    check_base_class_offset(lv, (S7300C4*)(S7300C8*)(S7300C2*), ABISELECT(24,16), "S7300C11");
    check_base_class_offset(lv, (S7300C8*)(S7300C2*), ABISELECT(24,16), "S7300C11");
    check_base_class_offset(lv, (S7300C2*), ABISELECT(24,16), "S7300C11");
    check_base_class_offset(lv, (S7300C12*), ABISELECT(88,52), "S7300C11");
    check_base_class_offset(lv, (S7300C9*)(S7300C13*), ABISELECT(96,56), "S7300C11");
    check_base_class_offset(lv, (S7300C13*), 0, "S7300C11");
    test_class_info(&lv, &cd_S7300C11);
    dp->~S7300C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7300C11(Test_S7300C11, "S7300C11", ABISELECT(112,64));

#else // __cplusplus

extern void _ZN8S7300C11C1Ev();
extern void _ZN8S7300C11D2Ev();
Name_Map name_map_S7300C11[] = {
  NSPAIR(_ZN8S7300C11C1Ev),
  NSPAIR(_ZN8S7300C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7300C4;
extern VTBL_ENTRY _ZTI7S7300C4[];
extern  VTBL_ENTRY _ZTV7S7300C4[];
extern Class_Descriptor cd_S7300C4;
extern VTBL_ENTRY _ZTI7S7300C4[];
extern  VTBL_ENTRY _ZTV7S7300C4[];
extern Class_Descriptor cd_S7300C5;
extern VTBL_ENTRY _ZTI7S7300C5[];
extern  VTBL_ENTRY _ZTV7S7300C5[];
extern Class_Descriptor cd_S7300C4;
extern VTBL_ENTRY _ZTI7S7300C4[];
extern  VTBL_ENTRY _ZTV7S7300C4[];
extern Class_Descriptor cd_S7300C6;
extern VTBL_ENTRY _ZTI7S7300C6[];
extern  VTBL_ENTRY _ZTV7S7300C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C6[];
extern Class_Descriptor cd_S7300C3;
extern VTBL_ENTRY _ZTI7S7300C3[];
extern  VTBL_ENTRY _ZTV7S7300C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C3[];
extern Class_Descriptor cd_S7300C7;
extern VTBL_ENTRY _ZTI7S7300C7[];
extern  VTBL_ENTRY _ZTV7S7300C7[];
extern Class_Descriptor cd_S7300C4;
extern VTBL_ENTRY _ZTI7S7300C4[];
extern  VTBL_ENTRY _ZTV7S7300C4[];
extern Class_Descriptor cd_S7300C8;
extern VTBL_ENTRY _ZTI7S7300C8[];
extern  VTBL_ENTRY _ZTV7S7300C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C8[];
extern Class_Descriptor cd_S7300C2;
extern VTBL_ENTRY _ZTI7S7300C2[];
extern  VTBL_ENTRY _ZTV7S7300C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C2[];
extern Class_Descriptor cd_S7300C12;
extern VTBL_ENTRY _ZTI8S7300C12[];
extern  VTBL_ENTRY _ZTV8S7300C12[];
extern Class_Descriptor cd_S7300C9;
extern VTBL_ENTRY _ZTI7S7300C9[];
extern  VTBL_ENTRY _ZTV7S7300C9[];
extern Class_Descriptor cd_S7300C13;
extern VTBL_ENTRY _ZTI8S7300C13[];
extern  VTBL_ENTRY _ZTV8S7300C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7300C13[];
static Base_Class bases_S7300C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7300C4,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S7300C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7300C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //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
    4, //immediately_derived
  0, 1},
  {&cd_S7300C4,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7300C6,    ABISELECT(64,36), //bcp->offset
    73, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7300C3,    ABISELECT(56,32), //bcp->offset
    48, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7300C7,    ABISELECT(80,48), //bcp->offset
    83, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7300C4,    ABISELECT(24,16), //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
    8, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7300C8,    ABISELECT(24,16), //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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7300C2,    ABISELECT(24,16), //bcp->offset
    29, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7300C12,    ABISELECT(88,52), //bcp->offset
    95, //bcp->virtual_function_table_offset
    7, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S7300C9,    ABISELECT(96,56), //bcp->offset
    108, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7300C13,    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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7300C11[];
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
extern void _ZN8S7300C133v34Ev();
extern void _ZN8S7300C133v35Ev();
extern void _ZN8S7300C133v36Ev();
extern void _ZN8S7300C133v37Ev();
extern void _ZN8S7300C133v38Ev();
extern void _ZN8S7300C11D1Ev();
extern void _ZN8S7300C11D0Ev();
extern void _ZN8S7300C113v39Ev();
extern void _ZN8S7300C113v40Ev();
extern void _ZN8S7300C113v41Ev();
extern void _ZN8S7300C113v42Ev();
extern void _ZN8S7300C113v43Ev();
extern void _ZN7S7300C42v1Ev();
extern void ABISELECT(_ZTv0_n64_N8S7300C11D1Ev,_ZTv0_n32_N8S7300C11D1Ev)();
extern void ABISELECT(_ZThn24_N8S7300C11D1Ev,_ZThn16_N8S7300C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7300C11D0Ev,_ZTv0_n32_N8S7300C11D0Ev)();
extern void ABISELECT(_ZThn24_N8S7300C11D0Ev,_ZThn16_N8S7300C11D0Ev)() __attribute__((weak));
extern void _ZN7S7300C83v23Ev();
extern void _ZN7S7300C23v24Ev();
extern void _ZN7S7300C23v25Ev();
extern void _ZN7S7300C23v26Ev();
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C33v11Ev();
extern void _ZN7S7300C33v12Ev();
extern void _ZN7S7300C33v13Ev();
extern void _ZN7S7300C33v14Ev();
extern void _ZN7S7300C33v15Ev();
extern void _ZN7S7300C33v16Ev();
extern void _ZN7S7300C33v17Ev();
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
extern void _ZN7S7300C73v18Ev();
extern void _ZN7S7300C73v19Ev();
extern void _ZN7S7300C73v20Ev();
extern void _ZN7S7300C73v21Ev();
extern void _ZN7S7300C73v22Ev();
extern void ABISELECT(_ZTv0_n24_N8S7300C11D1Ev,_ZTv0_n12_N8S7300C11D1Ev)();
extern void ABISELECT(_ZThn88_N8S7300C11D1Ev,_ZThn52_N8S7300C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7300C11D0Ev,_ZTv0_n12_N8S7300C11D0Ev)();
extern void ABISELECT(_ZThn88_N8S7300C11D0Ev,_ZThn52_N8S7300C11D0Ev)() __attribute__((weak));
extern void _ZN8S7300C123v27Ev();
extern void _ZN8S7300C123v28Ev();
extern void _ZN8S7300C123v29Ev();
extern void _ZN8S7300C123v30Ev();
extern void _ZN7S7300C93v31Ev();
extern void _ZN7S7300C93v32Ev();
extern void _ZN7S7300C93v33Ev();
static  VTBL_ENTRY vtc_S7300C11[] = {
  ABISELECT(88,52),
  ABISELECT(24,16),
  ABISELECT(80,48),
  ABISELECT(24,16),
  ABISELECT(96,56),
  0,
  ABISELECT(56,32),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7300C11[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v34Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v35Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v36Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v37Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v38Ev,
  (VTBL_ENTRY)&_ZN8S7300C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7300C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v39Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v40Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v41Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v42Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v43Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(56,32),
  ABISELECT(-24,-16),
  ABISELECT(32,16),
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S7300C11[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7300C11D1Ev,_ZTv0_n32_N8S7300C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7300C11D0Ev,_ZTv0_n32_N8S7300C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7300C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v26Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S7300C11[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v17Ev,
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S7300C11[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI8S7300C11[0]),
  (VTBL_ENTRY)&_ZN7S7300C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v22Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-52),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI8S7300C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7300C11D1Ev,_ZTv0_n12_N8S7300C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7300C11D0Ev,_ZTv0_n12_N8S7300C11D0Ev),
  (VTBL_ENTRY)&_ZN8S7300C123v27Ev,
  (VTBL_ENTRY)&_ZN8S7300C123v28Ev,
  (VTBL_ENTRY)&_ZN8S7300C123v29Ev,
  (VTBL_ENTRY)&_ZN8S7300C123v30Ev,
  0,
  0,
  0,
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S7300C11[0]),
  (VTBL_ENTRY)&_ZN7S7300C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7300C93v32Ev,
  (VTBL_ENTRY)&_ZN7S7300C93v33Ev,
};
extern VTBL_ENTRY _ZTV8S7300C11[];
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
extern void _ZN8S7300C133v34Ev();
extern void _ZN8S7300C133v35Ev();
extern void _ZN8S7300C133v36Ev();
extern void _ZN8S7300C133v37Ev();
extern void _ZN8S7300C133v38Ev();
static  VTBL_ENTRY _tg__ZTV8S7300C13__8S7300C11[] = {
  ABISELECT(96,56),
  0,
  ABISELECT(56,32),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7300C13[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v34Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v35Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v36Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v37Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v38Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C33v11Ev();
extern void _ZN7S7300C33v12Ev();
extern void _ZN7S7300C33v13Ev();
extern void _ZN7S7300C33v14Ev();
extern void _ZN7S7300C33v15Ev();
extern void _ZN7S7300C33v16Ev();
extern void _ZN7S7300C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C3__8S7300C13__8S7300C11[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S7300C13[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v17Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C67S7300C3__8S7300C13__8S7300C11[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S7300C13[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
};
extern void _ZN7S7300C93v31Ev();
extern void _ZN7S7300C93v32Ev();
extern void _ZN7S7300C93v33Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C9__8S7300C13__8S7300C11[] = {
  0,
  0,
  0,
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S7300C13[0]),
  (VTBL_ENTRY)&_ZN7S7300C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7300C93v32Ev,
  (VTBL_ENTRY)&_ZN7S7300C93v33Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C2D1Ev();
extern void _ZN7S7300C2D0Ev();
extern void _ZN7S7300C83v23Ev();
extern void _ZN7S7300C23v24Ev();
extern void _ZN7S7300C23v25Ev();
extern void _ZN7S7300C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C2__8S7300C11[] = {
  ABISELECT(56,32),
  ABISELECT(-24,-16),
  ABISELECT(32,16),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7300C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7300C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v26Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C8D1Ev();
extern void _ZN7S7300C8D0Ev();
extern void _ZN7S7300C83v23Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C87S7300C2__8S7300C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C8[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7300C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7300C83v23Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C33v11Ev();
extern void _ZN7S7300C33v12Ev();
extern void _ZN7S7300C33v13Ev();
extern void _ZN7S7300C33v14Ev();
extern void _ZN7S7300C33v15Ev();
extern void _ZN7S7300C33v16Ev();
extern void _ZN7S7300C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C3__7S7300C2__8S7300C11[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v17Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C5__7S7300C2__8S7300C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C67S7300C3__7S7300C2__8S7300C11[] = {
  ABISELECT(-64,-36),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
};
extern void _ZN7S7300C73v18Ev();
extern void _ZN7S7300C73v19Ev();
extern void _ZN7S7300C73v20Ev();
extern void _ZN7S7300C73v21Ev();
extern void _ZN7S7300C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C7__7S7300C2__8S7300C11[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v22Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C33v11Ev();
extern void _ZN7S7300C33v12Ev();
extern void _ZN7S7300C33v13Ev();
extern void _ZN7S7300C33v14Ev();
extern void _ZN7S7300C33v15Ev();
extern void _ZN7S7300C33v16Ev();
extern void _ZN7S7300C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C3__8S7300C11[] = {
  ABISELECT(-56,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C3[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v17Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C67S7300C3__8S7300C11[] = {
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C6[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C5__7S7300C67S7300C3__8S7300C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI7S7300C6[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C5__7S7300C3__8S7300C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI7S7300C3[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C6__7S7300C3__8S7300C11[] = {
  ABISELECT(-64,-36),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7300C3[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
};
static  VTT_ENTRY vtt_S7300C11[] = {
  {&(_ZTV8S7300C11[13]),  13,116},
  {&(_tg__ZTV8S7300C13__8S7300C11[9]),  9,18},
  {&(_tg__ZTV7S7300C3__8S7300C13__8S7300C11[17]),  17,25},
  {&(_tg__ZTV8S7300C13__8S7300C11[9]),  9,18},
  {&(_tg__ZTV7S7300C67S7300C3__8S7300C13__8S7300C11[3]),  3,10},
  {&(_tg__ZTV7S7300C9__8S7300C13__8S7300C11[5]),  5,8},
  {&(_ZTV8S7300C11[41]),  41,116},
  {&(_ZTV8S7300C11[65]),  65,116},
  {&(_ZTV8S7300C11[13]),  13,116},
  {&(_ZTV8S7300C11[76]),  76,116},
  {&(_ZTV8S7300C11[90]),  90,116},
  {&(_ZTV8S7300C11[41]),  41,116},
  {&(_ZTV8S7300C11[102]),  102,116},
  {&(_ZTV8S7300C11[113]),  113,116},
  {&(_tg__ZTV7S7300C2__8S7300C11[7]),  7,14},
  {&(_tg__ZTV7S7300C87S7300C2__8S7300C11[4]),  4,8},
  {&(_tg__ZTV7S7300C87S7300C2__8S7300C11[4]),  4,8},
  {&(_tg__ZTV7S7300C3__7S7300C2__8S7300C11[17]),  17,25},
  {&(_tg__ZTV7S7300C5__7S7300C2__8S7300C11[6]),  6,10},
  {&(_tg__ZTV7S7300C67S7300C3__7S7300C2__8S7300C11[3]),  3,10},
  {&(_tg__ZTV7S7300C7__7S7300C2__8S7300C11[7]),  7,12},
  {&(_tg__ZTV7S7300C2__8S7300C11[7]),  7,14},
  {&(_tg__ZTV7S7300C3__8S7300C11[3]),  3,11},
  {&(_tg__ZTV7S7300C67S7300C3__8S7300C11[3]),  3,10},
  {&(_tg__ZTV7S7300C5__7S7300C67S7300C3__8S7300C11[6]),  6,10},
  {&(_tg__ZTV7S7300C5__7S7300C3__8S7300C11[6]),  6,10},
  {&(_tg__ZTV7S7300C6__7S7300C3__8S7300C11[3]),  3,10},
};
extern VTBL_ENTRY _ZTI8S7300C11[];
extern  VTBL_ENTRY _ZTV8S7300C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7300C11[];
static VTBL_ENTRY alt_thunk_names38[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7300C11D0Ev,_ZTv0_n12_N8S7300C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S7300C11D0Ev,_ZThn52_N8S7300C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7300C11D1Ev,_ZTv0_n12_N8S7300C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S7300C11D1Ev,_ZThn52_N8S7300C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7300C11D0Ev,_ZTv0_n32_N8S7300C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S7300C11D0Ev,_ZThn16_N8S7300C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7300C11D1Ev,_ZTv0_n32_N8S7300C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S7300C11D1Ev,_ZThn16_N8S7300C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7300C11 = {  "S7300C11", // class name
  bases_S7300C11, 13,
  &(vtc_S7300C11[0]), // expected_vtbl_contents
  &(vtt_S7300C11[0]), // expected_vtt_contents
  ABISELECT(112,64), // object size
  NSPAIRA(_ZTI8S7300C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7300C11),116, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7300C11),27, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names38,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7300C10  : S7300C11 , S7300C2 {
  void *s7300c10f0;
  long double s7300c10f1;
  virtual void  v44(); // _ZN8S7300C103v44Ev
  virtual void  v45(); // _ZN8S7300C103v45Ev
  virtual void  v46(); // _ZN8S7300C103v46Ev
  virtual void  v47(); // _ZN8S7300C103v47Ev
  virtual void  v48(); // _ZN8S7300C103v48Ev
  virtual void  v49(); // _ZN8S7300C103v49Ev
  ~S7300C10(); // tgen
  S7300C10(); // tgen
};
//SIG(-1 S7300C10) C1{ BC2{ VBC3{ VBC4{ BC5{ v7} VBC6{ BC5 v8 v9 v10} BC7{ VBC6 BC5 v11 v12 v13 v14 v15 v16 Fi} v17 v18 v19 v20 v21 v22 v23 Fc} VBC8{ v24 v25 v26 v27 v28} BC9{ VBC5 vd v29} vd v30 v31 v32 FC7} VBC10{ vd v33 v34 v35 v36} BC11{ VBC4 VBC12{ v37 v38 v39 Fi} v40 v41 v42 v43 v44 Fp Fc[7]} vd v45 v46 v47 v48 v49} BC3 v1 v2 v3 v4 v5 v6 Fp FD}


void  S7300C10 ::v44(){vfunc_called(this, "_ZN8S7300C103v44Ev");}
void  S7300C10 ::v45(){vfunc_called(this, "_ZN8S7300C103v45Ev");}
void  S7300C10 ::v46(){vfunc_called(this, "_ZN8S7300C103v46Ev");}
void  S7300C10 ::v47(){vfunc_called(this, "_ZN8S7300C103v47Ev");}
void  S7300C10 ::v48(){vfunc_called(this, "_ZN8S7300C103v48Ev");}
void  S7300C10 ::v49(){vfunc_called(this, "_ZN8S7300C103v49Ev");}
S7300C10 ::~S7300C10(){ note_dtor("S7300C10", this);} // tgen
S7300C10 ::S7300C10(){ note_ctor("S7300C10", this);} // tgen

static void Test_S7300C10()
{
  extern Class_Descriptor cd_S7300C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,25)];
    init_test(&cd_S7300C10, buf);
    S7300C10 *dp, &lv = *(dp=new (buf) S7300C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,96), "sizeof(S7300C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7300C10)");
    /*is_ambiguous_... S7300C3::S7300C4 */ AMB_check_base_class_offset(lv, (S7300C4*)(S7300C3*), ABISELECT(112,64), "S7300C10");
    check_base_class_offset(lv, (S7300C4*)(S7300C5*), 0, "S7300C10");
    check_base_class_offset(lv, (S7300C5*)(S7300C3*), 0, "S7300C10");
    check_base_class_offset(lv, (S7300C5*)(S7300C6*)(S7300C3*), 0, "S7300C10");
    /*is_ambiguous_... S7300C6::S7300C4 */ AMB_check_base_class_offset(lv, (S7300C4*)(S7300C6*)(S7300C3*), ABISELECT(120,68), "S7300C10");
    check_base_class_offset(lv, (S7300C6*)(S7300C3*), ABISELECT(120,68), "S7300C10");
    /*is_ambiguous_... S7300C10::S7300C2 */ AMB_check_base_class_offset(lv, (S7300C3*)(S7300C2*), ABISELECT(112,64), "S7300C10");
    check_base_class_offset(lv, (S7300C3*)(S7300C13*)(S7300C11*), ABISELECT(112,64), "S7300C10");
    /*is_ambiguous_... S7300C10::S7300C2 */ AMB_check_base_class_offset(lv, (S7300C3*)(S7300C2*), ABISELECT(112,64), "S7300C10");
    /*is_ambiguous_... S7300C10::S7300C2 */ AMB_check_base_class_offset(lv, (S7300C7*)(S7300C2*), ABISELECT(136,80), "S7300C10");
    /*is_ambiguous_... S7300C10::S7300C2 */ AMB_check_base_class_offset(lv, (S7300C7*)(S7300C2*), ABISELECT(136,80), "S7300C10");
    /*is_ambiguous_... S7300C10::S7300C2 */ AMB_check_base_class_offset(lv, (S7300C4*)(S7300C8*)(S7300C2*), ABISELECT(80,48), "S7300C10");
    /*is_ambiguous_... S7300C10::S7300C2 */ AMB_check_base_class_offset(lv, (S7300C4*)(S7300C8*)(S7300C2*), ABISELECT(80,48), "S7300C10");
    /*is_ambiguous_... S7300C10::S7300C2 */ AMB_check_base_class_offset(lv, (S7300C8*)(S7300C2*), ABISELECT(80,48), "S7300C10");
    check_base_class_offset(lv, (S7300C2*)(S7300C11*), ABISELECT(80,48), "S7300C10");
    check_base_class_offset(lv, (S7300C12*)(S7300C11*), ABISELECT(144,84), "S7300C10");
    check_base_class_offset(lv, (S7300C9*)(S7300C13*)(S7300C11*), ABISELECT(152,88), "S7300C10");
    check_base_class_offset(lv, (S7300C13*)(S7300C11*), 0, "S7300C10");
    check_base_class_offset(lv, (S7300C11*), 0, "S7300C10");
    /*is_ambiguous_... S7300C10::S7300C2 */ AMB_check_base_class_offset(lv, (S7300C8*)(S7300C2*), ABISELECT(24,16), "S7300C10");
    /*is_ambiguous_... S7300C10::S7300C2 */ AMB_check_base_class_offset(lv, (S7300C2*), ABISELECT(24,16), "S7300C10");
    check_field_offset(lv, s7300c10f0, ABISELECT(56,32), "S7300C10.s7300c10f0");
    check_field_offset(lv, s7300c10f1, ABISELECT(64,36), "S7300C10.s7300c10f1");
    test_class_info(&lv, &cd_S7300C10);
    dp->~S7300C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7300C10(Test_S7300C10, "S7300C10", ABISELECT(176,96));

#else // __cplusplus

extern void _ZN8S7300C10C1Ev();
extern void _ZN8S7300C10D1Ev();
Name_Map name_map_S7300C10[] = {
  NSPAIR(_ZN8S7300C10C1Ev),
  NSPAIR(_ZN8S7300C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7300C4;
extern VTBL_ENTRY _ZTI7S7300C4[];
extern  VTBL_ENTRY _ZTV7S7300C4[];
extern Class_Descriptor cd_S7300C4;
extern VTBL_ENTRY _ZTI7S7300C4[];
extern  VTBL_ENTRY _ZTV7S7300C4[];
extern Class_Descriptor cd_S7300C5;
extern VTBL_ENTRY _ZTI7S7300C5[];
extern  VTBL_ENTRY _ZTV7S7300C5[];
extern Class_Descriptor cd_S7300C4;
extern VTBL_ENTRY _ZTI7S7300C4[];
extern  VTBL_ENTRY _ZTV7S7300C4[];
extern Class_Descriptor cd_S7300C6;
extern VTBL_ENTRY _ZTI7S7300C6[];
extern  VTBL_ENTRY _ZTV7S7300C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C6[];
extern Class_Descriptor cd_S7300C3;
extern VTBL_ENTRY _ZTI7S7300C3[];
extern  VTBL_ENTRY _ZTV7S7300C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C3[];
extern Class_Descriptor cd_S7300C7;
extern VTBL_ENTRY _ZTI7S7300C7[];
extern  VTBL_ENTRY _ZTV7S7300C7[];
extern Class_Descriptor cd_S7300C4;
extern VTBL_ENTRY _ZTI7S7300C4[];
extern  VTBL_ENTRY _ZTV7S7300C4[];
extern Class_Descriptor cd_S7300C8;
extern VTBL_ENTRY _ZTI7S7300C8[];
extern  VTBL_ENTRY _ZTV7S7300C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C8[];
extern Class_Descriptor cd_S7300C2;
extern VTBL_ENTRY _ZTI7S7300C2[];
extern  VTBL_ENTRY _ZTV7S7300C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C2[];
extern Class_Descriptor cd_S7300C12;
extern VTBL_ENTRY _ZTI8S7300C12[];
extern  VTBL_ENTRY _ZTV8S7300C12[];
extern Class_Descriptor cd_S7300C9;
extern VTBL_ENTRY _ZTI7S7300C9[];
extern  VTBL_ENTRY _ZTV7S7300C9[];
extern Class_Descriptor cd_S7300C13;
extern VTBL_ENTRY _ZTI8S7300C13[];
extern  VTBL_ENTRY _ZTV8S7300C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7300C13[];
extern Class_Descriptor cd_S7300C11;
extern VTBL_ENTRY _ZTI8S7300C11[];
extern  VTBL_ENTRY _ZTV8S7300C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7300C11[];
extern Class_Descriptor cd_S7300C8;
extern VTBL_ENTRY _ZTI7S7300C8[];
extern  VTBL_ENTRY _ZTV7S7300C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C8[];
extern Class_Descriptor cd_S7300C2;
extern VTBL_ENTRY _ZTI7S7300C2[];
extern  VTBL_ENTRY _ZTV7S7300C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C2[];
static Base_Class bases_S7300C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7300C4,    ABISELECT(112,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
    5, //immediately_derived
  0, 0},
  {&cd_S7300C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7300C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7300C4,    ABISELECT(120,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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7300C6,    ABISELECT(120,68), //bcp->offset
    93, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7300C3,    ABISELECT(112,64), //bcp->offset
    68, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7300C7,    ABISELECT(136,80), //bcp->offset
    103, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7300C4,    ABISELECT(80,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7300C8,    ABISELECT(80,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7300C2,    ABISELECT(80,48), //bcp->offset
    49, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7300C12,    ABISELECT(144,84), //bcp->offset
    115, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7300C9,    ABISELECT(152,88), //bcp->offset
    128, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7300C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //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_S7300C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //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_S7300C8,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7300C2,    ABISELECT(24,16), //bcp->offset
    35, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7300C10[];
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
extern void _ZN8S7300C133v34Ev();
extern void _ZN8S7300C133v35Ev();
extern void _ZN8S7300C133v36Ev();
extern void _ZN8S7300C133v37Ev();
extern void _ZN8S7300C133v38Ev();
extern void _ZN8S7300C10D1Ev();
extern void _ZN8S7300C10D0Ev();
extern void _ZN8S7300C113v39Ev();
extern void _ZN8S7300C113v40Ev();
extern void _ZN8S7300C113v41Ev();
extern void _ZN8S7300C113v42Ev();
extern void _ZN8S7300C113v43Ev();
extern void _ZN8S7300C103v44Ev();
extern void _ZN8S7300C103v45Ev();
extern void _ZN8S7300C103v46Ev();
extern void _ZN8S7300C103v47Ev();
extern void _ZN8S7300C103v48Ev();
extern void _ZN8S7300C103v49Ev();
extern void _ZN7S7300C42v1Ev();
extern void ABISELECT(_ZThn24_N8S7300C10D1Ev,_ZThn16_N8S7300C10D1Ev)();
extern void ABISELECT(_ZThn24_N8S7300C10D0Ev,_ZThn16_N8S7300C10D0Ev)();
extern void _ZN7S7300C83v23Ev();
extern void _ZN7S7300C23v24Ev();
extern void _ZN7S7300C23v25Ev();
extern void _ZN7S7300C23v26Ev();
extern void _ZN7S7300C42v1Ev();
extern void ABISELECT(_ZTv0_n64_N8S7300C10D1Ev,_ZTv0_n32_N8S7300C10D1Ev)();
extern void ABISELECT(_ZThn80_N8S7300C10D1Ev,_ZThn48_N8S7300C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7300C10D0Ev,_ZTv0_n32_N8S7300C10D0Ev)();
extern void ABISELECT(_ZThn80_N8S7300C10D0Ev,_ZThn48_N8S7300C10D0Ev)() __attribute__((weak));
extern void _ZN7S7300C83v23Ev();
extern void _ZN7S7300C23v24Ev();
extern void _ZN7S7300C23v25Ev();
extern void _ZN7S7300C23v26Ev();
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C33v11Ev();
extern void _ZN7S7300C33v12Ev();
extern void _ZN7S7300C33v13Ev();
extern void _ZN7S7300C33v14Ev();
extern void _ZN7S7300C33v15Ev();
extern void _ZN7S7300C33v16Ev();
extern void _ZN7S7300C33v17Ev();
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
extern void _ZN7S7300C73v18Ev();
extern void _ZN7S7300C73v19Ev();
extern void _ZN7S7300C73v20Ev();
extern void _ZN7S7300C73v21Ev();
extern void _ZN7S7300C73v22Ev();
extern void ABISELECT(_ZTv0_n24_N8S7300C10D1Ev,_ZTv0_n12_N8S7300C10D1Ev)();
extern void ABISELECT(_ZThn144_N8S7300C10D1Ev,_ZThn84_N8S7300C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7300C10D0Ev,_ZTv0_n12_N8S7300C10D0Ev)();
extern void ABISELECT(_ZThn144_N8S7300C10D0Ev,_ZThn84_N8S7300C10D0Ev)() __attribute__((weak));
extern void _ZN8S7300C123v27Ev();
extern void _ZN8S7300C123v28Ev();
extern void _ZN8S7300C123v29Ev();
extern void _ZN8S7300C123v30Ev();
extern void _ZN7S7300C93v31Ev();
extern void _ZN7S7300C93v32Ev();
extern void _ZN7S7300C93v33Ev();
static  VTBL_ENTRY vtc_S7300C10[] = {
  ABISELECT(144,84),
  ABISELECT(80,48),
  ABISELECT(136,80),
  ABISELECT(80,48),
  ABISELECT(152,88),
  0,
  ABISELECT(112,64),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7300C10[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v34Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v35Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v36Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v37Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v38Ev,
  (VTBL_ENTRY)&_ZN8S7300C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7300C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v39Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v40Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v41Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v42Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v43Ev,
  (VTBL_ENTRY)&_ZN8S7300C103v44Ev,
  (VTBL_ENTRY)&_ZN8S7300C103v45Ev,
  (VTBL_ENTRY)&_ZN8S7300C103v46Ev,
  (VTBL_ENTRY)&_ZN8S7300C103v47Ev,
  (VTBL_ENTRY)&_ZN8S7300C103v48Ev,
  (VTBL_ENTRY)&_ZN8S7300C103v49Ev,
  ABISELECT(112,64),
  ABISELECT(-24,-16),
  ABISELECT(88,48),
  ABISELECT(56,32),
  ABISELECT(56,32),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S7300C10[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S7300C10D1Ev,_ZThn16_N8S7300C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S7300C10D0Ev,_ZThn16_N8S7300C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7300C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v26Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-48),
  ABISELECT(56,32),
  ABISELECT(-80,-48),
  ABISELECT(32,16),
  0,
  0,
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI8S7300C10[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7300C10D1Ev,_ZTv0_n32_N8S7300C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7300C10D0Ev,_ZTv0_n32_N8S7300C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7300C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v26Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI8S7300C10[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v17Ev,
  ABISELECT(-120,-68),
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI8S7300C10[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI8S7300C10[0]),
  (VTBL_ENTRY)&_ZN7S7300C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v22Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S7300C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7300C10D1Ev,_ZTv0_n12_N8S7300C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7300C10D0Ev,_ZTv0_n12_N8S7300C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7300C123v27Ev,
  (VTBL_ENTRY)&_ZN8S7300C123v28Ev,
  (VTBL_ENTRY)&_ZN8S7300C123v29Ev,
  (VTBL_ENTRY)&_ZN8S7300C123v30Ev,
  0,
  0,
  0,
  ABISELECT(-152,-88),
  (VTBL_ENTRY)&(_ZTI8S7300C10[0]),
  (VTBL_ENTRY)&_ZN7S7300C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7300C93v32Ev,
  (VTBL_ENTRY)&_ZN7S7300C93v33Ev,
};
extern VTBL_ENTRY _ZTV8S7300C10[];
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
extern void _ZN8S7300C133v34Ev();
extern void _ZN8S7300C133v35Ev();
extern void _ZN8S7300C133v36Ev();
extern void _ZN8S7300C133v37Ev();
extern void _ZN8S7300C133v38Ev();
extern void _ZN8S7300C11D1Ev();
extern void _ZN8S7300C11D0Ev();
extern void _ZN8S7300C113v39Ev();
extern void _ZN8S7300C113v40Ev();
extern void _ZN8S7300C113v41Ev();
extern void _ZN8S7300C113v42Ev();
extern void _ZN8S7300C113v43Ev();
static  VTBL_ENTRY _tg__ZTV8S7300C11__8S7300C10[] = {
  ABISELECT(144,84),
  ABISELECT(80,48),
  ABISELECT(136,80),
  ABISELECT(80,48),
  ABISELECT(152,88),
  0,
  ABISELECT(112,64),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7300C11[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v34Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v35Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v36Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v37Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v38Ev,
  (VTBL_ENTRY)&_ZN8S7300C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7300C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v39Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v40Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v41Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v42Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v43Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
extern void _ZN8S7300C133v34Ev();
extern void _ZN8S7300C133v35Ev();
extern void _ZN8S7300C133v36Ev();
extern void _ZN8S7300C133v37Ev();
extern void _ZN8S7300C133v38Ev();
static  VTBL_ENTRY _tg__ZTV8S7300C138S7300C11__8S7300C10[] = {
  ABISELECT(152,88),
  0,
  ABISELECT(112,64),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7300C13[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v34Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v35Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v36Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v37Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v38Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C33v11Ev();
extern void _ZN7S7300C33v12Ev();
extern void _ZN7S7300C33v13Ev();
extern void _ZN7S7300C33v14Ev();
extern void _ZN7S7300C33v15Ev();
extern void _ZN7S7300C33v16Ev();
extern void _ZN7S7300C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C3__8S7300C138S7300C11__8S7300C10[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI8S7300C13[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v17Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C67S7300C3__8S7300C138S7300C11__8S7300C10[] = {
  ABISELECT(-120,-68),
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI8S7300C13[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
};
extern void _ZN7S7300C93v31Ev();
extern void _ZN7S7300C93v32Ev();
extern void _ZN7S7300C93v33Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C9__8S7300C138S7300C11__8S7300C10[] = {
  0,
  0,
  0,
  ABISELECT(-152,-88),
  (VTBL_ENTRY)&(_ZTI8S7300C13[0]),
  (VTBL_ENTRY)&_ZN7S7300C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7300C93v32Ev,
  (VTBL_ENTRY)&_ZN7S7300C93v33Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void ABISELECT(_ZTv0_n64_N8S7300C11D1Ev,_ZTv0_n32_N8S7300C11D1Ev)();
extern void ABISELECT(_ZThn80_N8S7300C11D1Ev,_ZThn48_N8S7300C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7300C11D0Ev,_ZTv0_n32_N8S7300C11D0Ev)();
extern void ABISELECT(_ZThn80_N8S7300C11D0Ev,_ZThn48_N8S7300C11D0Ev)() __attribute__((weak));
extern void _ZN7S7300C83v23Ev();
extern void _ZN7S7300C23v24Ev();
extern void _ZN7S7300C23v25Ev();
extern void _ZN7S7300C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C2__8S7300C11__8S7300C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-80,-48),
  ABISELECT(56,32),
  ABISELECT(-80,-48),
  ABISELECT(32,16),
  0,
  0,
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI8S7300C11[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7300C11D1Ev,_ZTv0_n32_N8S7300C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7300C11D0Ev,_ZTv0_n32_N8S7300C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7300C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v26Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C33v11Ev();
extern void _ZN7S7300C33v12Ev();
extern void _ZN7S7300C33v13Ev();
extern void _ZN7S7300C33v14Ev();
extern void _ZN7S7300C33v15Ev();
extern void _ZN7S7300C33v16Ev();
extern void _ZN7S7300C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C3__8S7300C11__8S7300C10[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI8S7300C11[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v17Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C67S7300C3__8S7300C11__8S7300C10[] = {
  ABISELECT(-120,-68),
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI8S7300C11[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
};
extern void _ZN7S7300C73v18Ev();
extern void _ZN7S7300C73v19Ev();
extern void _ZN7S7300C73v20Ev();
extern void _ZN7S7300C73v21Ev();
extern void _ZN7S7300C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C7__8S7300C11__8S7300C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI8S7300C11[0]),
  (VTBL_ENTRY)&_ZN7S7300C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v22Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7300C11D1Ev,_ZTv0_n12_N8S7300C11D1Ev)();
extern void ABISELECT(_ZThn144_N8S7300C11D1Ev,_ZThn84_N8S7300C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7300C11D0Ev,_ZTv0_n12_N8S7300C11D0Ev)();
extern void ABISELECT(_ZThn144_N8S7300C11D0Ev,_ZThn84_N8S7300C11D0Ev)() __attribute__((weak));
extern void _ZN8S7300C123v27Ev();
extern void _ZN8S7300C123v28Ev();
extern void _ZN8S7300C123v29Ev();
extern void _ZN8S7300C123v30Ev();
static  VTBL_ENTRY _tg__ZTV8S7300C12__8S7300C11__8S7300C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S7300C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7300C11D1Ev,_ZTv0_n12_N8S7300C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7300C11D0Ev,_ZTv0_n12_N8S7300C11D0Ev),
  (VTBL_ENTRY)&_ZN8S7300C123v27Ev,
  (VTBL_ENTRY)&_ZN8S7300C123v28Ev,
  (VTBL_ENTRY)&_ZN8S7300C123v29Ev,
  (VTBL_ENTRY)&_ZN8S7300C123v30Ev,
};
extern void _ZN7S7300C93v31Ev();
extern void _ZN7S7300C93v32Ev();
extern void _ZN7S7300C93v33Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C9__8S7300C11__8S7300C10[] = {
  0,
  0,
  0,
  ABISELECT(-152,-88),
  (VTBL_ENTRY)&(_ZTI8S7300C11[0]),
  (VTBL_ENTRY)&_ZN7S7300C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7300C93v32Ev,
  (VTBL_ENTRY)&_ZN7S7300C93v33Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C2D1Ev();
extern void _ZN7S7300C2D0Ev();
extern void _ZN7S7300C83v23Ev();
extern void _ZN7S7300C23v24Ev();
extern void _ZN7S7300C23v25Ev();
extern void _ZN7S7300C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C2__A__8S7300C10[] = {
  ABISELECT(112,64),
  ABISELECT(-24,-16),
  ABISELECT(88,48),
  ABISELECT(56,32),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7300C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7300C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v26Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C8D1Ev();
extern void _ZN7S7300C8D0Ev();
extern void _ZN7S7300C83v23Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C87S7300C2__A1__8S7300C10[] = {
  ABISELECT(56,32),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C8[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7300C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7300C83v23Ev,
};
extern void _ZN7S7300C42v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C4__7S7300C87S7300C2__A1__8S7300C10[] = {
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7300C8[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C33v11Ev();
extern void _ZN7S7300C33v12Ev();
extern void _ZN7S7300C33v13Ev();
extern void _ZN7S7300C33v14Ev();
extern void _ZN7S7300C33v15Ev();
extern void _ZN7S7300C33v16Ev();
extern void _ZN7S7300C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C3__7S7300C2__A__8S7300C10[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-64),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v17Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C5__7S7300C2__A__8S7300C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C67S7300C3__7S7300C2__A__8S7300C10[] = {
  ABISELECT(-120,-68),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
};
extern void _ZN7S7300C73v18Ev();
extern void _ZN7S7300C73v19Ev();
extern void _ZN7S7300C73v20Ev();
extern void _ZN7S7300C73v21Ev();
extern void _ZN7S7300C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C7__7S7300C2__A__8S7300C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v22Ev,
};
extern void _ZN7S7300C42v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C4__A3__7S7300C2__A__8S7300C10[] = {
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C2D1Ev();
extern void _ZN7S7300C2D0Ev();
extern void _ZN7S7300C83v23Ev();
extern void _ZN7S7300C23v24Ev();
extern void _ZN7S7300C23v25Ev();
extern void _ZN7S7300C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C2__8S7300C10[] = {
  ABISELECT(56,32),
  ABISELECT(-80,-48),
  ABISELECT(32,16),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7300C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7300C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v26Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C8D1Ev();
extern void _ZN7S7300C8D0Ev();
extern void _ZN7S7300C83v23Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C87S7300C2__8S7300C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C8[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7300C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7300C83v23Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C33v11Ev();
extern void _ZN7S7300C33v12Ev();
extern void _ZN7S7300C33v13Ev();
extern void _ZN7S7300C33v14Ev();
extern void _ZN7S7300C33v15Ev();
extern void _ZN7S7300C33v16Ev();
extern void _ZN7S7300C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C3__7S7300C2__8S7300C10[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-64),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v17Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C5__7S7300C2__8S7300C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(80,48),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C67S7300C3__7S7300C2__8S7300C10[] = {
  ABISELECT(-120,-68),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
};
extern void _ZN7S7300C73v18Ev();
extern void _ZN7S7300C73v19Ev();
extern void _ZN7S7300C73v20Ev();
extern void _ZN7S7300C73v21Ev();
extern void _ZN7S7300C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C7__7S7300C2__8S7300C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v22Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C33v11Ev();
extern void _ZN7S7300C33v12Ev();
extern void _ZN7S7300C33v13Ev();
extern void _ZN7S7300C33v14Ev();
extern void _ZN7S7300C33v15Ev();
extern void _ZN7S7300C33v16Ev();
extern void _ZN7S7300C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C3__8S7300C10[] = {
  ABISELECT(-112,-64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C3[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v17Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C67S7300C3__8S7300C10[] = {
  ABISELECT(-120,-68),
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C6[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C5__7S7300C67S7300C3__8S7300C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(120,68),
  (VTBL_ENTRY)&(_ZTI7S7300C6[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C5__7S7300C3__8S7300C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(112,64),
  (VTBL_ENTRY)&(_ZTI7S7300C3[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C6__7S7300C3__8S7300C10[] = {
  ABISELECT(-120,-68),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7300C3[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
};
static  VTT_ENTRY vtt_S7300C10[] = {
  {&(_ZTV8S7300C10[13]),  13,136},
  {&(_tg__ZTV8S7300C11__8S7300C10[13]),  13,29},
  {&(_tg__ZTV8S7300C138S7300C11__8S7300C10[9]),  9,18},
  {&(_tg__ZTV7S7300C3__8S7300C138S7300C11__8S7300C10[17]),  17,25},
  {&(_tg__ZTV8S7300C138S7300C11__8S7300C10[9]),  9,18},
  {&(_tg__ZTV7S7300C67S7300C3__8S7300C138S7300C11__8S7300C10[3]),  3,10},
  {&(_tg__ZTV7S7300C9__8S7300C138S7300C11__8S7300C10[5]),  5,8},
  {&(_tg__ZTV7S7300C2__8S7300C11__8S7300C10[12]),  12,19},
  {&(_tg__ZTV7S7300C3__8S7300C11__8S7300C10[17]),  17,25},
  {&(_tg__ZTV8S7300C11__8S7300C10[13]),  13,29},
  {&(_tg__ZTV7S7300C67S7300C3__8S7300C11__8S7300C10[3]),  3,10},
  {&(_tg__ZTV7S7300C7__8S7300C11__8S7300C10[7]),  7,12},
  {&(_tg__ZTV7S7300C2__8S7300C11__8S7300C10[12]),  12,19},
  {&(_tg__ZTV8S7300C12__8S7300C11__8S7300C10[7]),  7,13},
  {&(_tg__ZTV7S7300C9__8S7300C11__8S7300C10[5]),  5,8},
  {&(_tg__ZTV7S7300C2__A__8S7300C10[7]),  7,14},
  {&(_tg__ZTV7S7300C87S7300C2__A1__8S7300C10[4]),  4,8},
  {&(_tg__ZTV7S7300C4__7S7300C87S7300C2__A1__8S7300C10[3]),  3,4},
  {&(_tg__ZTV7S7300C3__7S7300C2__A__8S7300C10[17]),  17,25},
  {&(_tg__ZTV7S7300C5__7S7300C2__A__8S7300C10[6]),  6,10},
  {&(_tg__ZTV7S7300C67S7300C3__7S7300C2__A__8S7300C10[3]),  3,10},
  {&(_tg__ZTV7S7300C7__7S7300C2__A__8S7300C10[7]),  7,12},
  {&(_tg__ZTV7S7300C4__A3__7S7300C2__A__8S7300C10[3]),  3,4},
  {&(_ZTV8S7300C10[61]),  61,136},
  {&(_ZTV8S7300C10[85]),  85,136},
  {&(_ZTV8S7300C10[13]),  13,136},
  {&(_ZTV8S7300C10[96]),  96,136},
  {&(_ZTV8S7300C10[110]),  110,136},
  {&(_ZTV8S7300C10[61]),  61,136},
  {&(_ZTV8S7300C10[122]),  122,136},
  {&(_ZTV8S7300C10[133]),  133,136},
  {&(_ZTV8S7300C10[42]),  42,136},
  {&(_tg__ZTV7S7300C2__8S7300C10[7]),  7,14},
  {&(_tg__ZTV7S7300C87S7300C2__8S7300C10[4]),  4,8},
  {&(_tg__ZTV7S7300C87S7300C2__8S7300C10[4]),  4,8},
  {&(_tg__ZTV7S7300C3__7S7300C2__8S7300C10[17]),  17,25},
  {&(_tg__ZTV7S7300C5__7S7300C2__8S7300C10[6]),  6,10},
  {&(_tg__ZTV7S7300C67S7300C3__7S7300C2__8S7300C10[3]),  3,10},
  {&(_tg__ZTV7S7300C7__7S7300C2__8S7300C10[7]),  7,12},
  {&(_tg__ZTV7S7300C2__8S7300C10[7]),  7,14},
  {&(_tg__ZTV7S7300C3__8S7300C10[3]),  3,11},
  {&(_tg__ZTV7S7300C67S7300C3__8S7300C10[3]),  3,10},
  {&(_tg__ZTV7S7300C5__7S7300C67S7300C3__8S7300C10[6]),  6,10},
  {&(_tg__ZTV7S7300C5__7S7300C3__8S7300C10[6]),  6,10},
  {&(_tg__ZTV7S7300C6__7S7300C3__8S7300C10[3]),  3,10},
};
extern VTBL_ENTRY _ZTI8S7300C10[];
extern  VTBL_ENTRY _ZTV8S7300C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7300C10[];
static VTBL_ENTRY alt_thunk_names39[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7300C11D0Ev,_ZTv0_n12_N8S7300C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S7300C11D0Ev,_ZThn84_N8S7300C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7300C11D1Ev,_ZTv0_n12_N8S7300C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S7300C11D1Ev,_ZThn84_N8S7300C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7300C11D0Ev,_ZTv0_n32_N8S7300C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7300C11D0Ev,_ZThn48_N8S7300C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7300C11D1Ev,_ZTv0_n32_N8S7300C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7300C11D1Ev,_ZThn48_N8S7300C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7300C10D0Ev,_ZTv0_n12_N8S7300C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S7300C10D0Ev,_ZThn84_N8S7300C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7300C10D1Ev,_ZTv0_n12_N8S7300C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S7300C10D1Ev,_ZThn84_N8S7300C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7300C10D0Ev,_ZTv0_n32_N8S7300C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7300C10D0Ev,_ZThn48_N8S7300C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7300C10D1Ev,_ZTv0_n32_N8S7300C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7300C10D1Ev,_ZThn48_N8S7300C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7300C10 = {  "S7300C10", // class name
  bases_S7300C10, 16,
  &(vtc_S7300C10[0]), // expected_vtbl_contents
  &(vtt_S7300C10[0]), // expected_vtt_contents
  ABISELECT(176,96), // object size
  NSPAIRA(_ZTI8S7300C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7300C10),136, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7300C10),45, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names39,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7300C1  : S7300C2 , virtual S7300C9 , S7300C10 {
  void *s7300c1f0[6];
  ::S7300C6 s7300c1f1;
  virtual  ~S7300C1(); // _ZN7S7300C1D2Ev
  S7300C1(); // tgen
};
//SIG(1 S7300C1) C1{ BC2{ VBC3{ BC4{ v1} VBC5{ BC4 v2 v3 v4} BC6{ VBC5 BC4 v5 v6 v7 v8 v9 v10 Fi} v11 v12 v13 v14 v15 v16 v17 Fc} VBC7{ v18 v19 v20 v21 v22} BC8{ VBC4 vd v23} vd v24 v25 v26 FC6} VBC9{ v27 v28 v29 Fi} BC10{ BC11{ VBC2 VBC12{ vd v30 v31 v32 v33} BC13{ VBC3 VBC9 v34 v35 v36 v37 v38 Fp Fc[7]} vd v39 v40 v41 v42 v43} BC2 v44 v45 v46 v47 v48 v49 Fp FD} vd Fp[6] FC6}


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

static void Test_S7300C1()
{
  extern Class_Descriptor cd_S7300C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,38)];
    init_test(&cd_S7300C1, buf);
    S7300C1 *dp, &lv = *(dp=new (buf) S7300C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,148), "sizeof(S7300C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7300C1)");
    /*is_ambiguous_... S7300C3::S7300C4 */ AMB_check_base_class_offset(lv, (S7300C4*)(S7300C3*), ABISELECT(184,100), "S7300C1");
    check_base_class_offset(lv, (S7300C4*)(S7300C5*), ABISELECT(32,16), "S7300C1");
    check_base_class_offset(lv, (S7300C5*)(S7300C3*), ABISELECT(32,16), "S7300C1");
    check_base_class_offset(lv, (S7300C5*)(S7300C6*)(S7300C3*), ABISELECT(32,16), "S7300C1");
    /*is_ambiguous_... S7300C6::S7300C4 */ AMB_check_base_class_offset(lv, (S7300C4*)(S7300C6*)(S7300C3*), ABISELECT(192,104), "S7300C1");
    check_base_class_offset(lv, (S7300C6*)(S7300C3*), ABISELECT(192,104), "S7300C1");
    /*is_ambiguous_... S7300C1::S7300C2 */ AMB_check_base_class_offset(lv, (S7300C3*)(S7300C2*), ABISELECT(184,100), "S7300C1");
    /*is_ambiguous_... S7300C1::S7300C2 */ AMB_check_base_class_offset(lv, (S7300C3*)(S7300C2*), ABISELECT(184,100), "S7300C1");
    check_base_class_offset(lv, (S7300C3*)(S7300C13*)(S7300C11*)(S7300C10*), ABISELECT(184,100), "S7300C1");
    /*is_ambiguous_... S7300C10::S7300C2 */ AMB_check_base_class_offset(lv, (S7300C3*)(S7300C2*)(S7300C10*), ABISELECT(184,100), "S7300C1");
    /*is_ambiguous_... S7300C1::S7300C2 */ AMB_check_base_class_offset(lv, (S7300C7*)(S7300C2*), ABISELECT(208,116), "S7300C1");
    /*is_ambiguous_... S7300C1::S7300C2 */ AMB_check_base_class_offset(lv, (S7300C7*)(S7300C2*), ABISELECT(208,116), "S7300C1");
    /*is_ambiguous_... S7300C10::S7300C2 */ AMB_check_base_class_offset(lv, (S7300C7*)(S7300C2*)(S7300C10*), ABISELECT(208,116), "S7300C1");
    /*is_ambiguous_... S7300C1::S7300C2 */ AMB_check_base_class_offset(lv, (S7300C4*)(S7300C8*)(S7300C2*), 0, "S7300C1");
    /*is_ambiguous_... S7300C1::S7300C2 */ AMB_check_base_class_offset(lv, (S7300C4*)(S7300C8*)(S7300C2*), 0, "S7300C1");
    /*is_ambiguous_... S7300C10::S7300C2 */ AMB_check_base_class_offset(lv, (S7300C4*)(S7300C8*)(S7300C2*)(S7300C10*), 0, "S7300C1");
    /*is_ambiguous_... S7300C1::S7300C2 */ AMB_check_base_class_offset(lv, (S7300C8*)(S7300C2*), 0, "S7300C1");
    /*is_ambiguous_... S7300C1::S7300C2 */ AMB_check_base_class_offset(lv, (S7300C2*), 0, "S7300C1");
    check_base_class_offset(lv, (S7300C9*), ABISELECT(216,120), "S7300C1");
    check_base_class_offset(lv, (S7300C9*)(S7300C13*)(S7300C11*)(S7300C10*), ABISELECT(216,120), "S7300C1");
    /*is_ambiguous_... S7300C1::S7300C2 */ AMB_check_base_class_offset(lv, (S7300C8*)(S7300C2*), ABISELECT(232,128), "S7300C1");
    check_base_class_offset(lv, (S7300C2*)(S7300C11*)(S7300C10*), ABISELECT(232,128), "S7300C1");
    check_base_class_offset(lv, (S7300C12*)(S7300C11*)(S7300C10*), ABISELECT(264,144), "S7300C1");
    check_base_class_offset(lv, (S7300C13*)(S7300C11*)(S7300C10*), ABISELECT(32,16), "S7300C1");
    check_base_class_offset(lv, (S7300C11*)(S7300C10*), ABISELECT(32,16), "S7300C1");
    /*is_ambiguous_... S7300C10::S7300C2 */ AMB_check_base_class_offset(lv, (S7300C8*)(S7300C2*)(S7300C10*), ABISELECT(56,32), "S7300C1");
    /*is_ambiguous_... S7300C10::S7300C2 */ AMB_check_base_class_offset(lv, (S7300C2*)(S7300C10*), ABISELECT(56,32), "S7300C1");
    check_base_class_offset(lv, (S7300C10*), ABISELECT(32,16), "S7300C1");
    check_field_offset(lv, s7300c1f0, ABISELECT(112,64), "S7300C1.s7300c1f0");
    check_field_offset(lv, s7300c1f1, ABISELECT(160,88), "S7300C1.s7300c1f1");
    test_class_info(&lv, &cd_S7300C1);
    dp->~S7300C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7300C1(Test_S7300C1, "S7300C1", ABISELECT(272,148));

#else // __cplusplus

extern void _ZN7S7300C1C1Ev();
extern void _ZN7S7300C1D2Ev();
Name_Map name_map_S7300C1[] = {
  NSPAIR(_ZN7S7300C1C1Ev),
  NSPAIR(_ZN7S7300C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7300C4;
extern VTBL_ENTRY _ZTI7S7300C4[];
extern  VTBL_ENTRY _ZTV7S7300C4[];
extern Class_Descriptor cd_S7300C4;
extern VTBL_ENTRY _ZTI7S7300C4[];
extern  VTBL_ENTRY _ZTV7S7300C4[];
extern Class_Descriptor cd_S7300C5;
extern VTBL_ENTRY _ZTI7S7300C5[];
extern  VTBL_ENTRY _ZTV7S7300C5[];
extern Class_Descriptor cd_S7300C4;
extern VTBL_ENTRY _ZTI7S7300C4[];
extern  VTBL_ENTRY _ZTV7S7300C4[];
extern Class_Descriptor cd_S7300C6;
extern VTBL_ENTRY _ZTI7S7300C6[];
extern  VTBL_ENTRY _ZTV7S7300C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C6[];
extern Class_Descriptor cd_S7300C3;
extern VTBL_ENTRY _ZTI7S7300C3[];
extern  VTBL_ENTRY _ZTV7S7300C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C3[];
extern Class_Descriptor cd_S7300C7;
extern VTBL_ENTRY _ZTI7S7300C7[];
extern  VTBL_ENTRY _ZTV7S7300C7[];
extern Class_Descriptor cd_S7300C4;
extern VTBL_ENTRY _ZTI7S7300C4[];
extern  VTBL_ENTRY _ZTV7S7300C4[];
extern Class_Descriptor cd_S7300C8;
extern VTBL_ENTRY _ZTI7S7300C8[];
extern  VTBL_ENTRY _ZTV7S7300C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C8[];
extern Class_Descriptor cd_S7300C2;
extern VTBL_ENTRY _ZTI7S7300C2[];
extern  VTBL_ENTRY _ZTV7S7300C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C2[];
extern Class_Descriptor cd_S7300C9;
extern VTBL_ENTRY _ZTI7S7300C9[];
extern  VTBL_ENTRY _ZTV7S7300C9[];
extern Class_Descriptor cd_S7300C8;
extern VTBL_ENTRY _ZTI7S7300C8[];
extern  VTBL_ENTRY _ZTV7S7300C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C8[];
extern Class_Descriptor cd_S7300C2;
extern VTBL_ENTRY _ZTI7S7300C2[];
extern  VTBL_ENTRY _ZTV7S7300C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C2[];
extern Class_Descriptor cd_S7300C12;
extern VTBL_ENTRY _ZTI8S7300C12[];
extern  VTBL_ENTRY _ZTV8S7300C12[];
extern Class_Descriptor cd_S7300C13;
extern VTBL_ENTRY _ZTI8S7300C13[];
extern  VTBL_ENTRY _ZTV8S7300C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7300C13[];
extern Class_Descriptor cd_S7300C11;
extern VTBL_ENTRY _ZTI8S7300C11[];
extern  VTBL_ENTRY _ZTV8S7300C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7300C11[];
extern Class_Descriptor cd_S7300C8;
extern VTBL_ENTRY _ZTI7S7300C8[];
extern  VTBL_ENTRY _ZTV7S7300C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C8[];
extern Class_Descriptor cd_S7300C2;
extern VTBL_ENTRY _ZTI7S7300C2[];
extern  VTBL_ENTRY _ZTV7S7300C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C2[];
extern Class_Descriptor cd_S7300C10;
extern VTBL_ENTRY _ZTI8S7300C10[];
extern  VTBL_ENTRY _ZTV8S7300C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7300C10[];
static Base_Class bases_S7300C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7300C4,    ABISELECT(184,100), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S7300C4,    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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7300C5,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7300C4,    ABISELECT(192,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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7300C6,    ABISELECT(192,104), //bcp->offset
    91, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7300C3,    ABISELECT(184,100), //bcp->offset
    66, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7300C7,    ABISELECT(208,116), //bcp->offset
    101, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7300C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7300C8,    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
    13, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7300C2,    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
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7300C9,    ABISELECT(216,120), //bcp->offset
    113, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7300C8,    ABISELECT(232,128), //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
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7300C2,    ABISELECT(232,128), //bcp->offset
    121, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7300C12,    ABISELECT(264,144), //bcp->offset
    140, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    50, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7300C13,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7300C11,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7300C8,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7300C2,    ABISELECT(56,32), //bcp->offset
    52, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    51, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7300C10,    ABISELECT(32,16), //bcp->offset
    17, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7300C1[];
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C1D1Ev();
extern void _ZN7S7300C1D0Ev();
extern void _ZN7S7300C83v23Ev();
extern void _ZN7S7300C23v24Ev();
extern void _ZN7S7300C23v25Ev();
extern void _ZN7S7300C23v26Ev();
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
extern void _ZN8S7300C133v34Ev();
extern void _ZN8S7300C133v35Ev();
extern void _ZN8S7300C133v36Ev();
extern void _ZN8S7300C133v37Ev();
extern void _ZN8S7300C133v38Ev();
extern void ABISELECT(_ZThn32_N7S7300C1D1Ev,_ZThn16_N7S7300C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S7300C1D0Ev,_ZThn16_N7S7300C1D0Ev)();
extern void _ZN8S7300C113v39Ev();
extern void _ZN8S7300C113v40Ev();
extern void _ZN8S7300C113v41Ev();
extern void _ZN8S7300C113v42Ev();
extern void _ZN8S7300C113v43Ev();
extern void _ZN8S7300C103v44Ev();
extern void _ZN8S7300C103v45Ev();
extern void _ZN8S7300C103v46Ev();
extern void _ZN8S7300C103v47Ev();
extern void _ZN8S7300C103v48Ev();
extern void _ZN8S7300C103v49Ev();
extern void _ZN7S7300C42v1Ev();
extern void ABISELECT(_ZThn56_N7S7300C1D1Ev,_ZThn32_N7S7300C1D1Ev)();
extern void ABISELECT(_ZThn56_N7S7300C1D0Ev,_ZThn32_N7S7300C1D0Ev)();
extern void _ZN7S7300C83v23Ev();
extern void _ZN7S7300C23v24Ev();
extern void _ZN7S7300C23v25Ev();
extern void _ZN7S7300C23v26Ev();
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C33v11Ev();
extern void _ZN7S7300C33v12Ev();
extern void _ZN7S7300C33v13Ev();
extern void _ZN7S7300C33v14Ev();
extern void _ZN7S7300C33v15Ev();
extern void _ZN7S7300C33v16Ev();
extern void _ZN7S7300C33v17Ev();
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
extern void _ZN7S7300C73v18Ev();
extern void _ZN7S7300C73v19Ev();
extern void _ZN7S7300C73v20Ev();
extern void _ZN7S7300C73v21Ev();
extern void _ZN7S7300C73v22Ev();
extern void _ZN7S7300C93v31Ev();
extern void _ZN7S7300C93v32Ev();
extern void _ZN7S7300C93v33Ev();
extern void _ZN7S7300C42v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S7300C1D1Ev,_ZTv0_n32_N7S7300C1D1Ev)();
extern void ABISELECT(_ZThn232_N7S7300C1D1Ev,_ZThn128_N7S7300C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7300C1D0Ev,_ZTv0_n32_N7S7300C1D0Ev)();
extern void ABISELECT(_ZThn232_N7S7300C1D0Ev,_ZThn128_N7S7300C1D0Ev)() __attribute__((weak));
extern void _ZN7S7300C83v23Ev();
extern void _ZN7S7300C23v24Ev();
extern void _ZN7S7300C23v25Ev();
extern void _ZN7S7300C23v26Ev();
extern void ABISELECT(_ZTv0_n24_N7S7300C1D1Ev,_ZTv0_n12_N7S7300C1D1Ev)();
extern void ABISELECT(_ZThn264_N7S7300C1D1Ev,_ZThn144_N7S7300C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7300C1D0Ev,_ZTv0_n12_N7S7300C1D0Ev)();
extern void ABISELECT(_ZThn264_N7S7300C1D0Ev,_ZThn144_N7S7300C1D0Ev)() __attribute__((weak));
extern void _ZN8S7300C123v27Ev();
extern void _ZN8S7300C123v28Ev();
extern void _ZN8S7300C123v29Ev();
extern void _ZN8S7300C123v30Ev();
static  VTBL_ENTRY vtc_S7300C1[] = {
  ABISELECT(264,144),
  ABISELECT(232,128),
  ABISELECT(216,120),
  ABISELECT(208,116),
  ABISELECT(32,16),
  ABISELECT(184,100),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C1[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7300C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7300C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v26Ev,
  ABISELECT(232,128),
  ABISELECT(-32,-16),
  ABISELECT(176,100),
  ABISELECT(200,112),
  ABISELECT(184,104),
  0,
  ABISELECT(152,84),
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7300C1[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v34Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v35Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v36Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v37Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v38Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7300C1D1Ev,_ZThn16_N7S7300C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7300C1D0Ev,_ZThn16_N7S7300C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7300C113v39Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v40Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v41Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v42Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v43Ev,
  (VTBL_ENTRY)&_ZN8S7300C103v44Ev,
  (VTBL_ENTRY)&_ZN8S7300C103v45Ev,
  (VTBL_ENTRY)&_ZN8S7300C103v46Ev,
  (VTBL_ENTRY)&_ZN8S7300C103v47Ev,
  (VTBL_ENTRY)&_ZN8S7300C103v48Ev,
  (VTBL_ENTRY)&_ZN8S7300C103v49Ev,
  ABISELECT(152,84),
  ABISELECT(-24,-16),
  ABISELECT(128,68),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7300C1[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S7300C1D1Ev,_ZThn32_N7S7300C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S7300C1D0Ev,_ZThn32_N7S7300C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7300C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v26Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-152,-84),
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI7S7300C1[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v17Ev,
  ABISELECT(-160,-88),
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI7S7300C1[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-116),
  (VTBL_ENTRY)&(_ZTI7S7300C1[0]),
  (VTBL_ENTRY)&_ZN7S7300C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v22Ev,
  0,
  0,
  0,
  ABISELECT(-216,-120),
  (VTBL_ENTRY)&(_ZTI7S7300C1[0]),
  (VTBL_ENTRY)&_ZN7S7300C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7300C93v32Ev,
  (VTBL_ENTRY)&_ZN7S7300C93v33Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-232,-128),
  ABISELECT(-24,-12),
  ABISELECT(-200,-112),
  ABISELECT(-48,-28),
  ABISELECT(-232,-128),
  ABISELECT(-232,-128),
  ABISELECT(-232,-128),
  (VTBL_ENTRY)&(_ZTI7S7300C1[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7300C1D1Ev,_ZTv0_n32_N7S7300C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7300C1D0Ev,_ZTv0_n32_N7S7300C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7300C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v26Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-264,-144),
  ABISELECT(-264,-144),
  (VTBL_ENTRY)&(_ZTI7S7300C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7300C1D1Ev,_ZTv0_n12_N7S7300C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7300C1D0Ev,_ZTv0_n12_N7S7300C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7300C123v27Ev,
  (VTBL_ENTRY)&_ZN8S7300C123v28Ev,
  (VTBL_ENTRY)&_ZN8S7300C123v29Ev,
  (VTBL_ENTRY)&_ZN8S7300C123v30Ev,
};
extern VTBL_ENTRY _ZTV7S7300C1[];
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C2D1Ev();
extern void _ZN7S7300C2D0Ev();
extern void _ZN7S7300C83v23Ev();
extern void _ZN7S7300C23v24Ev();
extern void _ZN7S7300C23v25Ev();
extern void _ZN7S7300C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C2__A__7S7300C1[] = {
  ABISELECT(208,116),
  ABISELECT(32,16),
  ABISELECT(184,100),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7300C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7300C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v26Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C8D1Ev();
extern void _ZN7S7300C8D0Ev();
extern void _ZN7S7300C83v23Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C87S7300C2__7S7300C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C8[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7300C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7300C83v23Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C33v11Ev();
extern void _ZN7S7300C33v12Ev();
extern void _ZN7S7300C33v13Ev();
extern void _ZN7S7300C33v14Ev();
extern void _ZN7S7300C33v15Ev();
extern void _ZN7S7300C33v16Ev();
extern void _ZN7S7300C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C3__7S7300C2__A__7S7300C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-152,-84),
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v17Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C5__7S7300C2__A__7S7300C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C67S7300C3__7S7300C2__A__7S7300C1[] = {
  ABISELECT(-160,-88),
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
};
extern void _ZN7S7300C73v18Ev();
extern void _ZN7S7300C73v19Ev();
extern void _ZN7S7300C73v20Ev();
extern void _ZN7S7300C73v21Ev();
extern void _ZN7S7300C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C7__7S7300C2__A__7S7300C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-116),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v22Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
extern void _ZN8S7300C133v34Ev();
extern void _ZN8S7300C133v35Ev();
extern void _ZN8S7300C133v36Ev();
extern void _ZN8S7300C133v37Ev();
extern void _ZN8S7300C133v38Ev();
extern void _ZN8S7300C10D1Ev();
extern void _ZN8S7300C10D0Ev();
extern void _ZN8S7300C113v39Ev();
extern void _ZN8S7300C113v40Ev();
extern void _ZN8S7300C113v41Ev();
extern void _ZN8S7300C113v42Ev();
extern void _ZN8S7300C113v43Ev();
extern void _ZN8S7300C103v44Ev();
extern void _ZN8S7300C103v45Ev();
extern void _ZN8S7300C103v46Ev();
extern void _ZN8S7300C103v47Ev();
extern void _ZN8S7300C103v48Ev();
extern void _ZN8S7300C103v49Ev();
static  VTBL_ENTRY _tg__ZTV8S7300C10__7S7300C1[] = {
  ABISELECT(232,128),
  ABISELECT(-32,-16),
  ABISELECT(176,100),
  ABISELECT(200,112),
  ABISELECT(184,104),
  0,
  ABISELECT(152,84),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7300C10[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v34Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v35Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v36Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v37Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v38Ev,
  (VTBL_ENTRY)&_ZN8S7300C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7300C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v39Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v40Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v41Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v42Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v43Ev,
  (VTBL_ENTRY)&_ZN8S7300C103v44Ev,
  (VTBL_ENTRY)&_ZN8S7300C103v45Ev,
  (VTBL_ENTRY)&_ZN8S7300C103v46Ev,
  (VTBL_ENTRY)&_ZN8S7300C103v47Ev,
  (VTBL_ENTRY)&_ZN8S7300C103v48Ev,
  (VTBL_ENTRY)&_ZN8S7300C103v49Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
extern void _ZN8S7300C133v34Ev();
extern void _ZN8S7300C133v35Ev();
extern void _ZN8S7300C133v36Ev();
extern void _ZN8S7300C133v37Ev();
extern void _ZN8S7300C133v38Ev();
extern void _ZN8S7300C11D1Ev();
extern void _ZN8S7300C11D0Ev();
extern void _ZN8S7300C113v39Ev();
extern void _ZN8S7300C113v40Ev();
extern void _ZN8S7300C113v41Ev();
extern void _ZN8S7300C113v42Ev();
extern void _ZN8S7300C113v43Ev();
static  VTBL_ENTRY _tg__ZTV8S7300C118S7300C10__7S7300C1[] = {
  ABISELECT(232,128),
  ABISELECT(-32,-16),
  ABISELECT(176,100),
  ABISELECT(200,112),
  ABISELECT(184,104),
  0,
  ABISELECT(152,84),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7300C11[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v34Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v35Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v36Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v37Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v38Ev,
  (VTBL_ENTRY)&_ZN8S7300C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7300C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v39Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v40Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v41Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v42Ev,
  (VTBL_ENTRY)&_ZN8S7300C113v43Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
extern void _ZN8S7300C133v34Ev();
extern void _ZN8S7300C133v35Ev();
extern void _ZN8S7300C133v36Ev();
extern void _ZN8S7300C133v37Ev();
extern void _ZN8S7300C133v38Ev();
static  VTBL_ENTRY _tg__ZTV8S7300C138S7300C118S7300C10__7S7300C1[] = {
  ABISELECT(184,104),
  0,
  ABISELECT(152,84),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7300C13[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v34Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v35Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v36Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v37Ev,
  (VTBL_ENTRY)&_ZN8S7300C133v38Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C33v11Ev();
extern void _ZN7S7300C33v12Ev();
extern void _ZN7S7300C33v13Ev();
extern void _ZN7S7300C33v14Ev();
extern void _ZN7S7300C33v15Ev();
extern void _ZN7S7300C33v16Ev();
extern void _ZN7S7300C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C3__8S7300C138S7300C118S7300C10__7S7300C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-152,-84),
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI8S7300C13[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v17Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C67S7300C3__8S7300C138S7300C118S7300C10__7S7300C1[] = {
  ABISELECT(-160,-88),
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI8S7300C13[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
};
extern void _ZN7S7300C93v31Ev();
extern void _ZN7S7300C93v32Ev();
extern void _ZN7S7300C93v33Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C9__8S7300C138S7300C118S7300C10__7S7300C1[] = {
  0,
  0,
  0,
  ABISELECT(-184,-104),
  (VTBL_ENTRY)&(_ZTI8S7300C13[0]),
  (VTBL_ENTRY)&_ZN7S7300C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7300C93v32Ev,
  (VTBL_ENTRY)&_ZN7S7300C93v33Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void ABISELECT(_ZTv0_n64_N8S7300C11D1Ev,_ZTv0_n32_N8S7300C11D1Ev)();
extern void ABISELECT(_ZThn200_N8S7300C11D1Ev,_ZThn112_N8S7300C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7300C11D0Ev,_ZTv0_n32_N8S7300C11D0Ev)();
extern void ABISELECT(_ZThn200_N8S7300C11D0Ev,_ZThn112_N8S7300C11D0Ev)() __attribute__((weak));
extern void _ZN7S7300C83v23Ev();
extern void _ZN7S7300C23v24Ev();
extern void _ZN7S7300C23v25Ev();
extern void _ZN7S7300C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C2__8S7300C118S7300C10__7S7300C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-200,-112),
  ABISELECT(-24,-12),
  ABISELECT(-200,-112),
  ABISELECT(-48,-28),
  ABISELECT(-232,-128),
  ABISELECT(-232,-128),
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI8S7300C11[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7300C11D1Ev,_ZTv0_n32_N8S7300C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7300C11D0Ev,_ZTv0_n32_N8S7300C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7300C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v26Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C33v11Ev();
extern void _ZN7S7300C33v12Ev();
extern void _ZN7S7300C33v13Ev();
extern void _ZN7S7300C33v14Ev();
extern void _ZN7S7300C33v15Ev();
extern void _ZN7S7300C33v16Ev();
extern void _ZN7S7300C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C3__8S7300C118S7300C10__7S7300C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-152,-84),
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI8S7300C11[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v17Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C67S7300C3__8S7300C118S7300C10__7S7300C1[] = {
  ABISELECT(-160,-88),
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI8S7300C11[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
};
extern void _ZN7S7300C73v18Ev();
extern void _ZN7S7300C73v19Ev();
extern void _ZN7S7300C73v20Ev();
extern void _ZN7S7300C73v21Ev();
extern void _ZN7S7300C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C7__8S7300C118S7300C10__7S7300C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S7300C11[0]),
  (VTBL_ENTRY)&_ZN7S7300C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v22Ev,
};
extern void _ZN7S7300C42v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C4__A3__8S7300C118S7300C10__7S7300C1[] = {
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S7300C11[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7300C11D1Ev,_ZTv0_n12_N8S7300C11D1Ev)();
extern void ABISELECT(_ZThn232_N8S7300C11D1Ev,_ZThn128_N8S7300C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7300C11D0Ev,_ZTv0_n12_N8S7300C11D0Ev)();
extern void ABISELECT(_ZThn232_N8S7300C11D0Ev,_ZThn128_N8S7300C11D0Ev)() __attribute__((weak));
extern void _ZN8S7300C123v27Ev();
extern void _ZN8S7300C123v28Ev();
extern void _ZN8S7300C123v29Ev();
extern void _ZN8S7300C123v30Ev();
static  VTBL_ENTRY _tg__ZTV8S7300C12__8S7300C118S7300C10__7S7300C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-232,-128),
  ABISELECT(-232,-128),
  (VTBL_ENTRY)&(_ZTI8S7300C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7300C11D1Ev,_ZTv0_n12_N8S7300C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7300C11D0Ev,_ZTv0_n12_N8S7300C11D0Ev),
  (VTBL_ENTRY)&_ZN8S7300C123v27Ev,
  (VTBL_ENTRY)&_ZN8S7300C123v28Ev,
  (VTBL_ENTRY)&_ZN8S7300C123v29Ev,
  (VTBL_ENTRY)&_ZN8S7300C123v30Ev,
};
extern void _ZN7S7300C93v31Ev();
extern void _ZN7S7300C93v32Ev();
extern void _ZN7S7300C93v33Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C9__8S7300C118S7300C10__7S7300C1[] = {
  0,
  0,
  0,
  ABISELECT(-184,-104),
  (VTBL_ENTRY)&(_ZTI8S7300C11[0]),
  (VTBL_ENTRY)&_ZN7S7300C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7300C93v32Ev,
  (VTBL_ENTRY)&_ZN7S7300C93v33Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C2D1Ev();
extern void _ZN7S7300C2D0Ev();
extern void _ZN7S7300C83v23Ev();
extern void _ZN7S7300C23v24Ev();
extern void _ZN7S7300C23v25Ev();
extern void _ZN7S7300C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C28S7300C10__A2__7S7300C1[] = {
  ABISELECT(152,84),
  ABISELECT(-24,-16),
  ABISELECT(128,68),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7300C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7300C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v26Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C8D1Ev();
extern void _ZN7S7300C8D0Ev();
extern void _ZN7S7300C83v23Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C87S7300C28S7300C10__A2__7S7300C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C8[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7300C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7300C83v23Ev,
};
extern void _ZN7S7300C42v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C4__7S7300C87S7300C28S7300C10__A2__7S7300C1[] = {
  0,
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI7S7300C8[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C33v11Ev();
extern void _ZN7S7300C33v12Ev();
extern void _ZN7S7300C33v13Ev();
extern void _ZN7S7300C33v14Ev();
extern void _ZN7S7300C33v15Ev();
extern void _ZN7S7300C33v16Ev();
extern void _ZN7S7300C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C3__7S7300C28S7300C10__A2__7S7300C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-152,-84),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v17Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C5__7S7300C28S7300C10__A2__7S7300C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C67S7300C3__7S7300C28S7300C10__A2__7S7300C1[] = {
  ABISELECT(-160,-88),
  ABISELECT(-136,-72),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
};
extern void _ZN7S7300C73v18Ev();
extern void _ZN7S7300C73v19Ev();
extern void _ZN7S7300C73v20Ev();
extern void _ZN7S7300C73v21Ev();
extern void _ZN7S7300C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C7__7S7300C28S7300C10__A2__7S7300C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v22Ev,
};
extern void _ZN7S7300C42v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C4__A3__7S7300C28S7300C10__A2__7S7300C1[] = {
  0,
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void ABISELECT(_ZTv0_n64_N8S7300C10D1Ev,_ZTv0_n32_N8S7300C10D1Ev)();
extern void ABISELECT(_ZThn200_N8S7300C10D1Ev,_ZThn112_N8S7300C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7300C10D0Ev,_ZTv0_n32_N8S7300C10D0Ev)();
extern void ABISELECT(_ZThn200_N8S7300C10D0Ev,_ZThn112_N8S7300C10D0Ev)() __attribute__((weak));
extern void _ZN7S7300C83v23Ev();
extern void _ZN7S7300C23v24Ev();
extern void _ZN7S7300C23v25Ev();
extern void _ZN7S7300C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C2__8S7300C10__7S7300C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-200,-112),
  ABISELECT(-24,-12),
  ABISELECT(-200,-112),
  ABISELECT(-48,-28),
  ABISELECT(-232,-128),
  ABISELECT(-232,-128),
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI8S7300C10[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7300C10D1Ev,_ZTv0_n32_N8S7300C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7300C10D0Ev,_ZTv0_n32_N8S7300C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7300C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v26Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C33v11Ev();
extern void _ZN7S7300C33v12Ev();
extern void _ZN7S7300C33v13Ev();
extern void _ZN7S7300C33v14Ev();
extern void _ZN7S7300C33v15Ev();
extern void _ZN7S7300C33v16Ev();
extern void _ZN7S7300C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C3__8S7300C10__7S7300C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-152,-84),
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI8S7300C10[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v17Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C67S7300C3__8S7300C10__7S7300C1[] = {
  ABISELECT(-160,-88),
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI8S7300C10[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
};
extern void _ZN7S7300C73v18Ev();
extern void _ZN7S7300C73v19Ev();
extern void _ZN7S7300C73v20Ev();
extern void _ZN7S7300C73v21Ev();
extern void _ZN7S7300C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C7__8S7300C10__7S7300C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S7300C10[0]),
  (VTBL_ENTRY)&_ZN7S7300C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v22Ev,
};
extern void _ZN7S7300C42v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C4__A3__8S7300C10__7S7300C1[] = {
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S7300C10[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7300C10D1Ev,_ZTv0_n12_N8S7300C10D1Ev)();
extern void ABISELECT(_ZThn232_N8S7300C10D1Ev,_ZThn128_N8S7300C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7300C10D0Ev,_ZTv0_n12_N8S7300C10D0Ev)();
extern void ABISELECT(_ZThn232_N8S7300C10D0Ev,_ZThn128_N8S7300C10D0Ev)() __attribute__((weak));
extern void _ZN8S7300C123v27Ev();
extern void _ZN8S7300C123v28Ev();
extern void _ZN8S7300C123v29Ev();
extern void _ZN8S7300C123v30Ev();
static  VTBL_ENTRY _tg__ZTV8S7300C12__8S7300C10__7S7300C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-232,-128),
  ABISELECT(-232,-128),
  (VTBL_ENTRY)&(_ZTI8S7300C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7300C10D1Ev,_ZTv0_n12_N8S7300C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7300C10D0Ev,_ZTv0_n12_N8S7300C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7300C123v27Ev,
  (VTBL_ENTRY)&_ZN8S7300C123v28Ev,
  (VTBL_ENTRY)&_ZN8S7300C123v29Ev,
  (VTBL_ENTRY)&_ZN8S7300C123v30Ev,
};
extern void _ZN7S7300C93v31Ev();
extern void _ZN7S7300C93v32Ev();
extern void _ZN7S7300C93v33Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C9__8S7300C10__7S7300C1[] = {
  0,
  0,
  0,
  ABISELECT(-184,-104),
  (VTBL_ENTRY)&(_ZTI8S7300C10[0]),
  (VTBL_ENTRY)&_ZN7S7300C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7300C93v32Ev,
  (VTBL_ENTRY)&_ZN7S7300C93v33Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void ABISELECT(_ZThn24_N8S7300C10D1Ev,_ZThn16_N8S7300C10D1Ev)();
extern void ABISELECT(_ZThn24_N8S7300C10D0Ev,_ZThn16_N8S7300C10D0Ev)();
extern void _ZN7S7300C83v23Ev();
extern void _ZN7S7300C23v24Ev();
extern void _ZN7S7300C23v25Ev();
extern void _ZN7S7300C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C2__A__8S7300C10__7S7300C1[] = {
  ABISELECT(152,84),
  ABISELECT(-24,-16),
  ABISELECT(128,68),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S7300C10[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S7300C10D1Ev,_ZThn16_N8S7300C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S7300C10D0Ev,_ZThn16_N8S7300C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7300C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v26Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C33v11Ev();
extern void _ZN7S7300C33v12Ev();
extern void _ZN7S7300C33v13Ev();
extern void _ZN7S7300C33v14Ev();
extern void _ZN7S7300C33v15Ev();
extern void _ZN7S7300C33v16Ev();
extern void _ZN7S7300C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C3__7S7300C1[] = {
  ABISELECT(-152,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C3[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v17Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C67S7300C3__7S7300C1[] = {
  ABISELECT(-160,-88),
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C6[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C5__7S7300C67S7300C3__7S7300C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(160,88),
  (VTBL_ENTRY)&(_ZTI7S7300C6[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C5__7S7300C3__7S7300C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(152,84),
  (VTBL_ENTRY)&(_ZTI7S7300C3[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C6__7S7300C3__7S7300C1[] = {
  ABISELECT(-160,-88),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7300C3[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C2D1Ev();
extern void _ZN7S7300C2D0Ev();
extern void _ZN7S7300C83v23Ev();
extern void _ZN7S7300C23v24Ev();
extern void _ZN7S7300C23v25Ev();
extern void _ZN7S7300C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C2__A1__7S7300C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-200,-112),
  ABISELECT(-48,-28),
  ABISELECT(-232,-128),
  ABISELECT(-232,-128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7300C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7300C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7300C23v26Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C8D1Ev();
extern void _ZN7S7300C8D0Ev();
extern void _ZN7S7300C83v23Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C87S7300C2__A1__7S7300C1[] = {
  ABISELECT(-232,-128),
  ABISELECT(-232,-128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7300C8[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7300C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7300C83v23Ev,
};
extern void _ZN7S7300C42v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C4__7S7300C87S7300C2__A1__7S7300C1[] = {
  0,
  ABISELECT(232,128),
  (VTBL_ENTRY)&(_ZTI7S7300C8[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C33v11Ev();
extern void _ZN7S7300C33v12Ev();
extern void _ZN7S7300C33v13Ev();
extern void _ZN7S7300C33v14Ev();
extern void _ZN7S7300C33v15Ev();
extern void _ZN7S7300C33v16Ev();
extern void _ZN7S7300C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C3__7S7300C2__A1__7S7300C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-152,-84),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7300C33v17Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C52v2Ev();
extern void _ZN7S7300C52v3Ev();
extern void _ZN7S7300C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C5__7S7300C2__A1__7S7300C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(200,112),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7300C52v4Ev,
};
extern void _ZN7S7300C42v1Ev();
extern void _ZN7S7300C62v5Ev();
extern void _ZN7S7300C62v6Ev();
extern void _ZN7S7300C62v7Ev();
extern void _ZN7S7300C62v8Ev();
extern void _ZN7S7300C62v9Ev();
extern void _ZN7S7300C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C67S7300C3__7S7300C2__A1__7S7300C1[] = {
  ABISELECT(-160,-88),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7300C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7300C63v10Ev,
};
extern void _ZN7S7300C73v18Ev();
extern void _ZN7S7300C73v19Ev();
extern void _ZN7S7300C73v20Ev();
extern void _ZN7S7300C73v21Ev();
extern void _ZN7S7300C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C7__7S7300C2__A1__7S7300C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7300C73v22Ev,
};
extern void _ZN7S7300C42v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7300C4__A3__7S7300C2__A1__7S7300C1[] = {
  0,
  ABISELECT(232,128),
  (VTBL_ENTRY)&(_ZTI7S7300C2[0]),
  (VTBL_ENTRY)&_ZN7S7300C42v1Ev,
};
static  VTT_ENTRY vtt_S7300C1[] = {
  {&(_ZTV7S7300C1[10]),  10,153},
  {&(_tg__ZTV7S7300C2__A__7S7300C1[7]),  7,14},
  {&(_tg__ZTV7S7300C87S7300C2__7S7300C1[4]),  4,8},
  {&(_tg__ZTV7S7300C87S7300C2__7S7300C1[4]),  4,8},
  {&(_tg__ZTV7S7300C3__7S7300C2__A__7S7300C1[17]),  17,25},
  {&(_tg__ZTV7S7300C5__7S7300C2__A__7S7300C1[6]),  6,10},
  {&(_tg__ZTV7S7300C67S7300C3__7S7300C2__A__7S7300C1[3]),  3,10},
  {&(_tg__ZTV7S7300C7__7S7300C2__A__7S7300C1[7]),  7,12},
  {&(_tg__ZTV7S7300C2__A__7S7300C1[7]),  7,14},
  {&(_tg__ZTV8S7300C10__7S7300C1[13]),  13,35},
  {&(_tg__ZTV8S7300C118S7300C10__7S7300C1[13]),  13,29},
  {&(_tg__ZTV8S7300C138S7300C118S7300C10__7S7300C1[9]),  9,18},
  {&(_tg__ZTV7S7300C3__8S7300C138S7300C118S7300C10__7S7300C1[17]),  17,25},
  {&(_tg__ZTV8S7300C138S7300C118S7300C10__7S7300C1[9]),  9,18},
  {&(_tg__ZTV7S7300C67S7300C3__8S7300C138S7300C118S7300C10__7S7300C1[3]),  3,10},
  {&(_tg__ZTV7S7300C9__8S7300C138S7300C118S7300C10__7S7300C1[5]),  5,8},
  {&(_tg__ZTV7S7300C2__8S7300C118S7300C10__7S7300C1[12]),  12,19},
  {&(_tg__ZTV7S7300C3__8S7300C118S7300C10__7S7300C1[17]),  17,25},
  {&(_tg__ZTV8S7300C118S7300C10__7S7300C1[13]),  13,29},
  {&(_tg__ZTV7S7300C67S7300C3__8S7300C118S7300C10__7S7300C1[3]),  3,10},
  {&(_tg__ZTV7S7300C7__8S7300C118S7300C10__7S7300C1[7]),  7,12},
  {&(_tg__ZTV7S7300C4__A3__8S7300C118S7300C10__7S7300C1[3]),  3,4},
  {&(_tg__ZTV8S7300C12__8S7300C118S7300C10__7S7300C1[7]),  7,13},
  {&(_tg__ZTV7S7300C9__8S7300C118S7300C10__7S7300C1[5]),  5,8},
  {&(_tg__ZTV7S7300C28S7300C10__A2__7S7300C1[7]),  7,14},
  {&(_tg__ZTV7S7300C87S7300C28S7300C10__A2__7S7300C1[4]),  4,8},
  {&(_tg__ZTV7S7300C4__7S7300C87S7300C28S7300C10__A2__7S7300C1[3]),  3,4},
  {&(_tg__ZTV7S7300C3__7S7300C28S7300C10__A2__7S7300C1[17]),  17,25},
  {&(_tg__ZTV7S7300C5__7S7300C28S7300C10__A2__7S7300C1[6]),  6,10},
  {&(_tg__ZTV7S7300C67S7300C3__7S7300C28S7300C10__A2__7S7300C1[3]),  3,10},
  {&(_tg__ZTV7S7300C7__7S7300C28S7300C10__A2__7S7300C1[7]),  7,12},
  {&(_tg__ZTV7S7300C4__A3__7S7300C28S7300C10__A2__7S7300C1[3]),  3,4},
  {&(_tg__ZTV7S7300C2__8S7300C10__7S7300C1[12]),  12,19},
  {&(_tg__ZTV7S7300C3__8S7300C10__7S7300C1[17]),  17,25},
  {&(_tg__ZTV8S7300C10__7S7300C1[13]),  13,35},
  {&(_tg__ZTV7S7300C67S7300C3__8S7300C10__7S7300C1[3]),  3,10},
  {&(_tg__ZTV7S7300C7__8S7300C10__7S7300C1[7]),  7,12},
  {&(_tg__ZTV7S7300C4__A3__8S7300C10__7S7300C1[3]),  3,4},
  {&(_tg__ZTV8S7300C12__8S7300C10__7S7300C1[7]),  7,13},
  {&(_tg__ZTV7S7300C9__8S7300C10__7S7300C1[5]),  5,8},
  {&(_tg__ZTV7S7300C2__A__8S7300C10__7S7300C1[7]),  7,14},
  {&(_ZTV7S7300C1[83]),  83,153},
  {&(_ZTV7S7300C1[30]),  30,153},
  {&(_ZTV7S7300C1[94]),  94,153},
  {&(_ZTV7S7300C1[108]),  108,153},
  {&(_ZTV7S7300C1[10]),  10,153},
  {&(_ZTV7S7300C1[118]),  118,153},
  {&(_ZTV7S7300C1[30]),  30,153},
  {&(_ZTV7S7300C1[133]),  133,153},
  {&(_ZTV7S7300C1[147]),  147,153},
  {&(_ZTV7S7300C1[59]),  59,153},
  {&(_tg__ZTV7S7300C3__7S7300C1[3]),  3,11},
  {&(_tg__ZTV7S7300C67S7300C3__7S7300C1[3]),  3,10},
  {&(_tg__ZTV7S7300C5__7S7300C67S7300C3__7S7300C1[6]),  6,10},
  {&(_tg__ZTV7S7300C5__7S7300C3__7S7300C1[6]),  6,10},
  {&(_tg__ZTV7S7300C6__7S7300C3__7S7300C1[3]),  3,10},
  {&(_tg__ZTV7S7300C2__A1__7S7300C1[7]),  7,14},
  {&(_tg__ZTV7S7300C87S7300C2__A1__7S7300C1[4]),  4,8},
  {&(_tg__ZTV7S7300C4__7S7300C87S7300C2__A1__7S7300C1[3]),  3,4},
  {&(_tg__ZTV7S7300C3__7S7300C2__A1__7S7300C1[17]),  17,25},
  {&(_tg__ZTV7S7300C5__7S7300C2__A1__7S7300C1[6]),  6,10},
  {&(_tg__ZTV7S7300C67S7300C3__7S7300C2__A1__7S7300C1[3]),  3,10},
  {&(_tg__ZTV7S7300C7__7S7300C2__A1__7S7300C1[7]),  7,12},
  {&(_tg__ZTV7S7300C4__A3__7S7300C2__A1__7S7300C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7300C1[];
extern  VTBL_ENTRY _ZTV7S7300C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7300C1[];
static VTBL_ENTRY alt_thunk_names40[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7300C10D0Ev,_ZTv0_n12_N8S7300C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7300C10D0Ev,_ZThn128_N8S7300C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7300C10D1Ev,_ZTv0_n12_N8S7300C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7300C10D1Ev,_ZThn128_N8S7300C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7300C10D0Ev,_ZTv0_n32_N8S7300C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S7300C10D0Ev,_ZThn112_N8S7300C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7300C10D1Ev,_ZTv0_n32_N8S7300C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S7300C10D1Ev,_ZThn112_N8S7300C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7300C11D0Ev,_ZTv0_n12_N8S7300C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7300C11D0Ev,_ZThn128_N8S7300C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7300C11D1Ev,_ZTv0_n12_N8S7300C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7300C11D1Ev,_ZThn128_N8S7300C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7300C11D0Ev,_ZTv0_n32_N8S7300C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S7300C11D0Ev,_ZThn112_N8S7300C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7300C11D1Ev,_ZTv0_n32_N8S7300C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S7300C11D1Ev,_ZThn112_N8S7300C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7300C1D0Ev,_ZTv0_n12_N7S7300C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N7S7300C1D0Ev,_ZThn144_N7S7300C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7300C1D1Ev,_ZTv0_n12_N7S7300C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N7S7300C1D1Ev,_ZThn144_N7S7300C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7300C1D0Ev,_ZTv0_n32_N7S7300C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N7S7300C1D0Ev,_ZThn128_N7S7300C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7300C1D1Ev,_ZTv0_n32_N7S7300C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N7S7300C1D1Ev,_ZThn128_N7S7300C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7300C1 = {  "S7300C1", // class name
  bases_S7300C1, 19,
  &(vtc_S7300C1[0]), // expected_vtbl_contents
  &(vtt_S7300C1[0]), // expected_vtt_contents
  ABISELECT(272,148), // object size
  NSPAIRA(_ZTI7S7300C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7300C1),153, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7300C1),64, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names40,
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S3589C4  {
  char s3589c4f0[6];
  void  mf3589c4(); // _ZN7S3589C48mf3589c4Ev
};
//SIG(1 S3589C4) U1{ m Fc[6]}

#endif // __cplusplus
#ifdef __cplusplus

struct  S3589C3  {
  char s3589c3f0;
  ::S3589C4 s3589c3f1;
  void  mf3589c3(); // _ZN7S3589C38mf3589c3Ev
  virtual  ~S3589C3(); // _ZN7S3589C3D1Ev
  S3589C3(); // tgen
};
//SIG(-1 S3589C3) C1{ vd m Fc FU2{ m Fc[6]}}


void  S3589C3 ::mf3589c3(){}
 S3589C3 ::~S3589C3(){ note_dtor("S3589C3", this);}
S3589C3 ::S3589C3(){ note_ctor("S3589C3", this);} // tgen

static void Test_S3589C3()
{
  extern Class_Descriptor cd_S3589C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3589C3, buf);
    S3589C3 *dp, &lv = *(dp=new (buf) S3589C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3589C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3589C3)");
    check_field_offset(lv, s3589c3f0, ABISELECT(8,4), "S3589C3.s3589c3f0");
    check_field_offset(lv, s3589c3f1, ABISELECT(9,5), "S3589C3.s3589c3f1");
    test_class_info(&lv, &cd_S3589C3);
    dp->~S3589C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3589C3(Test_S3589C3, "S3589C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S3589C3C1Ev();
extern void _ZN7S3589C3D1Ev();
Name_Map name_map_S3589C3[] = {
  NSPAIR(_ZN7S3589C3C1Ev),
  NSPAIR(_ZN7S3589C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3589C3[];
extern void _ZN7S3589C3D1Ev();
extern void _ZN7S3589C3D0Ev();
static  VTBL_ENTRY vtc_S3589C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C3[0]),
  (VTBL_ENTRY)&_ZN7S3589C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C3D0Ev,
};
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
Class_Descriptor cd_S3589C3 = {  "S3589C3", // class name
  0,0,//no base classes
  &(vtc_S3589C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S3589C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3589C3),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  S3589C2  : S3589C3 {
  __tsi64 s3589c2f0;
  ::S3589C4 s3589c2f1;
  virtual  ~S3589C2(); // _ZN7S3589C2D1Ev
  S3589C2(); // tgen
};
//SIG(-1 S3589C2) C1{ BC2{ vd m Fc FU3{ m Fc[6]}} vd FL FU3}


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

static void Test_S3589C2()
{
  extern Class_Descriptor cd_S3589C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,8)];
    init_test(&cd_S3589C2, buf);
    S3589C2 *dp, &lv = *(dp=new (buf) S3589C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S3589C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3589C2)");
    check_base_class_offset(lv, (S3589C3*), 0, "S3589C2");
    check_field_offset(lv, s3589c2f0, ABISELECT(16,12), "S3589C2.s3589c2f0");
    check_field_offset(lv, s3589c2f1, ABISELECT(24,20), "S3589C2.s3589c2f1");
    test_class_info(&lv, &cd_S3589C2);
    dp->~S3589C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3589C2(Test_S3589C2, "S3589C2", ABISELECT(32,28));

#else // __cplusplus

extern void _ZN7S3589C2C1Ev();
extern void _ZN7S3589C2D1Ev();
Name_Map name_map_S3589C2[] = {
  NSPAIR(_ZN7S3589C2C1Ev),
  NSPAIR(_ZN7S3589C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
static Base_Class bases_S3589C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S3589C2[];
extern void _ZN7S3589C2D1Ev();
extern void _ZN7S3589C2D0Ev();
static  VTBL_ENTRY vtc_S3589C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C2[0]),
  (VTBL_ENTRY)&_ZN7S3589C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S3589C2[];
extern  VTBL_ENTRY _ZTV7S3589C2[];
Class_Descriptor cd_S3589C2 = {  "S3589C2", // class name
  bases_S3589C2, 1,
  &(vtc_S3589C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,28), // object size
  NSPAIRA(_ZTI7S3589C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3589C2),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  S3589C8  : virtual S3589C2 , virtual S3589C3 {
  virtual  ~S3589C8(); // _ZN7S3589C8D2Ev
  S3589C8(); // tgen
};
//SIG(-1 S3589C8) C1{ VBC2{ BC3{ vd m Fc FU4{ m Fc[6]}} vd FL FU4} VBC3 vd}


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

static void Test_S3589C8()
{
  extern Class_Descriptor cd_S3589C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S3589C8, buf);
    S3589C8 *dp, &lv = *(dp=new (buf) S3589C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S3589C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3589C8)");
    check_base_class_offset(lv, (S3589C3*)(S3589C2*), ABISELECT(8,4), "S3589C8");
    check_base_class_offset(lv, (S3589C2*), ABISELECT(8,4), "S3589C8");
    /*is_ambiguous_... S3589C8::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*), ABISELECT(40,32), "S3589C8");
    test_class_info(&lv, &cd_S3589C8);
    dp->~S3589C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3589C8(Test_S3589C8, "S3589C8", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN7S3589C8C1Ev();
extern void _ZN7S3589C8D2Ev();
Name_Map name_map_S3589C8[] = {
  NSPAIR(_ZN7S3589C8C1Ev),
  NSPAIR(_ZN7S3589C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C2;
extern VTBL_ENTRY _ZTI7S3589C2[];
extern  VTBL_ENTRY _ZTV7S3589C2[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
static Base_Class bases_S3589C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    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_S3589C2,    ABISELECT(8,4), //bcp->offset
    6, //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},
  {&cd_S3589C3,    ABISELECT(40,32), //bcp->offset
    11, //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 _ZTI7S3589C8[];
extern void _ZN7S3589C8D1Ev();
extern void _ZN7S3589C8D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn8_N7S3589C8D1Ev,_ZThn4_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn8_N7S3589C8D0Ev,_ZThn4_N7S3589C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S3589C8D1Ev,_ZThn32_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S3589C8D0Ev,_ZThn32_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3589C8[] = {
  ABISELECT(40,32),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&_ZN7S3589C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C8D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern VTBL_ENTRY _ZTV7S3589C8[];
static  VTT_ENTRY vtt_S3589C8[] = {
  {&(_ZTV7S3589C8[4]),  4,16},
  {&(_ZTV7S3589C8[9]),  9,16},
  {&(_ZTV7S3589C8[14]),  14,16},
};
extern VTBL_ENTRY _ZTI7S3589C8[];
extern  VTBL_ENTRY _ZTV7S3589C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C8[];
static VTBL_ENTRY alt_thunk_names41[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3589C8D0Ev,_ZThn32_N7S3589C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3589C8D0Ev,_ZThn4_N7S3589C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3589C8D1Ev,_ZThn32_N7S3589C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3589C8D1Ev,_ZThn4_N7S3589C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3589C8 = {  "S3589C8", // class name
  bases_S3589C8, 3,
  &(vtc_S3589C8[0]), // expected_vtbl_contents
  &(vtt_S3589C8[0]), // expected_vtt_contents
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI7S3589C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3589C8),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3589C8),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names41,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3589C9_nt  {
  int s3589c9f0;
  char s3589c9f1;
  int s3589c9f2;
  void  mf3589c9(); // _ZN10S3589C9_nt8mf3589c9Ev
  virtual  ~S3589C9_nt(); // _ZN10S3589C9_ntD1Ev
  S3589C9_nt(); // tgen
};
//SIG(-1 S3589C9_nt) C1{ vd m Fi Fc Fi}


void  S3589C9_nt ::mf3589c9(){}
 S3589C9_nt ::~S3589C9_nt(){ note_dtor("S3589C9_nt", this);}
S3589C9_nt ::S3589C9_nt(){ note_ctor("S3589C9_nt", this);} // tgen

//skip512 S3589C9_nt

#else // __cplusplus

extern void _ZN10S3589C9_ntC1Ev();
extern void _ZN10S3589C9_ntD1Ev();
Name_Map name_map_S3589C9_nt[] = {
  NSPAIR(_ZN10S3589C9_ntC1Ev),
  NSPAIR(_ZN10S3589C9_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern void _ZN10S3589C9_ntD1Ev();
extern void _ZN10S3589C9_ntD0Ev();
static  VTBL_ENTRY vtc_S3589C9_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3589C9_nt[0]),
  (VTBL_ENTRY)&_ZN10S3589C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3589C9_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
VTBL_ENTRY *P__ZTI10S3589C9_nt = _ZTI10S3589C9_nt; 
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
Class_Descriptor cd_S3589C9_nt = {  "S3589C9_nt", // class name
  0,0,//no base classes
  &(vtc_S3589C9_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI10S3589C9_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3589C9_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  S3589C7  : virtual S3589C8 , S3589C3 , S3589C9_nt , S3589C2 {
  int s3589c7f0;
  void *s3589c7f1;
  ~S3589C7(); // tgen
  S3589C7(); // tgen
};
//SIG(-1 S3589C7) C1{ VBC2{ VBC3{ BC4{ vd m Fc FU5{ m Fc[6]}} vd FL FU5} VBC4 vd} BC4 BC6{ vd m Fi Fc Fi} BC3 Fi Fp}


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

static void Test_S3589C7()
{
  extern Class_Descriptor cd_S3589C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,28)];
    init_test(&cd_S3589C7, buf);
    S3589C7 *dp, &lv = *(dp=new (buf) S3589C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,108), "sizeof(S3589C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3589C7)");
    /*is_ambiguous_... S3589C7::S3589C2 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C2*), ABISELECT(96,68), "S3589C7");
    check_base_class_offset(lv, (S3589C2*)(S3589C8*), ABISELECT(96,68), "S3589C7");
    /*is_ambiguous_... S3589C8::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C8*), ABISELECT(128,96), "S3589C7");
    check_base_class_offset(lv, (S3589C8*), ABISELECT(88,64), "S3589C7");
    /*is_ambiguous_... S3589C7::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*), 0, "S3589C7");
    check_base_class_offset(lv, (S3589C9_nt*), ABISELECT(16,12), "S3589C7");
    /*is_ambiguous_... S3589C7::S3589C2 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C2*), ABISELECT(40,28), "S3589C7");
    /*is_ambiguous_... S3589C7::S3589C2 */ AMB_check_base_class_offset(lv, (S3589C2*), ABISELECT(40,28), "S3589C7");
    check_field_offset(lv, s3589c7f0, ABISELECT(72,56), "S3589C7.s3589c7f0");
    check_field_offset(lv, s3589c7f1, ABISELECT(80,60), "S3589C7.s3589c7f1");
    test_class_info(&lv, &cd_S3589C7);
    dp->~S3589C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3589C7(Test_S3589C7, "S3589C7", ABISELECT(144,108));

#else // __cplusplus

extern void _ZN7S3589C7C1Ev();
extern void _ZN7S3589C7D1Ev();
Name_Map name_map_S3589C7[] = {
  NSPAIR(_ZN7S3589C7C1Ev),
  NSPAIR(_ZN7S3589C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C2;
extern VTBL_ENTRY _ZTI7S3589C2[];
extern  VTBL_ENTRY _ZTV7S3589C2[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C8;
extern VTBL_ENTRY _ZTI7S3589C8[];
extern  VTBL_ENTRY _ZTV7S3589C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C8[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C2;
extern VTBL_ENTRY _ZTI7S3589C2[];
extern  VTBL_ENTRY _ZTV7S3589C2[];
static Base_Class bases_S3589C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    ABISELECT(96,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
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3589C2,    ABISELECT(96,68), //bcp->offset
    22, //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
    3, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(128,96), //bcp->offset
    27, //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_S3589C8,    ABISELECT(88,64), //bcp->offset
    15, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3589C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3589C9_nt,    ABISELECT(16,12), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3589C3,    ABISELECT(40,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
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3589C2,    ABISELECT(40,28), //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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3589C7[];
extern void _ZN7S3589C7D1Ev();
extern void _ZN7S3589C7D0Ev();
extern void ABISELECT(_ZThn16_N7S3589C7D1Ev,_ZThn12_N7S3589C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S3589C7D0Ev,_ZThn12_N7S3589C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S3589C7D1Ev,_ZThn28_N7S3589C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S3589C7D0Ev,_ZThn28_N7S3589C7D0Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3589C7D1Ev,_ZTv0_n20_N7S3589C7D1Ev)();
extern void ABISELECT(_ZThn88_N7S3589C7D1Ev,_ZThn64_N7S3589C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3589C7D0Ev,_ZTv0_n20_N7S3589C7D0Ev)();
extern void ABISELECT(_ZThn88_N7S3589C7D0Ev,_ZThn64_N7S3589C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C7D1Ev,_ZTv0_n12_N7S3589C7D1Ev)();
extern void ABISELECT(_ZThn96_N7S3589C7D1Ev,_ZThn68_N7S3589C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C7D0Ev,_ZTv0_n12_N7S3589C7D0Ev)();
extern void ABISELECT(_ZThn96_N7S3589C7D0Ev,_ZThn68_N7S3589C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C7D1Ev,_ZTv0_n12_N7S3589C7D1Ev)();
extern void ABISELECT(_ZThn128_N7S3589C7D1Ev,_ZThn96_N7S3589C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C7D0Ev,_ZTv0_n12_N7S3589C7D0Ev)();
extern void ABISELECT(_ZThn128_N7S3589C7D0Ev,_ZThn96_N7S3589C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3589C7[] = {
  ABISELECT(128,96),
  ABISELECT(96,68),
  ABISELECT(88,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C7[0]),
  (VTBL_ENTRY)&_ZN7S3589C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C7D0Ev,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S3589C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3589C7D1Ev,_ZThn12_N7S3589C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3589C7D0Ev,_ZThn12_N7S3589C7D0Ev),
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S3589C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S3589C7D1Ev,_ZThn28_N7S3589C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S3589C7D0Ev,_ZThn28_N7S3589C7D0Ev),
  ABISELECT(-88,-64),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI7S3589C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3589C7D1Ev,_ZTv0_n20_N7S3589C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3589C7D0Ev,_ZTv0_n20_N7S3589C7D0Ev),
  ABISELECT(-96,-68),
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI7S3589C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C7D1Ev,_ZTv0_n12_N7S3589C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C7D0Ev,_ZTv0_n12_N7S3589C7D0Ev),
  ABISELECT(-128,-96),
  ABISELECT(-128,-96),
  (VTBL_ENTRY)&(_ZTI7S3589C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C7D1Ev,_ZTv0_n12_N7S3589C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C7D0Ev,_ZTv0_n12_N7S3589C7D0Ev),
};
extern VTBL_ENTRY _ZTV7S3589C7[];
extern void _ZN7S3589C8D1Ev();
extern void _ZN7S3589C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3589C8__7S3589C7[] = {
  ABISELECT(40,32),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&_ZN7S3589C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn8_N7S3589C8D1Ev,_ZThn4_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn8_N7S3589C8D0Ev,_ZThn4_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__7S3589C8__7S3589C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S3589C8D1Ev,_ZThn32_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S3589C8D0Ev,_ZThn32_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S3589C8__7S3589C7[] = {
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
static  VTT_ENTRY vtt_S3589C7[] = {
  {&(_ZTV7S3589C7[5]),  5,32},
  {&(_ZTV7S3589C7[20]),  20,32},
  {&(_ZTV7S3589C7[25]),  25,32},
  {&(_ZTV7S3589C7[30]),  30,32},
  {&(_tg__ZTV7S3589C8__7S3589C7[4]),  4,6},
  {&(_tg__ZTV7S3589C2__7S3589C8__7S3589C7[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S3589C8__7S3589C7[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S3589C7[];
extern  VTBL_ENTRY _ZTV7S3589C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C7[];
static VTBL_ENTRY alt_thunk_names42[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3589C8D0Ev,_ZThn32_N7S3589C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3589C8D0Ev,_ZThn4_N7S3589C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3589C8D1Ev,_ZThn32_N7S3589C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3589C8D1Ev,_ZThn4_N7S3589C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C7D0Ev,_ZTv0_n12_N7S3589C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S3589C7D0Ev,_ZThn96_N7S3589C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S3589C7D0Ev,_ZThn68_N7S3589C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C7D1Ev,_ZTv0_n12_N7S3589C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S3589C7D1Ev,_ZThn96_N7S3589C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S3589C7D1Ev,_ZThn68_N7S3589C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3589C7D0Ev,_ZTv0_n20_N7S3589C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S3589C7D0Ev,_ZThn64_N7S3589C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3589C7D1Ev,_ZTv0_n20_N7S3589C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S3589C7D1Ev,_ZThn64_N7S3589C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3589C7 = {  "S3589C7", // class name
  bases_S3589C7, 8,
  &(vtc_S3589C7[0]), // expected_vtbl_contents
  &(vtt_S3589C7[0]), // expected_vtt_contents
  ABISELECT(144,108), // object size
  NSPAIRA(_ZTI7S3589C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3589C7),32, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3589C7),7, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names42,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3589C6  : S3589C7 , S3589C8 , virtual S3589C9_nt {
  ~S3589C6(); // tgen
  S3589C6(); // tgen
};
//SIG(-1 S3589C6) C1{ BC2{ VBC3{ VBC4{ BC5{ vd m Fc FU6{ m Fc[6]}} vd FL FU6} VBC5 vd} BC5 BC7{ vd m Fi Fc Fi} BC4 Fi Fp} BC3 VBC7}


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

static void Test_S3589C6()
{
  extern Class_Descriptor cd_S3589C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,33)];
    init_test(&cd_S3589C6, buf);
    S3589C6 *dp, &lv = *(dp=new (buf) S3589C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,128), "sizeof(S3589C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3589C6)");
    /*is_ambiguous_... S3589C6::S3589C2 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C2*), ABISELECT(104,72), "S3589C6");
    /*is_ambiguous_... S3589C6::S3589C8 */ AMB_check_base_class_offset(lv, (S3589C2*)(S3589C8*), ABISELECT(104,72), "S3589C6");
    /*is_ambiguous_... S3589C6::S3589C8 */ AMB_check_base_class_offset(lv, (S3589C2*)(S3589C8*), ABISELECT(104,72), "S3589C6");
    /*is_ambiguous_... S3589C6::S3589C8 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C8*), ABISELECT(136,100), "S3589C6");
    /*is_ambiguous_... S3589C6::S3589C8 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C8*), ABISELECT(136,100), "S3589C6");
    check_base_class_offset(lv, (S3589C8*)(S3589C7*), ABISELECT(96,68), "S3589C6");
    /*is_ambiguous_... S3589C7::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C7*), 0, "S3589C6");
    check_base_class_offset(lv, (S3589C9_nt*)(S3589C7*), ABISELECT(16,12), "S3589C6");
    /*is_ambiguous_... S3589C7::S3589C2 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C2*)(S3589C7*), ABISELECT(40,28), "S3589C6");
    /*is_ambiguous_... S3589C7::S3589C2 */ AMB_check_base_class_offset(lv, (S3589C2*)(S3589C7*), ABISELECT(40,28), "S3589C6");
    check_base_class_offset(lv, (S3589C7*), 0, "S3589C6");
    /*is_ambiguous_... S3589C6::S3589C8 */ AMB_check_base_class_offset(lv, (S3589C8*), ABISELECT(88,64), "S3589C6");
    /*is_ambiguous_... S3589C6::S3589C9_nt */ AMB_check_base_class_offset(lv, (S3589C9_nt*), ABISELECT(152,112), "S3589C6");
    test_class_info(&lv, &cd_S3589C6);
    dp->~S3589C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3589C6(Test_S3589C6, "S3589C6", ABISELECT(176,128));

#else // __cplusplus

extern void _ZN7S3589C6C1Ev();
extern void _ZN7S3589C6D1Ev();
Name_Map name_map_S3589C6[] = {
  NSPAIR(_ZN7S3589C6C1Ev),
  NSPAIR(_ZN7S3589C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C2;
extern VTBL_ENTRY _ZTI7S3589C2[];
extern  VTBL_ENTRY _ZTV7S3589C2[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C8;
extern VTBL_ENTRY _ZTI7S3589C8[];
extern  VTBL_ENTRY _ZTV7S3589C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C8[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C2;
extern VTBL_ENTRY _ZTI7S3589C2[];
extern  VTBL_ENTRY _ZTV7S3589C2[];
extern Class_Descriptor cd_S3589C7;
extern VTBL_ENTRY _ZTI7S3589C7[];
extern  VTBL_ENTRY _ZTV7S3589C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C7[];
extern Class_Descriptor cd_S3589C8;
extern VTBL_ENTRY _ZTI7S3589C8[];
extern  VTBL_ENTRY _ZTV7S3589C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C8[];
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
static Base_Class bases_S3589C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    ABISELECT(104,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
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3589C2,    ABISELECT(104,72), //bcp->offset
    29, //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
    3, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(136,100), //bcp->offset
    34, //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
    3, //immediately_derived
  0, 1},
  {&cd_S3589C8,    ABISELECT(96,68), //bcp->offset
    22, //bcp->virtual_function_table_offset
    5, //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
    8, //immediately_derived
  0, 1},
  {&cd_S3589C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3589C9_nt,    ABISELECT(16,12), //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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3589C3,    ABISELECT(40,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
    8, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3589C2,    ABISELECT(40,28), //bcp->offset
    12, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S3589C7,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3589C8,    ABISELECT(88,64), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3589C9_nt,    ABISELECT(152,112), //bcp->offset
    39, //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 _ZTI7S3589C6[];
extern void _ZN7S3589C6D1Ev();
extern void _ZN7S3589C6D0Ev();
extern void ABISELECT(_ZThn16_N7S3589C6D1Ev,_ZThn12_N7S3589C6D1Ev)();
extern void ABISELECT(_ZThn16_N7S3589C6D0Ev,_ZThn12_N7S3589C6D0Ev)();
extern void ABISELECT(_ZThn40_N7S3589C6D1Ev,_ZThn28_N7S3589C6D1Ev)();
extern void ABISELECT(_ZThn40_N7S3589C6D0Ev,_ZThn28_N7S3589C6D0Ev)();
extern void ABISELECT(_ZThn88_N7S3589C6D1Ev,_ZThn64_N7S3589C6D1Ev)();
extern void ABISELECT(_ZThn88_N7S3589C6D0Ev,_ZThn64_N7S3589C6D0Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3589C6D1Ev,_ZTv0_n20_N7S3589C6D1Ev)();
extern void ABISELECT(_ZThn96_N7S3589C6D1Ev,_ZThn68_N7S3589C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3589C6D0Ev,_ZTv0_n20_N7S3589C6D0Ev)();
extern void ABISELECT(_ZThn96_N7S3589C6D0Ev,_ZThn68_N7S3589C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C6D1Ev,_ZTv0_n12_N7S3589C6D1Ev)();
extern void ABISELECT(_ZThn104_N7S3589C6D1Ev,_ZThn72_N7S3589C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C6D0Ev,_ZTv0_n12_N7S3589C6D0Ev)();
extern void ABISELECT(_ZThn104_N7S3589C6D0Ev,_ZThn72_N7S3589C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C6D1Ev,_ZTv0_n12_N7S3589C6D1Ev)();
extern void ABISELECT(_ZThn136_N7S3589C6D1Ev,_ZThn100_N7S3589C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C6D0Ev,_ZTv0_n12_N7S3589C6D0Ev)();
extern void ABISELECT(_ZThn136_N7S3589C6D0Ev,_ZThn100_N7S3589C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C6D1Ev,_ZTv0_n12_N7S3589C6D1Ev)();
extern void ABISELECT(_ZThn152_N7S3589C6D1Ev,_ZThn112_N7S3589C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C6D0Ev,_ZTv0_n12_N7S3589C6D0Ev)();
extern void ABISELECT(_ZThn152_N7S3589C6D0Ev,_ZThn112_N7S3589C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3589C6[] = {
  ABISELECT(152,112),
  ABISELECT(136,100),
  ABISELECT(104,72),
  ABISELECT(96,68),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C6[0]),
  (VTBL_ENTRY)&_ZN7S3589C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C6D0Ev,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S3589C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3589C6D1Ev,_ZThn12_N7S3589C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3589C6D0Ev,_ZThn12_N7S3589C6D0Ev),
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S3589C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S3589C6D1Ev,_ZThn28_N7S3589C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S3589C6D0Ev,_ZThn28_N7S3589C6D0Ev),
  ABISELECT(48,36),
  ABISELECT(16,8),
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI7S3589C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N7S3589C6D1Ev,_ZThn64_N7S3589C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N7S3589C6D0Ev,_ZThn64_N7S3589C6D0Ev),
  ABISELECT(-96,-68),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI7S3589C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3589C6D1Ev,_ZTv0_n20_N7S3589C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3589C6D0Ev,_ZTv0_n20_N7S3589C6D0Ev),
  ABISELECT(-104,-72),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI7S3589C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C6D1Ev,_ZTv0_n12_N7S3589C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C6D0Ev,_ZTv0_n12_N7S3589C6D0Ev),
  ABISELECT(-136,-100),
  ABISELECT(-136,-100),
  (VTBL_ENTRY)&(_ZTI7S3589C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C6D1Ev,_ZTv0_n12_N7S3589C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C6D0Ev,_ZTv0_n12_N7S3589C6D0Ev),
  ABISELECT(-152,-112),
  ABISELECT(-152,-112),
  (VTBL_ENTRY)&(_ZTI7S3589C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C6D1Ev,_ZTv0_n12_N7S3589C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C6D0Ev,_ZTv0_n12_N7S3589C6D0Ev),
};
extern VTBL_ENTRY _ZTV7S3589C6[];
extern void _ZN7S3589C7D1Ev();
extern void _ZN7S3589C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3589C7__7S3589C6[] = {
  ABISELECT(136,100),
  ABISELECT(104,72),
  ABISELECT(96,68),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C7[0]),
  (VTBL_ENTRY)&_ZN7S3589C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S3589C7D1Ev,_ZTv0_n20_N7S3589C7D1Ev)();
extern void ABISELECT(_ZThn96_N7S3589C7D1Ev,_ZThn68_N7S3589C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3589C7D0Ev,_ZTv0_n20_N7S3589C7D0Ev)();
extern void ABISELECT(_ZThn96_N7S3589C7D0Ev,_ZThn68_N7S3589C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C8__7S3589C7__7S3589C6[] = {
  ABISELECT(-96,-68),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI7S3589C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3589C7D1Ev,_ZTv0_n20_N7S3589C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3589C7D0Ev,_ZTv0_n20_N7S3589C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C7D1Ev,_ZTv0_n12_N7S3589C7D1Ev)();
extern void ABISELECT(_ZThn104_N7S3589C7D1Ev,_ZThn72_N7S3589C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C7D0Ev,_ZTv0_n12_N7S3589C7D0Ev)();
extern void ABISELECT(_ZThn104_N7S3589C7D0Ev,_ZThn72_N7S3589C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__7S3589C7__7S3589C6[] = {
  ABISELECT(-104,-72),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI7S3589C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C7D1Ev,_ZTv0_n12_N7S3589C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C7D0Ev,_ZTv0_n12_N7S3589C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C7D1Ev,_ZTv0_n12_N7S3589C7D1Ev)();
extern void ABISELECT(_ZThn136_N7S3589C7D1Ev,_ZThn100_N7S3589C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C7D0Ev,_ZTv0_n12_N7S3589C7D0Ev)();
extern void ABISELECT(_ZThn136_N7S3589C7D0Ev,_ZThn100_N7S3589C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S3589C7__7S3589C6[] = {
  ABISELECT(-136,-100),
  ABISELECT(-136,-100),
  (VTBL_ENTRY)&(_ZTI7S3589C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C7D1Ev,_ZTv0_n12_N7S3589C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C7D0Ev,_ZTv0_n12_N7S3589C7D0Ev),
};
extern void _ZN7S3589C8D1Ev();
extern void _ZN7S3589C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3589C8__A__7S3589C6[] = {
  ABISELECT(48,36),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&_ZN7S3589C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn16_N7S3589C8D1Ev,_ZThn8_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn16_N7S3589C8D0Ev,_ZThn8_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__7S3589C8__A__7S3589C6[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn48_N7S3589C8D1Ev,_ZThn36_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn48_N7S3589C8D0Ev,_ZThn36_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S3589C8__A__7S3589C6[] = {
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void _ZN7S3589C8D1Ev();
extern void _ZN7S3589C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3589C8__7S3589C6[] = {
  ABISELECT(40,32),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&_ZN7S3589C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn8_N7S3589C8D1Ev,_ZThn4_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn8_N7S3589C8D0Ev,_ZThn4_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__7S3589C8__7S3589C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S3589C8D1Ev,_ZThn32_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S3589C8D0Ev,_ZThn32_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S3589C8__7S3589C6[] = {
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
static  VTT_ENTRY vtt_S3589C6[] = {
  {&(_ZTV7S3589C6[6]),  6,44},
  {&(_tg__ZTV7S3589C7__7S3589C6[5]),  5,7},
  {&(_tg__ZTV7S3589C8__7S3589C7__7S3589C6[5]),  5,7},
  {&(_tg__ZTV7S3589C2__7S3589C7__7S3589C6[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S3589C7__7S3589C6[3]),  3,5},
  {&(_tg__ZTV7S3589C8__A__7S3589C6[4]),  4,6},
  {&(_tg__ZTV7S3589C2__7S3589C8__A__7S3589C6[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S3589C8__A__7S3589C6[3]),  3,5},
  {&(_ZTV7S3589C6[27]),  27,44},
  {&(_ZTV7S3589C6[32]),  32,44},
  {&(_ZTV7S3589C6[37]),  37,44},
  {&(_ZTV7S3589C6[20]),  20,44},
  {&(_ZTV7S3589C6[42]),  42,44},
  {&(_tg__ZTV7S3589C8__7S3589C6[4]),  4,6},
  {&(_tg__ZTV7S3589C2__7S3589C8__7S3589C6[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S3589C8__7S3589C6[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S3589C6[];
extern  VTBL_ENTRY _ZTV7S3589C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C6[];
static VTBL_ENTRY alt_thunk_names43[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3589C8D0Ev,_ZThn32_N7S3589C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3589C8D0Ev,_ZThn4_N7S3589C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3589C8D0Ev,_ZThn36_N7S3589C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3589C8D0Ev,_ZThn8_N7S3589C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3589C8D1Ev,_ZThn32_N7S3589C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3589C8D1Ev,_ZThn4_N7S3589C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3589C8D1Ev,_ZThn36_N7S3589C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3589C8D1Ev,_ZThn8_N7S3589C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C7D0Ev,_ZTv0_n12_N7S3589C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S3589C7D0Ev,_ZThn100_N7S3589C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S3589C7D0Ev,_ZThn72_N7S3589C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C7D1Ev,_ZTv0_n12_N7S3589C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S3589C7D1Ev,_ZThn100_N7S3589C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S3589C7D1Ev,_ZThn72_N7S3589C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3589C7D0Ev,_ZTv0_n20_N7S3589C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S3589C7D0Ev,_ZThn68_N7S3589C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3589C7D1Ev,_ZTv0_n20_N7S3589C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S3589C7D1Ev,_ZThn68_N7S3589C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C6D0Ev,_ZTv0_n12_N7S3589C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S3589C6D0Ev,_ZThn112_N7S3589C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S3589C6D0Ev,_ZThn100_N7S3589C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S3589C6D0Ev,_ZThn72_N7S3589C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C6D1Ev,_ZTv0_n12_N7S3589C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S3589C6D1Ev,_ZThn112_N7S3589C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S3589C6D1Ev,_ZThn100_N7S3589C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S3589C6D1Ev,_ZThn72_N7S3589C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3589C6D0Ev,_ZTv0_n20_N7S3589C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S3589C6D0Ev,_ZThn68_N7S3589C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3589C6D1Ev,_ZTv0_n20_N7S3589C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S3589C6D1Ev,_ZThn68_N7S3589C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3589C6 = {  "S3589C6", // class name
  bases_S3589C6, 11,
  &(vtc_S3589C6[0]), // expected_vtbl_contents
  &(vtt_S3589C6[0]), // expected_vtt_contents
  ABISELECT(176,128), // object size
  NSPAIRA(_ZTI7S3589C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3589C6),44, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3589C6),16, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names43,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3589C11  : virtual S3589C3 {
  ~S3589C11(); // tgen
  S3589C11(); // tgen
};
//SIG(-1 S3589C11) C1{ VBC2{ vd m Fc FU3{ m Fc[6]}}}


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

static void Test_S3589C11()
{
  extern Class_Descriptor cd_S3589C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3589C11, buf);
    S3589C11 *dp, &lv = *(dp=new (buf) S3589C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3589C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3589C11)");
    check_base_class_offset(lv, (S3589C3*), ABISELECT(8,4), "S3589C11");
    test_class_info(&lv, &cd_S3589C11);
    dp->~S3589C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3589C11(Test_S3589C11, "S3589C11", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S3589C11C1Ev();
extern void _ZN8S3589C11D1Ev();
Name_Map name_map_S3589C11[] = {
  NSPAIR(_ZN8S3589C11C1Ev),
  NSPAIR(_ZN8S3589C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
static Base_Class bases_S3589C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    ABISELECT(8,4), //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},
  {0}};
extern VTBL_ENTRY _ZTI8S3589C11[];
extern void _ZN8S3589C11D1Ev();
extern void _ZN8S3589C11D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S3589C11D1Ev,_ZTv0_n12_N8S3589C11D1Ev)();
extern void ABISELECT(_ZThn8_N8S3589C11D1Ev,_ZThn4_N8S3589C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C11D0Ev,_ZTv0_n12_N8S3589C11D0Ev)();
extern void ABISELECT(_ZThn8_N8S3589C11D0Ev,_ZThn4_N8S3589C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3589C11[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C11[0]),
  (VTBL_ENTRY)&_ZN8S3589C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C11D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S3589C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C11D1Ev,_ZTv0_n12_N8S3589C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C11D0Ev,_ZTv0_n12_N8S3589C11D0Ev),
};
extern VTBL_ENTRY _ZTV8S3589C11[];
static  VTT_ENTRY vtt_S3589C11[] = {
  {&(_ZTV8S3589C11[3]),  3,10},
  {&(_ZTV8S3589C11[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S3589C11[];
extern  VTBL_ENTRY _ZTV8S3589C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C11[];
static VTBL_ENTRY alt_thunk_names44[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C11D0Ev,_ZTv0_n12_N8S3589C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S3589C11D0Ev,_ZThn4_N8S3589C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C11D1Ev,_ZTv0_n12_N8S3589C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S3589C11D1Ev,_ZThn4_N8S3589C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3589C11 = {  "S3589C11", // class name
  bases_S3589C11, 1,
  &(vtc_S3589C11[0]), // expected_vtbl_contents
  &(vtt_S3589C11[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S3589C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S3589C11),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3589C11),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names44,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3589C13_nt  {
  long double s3589c13f0;
  void  mf3589c13(); // _ZN11S3589C13_nt9mf3589c13Ev
};
//SIG(-1 S3589C13_nt) C1{ m FD}


void  S3589C13_nt ::mf3589c13(){}

//skip512 S3589C13_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S3589C13_nt[];
VTBL_ENTRY *P__ZTI11S3589C13_nt = _ZTI11S3589C13_nt; 
Class_Descriptor cd_S3589C13_nt = {  "S3589C13_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI11S3589C13_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  S3589C14  : virtual S3589C9_nt {
  void *s3589c14f0[2];
  ~S3589C14(); // tgen
  S3589C14(); // tgen
};
//SIG(-1 S3589C14) C1{ VBC2{ vd m Fi Fc Fi} Fp[2]}


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

static void Test_S3589C14()
{
  extern Class_Descriptor cd_S3589C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S3589C14, buf);
    S3589C14 *dp, &lv = *(dp=new (buf) S3589C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S3589C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3589C14)");
    check_base_class_offset(lv, (S3589C9_nt*), ABISELECT(24,12), "S3589C14");
    check_field_offset(lv, s3589c14f0, ABISELECT(8,4), "S3589C14.s3589c14f0");
    test_class_info(&lv, &cd_S3589C14);
    dp->~S3589C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3589C14(Test_S3589C14, "S3589C14", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S3589C14C1Ev();
extern void _ZN8S3589C14D1Ev();
Name_Map name_map_S3589C14[] = {
  NSPAIR(_ZN8S3589C14C1Ev),
  NSPAIR(_ZN8S3589C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
static Base_Class bases_S3589C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C9_nt,    ABISELECT(24,12), //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},
  {0}};
extern VTBL_ENTRY _ZTI8S3589C14[];
extern void _ZN8S3589C14D1Ev();
extern void _ZN8S3589C14D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S3589C14D1Ev,_ZTv0_n12_N8S3589C14D1Ev)();
extern void ABISELECT(_ZThn24_N8S3589C14D1Ev,_ZThn12_N8S3589C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C14D0Ev,_ZTv0_n12_N8S3589C14D0Ev)();
extern void ABISELECT(_ZThn24_N8S3589C14D0Ev,_ZThn12_N8S3589C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3589C14[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C14[0]),
  (VTBL_ENTRY)&_ZN8S3589C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C14D0Ev,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S3589C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C14D1Ev,_ZTv0_n12_N8S3589C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C14D0Ev,_ZTv0_n12_N8S3589C14D0Ev),
};
extern VTBL_ENTRY _ZTV8S3589C14[];
static  VTT_ENTRY vtt_S3589C14[] = {
  {&(_ZTV8S3589C14[3]),  3,10},
  {&(_ZTV8S3589C14[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S3589C14[];
extern  VTBL_ENTRY _ZTV8S3589C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C14[];
static VTBL_ENTRY alt_thunk_names45[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C14D0Ev,_ZTv0_n12_N8S3589C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S3589C14D0Ev,_ZThn12_N8S3589C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C14D1Ev,_ZTv0_n12_N8S3589C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S3589C14D1Ev,_ZThn12_N8S3589C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3589C14 = {  "S3589C14", // class name
  bases_S3589C14, 1,
  &(vtc_S3589C14[0]), // expected_vtbl_contents
  &(vtt_S3589C14[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S3589C14),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S3589C14),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3589C14),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names45,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3589C12  : S3589C13_nt , virtual S3589C14 , virtual S3589C8 , S3589C3 , virtual S3589C11 {
  char s3589c12f0;
  int s3589c12f1;
  ~S3589C12(); // tgen
  S3589C12(); // tgen
};
//SIG(-1 S3589C12) C1{ BC2{ m FD} VBC3{ VBC4{ vd m Fi Fc Fi} Fp[2]} VBC5{ VBC6{ BC7{ vd m Fc FU8{ m Fc[6]}} vd FL FU8} VBC7 vd} BC7 VBC9{ VBC7} Fc Fi}


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

static void Test_S3589C12()
{
  extern Class_Descriptor cd_S3589C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,28)];
    init_test(&cd_S3589C12, buf);
    S3589C12 *dp, &lv = *(dp=new (buf) S3589C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S3589C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3589C12)");
    check_base_class_offset(lv, (S3589C13_nt*), ABISELECT(16,12), "S3589C12");
    check_base_class_offset(lv, (S3589C9_nt*)(S3589C14*), ABISELECT(64,44), "S3589C12");
    check_base_class_offset(lv, (S3589C14*), ABISELECT(40,32), "S3589C12");
    check_base_class_offset(lv, (S3589C3*)(S3589C2*), ABISELECT(96,64), "S3589C12");
    check_base_class_offset(lv, (S3589C2*)(S3589C8*), ABISELECT(96,64), "S3589C12");
    /*is_ambiguous_... S3589C8::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C8*), ABISELECT(128,92), "S3589C12");
    check_base_class_offset(lv, (S3589C3*)(S3589C11*), ABISELECT(128,92), "S3589C12");
    check_base_class_offset(lv, (S3589C8*), ABISELECT(88,60), "S3589C12");
    /*is_ambiguous_... S3589C12::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*), 0, "S3589C12");
    check_base_class_offset(lv, (S3589C11*), ABISELECT(144,104), "S3589C12");
    check_field_offset(lv, s3589c12f0, ABISELECT(32,24), "S3589C12.s3589c12f0");
    check_field_offset(lv, s3589c12f1, ABISELECT(36,28), "S3589C12.s3589c12f1");
    test_class_info(&lv, &cd_S3589C12);
    dp->~S3589C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3589C12(Test_S3589C12, "S3589C12", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN8S3589C12C1Ev();
extern void _ZN8S3589C12D1Ev();
Name_Map name_map_S3589C12[] = {
  NSPAIR(_ZN8S3589C12C1Ev),
  NSPAIR(_ZN8S3589C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C13_nt;
extern VTBL_ENTRY _ZTI11S3589C13_nt[];
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
extern Class_Descriptor cd_S3589C14;
extern VTBL_ENTRY _ZTI8S3589C14[];
extern  VTBL_ENTRY _ZTV8S3589C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C14[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C2;
extern VTBL_ENTRY _ZTI7S3589C2[];
extern  VTBL_ENTRY _ZTV7S3589C2[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C8;
extern VTBL_ENTRY _ZTI7S3589C8[];
extern  VTBL_ENTRY _ZTV7S3589C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C8[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C11;
extern VTBL_ENTRY _ZTI8S3589C11[];
extern  VTBL_ENTRY _ZTV8S3589C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C11[];
static Base_Class bases_S3589C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C13_nt,    ABISELECT(16,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},
  {&cd_S3589C9_nt,    ABISELECT(64,44), //bcp->offset
    16, //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
    2, //immediately_derived
  0, 1},
  {&cd_S3589C14,    ABISELECT(40,32), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3589C3,    ABISELECT(96,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_S3589C2,    ABISELECT(96,64), //bcp->offset
    28, //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
    6, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(128,92), //bcp->offset
    33, //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
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3589C8,    ABISELECT(88,60), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3589C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3589C11,    ABISELECT(144,104), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3589C12[];
extern void _ZN8S3589C12D1Ev();
extern void _ZN8S3589C12D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn40_N8S3589C12D1Ev,_ZThn32_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn40_N8S3589C12D0Ev,_ZThn32_N8S3589C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn64_N8S3589C12D1Ev,_ZThn44_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn64_N8S3589C12D0Ev,_ZThn44_N8S3589C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3589C12D1Ev,_ZTv0_n20_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn88_N8S3589C12D1Ev,_ZThn60_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3589C12D0Ev,_ZTv0_n20_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn88_N8S3589C12D0Ev,_ZThn60_N8S3589C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn96_N8S3589C12D1Ev,_ZThn64_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn96_N8S3589C12D0Ev,_ZThn64_N8S3589C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn128_N8S3589C12D1Ev,_ZThn92_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn128_N8S3589C12D0Ev,_ZThn92_N8S3589C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn144_N8S3589C12D1Ev,_ZThn104_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn144_N8S3589C12D0Ev,_ZThn104_N8S3589C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3589C12[] = {
  ABISELECT(144,104),
  ABISELECT(128,92),
  ABISELECT(96,64),
  ABISELECT(88,60),
  ABISELECT(64,44),
  ABISELECT(40,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&_ZN8S3589C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C12D0Ev,
  ABISELECT(-40,-32),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev),
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev),
  ABISELECT(-88,-60),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C12D1Ev,_ZTv0_n20_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C12D0Ev,_ZTv0_n20_N8S3589C12D0Ev),
  ABISELECT(-96,-64),
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev),
  ABISELECT(-128,-92),
  ABISELECT(-128,-92),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev),
  ABISELECT(-144,-104),
  ABISELECT(-16,-12),
  ABISELECT(-144,-104),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev),
};
extern VTBL_ENTRY _ZTV8S3589C12[];
extern void _ZN8S3589C14D1Ev();
extern void _ZN8S3589C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C14__8S3589C12[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C14[0]),
  (VTBL_ENTRY)&_ZN8S3589C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3589C14D1Ev,_ZTv0_n12_N8S3589C14D1Ev)();
extern void ABISELECT(_ZThn24_N8S3589C14D1Ev,_ZThn12_N8S3589C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C14D0Ev,_ZTv0_n12_N8S3589C14D0Ev)();
extern void ABISELECT(_ZThn24_N8S3589C14D0Ev,_ZThn12_N8S3589C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__8S3589C14__8S3589C12[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S3589C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C14D1Ev,_ZTv0_n12_N8S3589C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C14D0Ev,_ZTv0_n12_N8S3589C14D0Ev),
};
extern void _ZN7S3589C8D1Ev();
extern void _ZN7S3589C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3589C8__8S3589C12[] = {
  ABISELECT(40,32),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&_ZN7S3589C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn8_N7S3589C8D1Ev,_ZThn4_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn8_N7S3589C8D0Ev,_ZThn4_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__7S3589C8__8S3589C12[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S3589C8D1Ev,_ZThn32_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S3589C8D0Ev,_ZThn32_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S3589C8__8S3589C12[] = {
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void _ZN8S3589C11D1Ev();
extern void _ZN8S3589C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C11__8S3589C12[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C11[0]),
  (VTBL_ENTRY)&_ZN8S3589C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3589C11D1Ev,_ZTv0_n12_N8S3589C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C11D0Ev,_ZTv0_n12_N8S3589C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S3589C11__8S3589C12[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S3589C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C11D1Ev,_ZTv0_n12_N8S3589C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C11D0Ev,_ZTv0_n12_N8S3589C11D0Ev),
};
static  VTT_ENTRY vtt_S3589C12[] = {
  {&(_ZTV8S3589C12[8]),  8,44},
  {&(_ZTV8S3589C12[14]),  14,44},
  {&(_ZTV8S3589C12[19]),  19,44},
  {&(_ZTV8S3589C12[26]),  26,44},
  {&(_ZTV8S3589C12[31]),  31,44},
  {&(_ZTV8S3589C12[36]),  36,44},
  {&(_ZTV8S3589C12[42]),  42,44},
  {&(_tg__ZTV8S3589C14__8S3589C12[3]),  3,5},
  {&(_tg__ZTV10S3589C9_nt__8S3589C14__8S3589C12[3]),  3,5},
  {&(_tg__ZTV7S3589C8__8S3589C12[4]),  4,6},
  {&(_tg__ZTV7S3589C2__7S3589C8__8S3589C12[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S3589C8__8S3589C12[3]),  3,5},
  {&(_tg__ZTV8S3589C11__8S3589C12[3]),  3,5},
  {&(_tg__ZTV7S3589C3__8S3589C11__8S3589C12[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S3589C12[];
extern  VTBL_ENTRY _ZTV8S3589C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C12[];
static VTBL_ENTRY alt_thunk_names46[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3589C8D0Ev,_ZThn32_N7S3589C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3589C8D0Ev,_ZThn4_N7S3589C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3589C8D1Ev,_ZThn32_N7S3589C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3589C8D1Ev,_ZThn4_N7S3589C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C14D0Ev,_ZTv0_n12_N8S3589C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S3589C14D0Ev,_ZThn12_N8S3589C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C14D1Ev,_ZTv0_n12_N8S3589C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S3589C14D1Ev,_ZThn12_N8S3589C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3589C12D0Ev,_ZTv0_n20_N8S3589C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S3589C12D0Ev,_ZThn60_N8S3589C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3589C12D1Ev,_ZTv0_n20_N8S3589C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S3589C12D1Ev,_ZThn60_N8S3589C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S3589C12D0Ev,_ZThn92_N8S3589C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S3589C12D0Ev,_ZThn64_N8S3589C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S3589C12D0Ev,_ZThn44_N8S3589C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S3589C12D1Ev,_ZThn92_N8S3589C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S3589C12D1Ev,_ZThn64_N8S3589C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S3589C12D1Ev,_ZThn44_N8S3589C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S3589C12D0Ev,_ZThn104_N8S3589C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S3589C12D0Ev,_ZThn32_N8S3589C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S3589C12D1Ev,_ZThn104_N8S3589C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S3589C12D1Ev,_ZThn32_N8S3589C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3589C12 = {  "S3589C12", // class name
  bases_S3589C12, 9,
  &(vtc_S3589C12[0]), // expected_vtbl_contents
  &(vtt_S3589C12[0]), // expected_vtt_contents
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI8S3589C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S3589C12),44, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3589C12),14, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names46,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3589C10  : virtual S3589C8 , S3589C11 , virtual S3589C12 {
  virtual  ~S3589C10(); // _ZN8S3589C10D2Ev
  S3589C10(); // tgen
};
//SIG(-1 S3589C10) C1{ VBC2{ VBC3{ BC4{ vd m Fc FU5{ m Fc[6]}} vd FL FU5} VBC4 vd} BC6{ VBC4} VBC7{ BC8{ m FD} VBC9{ VBC10{ vd m Fi Fc Fi} Fp[2]} VBC2 BC4 VBC6 Fc Fi} vd}


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

static void Test_S3589C10()
{
  extern Class_Descriptor cd_S3589C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S3589C10, buf);
    S3589C10 *dp, &lv = *(dp=new (buf) S3589C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S3589C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3589C10)");
    check_base_class_offset(lv, (S3589C3*)(S3589C2*), ABISELECT(16,8), "S3589C10");
    check_base_class_offset(lv, (S3589C2*)(S3589C8*), ABISELECT(16,8), "S3589C10");
    /*is_ambiguous_... S3589C8::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C8*), ABISELECT(48,36), "S3589C10");
    /*is_ambiguous_... S3589C10::S3589C11 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C11*), ABISELECT(48,36), "S3589C10");
    /*is_ambiguous_... S3589C10::S3589C11 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C11*), ABISELECT(48,36), "S3589C10");
    check_base_class_offset(lv, (S3589C8*), ABISELECT(8,4), "S3589C10");
    check_base_class_offset(lv, (S3589C8*)(S3589C12*), ABISELECT(8,4), "S3589C10");
    /*is_ambiguous_... S3589C10::S3589C11 */ AMB_check_base_class_offset(lv, (S3589C11*), 0, "S3589C10");
    check_base_class_offset(lv, (S3589C13_nt*)(S3589C12*), ABISELECT(80,60), "S3589C10");
    check_base_class_offset(lv, (S3589C9_nt*)(S3589C14*), ABISELECT(128,92), "S3589C10");
    check_base_class_offset(lv, (S3589C14*)(S3589C12*), ABISELECT(104,80), "S3589C10");
    /*is_ambiguous_... S3589C12::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C12*), ABISELECT(64,48), "S3589C10");
    check_base_class_offset(lv, (S3589C11*)(S3589C12*), ABISELECT(152,108), "S3589C10");
    check_base_class_offset(lv, (S3589C12*), ABISELECT(64,48), "S3589C10");
    test_class_info(&lv, &cd_S3589C10);
    dp->~S3589C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3589C10(Test_S3589C10, "S3589C10", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN8S3589C10C1Ev();
extern void _ZN8S3589C10D2Ev();
Name_Map name_map_S3589C10[] = {
  NSPAIR(_ZN8S3589C10C1Ev),
  NSPAIR(_ZN8S3589C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C2;
extern VTBL_ENTRY _ZTI7S3589C2[];
extern  VTBL_ENTRY _ZTV7S3589C2[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C8;
extern VTBL_ENTRY _ZTI7S3589C8[];
extern  VTBL_ENTRY _ZTV7S3589C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C8[];
extern Class_Descriptor cd_S3589C11;
extern VTBL_ENTRY _ZTI8S3589C11[];
extern  VTBL_ENTRY _ZTV8S3589C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C11[];
extern Class_Descriptor cd_S3589C13_nt;
extern VTBL_ENTRY _ZTI11S3589C13_nt[];
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
extern Class_Descriptor cd_S3589C14;
extern VTBL_ENTRY _ZTI8S3589C14[];
extern  VTBL_ENTRY _ZTV8S3589C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C14[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C11;
extern VTBL_ENTRY _ZTI8S3589C11[];
extern  VTBL_ENTRY _ZTV8S3589C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C11[];
extern Class_Descriptor cd_S3589C12;
extern VTBL_ENTRY _ZTI8S3589C12[];
extern  VTBL_ENTRY _ZTV8S3589C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C12[];
static Base_Class bases_S3589C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    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
  0, 0},
  {&cd_S3589C2,    ABISELECT(16,8), //bcp->offset
    18, //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
    3, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(48,36), //bcp->offset
    23, //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
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3589C8,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3589C11,    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_S3589C13_nt,    ABISELECT(80,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
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3589C9_nt,    ABISELECT(128,92), //bcp->offset
    45, //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
    7, //immediately_derived
  0, 1},
  {&cd_S3589C14,    ABISELECT(104,80), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(64,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
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3589C11,    ABISELECT(152,108), //bcp->offset
    50, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3589C12,    ABISELECT(64,48), //bcp->offset
    28, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3589C10[];
extern void _ZN8S3589C10D1Ev();
extern void _ZN8S3589C10D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S3589C10D1Ev,_ZTv0_n20_N8S3589C10D1Ev)();
extern void ABISELECT(_ZThn8_N8S3589C10D1Ev,_ZThn4_N8S3589C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3589C10D0Ev,_ZTv0_n20_N8S3589C10D0Ev)();
extern void ABISELECT(_ZThn8_N8S3589C10D0Ev,_ZThn4_N8S3589C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C10D1Ev,_ZTv0_n12_N8S3589C10D1Ev)();
extern void ABISELECT(_ZThn16_N8S3589C10D1Ev,_ZThn8_N8S3589C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C10D0Ev,_ZTv0_n12_N8S3589C10D0Ev)();
extern void ABISELECT(_ZThn16_N8S3589C10D0Ev,_ZThn8_N8S3589C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C10D1Ev,_ZTv0_n12_N8S3589C10D1Ev)();
extern void ABISELECT(_ZThn48_N8S3589C10D1Ev,_ZThn36_N8S3589C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C10D0Ev,_ZTv0_n12_N8S3589C10D0Ev)();
extern void ABISELECT(_ZThn48_N8S3589C10D0Ev,_ZThn36_N8S3589C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S3589C10D1Ev,_ZTv0_n36_N8S3589C10D1Ev)();
extern void ABISELECT(_ZThn64_N8S3589C10D1Ev,_ZThn48_N8S3589C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S3589C10D0Ev,_ZTv0_n36_N8S3589C10D0Ev)();
extern void ABISELECT(_ZThn64_N8S3589C10D0Ev,_ZThn48_N8S3589C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C10D1Ev,_ZTv0_n16_N8S3589C10D1Ev)();
extern void ABISELECT(_ZThn104_N8S3589C10D1Ev,_ZThn80_N8S3589C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C10D0Ev,_ZTv0_n16_N8S3589C10D0Ev)();
extern void ABISELECT(_ZThn104_N8S3589C10D0Ev,_ZThn80_N8S3589C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C10D1Ev,_ZTv0_n12_N8S3589C10D1Ev)();
extern void ABISELECT(_ZThn128_N8S3589C10D1Ev,_ZThn92_N8S3589C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C10D0Ev,_ZTv0_n12_N8S3589C10D0Ev)();
extern void ABISELECT(_ZThn128_N8S3589C10D0Ev,_ZThn92_N8S3589C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C10D1Ev,_ZTv0_n16_N8S3589C10D1Ev)();
extern void ABISELECT(_ZThn152_N8S3589C10D1Ev,_ZThn108_N8S3589C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C10D0Ev,_ZTv0_n16_N8S3589C10D0Ev)();
extern void ABISELECT(_ZThn152_N8S3589C10D0Ev,_ZThn108_N8S3589C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3589C10[] = {
  ABISELECT(152,108),
  ABISELECT(128,92),
  ABISELECT(104,80),
  ABISELECT(64,48),
  ABISELECT(16,8),
  ABISELECT(8,4),
  ABISELECT(48,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C10[0]),
  (VTBL_ENTRY)&_ZN8S3589C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C10D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S3589C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C10D1Ev,_ZTv0_n20_N8S3589C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C10D0Ev,_ZTv0_n20_N8S3589C10D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S3589C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C10D1Ev,_ZTv0_n12_N8S3589C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C10D0Ev,_ZTv0_n12_N8S3589C10D0Ev),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S3589C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C10D1Ev,_ZTv0_n12_N8S3589C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C10D0Ev,_ZTv0_n12_N8S3589C10D0Ev),
  ABISELECT(-64,-48),
  ABISELECT(88,60),
  ABISELECT(-16,-12),
  ABISELECT(-48,-40),
  ABISELECT(-56,-44),
  ABISELECT(64,44),
  ABISELECT(40,32),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI8S3589C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S3589C10D1Ev,_ZTv0_n36_N8S3589C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S3589C10D0Ev,_ZTv0_n36_N8S3589C10D0Ev),
  ABISELECT(-104,-80),
  ABISELECT(24,12),
  ABISELECT(-104,-80),
  (VTBL_ENTRY)&(_ZTI8S3589C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C10D1Ev,_ZTv0_n16_N8S3589C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C10D0Ev,_ZTv0_n16_N8S3589C10D0Ev),
  ABISELECT(-128,-92),
  ABISELECT(-128,-92),
  (VTBL_ENTRY)&(_ZTI8S3589C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C10D1Ev,_ZTv0_n12_N8S3589C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C10D0Ev,_ZTv0_n12_N8S3589C10D0Ev),
  ABISELECT(-152,-108),
  ABISELECT(-104,-72),
  ABISELECT(-152,-108),
  (VTBL_ENTRY)&(_ZTI8S3589C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C10D1Ev,_ZTv0_n16_N8S3589C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C10D0Ev,_ZTv0_n16_N8S3589C10D0Ev),
};
extern VTBL_ENTRY _ZTV8S3589C10[];
extern void _ZN8S3589C11D1Ev();
extern void _ZN8S3589C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C11__A__8S3589C10[] = {
  ABISELECT(48,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C11[0]),
  (VTBL_ENTRY)&_ZN8S3589C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3589C11D1Ev,_ZTv0_n12_N8S3589C11D1Ev)();
extern void ABISELECT(_ZThn48_N8S3589C11D1Ev,_ZThn36_N8S3589C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C11D0Ev,_ZTv0_n12_N8S3589C11D0Ev)();
extern void ABISELECT(_ZThn48_N8S3589C11D0Ev,_ZThn36_N8S3589C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S3589C11__A__8S3589C10[] = {
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S3589C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C11D1Ev,_ZTv0_n12_N8S3589C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C11D0Ev,_ZTv0_n12_N8S3589C11D0Ev),
};
extern void _ZN7S3589C8D1Ev();
extern void _ZN7S3589C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3589C8__8S3589C10[] = {
  ABISELECT(40,32),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&_ZN7S3589C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn8_N7S3589C8D1Ev,_ZThn4_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn8_N7S3589C8D0Ev,_ZThn4_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__7S3589C8__8S3589C10[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S3589C8D1Ev,_ZThn32_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S3589C8D0Ev,_ZThn32_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S3589C8__8S3589C10[] = {
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void _ZN8S3589C12D1Ev();
extern void _ZN8S3589C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C12__8S3589C10[] = {
  ABISELECT(88,60),
  ABISELECT(-16,-12),
  ABISELECT(-48,-40),
  ABISELECT(-56,-44),
  ABISELECT(64,44),
  ABISELECT(40,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&_ZN8S3589C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C12D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn40_N8S3589C12D1Ev,_ZThn32_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn40_N8S3589C12D0Ev,_ZThn32_N8S3589C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C14__8S3589C12__8S3589C10[] = {
  ABISELECT(-40,-32),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn64_N8S3589C12D1Ev,_ZThn44_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn64_N8S3589C12D0Ev,_ZThn44_N8S3589C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__8S3589C12__8S3589C10[] = {
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S3589C12D1Ev,_ZTv0_n20_N8S3589C12D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S3589C12D0Ev,_ZTv0_n20_N8S3589C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C8__8S3589C12__8S3589C10[] = {
  ABISELECT(56,44),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C12D1Ev,_ZTv0_n20_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C12D0Ev,_ZTv0_n20_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C2__8S3589C12__8S3589C10[] = {
  ABISELECT(48,40),
  ABISELECT(48,40),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S3589C12__8S3589C10[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn88_N8S3589C12D1Ev,_ZThn60_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn88_N8S3589C12D0Ev,_ZThn60_N8S3589C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C11__8S3589C12__8S3589C10[] = {
  ABISELECT(-88,-60),
  ABISELECT(-104,-72),
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev),
};
extern void _ZN8S3589C14D1Ev();
extern void _ZN8S3589C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C14__8S3589C10[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C14[0]),
  (VTBL_ENTRY)&_ZN8S3589C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3589C14D1Ev,_ZTv0_n12_N8S3589C14D1Ev)();
extern void ABISELECT(_ZThn24_N8S3589C14D1Ev,_ZThn12_N8S3589C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C14D0Ev,_ZTv0_n12_N8S3589C14D0Ev)();
extern void ABISELECT(_ZThn24_N8S3589C14D0Ev,_ZThn12_N8S3589C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__8S3589C14__8S3589C10[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S3589C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C14D1Ev,_ZTv0_n12_N8S3589C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C14D0Ev,_ZTv0_n12_N8S3589C14D0Ev),
};
extern void _ZN8S3589C11D1Ev();
extern void _ZN8S3589C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C11__A1__8S3589C10[] = {
  ABISELECT(-104,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C11[0]),
  (VTBL_ENTRY)&_ZN8S3589C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3589C11D1Ev,_ZTv0_n12_N8S3589C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C11D0Ev,_ZTv0_n12_N8S3589C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S3589C11__A1__8S3589C10[] = {
  ABISELECT(104,72),
  ABISELECT(104,72),
  (VTBL_ENTRY)&(_ZTI8S3589C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C11D1Ev,_ZTv0_n12_N8S3589C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C11D0Ev,_ZTv0_n12_N8S3589C11D0Ev),
};
static  VTT_ENTRY vtt_S3589C10[] = {
  {&(_ZTV8S3589C10[9]),  9,56},
  {&(_tg__ZTV8S3589C11__A__8S3589C10[3]),  3,5},
  {&(_tg__ZTV7S3589C3__8S3589C11__A__8S3589C10[3]),  3,5},
  {&(_ZTV8S3589C10[16]),  16,56},
  {&(_ZTV8S3589C10[21]),  21,56},
  {&(_ZTV8S3589C10[26]),  26,56},
  {&(_ZTV8S3589C10[37]),  37,56},
  {&(_ZTV8S3589C10[43]),  43,56},
  {&(_ZTV8S3589C10[48]),  48,56},
  {&(_ZTV8S3589C10[54]),  54,56},
  {&(_tg__ZTV7S3589C8__8S3589C10[4]),  4,6},
  {&(_tg__ZTV7S3589C2__7S3589C8__8S3589C10[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S3589C8__8S3589C10[3]),  3,5},
  {&(_tg__ZTV8S3589C12__8S3589C10[8]),  8,10},
  {&(_tg__ZTV8S3589C14__8S3589C12__8S3589C10[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__8S3589C12__8S3589C10[3]),  3,5},
  {&(_tg__ZTV7S3589C8__8S3589C12__8S3589C10[5]),  5,7},
  {&(_tg__ZTV7S3589C2__8S3589C12__8S3589C10[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S3589C12__8S3589C10[3]),  3,5},
  {&(_tg__ZTV8S3589C11__8S3589C12__8S3589C10[4]),  4,6},
  {&(_tg__ZTV8S3589C14__8S3589C10[3]),  3,5},
  {&(_tg__ZTV10S3589C9_nt__8S3589C14__8S3589C10[3]),  3,5},
  {&(_tg__ZTV8S3589C11__A1__8S3589C10[3]),  3,5},
  {&(_tg__ZTV7S3589C3__8S3589C11__A1__8S3589C10[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S3589C10[];
extern  VTBL_ENTRY _ZTV8S3589C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C10[];
static VTBL_ENTRY alt_thunk_names47[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C14D0Ev,_ZTv0_n12_N8S3589C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S3589C14D0Ev,_ZThn12_N8S3589C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C14D1Ev,_ZTv0_n12_N8S3589C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S3589C14D1Ev,_ZThn12_N8S3589C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S3589C12D0Ev,_ZThn44_N8S3589C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S3589C12D1Ev,_ZThn44_N8S3589C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S3589C12D0Ev,_ZThn60_N8S3589C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S3589C12D0Ev,_ZThn32_N8S3589C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S3589C12D1Ev,_ZThn60_N8S3589C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S3589C12D1Ev,_ZThn32_N8S3589C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3589C8D0Ev,_ZThn32_N7S3589C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3589C8D0Ev,_ZThn4_N7S3589C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3589C8D1Ev,_ZThn32_N7S3589C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3589C8D1Ev,_ZThn4_N7S3589C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C11D0Ev,_ZTv0_n12_N8S3589C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S3589C11D0Ev,_ZThn36_N8S3589C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C11D1Ev,_ZTv0_n12_N8S3589C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S3589C11D1Ev,_ZThn36_N8S3589C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C10D0Ev,_ZTv0_n16_N8S3589C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S3589C10D0Ev,_ZThn108_N8S3589C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S3589C10D0Ev,_ZThn80_N8S3589C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C10D1Ev,_ZTv0_n16_N8S3589C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S3589C10D1Ev,_ZThn108_N8S3589C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S3589C10D1Ev,_ZThn80_N8S3589C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S3589C10D0Ev,_ZTv0_n36_N8S3589C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S3589C10D0Ev,_ZThn48_N8S3589C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S3589C10D1Ev,_ZTv0_n36_N8S3589C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S3589C10D1Ev,_ZThn48_N8S3589C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C10D0Ev,_ZTv0_n12_N8S3589C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S3589C10D0Ev,_ZThn92_N8S3589C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S3589C10D0Ev,_ZThn36_N8S3589C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S3589C10D0Ev,_ZThn8_N8S3589C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C10D1Ev,_ZTv0_n12_N8S3589C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S3589C10D1Ev,_ZThn92_N8S3589C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S3589C10D1Ev,_ZThn36_N8S3589C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S3589C10D1Ev,_ZThn8_N8S3589C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3589C10D0Ev,_ZTv0_n20_N8S3589C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S3589C10D0Ev,_ZThn4_N8S3589C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3589C10D1Ev,_ZTv0_n20_N8S3589C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S3589C10D1Ev,_ZThn4_N8S3589C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3589C10 = {  "S3589C10", // class name
  bases_S3589C10, 11,
  &(vtc_S3589C10[0]), // expected_vtbl_contents
  &(vtt_S3589C10[0]), // expected_vtt_contents
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI8S3589C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3589C10),56, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3589C10),24, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names47,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3589C16  : virtual S3589C3 {
  int s3589c16f0;
  ::S19905C17_nt s3589c16f1;
  ~S3589C16(); // tgen
  S3589C16(); // tgen
};
//SIG(-1 S3589C16) C1{ VBC2{ vd m Fc FU3{ m Fc[6]}} Fi FC4{}}


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

static void Test_S3589C16()
{
  extern Class_Descriptor cd_S3589C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S3589C16, buf);
    S3589C16 *dp, &lv = *(dp=new (buf) S3589C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S3589C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3589C16)");
    check_base_class_offset(lv, (S3589C3*), ABISELECT(16,12), "S3589C16");
    check_field_offset(lv, s3589c16f0, ABISELECT(8,4), "S3589C16.s3589c16f0");
    check_field_offset(lv, s3589c16f1, ABISELECT(12,8), "S3589C16.s3589c16f1");
    test_class_info(&lv, &cd_S3589C16);
    dp->~S3589C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3589C16(Test_S3589C16, "S3589C16", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN8S3589C16C1Ev();
extern void _ZN8S3589C16D1Ev();
Name_Map name_map_S3589C16[] = {
  NSPAIR(_ZN8S3589C16C1Ev),
  NSPAIR(_ZN8S3589C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
static Base_Class bases_S3589C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    ABISELECT(16,12), //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},
  {0}};
extern VTBL_ENTRY _ZTI8S3589C16[];
extern void _ZN8S3589C16D1Ev();
extern void _ZN8S3589C16D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S3589C16D1Ev,_ZTv0_n12_N8S3589C16D1Ev)();
extern void ABISELECT(_ZThn16_N8S3589C16D1Ev,_ZThn12_N8S3589C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C16D0Ev,_ZTv0_n12_N8S3589C16D0Ev)();
extern void ABISELECT(_ZThn16_N8S3589C16D0Ev,_ZThn12_N8S3589C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3589C16[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C16[0]),
  (VTBL_ENTRY)&_ZN8S3589C16D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C16D0Ev,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S3589C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C16D1Ev,_ZTv0_n12_N8S3589C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C16D0Ev,_ZTv0_n12_N8S3589C16D0Ev),
};
extern VTBL_ENTRY _ZTV8S3589C16[];
static  VTT_ENTRY vtt_S3589C16[] = {
  {&(_ZTV8S3589C16[3]),  3,10},
  {&(_ZTV8S3589C16[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S3589C16[];
extern  VTBL_ENTRY _ZTV8S3589C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C16[];
static VTBL_ENTRY alt_thunk_names48[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C16D0Ev,_ZTv0_n12_N8S3589C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S3589C16D0Ev,_ZThn12_N8S3589C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C16D1Ev,_ZTv0_n12_N8S3589C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S3589C16D1Ev,_ZThn12_N8S3589C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3589C16 = {  "S3589C16", // class name
  bases_S3589C16, 1,
  &(vtc_S3589C16[0]), // expected_vtbl_contents
  &(vtt_S3589C16[0]), // expected_vtt_contents
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI8S3589C16),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S3589C16),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3589C16),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names48,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3589C15  : S3589C8 , virtual S3589C16 {
  long double s3589c15f0;
  virtual  ~S3589C15(); // _ZN8S3589C15D2Ev
  S3589C15(); // tgen
};
//SIG(-1 S3589C15) C1{ BC2{ VBC3{ BC4{ vd m Fc FU5{ m Fc[6]}} vd FL FU5} VBC4 vd} VBC6{ VBC4 Fi FC7{}} vd FD}


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

static void Test_S3589C15()
{
  extern Class_Descriptor cd_S3589C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,18)];
    init_test(&cd_S3589C15, buf);
    S3589C15 *dp, &lv = *(dp=new (buf) S3589C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,68), "sizeof(S3589C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3589C15)");
    check_base_class_offset(lv, (S3589C3*)(S3589C2*), ABISELECT(32,16), "S3589C15");
    check_base_class_offset(lv, (S3589C2*)(S3589C8*), ABISELECT(32,16), "S3589C15");
    /*is_ambiguous_... S3589C8::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C8*), ABISELECT(64,44), "S3589C15");
    check_base_class_offset(lv, (S3589C3*)(S3589C16*), ABISELECT(64,44), "S3589C15");
    check_base_class_offset(lv, (S3589C8*), 0, "S3589C15");
    check_base_class_offset(lv, (S3589C16*), ABISELECT(80,56), "S3589C15");
    check_field_offset(lv, s3589c15f0, ABISELECT(16,4), "S3589C15.s3589c15f0");
    test_class_info(&lv, &cd_S3589C15);
    dp->~S3589C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3589C15(Test_S3589C15, "S3589C15", ABISELECT(96,68));

#else // __cplusplus

extern void _ZN8S3589C15C1Ev();
extern void _ZN8S3589C15D2Ev();
Name_Map name_map_S3589C15[] = {
  NSPAIR(_ZN8S3589C15C1Ev),
  NSPAIR(_ZN8S3589C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C2;
extern VTBL_ENTRY _ZTI7S3589C2[];
extern  VTBL_ENTRY _ZTV7S3589C2[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C8;
extern VTBL_ENTRY _ZTI7S3589C8[];
extern  VTBL_ENTRY _ZTV7S3589C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C8[];
extern Class_Descriptor cd_S3589C16;
extern VTBL_ENTRY _ZTI8S3589C16[];
extern  VTBL_ENTRY _ZTV8S3589C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C16[];
static Base_Class bases_S3589C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    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
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3589C2,    ABISELECT(32,16), //bcp->offset
    7, //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
    3, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(64,44), //bcp->offset
    12, //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
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3589C8,    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_S3589C16,    ABISELECT(80,56), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //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 _ZTI8S3589C15[];
extern void _ZN8S3589C15D1Ev();
extern void _ZN8S3589C15D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S3589C15D1Ev,_ZTv0_n12_N8S3589C15D1Ev)();
extern void ABISELECT(_ZThn32_N8S3589C15D1Ev,_ZThn16_N8S3589C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C15D0Ev,_ZTv0_n12_N8S3589C15D0Ev)();
extern void ABISELECT(_ZThn32_N8S3589C15D0Ev,_ZThn16_N8S3589C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C15D1Ev,_ZTv0_n12_N8S3589C15D1Ev)();
extern void ABISELECT(_ZThn64_N8S3589C15D1Ev,_ZThn44_N8S3589C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C15D0Ev,_ZTv0_n12_N8S3589C15D0Ev)();
extern void ABISELECT(_ZThn64_N8S3589C15D0Ev,_ZThn44_N8S3589C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C15D1Ev,_ZTv0_n16_N8S3589C15D1Ev)();
extern void ABISELECT(_ZThn80_N8S3589C15D1Ev,_ZThn56_N8S3589C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C15D0Ev,_ZTv0_n16_N8S3589C15D0Ev)();
extern void ABISELECT(_ZThn80_N8S3589C15D0Ev,_ZThn56_N8S3589C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3589C15[] = {
  ABISELECT(80,56),
  ABISELECT(64,44),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C15[0]),
  (VTBL_ENTRY)&_ZN8S3589C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C15D0Ev,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S3589C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C15D1Ev,_ZTv0_n12_N8S3589C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C15D0Ev,_ZTv0_n12_N8S3589C15D0Ev),
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S3589C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C15D1Ev,_ZTv0_n12_N8S3589C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C15D0Ev,_ZTv0_n12_N8S3589C15D0Ev),
  ABISELECT(-80,-56),
  ABISELECT(-16,-12),
  ABISELECT(-80,-56),
  (VTBL_ENTRY)&(_ZTI8S3589C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C15D1Ev,_ZTv0_n16_N8S3589C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C15D0Ev,_ZTv0_n16_N8S3589C15D0Ev),
};
extern VTBL_ENTRY _ZTV8S3589C15[];
extern void _ZN7S3589C8D1Ev();
extern void _ZN7S3589C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3589C8__8S3589C15[] = {
  ABISELECT(64,44),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&_ZN7S3589C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn32_N7S3589C8D1Ev,_ZThn16_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn32_N7S3589C8D0Ev,_ZThn16_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__7S3589C8__8S3589C15[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn64_N7S3589C8D1Ev,_ZThn44_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn64_N7S3589C8D0Ev,_ZThn44_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S3589C8__8S3589C15[] = {
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void _ZN8S3589C16D1Ev();
extern void _ZN8S3589C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C16__8S3589C15[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C16[0]),
  (VTBL_ENTRY)&_ZN8S3589C16D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C16D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3589C16D1Ev,_ZTv0_n12_N8S3589C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C16D0Ev,_ZTv0_n12_N8S3589C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S3589C16__8S3589C15[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S3589C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C16D1Ev,_ZTv0_n12_N8S3589C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C16D0Ev,_ZTv0_n12_N8S3589C16D0Ev),
};
static  VTT_ENTRY vtt_S3589C15[] = {
  {&(_ZTV8S3589C15[5]),  5,23},
  {&(_tg__ZTV7S3589C8__8S3589C15[4]),  4,6},
  {&(_tg__ZTV7S3589C2__7S3589C8__8S3589C15[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S3589C8__8S3589C15[3]),  3,5},
  {&(_ZTV8S3589C15[10]),  10,23},
  {&(_ZTV8S3589C15[15]),  15,23},
  {&(_ZTV8S3589C15[21]),  21,23},
  {&(_tg__ZTV8S3589C16__8S3589C15[3]),  3,5},
  {&(_tg__ZTV7S3589C3__8S3589C16__8S3589C15[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S3589C15[];
extern  VTBL_ENTRY _ZTV8S3589C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C15[];
static VTBL_ENTRY alt_thunk_names49[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S3589C8D0Ev,_ZThn44_N7S3589C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3589C8D0Ev,_ZThn16_N7S3589C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S3589C8D1Ev,_ZThn44_N7S3589C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3589C8D1Ev,_ZThn16_N7S3589C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C15D0Ev,_ZTv0_n16_N8S3589C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S3589C15D0Ev,_ZThn56_N8S3589C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C15D1Ev,_ZTv0_n16_N8S3589C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S3589C15D1Ev,_ZThn56_N8S3589C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C15D0Ev,_ZTv0_n12_N8S3589C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S3589C15D0Ev,_ZThn44_N8S3589C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3589C15D0Ev,_ZThn16_N8S3589C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C15D1Ev,_ZTv0_n12_N8S3589C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S3589C15D1Ev,_ZThn44_N8S3589C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3589C15D1Ev,_ZThn16_N8S3589C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3589C15 = {  "S3589C15", // class name
  bases_S3589C15, 5,
  &(vtc_S3589C15[0]), // expected_vtbl_contents
  &(vtt_S3589C15[0]), // expected_vtt_contents
  ABISELECT(96,68), // object size
  NSPAIRA(_ZTI8S3589C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3589C15),23, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3589C15),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names49,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3589C5  : virtual S3589C6 , virtual S3589C10 , S3589C15 {
  int s3589c5f0[10];
  void *s3589c5f1;
  ::S3589C15 s3589c5f2;
  virtual  ~S3589C5(); // _ZN7S3589C5D2Ev
  S3589C5(); // tgen
};
//SIG(-1 S3589C5) C1{ VBC2{ BC3{ VBC4{ VBC5{ BC6{ vd m Fc FU7{ m Fc[6]}} vd FL FU7} VBC6 vd} BC6 BC8{ vd m Fi Fc Fi} BC5 Fi Fp} BC4 VBC8} VBC9{ VBC4 BC10{ VBC6} VBC11{ BC12{ m FD} VBC13{ VBC8 Fp[2]} VBC4 BC6 VBC10 Fc Fi} vd} BC14{ BC4 VBC15{ VBC6 Fi FC16{}} vd FD} vd Fi[10] Fp FC14}


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

static void Test_S3589C5()
{
  extern Class_Descriptor cd_S3589C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,81)];
    init_test(&cd_S3589C5, buf);
    S3589C5 *dp, &lv = *(dp=new (buf) S3589C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,320), "sizeof(S3589C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3589C5)");
    /*is_ambiguous_... S3589C5::S3589C2 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C2*), ABISELECT(280,200), "S3589C5");
    /*is_ambiguous_... S3589C5::S3589C8 */ AMB_check_base_class_offset(lv, (S3589C2*)(S3589C8*), ABISELECT(280,200), "S3589C5");
    /*is_ambiguous_... S3589C6::S3589C8 */ AMB_check_base_class_offset(lv, (S3589C2*)(S3589C8*)(S3589C6*), ABISELECT(280,200), "S3589C5");
    check_base_class_offset(lv, (S3589C2*)(S3589C8*)(S3589C15*), ABISELECT(280,200), "S3589C5");
    /*is_ambiguous_... S3589C5::S3589C8 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C8*), ABISELECT(312,228), "S3589C5");
    /*is_ambiguous_... S3589C6::S3589C8 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C8*)(S3589C6*), ABISELECT(312,228), "S3589C5");
    /*is_ambiguous_... S3589C10::S3589C11 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C11*)(S3589C10*), ABISELECT(312,228), "S3589C5");
    /*is_ambiguous_... S3589C5::S3589C11 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C11*), ABISELECT(312,228), "S3589C5");
    /*is_ambiguous_... S3589C8::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C8*)(S3589C15*), ABISELECT(312,228), "S3589C5");
    check_base_class_offset(lv, (S3589C3*)(S3589C16*), ABISELECT(312,228), "S3589C5");
    check_base_class_offset(lv, (S3589C8*)(S3589C7*)(S3589C6*), ABISELECT(272,196), "S3589C5");
    check_base_class_offset(lv, (S3589C8*)(S3589C10*), ABISELECT(272,196), "S3589C5");
    check_base_class_offset(lv, (S3589C8*)(S3589C12*), ABISELECT(272,196), "S3589C5");
    /*is_ambiguous_... S3589C7::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C7*)(S3589C6*), ABISELECT(176,128), "S3589C5");
    check_base_class_offset(lv, (S3589C9_nt*)(S3589C7*)(S3589C6*), ABISELECT(192,140), "S3589C5");
    /*is_ambiguous_... S3589C7::S3589C2 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C2*)(S3589C7*)(S3589C6*), ABISELECT(216,156), "S3589C5");
    /*is_ambiguous_... S3589C7::S3589C2 */ AMB_check_base_class_offset(lv, (S3589C2*)(S3589C7*)(S3589C6*), ABISELECT(216,156), "S3589C5");
    check_base_class_offset(lv, (S3589C7*)(S3589C6*), ABISELECT(176,128), "S3589C5");
    /*is_ambiguous_... S3589C6::S3589C8 */ AMB_check_base_class_offset(lv, (S3589C8*)(S3589C6*), ABISELECT(264,192), "S3589C5");
    /*is_ambiguous_... S3589C6::S3589C9_nt */ AMB_check_base_class_offset(lv, (S3589C9_nt*)(S3589C6*), ABISELECT(328,240), "S3589C5");
    check_base_class_offset(lv, (S3589C9_nt*)(S3589C14*), ABISELECT(328,240), "S3589C5");
    check_base_class_offset(lv, (S3589C6*), ABISELECT(176,128), "S3589C5");
    /*is_ambiguous_... S3589C10::S3589C11 */ AMB_check_base_class_offset(lv, (S3589C11*)(S3589C10*), ABISELECT(352,256), "S3589C5");
    check_base_class_offset(lv, (S3589C13_nt*)(S3589C12*), ABISELECT(384,272), "S3589C5");
    check_base_class_offset(lv, (S3589C14*)(S3589C12*), ABISELECT(408,292), "S3589C5");
    /*is_ambiguous_... S3589C12::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C12*), ABISELECT(368,260), "S3589C5");
    check_base_class_offset(lv, (S3589C11*)(S3589C12*), ABISELECT(432,304), "S3589C5");
    check_base_class_offset(lv, (S3589C12*)(S3589C10*), ABISELECT(368,260), "S3589C5");
    check_base_class_offset(lv, (S3589C10*), ABISELECT(352,256), "S3589C5");
    check_base_class_offset(lv, (S3589C8*)(S3589C15*), 0, "S3589C5");
    check_base_class_offset(lv, (S3589C16*)(S3589C15*), ABISELECT(440,308), "S3589C5");
    check_base_class_offset(lv, (S3589C15*), 0, "S3589C5");
    check_field_offset(lv, s3589c5f0, ABISELECT(32,16), "S3589C5.s3589c5f0");
    check_field_offset(lv, s3589c5f1, ABISELECT(72,56), "S3589C5.s3589c5f1");
    check_field_offset(lv, s3589c5f2, ABISELECT(80,60), "S3589C5.s3589c5f2");
    test_class_info(&lv, &cd_S3589C5);
    dp->~S3589C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3589C5(Test_S3589C5, "S3589C5", ABISELECT(464,320));

#else // __cplusplus

extern void _ZN7S3589C5C1Ev();
extern void _ZN7S3589C5D2Ev();
Name_Map name_map_S3589C5[] = {
  NSPAIR(_ZN7S3589C5C1Ev),
  NSPAIR(_ZN7S3589C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C2;
extern VTBL_ENTRY _ZTI7S3589C2[];
extern  VTBL_ENTRY _ZTV7S3589C2[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C8;
extern VTBL_ENTRY _ZTI7S3589C8[];
extern  VTBL_ENTRY _ZTV7S3589C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C8[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C2;
extern VTBL_ENTRY _ZTI7S3589C2[];
extern  VTBL_ENTRY _ZTV7S3589C2[];
extern Class_Descriptor cd_S3589C7;
extern VTBL_ENTRY _ZTI7S3589C7[];
extern  VTBL_ENTRY _ZTV7S3589C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C7[];
extern Class_Descriptor cd_S3589C8;
extern VTBL_ENTRY _ZTI7S3589C8[];
extern  VTBL_ENTRY _ZTV7S3589C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C8[];
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
extern Class_Descriptor cd_S3589C6;
extern VTBL_ENTRY _ZTI7S3589C6[];
extern  VTBL_ENTRY _ZTV7S3589C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C6[];
extern Class_Descriptor cd_S3589C11;
extern VTBL_ENTRY _ZTI8S3589C11[];
extern  VTBL_ENTRY _ZTV8S3589C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C11[];
extern Class_Descriptor cd_S3589C13_nt;
extern VTBL_ENTRY _ZTI11S3589C13_nt[];
extern Class_Descriptor cd_S3589C14;
extern VTBL_ENTRY _ZTI8S3589C14[];
extern  VTBL_ENTRY _ZTV8S3589C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C14[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C11;
extern VTBL_ENTRY _ZTI8S3589C11[];
extern  VTBL_ENTRY _ZTV8S3589C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C11[];
extern Class_Descriptor cd_S3589C12;
extern VTBL_ENTRY _ZTI8S3589C12[];
extern  VTBL_ENTRY _ZTV8S3589C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C12[];
extern Class_Descriptor cd_S3589C10;
extern VTBL_ENTRY _ZTI8S3589C10[];
extern  VTBL_ENTRY _ZTV8S3589C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C10[];
extern Class_Descriptor cd_S3589C8;
extern VTBL_ENTRY _ZTI7S3589C8[];
extern  VTBL_ENTRY _ZTV7S3589C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C8[];
extern Class_Descriptor cd_S3589C16;
extern VTBL_ENTRY _ZTI8S3589C16[];
extern  VTBL_ENTRY _ZTV8S3589C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C16[];
extern Class_Descriptor cd_S3589C15;
extern VTBL_ENTRY _ZTI8S3589C15[];
extern  VTBL_ENTRY _ZTV8S3589C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C15[];
static Base_Class bases_S3589C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    ABISELECT(280,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
  0, 0},
  {&cd_S3589C2,    ABISELECT(280,200), //bcp->offset
    44, //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
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(312,228), //bcp->offset
    49, //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
    3, //immediately_derived
  0, 1},
  {&cd_S3589C8,    ABISELECT(272,196), //bcp->offset
    37, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3589C9_nt,    ABISELECT(192,140), //bcp->offset
    23, //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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3589C3,    ABISELECT(216,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
    8, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3589C2,    ABISELECT(216,156), //bcp->offset
    27, //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
    9, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3589C7,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3589C8,    ABISELECT(264,192), //bcp->offset
    31, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3589C9_nt,    ABISELECT(328,240), //bcp->offset
    54, //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
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S3589C6,    ABISELECT(176,128), //bcp->offset
    14, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3589C11,    ABISELECT(352,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3589C13_nt,    ABISELECT(384,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
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3589C14,    ABISELECT(408,292), //bcp->offset
    82, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(368,260), //bcp->offset
    -1, //bcp->virtual_function_table_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
    17, //immediately_derived
  0, 0},
  {&cd_S3589C11,    ABISELECT(432,304), //bcp->offset
    88, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3589C12,    ABISELECT(368,260), //bcp->offset
    71, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S3589C10,    ABISELECT(352,256), //bcp->offset
    59, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3589C8,    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
    20, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S3589C16,    ABISELECT(440,308), //bcp->offset
    94, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S3589C15,    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
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3589C5[];
extern void _ZN7S3589C5D1Ev();
extern void _ZN7S3589C5D0Ev();
extern void ABISELECT(_ZTv0_n56_N7S3589C5D1Ev,_ZTv0_n28_N7S3589C5D1Ev)();
extern void ABISELECT(_ZThn176_N7S3589C5D1Ev,_ZThn128_N7S3589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S3589C5D0Ev,_ZTv0_n28_N7S3589C5D0Ev)();
extern void ABISELECT(_ZThn176_N7S3589C5D0Ev,_ZThn128_N7S3589C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n56_N7S3589C5D1Ev,_ZTvn12_n28_N7S3589C5D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N7S3589C5D0Ev,_ZTvn12_n28_N7S3589C5D0Ev)();
extern void ABISELECT(_ZTvn40_n56_N7S3589C5D1Ev,_ZTvn28_n28_N7S3589C5D1Ev)();
extern void ABISELECT(_ZTvn40_n56_N7S3589C5D0Ev,_ZTvn28_n28_N7S3589C5D0Ev)();
extern void ABISELECT(_ZTvn88_n56_N7S3589C5D1Ev,_ZTvn64_n28_N7S3589C5D1Ev)();
extern void ABISELECT(_ZTvn88_n56_N7S3589C5D0Ev,_ZTvn64_n28_N7S3589C5D0Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3589C5D1Ev,_ZTv0_n20_N7S3589C5D1Ev)();
extern void ABISELECT(_ZThn272_N7S3589C5D1Ev,_ZThn196_N7S3589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3589C5D0Ev,_ZTv0_n20_N7S3589C5D0Ev)();
extern void ABISELECT(_ZThn272_N7S3589C5D0Ev,_ZThn196_N7S3589C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C5D1Ev,_ZTv0_n12_N7S3589C5D1Ev)();
extern void ABISELECT(_ZThn280_N7S3589C5D1Ev,_ZThn200_N7S3589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C5D0Ev,_ZTv0_n12_N7S3589C5D0Ev)();
extern void ABISELECT(_ZThn280_N7S3589C5D0Ev,_ZThn200_N7S3589C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C5D1Ev,_ZTv0_n12_N7S3589C5D1Ev)();
extern void ABISELECT(_ZThn312_N7S3589C5D1Ev,_ZThn228_N7S3589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C5D0Ev,_ZTv0_n12_N7S3589C5D0Ev)();
extern void ABISELECT(_ZThn312_N7S3589C5D0Ev,_ZThn228_N7S3589C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C5D1Ev,_ZTv0_n12_N7S3589C5D1Ev)();
extern void ABISELECT(_ZThn328_N7S3589C5D1Ev,_ZThn240_N7S3589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C5D0Ev,_ZTv0_n12_N7S3589C5D0Ev)();
extern void ABISELECT(_ZThn328_N7S3589C5D0Ev,_ZThn240_N7S3589C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S3589C5D1Ev,_ZTv0_n40_N7S3589C5D1Ev)();
extern void ABISELECT(_ZThn352_N7S3589C5D1Ev,_ZThn256_N7S3589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S3589C5D0Ev,_ZTv0_n40_N7S3589C5D0Ev)();
extern void ABISELECT(_ZThn352_N7S3589C5D0Ev,_ZThn256_N7S3589C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S3589C5D1Ev,_ZTv0_n36_N7S3589C5D1Ev)();
extern void ABISELECT(_ZThn368_N7S3589C5D1Ev,_ZThn260_N7S3589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S3589C5D0Ev,_ZTv0_n36_N7S3589C5D0Ev)();
extern void ABISELECT(_ZThn368_N7S3589C5D0Ev,_ZThn260_N7S3589C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3589C5D1Ev,_ZTv0_n16_N7S3589C5D1Ev)();
extern void ABISELECT(_ZThn408_N7S3589C5D1Ev,_ZThn292_N7S3589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3589C5D0Ev,_ZTv0_n16_N7S3589C5D0Ev)();
extern void ABISELECT(_ZThn408_N7S3589C5D0Ev,_ZThn292_N7S3589C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3589C5D1Ev,_ZTv0_n16_N7S3589C5D1Ev)();
extern void ABISELECT(_ZThn432_N7S3589C5D1Ev,_ZThn304_N7S3589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3589C5D0Ev,_ZTv0_n16_N7S3589C5D0Ev)();
extern void ABISELECT(_ZThn432_N7S3589C5D0Ev,_ZThn304_N7S3589C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3589C5D1Ev,_ZTv0_n16_N7S3589C5D1Ev)();
extern void ABISELECT(_ZThn440_N7S3589C5D1Ev,_ZThn308_N7S3589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3589C5D0Ev,_ZTv0_n16_N7S3589C5D0Ev)();
extern void ABISELECT(_ZThn440_N7S3589C5D0Ev,_ZThn308_N7S3589C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3589C5[] = {
  ABISELECT(432,304),
  ABISELECT(408,292),
  ABISELECT(368,260),
  ABISELECT(352,256),
  ABISELECT(328,240),
  ABISELECT(272,196),
  ABISELECT(176,128),
  ABISELECT(440,308),
  ABISELECT(312,228),
  ABISELECT(280,200),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C5[0]),
  (VTBL_ENTRY)&_ZN7S3589C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C5D0Ev,
  ABISELECT(-176,-128),
  ABISELECT(152,112),
  ABISELECT(136,100),
  ABISELECT(104,72),
  ABISELECT(96,68),
  ABISELECT(-176,-128),
  (VTBL_ENTRY)&(_ZTI7S3589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3589C5D1Ev,_ZTv0_n28_N7S3589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3589C5D0Ev,_ZTv0_n28_N7S3589C5D0Ev),
  ABISELECT(-192,-140),
  (VTBL_ENTRY)&(_ZTI7S3589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N7S3589C5D1Ev,_ZTvn12_n28_N7S3589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N7S3589C5D0Ev,_ZTvn12_n28_N7S3589C5D0Ev),
  ABISELECT(-216,-156),
  (VTBL_ENTRY)&(_ZTI7S3589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n56_N7S3589C5D1Ev,_ZTvn28_n28_N7S3589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n56_N7S3589C5D0Ev,_ZTvn28_n28_N7S3589C5D0Ev),
  ABISELECT(48,36),
  ABISELECT(16,8),
  ABISELECT(-264,-192),
  (VTBL_ENTRY)&(_ZTI7S3589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n56_N7S3589C5D1Ev,_ZTvn64_n28_N7S3589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n56_N7S3589C5D0Ev,_ZTvn64_n28_N7S3589C5D0Ev),
  ABISELECT(-272,-196),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-272,-196),
  (VTBL_ENTRY)&(_ZTI7S3589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3589C5D1Ev,_ZTv0_n20_N7S3589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3589C5D0Ev,_ZTv0_n20_N7S3589C5D0Ev),
  ABISELECT(-280,-200),
  ABISELECT(-280,-200),
  (VTBL_ENTRY)&(_ZTI7S3589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C5D1Ev,_ZTv0_n12_N7S3589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C5D0Ev,_ZTv0_n12_N7S3589C5D0Ev),
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI7S3589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C5D1Ev,_ZTv0_n12_N7S3589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C5D0Ev,_ZTv0_n12_N7S3589C5D0Ev),
  ABISELECT(-328,-240),
  ABISELECT(-328,-240),
  (VTBL_ENTRY)&(_ZTI7S3589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C5D1Ev,_ZTv0_n12_N7S3589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C5D0Ev,_ZTv0_n12_N7S3589C5D0Ev),
  ABISELECT(-352,-256),
  ABISELECT(80,48),
  ABISELECT(-24,-16),
  ABISELECT(56,36),
  ABISELECT(16,4),
  ABISELECT(-72,-56),
  ABISELECT(-80,-60),
  ABISELECT(-40,-28),
  ABISELECT(-352,-256),
  (VTBL_ENTRY)&(_ZTI7S3589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S3589C5D1Ev,_ZTv0_n40_N7S3589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S3589C5D0Ev,_ZTv0_n40_N7S3589C5D0Ev),
  ABISELECT(-368,-260),
  ABISELECT(64,44),
  ABISELECT(-56,-32),
  ABISELECT(-88,-60),
  ABISELECT(-96,-64),
  ABISELECT(-40,-20),
  ABISELECT(40,32),
  ABISELECT(-368,-260),
  (VTBL_ENTRY)&(_ZTI7S3589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3589C5D1Ev,_ZTv0_n36_N7S3589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3589C5D0Ev,_ZTv0_n36_N7S3589C5D0Ev),
  ABISELECT(-408,-292),
  ABISELECT(-80,-52),
  ABISELECT(-408,-292),
  (VTBL_ENTRY)&(_ZTI7S3589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3589C5D1Ev,_ZTv0_n16_N7S3589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3589C5D0Ev,_ZTv0_n16_N7S3589C5D0Ev),
  ABISELECT(-432,-304),
  ABISELECT(-120,-76),
  ABISELECT(-432,-304),
  (VTBL_ENTRY)&(_ZTI7S3589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3589C5D1Ev,_ZTv0_n16_N7S3589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3589C5D0Ev,_ZTv0_n16_N7S3589C5D0Ev),
  ABISELECT(-440,-308),
  ABISELECT(-128,-80),
  ABISELECT(-440,-308),
  (VTBL_ENTRY)&(_ZTI7S3589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3589C5D1Ev,_ZTv0_n16_N7S3589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3589C5D0Ev,_ZTv0_n16_N7S3589C5D0Ev),
};
extern VTBL_ENTRY _ZTV7S3589C5[];
extern void _ZN8S3589C15D1Ev();
extern void _ZN8S3589C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C15__7S3589C5[] = {
  ABISELECT(440,308),
  ABISELECT(312,228),
  ABISELECT(280,200),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C15[0]),
  (VTBL_ENTRY)&_ZN8S3589C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C15D0Ev,
};
extern void _ZN7S3589C8D1Ev();
extern void _ZN7S3589C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3589C88S3589C15__A2__7S3589C5[] = {
  ABISELECT(312,228),
  ABISELECT(280,200),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&_ZN7S3589C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn280_N7S3589C8D1Ev,_ZThn200_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn280_N7S3589C8D0Ev,_ZThn200_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__7S3589C88S3589C15__A2__7S3589C5[] = {
  ABISELECT(-280,-200),
  ABISELECT(-280,-200),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn312_N7S3589C8D1Ev,_ZThn228_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn312_N7S3589C8D0Ev,_ZThn228_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S3589C88S3589C15__A2__7S3589C5[] = {
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C15D1Ev,_ZTv0_n12_N8S3589C15D1Ev)();
extern void ABISELECT(_ZThn280_N8S3589C15D1Ev,_ZThn200_N8S3589C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C15D0Ev,_ZTv0_n12_N8S3589C15D0Ev)();
extern void ABISELECT(_ZThn280_N8S3589C15D0Ev,_ZThn200_N8S3589C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__8S3589C15__7S3589C5[] = {
  ABISELECT(-280,-200),
  ABISELECT(-280,-200),
  (VTBL_ENTRY)&(_ZTI8S3589C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C15D1Ev,_ZTv0_n12_N8S3589C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C15D0Ev,_ZTv0_n12_N8S3589C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C15D1Ev,_ZTv0_n12_N8S3589C15D1Ev)();
extern void ABISELECT(_ZThn312_N8S3589C15D1Ev,_ZThn228_N8S3589C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C15D0Ev,_ZTv0_n12_N8S3589C15D0Ev)();
extern void ABISELECT(_ZThn312_N8S3589C15D0Ev,_ZThn228_N8S3589C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S3589C15__7S3589C5[] = {
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S3589C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C15D1Ev,_ZTv0_n12_N8S3589C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C15D0Ev,_ZTv0_n12_N8S3589C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3589C15D1Ev,_ZTv0_n16_N8S3589C15D1Ev)();
extern void ABISELECT(_ZThn440_N8S3589C15D1Ev,_ZThn308_N8S3589C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C15D0Ev,_ZTv0_n16_N8S3589C15D0Ev)();
extern void ABISELECT(_ZThn440_N8S3589C15D0Ev,_ZThn308_N8S3589C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C16__8S3589C15__7S3589C5[] = {
  ABISELECT(-440,-308),
  ABISELECT(-128,-80),
  ABISELECT(-440,-308),
  (VTBL_ENTRY)&(_ZTI8S3589C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C15D1Ev,_ZTv0_n16_N8S3589C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C15D0Ev,_ZTv0_n16_N8S3589C15D0Ev),
};
extern void _ZN7S3589C6D1Ev();
extern void _ZN7S3589C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3589C6__7S3589C5[] = {
  ABISELECT(152,112),
  ABISELECT(136,100),
  ABISELECT(104,72),
  ABISELECT(96,68),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C6[0]),
  (VTBL_ENTRY)&_ZN7S3589C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C6D0Ev,
};
extern void _ZN7S3589C7D1Ev();
extern void _ZN7S3589C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3589C77S3589C6__7S3589C5[] = {
  ABISELECT(136,100),
  ABISELECT(104,72),
  ABISELECT(96,68),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C7[0]),
  (VTBL_ENTRY)&_ZN7S3589C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S3589C7D1Ev,_ZTv0_n20_N7S3589C7D1Ev)();
extern void ABISELECT(_ZThn96_N7S3589C7D1Ev,_ZThn68_N7S3589C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3589C7D0Ev,_ZTv0_n20_N7S3589C7D0Ev)();
extern void ABISELECT(_ZThn96_N7S3589C7D0Ev,_ZThn68_N7S3589C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C8__7S3589C77S3589C6__7S3589C5[] = {
  ABISELECT(-96,-68),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI7S3589C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3589C7D1Ev,_ZTv0_n20_N7S3589C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3589C7D0Ev,_ZTv0_n20_N7S3589C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C7D1Ev,_ZTv0_n12_N7S3589C7D1Ev)();
extern void ABISELECT(_ZThn104_N7S3589C7D1Ev,_ZThn72_N7S3589C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C7D0Ev,_ZTv0_n12_N7S3589C7D0Ev)();
extern void ABISELECT(_ZThn104_N7S3589C7D0Ev,_ZThn72_N7S3589C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__7S3589C77S3589C6__7S3589C5[] = {
  ABISELECT(-104,-72),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI7S3589C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C7D1Ev,_ZTv0_n12_N7S3589C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C7D0Ev,_ZTv0_n12_N7S3589C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C7D1Ev,_ZTv0_n12_N7S3589C7D1Ev)();
extern void ABISELECT(_ZThn136_N7S3589C7D1Ev,_ZThn100_N7S3589C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C7D0Ev,_ZTv0_n12_N7S3589C7D0Ev)();
extern void ABISELECT(_ZThn136_N7S3589C7D0Ev,_ZThn100_N7S3589C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S3589C77S3589C6__7S3589C5[] = {
  ABISELECT(-136,-100),
  ABISELECT(-136,-100),
  (VTBL_ENTRY)&(_ZTI7S3589C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C7D1Ev,_ZTv0_n12_N7S3589C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C7D0Ev,_ZTv0_n12_N7S3589C7D0Ev),
};
extern void _ZN7S3589C8D1Ev();
extern void _ZN7S3589C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3589C87S3589C6__A1__7S3589C5[] = {
  ABISELECT(48,36),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&_ZN7S3589C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn16_N7S3589C8D1Ev,_ZThn8_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn16_N7S3589C8D0Ev,_ZThn8_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__7S3589C87S3589C6__A1__7S3589C5[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn48_N7S3589C8D1Ev,_ZThn36_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn48_N7S3589C8D0Ev,_ZThn36_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S3589C87S3589C6__A1__7S3589C5[] = {
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S3589C6D1Ev,_ZTv0_n20_N7S3589C6D1Ev)();
extern void ABISELECT(_ZThn96_N7S3589C6D1Ev,_ZThn68_N7S3589C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3589C6D0Ev,_ZTv0_n20_N7S3589C6D0Ev)();
extern void ABISELECT(_ZThn96_N7S3589C6D0Ev,_ZThn68_N7S3589C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C8__7S3589C6__7S3589C5[] = {
  ABISELECT(-96,-68),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI7S3589C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3589C6D1Ev,_ZTv0_n20_N7S3589C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3589C6D0Ev,_ZTv0_n20_N7S3589C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C6D1Ev,_ZTv0_n12_N7S3589C6D1Ev)();
extern void ABISELECT(_ZThn104_N7S3589C6D1Ev,_ZThn72_N7S3589C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C6D0Ev,_ZTv0_n12_N7S3589C6D0Ev)();
extern void ABISELECT(_ZThn104_N7S3589C6D0Ev,_ZThn72_N7S3589C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__7S3589C6__7S3589C5[] = {
  ABISELECT(-104,-72),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI7S3589C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C6D1Ev,_ZTv0_n12_N7S3589C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C6D0Ev,_ZTv0_n12_N7S3589C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C6D1Ev,_ZTv0_n12_N7S3589C6D1Ev)();
extern void ABISELECT(_ZThn136_N7S3589C6D1Ev,_ZThn100_N7S3589C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C6D0Ev,_ZTv0_n12_N7S3589C6D0Ev)();
extern void ABISELECT(_ZThn136_N7S3589C6D0Ev,_ZThn100_N7S3589C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S3589C6__7S3589C5[] = {
  ABISELECT(-136,-100),
  ABISELECT(-136,-100),
  (VTBL_ENTRY)&(_ZTI7S3589C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C6D1Ev,_ZTv0_n12_N7S3589C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C6D0Ev,_ZTv0_n12_N7S3589C6D0Ev),
};
extern void ABISELECT(_ZThn88_N7S3589C6D1Ev,_ZThn64_N7S3589C6D1Ev)();
extern void ABISELECT(_ZThn88_N7S3589C6D0Ev,_ZThn64_N7S3589C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C8__A__7S3589C6__7S3589C5[] = {
  ABISELECT(48,36),
  ABISELECT(16,8),
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI7S3589C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N7S3589C6D1Ev,_ZThn64_N7S3589C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N7S3589C6D0Ev,_ZThn64_N7S3589C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C6D1Ev,_ZTv0_n12_N7S3589C6D1Ev)();
extern void ABISELECT(_ZThn152_N7S3589C6D1Ev,_ZThn112_N7S3589C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C6D0Ev,_ZTv0_n12_N7S3589C6D0Ev)();
extern void ABISELECT(_ZThn152_N7S3589C6D0Ev,_ZThn112_N7S3589C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__A1__7S3589C6__7S3589C5[] = {
  ABISELECT(-152,-112),
  ABISELECT(-152,-112),
  (VTBL_ENTRY)&(_ZTI7S3589C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C6D1Ev,_ZTv0_n12_N7S3589C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C6D0Ev,_ZTv0_n12_N7S3589C6D0Ev),
};
extern void _ZN7S3589C8D1Ev();
extern void _ZN7S3589C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3589C8__7S3589C5[] = {
  ABISELECT(40,32),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&_ZN7S3589C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn8_N7S3589C8D1Ev,_ZThn4_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn8_N7S3589C8D0Ev,_ZThn4_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__7S3589C8__7S3589C5[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S3589C8D1Ev,_ZThn32_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S3589C8D0Ev,_ZThn32_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S3589C8__7S3589C5[] = {
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void _ZN8S3589C10D1Ev();
extern void _ZN8S3589C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C10__7S3589C5[] = {
  ABISELECT(80,48),
  ABISELECT(-24,-16),
  ABISELECT(56,36),
  ABISELECT(16,4),
  ABISELECT(-72,-56),
  ABISELECT(-80,-60),
  ABISELECT(-40,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C10[0]),
  (VTBL_ENTRY)&_ZN8S3589C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C10D0Ev,
};
extern void _ZN8S3589C11D1Ev();
extern void _ZN8S3589C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C118S3589C10__7S3589C5[] = {
  ABISELECT(-40,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C11[0]),
  (VTBL_ENTRY)&_ZN8S3589C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3589C11D1Ev,_ZTv0_n12_N8S3589C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C11D0Ev,_ZTv0_n12_N8S3589C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S3589C118S3589C10__7S3589C5[] = {
  ABISELECT(40,28),
  ABISELECT(40,28),
  (VTBL_ENTRY)&(_ZTI8S3589C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C11D1Ev,_ZTv0_n12_N8S3589C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C11D0Ev,_ZTv0_n12_N8S3589C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S3589C10D1Ev,_ZTv0_n20_N8S3589C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S3589C10D0Ev,_ZTv0_n20_N8S3589C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C8__8S3589C10__7S3589C5[] = {
  ABISELECT(80,60),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(80,60),
  (VTBL_ENTRY)&(_ZTI8S3589C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C10D1Ev,_ZTv0_n20_N8S3589C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C10D0Ev,_ZTv0_n20_N8S3589C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C10D1Ev,_ZTv0_n12_N8S3589C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C10D0Ev,_ZTv0_n12_N8S3589C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C2__8S3589C10__7S3589C5[] = {
  ABISELECT(72,56),
  ABISELECT(72,56),
  (VTBL_ENTRY)&(_ZTI8S3589C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C10D1Ev,_ZTv0_n12_N8S3589C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C10D0Ev,_ZTv0_n12_N8S3589C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C10D1Ev,_ZTv0_n12_N8S3589C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C10D0Ev,_ZTv0_n12_N8S3589C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S3589C10__7S3589C5[] = {
  ABISELECT(40,28),
  ABISELECT(40,28),
  (VTBL_ENTRY)&(_ZTI8S3589C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C10D1Ev,_ZTv0_n12_N8S3589C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C10D0Ev,_ZTv0_n12_N8S3589C10D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N8S3589C10D1Ev,_ZTv0_n36_N8S3589C10D1Ev)();
extern void ABISELECT(_ZThn16_N8S3589C10D1Ev,_ZThn4_N8S3589C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S3589C10D0Ev,_ZTv0_n36_N8S3589C10D0Ev)();
extern void ABISELECT(_ZThn16_N8S3589C10D0Ev,_ZThn4_N8S3589C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C12__8S3589C10__7S3589C5[] = {
  ABISELECT(-16,-4),
  ABISELECT(64,44),
  ABISELECT(-56,-32),
  ABISELECT(-88,-60),
  ABISELECT(-96,-64),
  ABISELECT(-40,-20),
  ABISELECT(40,32),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S3589C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S3589C10D1Ev,_ZTv0_n36_N8S3589C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S3589C10D0Ev,_ZTv0_n36_N8S3589C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3589C10D1Ev,_ZTv0_n16_N8S3589C10D1Ev)();
extern void ABISELECT(_ZThn56_N8S3589C10D1Ev,_ZThn36_N8S3589C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C10D0Ev,_ZTv0_n16_N8S3589C10D0Ev)();
extern void ABISELECT(_ZThn56_N8S3589C10D0Ev,_ZThn36_N8S3589C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C14__8S3589C10__7S3589C5[] = {
  ABISELECT(-56,-36),
  ABISELECT(-80,-52),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S3589C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C10D1Ev,_ZTv0_n16_N8S3589C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C10D0Ev,_ZTv0_n16_N8S3589C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C10D1Ev,_ZTv0_n12_N8S3589C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C10D0Ev,_ZTv0_n12_N8S3589C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__8S3589C10__7S3589C5[] = {
  ABISELECT(24,16),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI8S3589C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C10D1Ev,_ZTv0_n12_N8S3589C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C10D0Ev,_ZTv0_n12_N8S3589C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3589C10D1Ev,_ZTv0_n16_N8S3589C10D1Ev)();
extern void ABISELECT(_ZThn80_N8S3589C10D1Ev,_ZThn48_N8S3589C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C10D0Ev,_ZTv0_n16_N8S3589C10D0Ev)();
extern void ABISELECT(_ZThn80_N8S3589C10D0Ev,_ZThn48_N8S3589C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C11__A1__8S3589C10__7S3589C5[] = {
  ABISELECT(-80,-48),
  ABISELECT(-120,-76),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI8S3589C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C10D1Ev,_ZTv0_n16_N8S3589C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C10D0Ev,_ZTv0_n16_N8S3589C10D0Ev),
};
extern void _ZN8S3589C12D1Ev();
extern void _ZN8S3589C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C12__7S3589C5[] = {
  ABISELECT(64,44),
  ABISELECT(-56,-32),
  ABISELECT(-88,-60),
  ABISELECT(-96,-64),
  ABISELECT(-40,-20),
  ABISELECT(40,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&_ZN8S3589C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C12D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn40_N8S3589C12D1Ev,_ZThn32_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn40_N8S3589C12D0Ev,_ZThn32_N8S3589C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C14__8S3589C12__7S3589C5[] = {
  ABISELECT(-40,-32),
  ABISELECT(-80,-52),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__8S3589C12__7S3589C5[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S3589C12D1Ev,_ZTv0_n20_N8S3589C12D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S3589C12D0Ev,_ZTv0_n20_N8S3589C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C8__8S3589C12__7S3589C5[] = {
  ABISELECT(96,64),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(96,64),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C12D1Ev,_ZTv0_n20_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C12D0Ev,_ZTv0_n20_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C2__8S3589C12__7S3589C5[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S3589C12__7S3589C5[] = {
  ABISELECT(56,32),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn64_N8S3589C12D1Ev,_ZThn44_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn64_N8S3589C12D0Ev,_ZThn44_N8S3589C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C11__8S3589C12__7S3589C5[] = {
  ABISELECT(-64,-44),
  ABISELECT(-120,-76),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev),
};
extern void _ZN8S3589C14D1Ev();
extern void _ZN8S3589C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C14__7S3589C5[] = {
  ABISELECT(-80,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C14[0]),
  (VTBL_ENTRY)&_ZN8S3589C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3589C14D1Ev,_ZTv0_n12_N8S3589C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C14D0Ev,_ZTv0_n12_N8S3589C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__8S3589C14__7S3589C5[] = {
  ABISELECT(80,52),
  ABISELECT(80,52),
  (VTBL_ENTRY)&(_ZTI8S3589C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C14D1Ev,_ZTv0_n12_N8S3589C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C14D0Ev,_ZTv0_n12_N8S3589C14D0Ev),
};
extern void _ZN8S3589C11D1Ev();
extern void _ZN8S3589C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C11__A1__7S3589C5[] = {
  ABISELECT(-120,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C11[0]),
  (VTBL_ENTRY)&_ZN8S3589C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3589C11D1Ev,_ZTv0_n12_N8S3589C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C11D0Ev,_ZTv0_n12_N8S3589C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S3589C11__A1__7S3589C5[] = {
  ABISELECT(120,76),
  ABISELECT(120,76),
  (VTBL_ENTRY)&(_ZTI8S3589C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C11D1Ev,_ZTv0_n12_N8S3589C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C11D0Ev,_ZTv0_n12_N8S3589C11D0Ev),
};
extern void _ZN8S3589C16D1Ev();
extern void _ZN8S3589C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C16__7S3589C5[] = {
  ABISELECT(-128,-80),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C16[0]),
  (VTBL_ENTRY)&_ZN8S3589C16D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C16D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3589C16D1Ev,_ZTv0_n12_N8S3589C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C16D0Ev,_ZTv0_n12_N8S3589C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S3589C16__7S3589C5[] = {
  ABISELECT(128,80),
  ABISELECT(128,80),
  (VTBL_ENTRY)&(_ZTI8S3589C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C16D1Ev,_ZTv0_n12_N8S3589C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C16D0Ev,_ZTv0_n12_N8S3589C16D0Ev),
};
static  VTT_ENTRY vtt_S3589C5[] = {
  {&(_ZTV7S3589C5[12]),  12,100},
  {&(_tg__ZTV8S3589C15__7S3589C5[5]),  5,7},
  {&(_tg__ZTV7S3589C88S3589C15__A2__7S3589C5[4]),  4,6},
  {&(_tg__ZTV7S3589C2__7S3589C88S3589C15__A2__7S3589C5[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S3589C88S3589C15__A2__7S3589C5[3]),  3,5},
  {&(_tg__ZTV7S3589C2__8S3589C15__7S3589C5[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S3589C15__7S3589C5[3]),  3,5},
  {&(_tg__ZTV8S3589C16__8S3589C15__7S3589C5[4]),  4,6},
  {&(_ZTV7S3589C5[21]),  21,100},
  {&(_ZTV7S3589C5[42]),  42,100},
  {&(_ZTV7S3589C5[47]),  47,100},
  {&(_ZTV7S3589C5[52]),  52,100},
  {&(_ZTV7S3589C5[25]),  25,100},
  {&(_ZTV7S3589C5[29]),  29,100},
  {&(_ZTV7S3589C5[35]),  35,100},
  {&(_ZTV7S3589C5[57]),  57,100},
  {&(_ZTV7S3589C5[69]),  69,100},
  {&(_ZTV7S3589C5[80]),  80,100},
  {&(_ZTV7S3589C5[86]),  86,100},
  {&(_ZTV7S3589C5[92]),  92,100},
  {&(_ZTV7S3589C5[98]),  98,100},
  {&(_tg__ZTV7S3589C6__7S3589C5[6]),  6,8},
  {&(_tg__ZTV7S3589C77S3589C6__7S3589C5[5]),  5,7},
  {&(_tg__ZTV7S3589C8__7S3589C77S3589C6__7S3589C5[5]),  5,7},
  {&(_tg__ZTV7S3589C2__7S3589C77S3589C6__7S3589C5[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S3589C77S3589C6__7S3589C5[3]),  3,5},
  {&(_tg__ZTV7S3589C87S3589C6__A1__7S3589C5[4]),  4,6},
  {&(_tg__ZTV7S3589C2__7S3589C87S3589C6__A1__7S3589C5[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S3589C87S3589C6__A1__7S3589C5[3]),  3,5},
  {&(_tg__ZTV7S3589C8__7S3589C6__7S3589C5[5]),  5,7},
  {&(_tg__ZTV7S3589C2__7S3589C6__7S3589C5[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S3589C6__7S3589C5[3]),  3,5},
  {&(_tg__ZTV7S3589C8__A__7S3589C6__7S3589C5[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__A1__7S3589C6__7S3589C5[3]),  3,5},
  {&(_tg__ZTV7S3589C8__7S3589C5[4]),  4,6},
  {&(_tg__ZTV7S3589C2__7S3589C8__7S3589C5[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S3589C8__7S3589C5[3]),  3,5},
  {&(_tg__ZTV8S3589C10__7S3589C5[9]),  9,11},
  {&(_tg__ZTV8S3589C118S3589C10__7S3589C5[3]),  3,5},
  {&(_tg__ZTV7S3589C3__8S3589C118S3589C10__7S3589C5[3]),  3,5},
  {&(_tg__ZTV7S3589C8__8S3589C10__7S3589C5[5]),  5,7},
  {&(_tg__ZTV7S3589C2__8S3589C10__7S3589C5[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S3589C10__7S3589C5[3]),  3,5},
  {&(_tg__ZTV8S3589C12__8S3589C10__7S3589C5[9]),  9,11},
  {&(_tg__ZTV8S3589C14__8S3589C10__7S3589C5[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__8S3589C10__7S3589C5[3]),  3,5},
  {&(_tg__ZTV8S3589C11__A1__8S3589C10__7S3589C5[4]),  4,6},
  {&(_tg__ZTV8S3589C12__7S3589C5[8]),  8,10},
  {&(_tg__ZTV8S3589C14__8S3589C12__7S3589C5[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__8S3589C12__7S3589C5[3]),  3,5},
  {&(_tg__ZTV7S3589C8__8S3589C12__7S3589C5[5]),  5,7},
  {&(_tg__ZTV7S3589C2__8S3589C12__7S3589C5[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S3589C12__7S3589C5[3]),  3,5},
  {&(_tg__ZTV8S3589C11__8S3589C12__7S3589C5[4]),  4,6},
  {&(_tg__ZTV8S3589C14__7S3589C5[3]),  3,5},
  {&(_tg__ZTV10S3589C9_nt__8S3589C14__7S3589C5[3]),  3,5},
  {&(_tg__ZTV8S3589C11__A1__7S3589C5[3]),  3,5},
  {&(_tg__ZTV7S3589C3__8S3589C11__A1__7S3589C5[3]),  3,5},
  {&(_tg__ZTV8S3589C16__7S3589C5[3]),  3,5},
  {&(_tg__ZTV7S3589C3__8S3589C16__7S3589C5[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S3589C5[];
extern  VTBL_ENTRY _ZTV7S3589C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C5[];
static VTBL_ENTRY alt_thunk_names50[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S3589C12D0Ev,_ZThn44_N8S3589C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S3589C12D0Ev,_ZThn32_N8S3589C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S3589C12D1Ev,_ZThn44_N8S3589C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S3589C12D1Ev,_ZThn32_N8S3589C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C10D0Ev,_ZTv0_n16_N8S3589C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S3589C10D0Ev,_ZThn48_N8S3589C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S3589C10D0Ev,_ZThn36_N8S3589C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C10D1Ev,_ZTv0_n16_N8S3589C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S3589C10D1Ev,_ZThn48_N8S3589C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S3589C10D1Ev,_ZThn36_N8S3589C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S3589C10D0Ev,_ZTv0_n36_N8S3589C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S3589C10D0Ev,_ZThn4_N8S3589C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S3589C10D1Ev,_ZTv0_n36_N8S3589C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S3589C10D1Ev,_ZThn4_N8S3589C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C6D0Ev,_ZTv0_n12_N7S3589C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S3589C6D0Ev,_ZThn112_N7S3589C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S3589C6D0Ev,_ZThn100_N7S3589C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S3589C6D0Ev,_ZThn72_N7S3589C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C6D1Ev,_ZTv0_n12_N7S3589C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S3589C6D1Ev,_ZThn112_N7S3589C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S3589C6D1Ev,_ZThn100_N7S3589C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S3589C6D1Ev,_ZThn72_N7S3589C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3589C6D0Ev,_ZTv0_n20_N7S3589C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S3589C6D0Ev,_ZThn68_N7S3589C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3589C6D1Ev,_ZTv0_n20_N7S3589C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S3589C6D1Ev,_ZThn68_N7S3589C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C7D0Ev,_ZTv0_n12_N7S3589C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S3589C7D0Ev,_ZThn100_N7S3589C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S3589C7D0Ev,_ZThn72_N7S3589C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C7D1Ev,_ZTv0_n12_N7S3589C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S3589C7D1Ev,_ZThn100_N7S3589C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S3589C7D1Ev,_ZThn72_N7S3589C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3589C7D0Ev,_ZTv0_n20_N7S3589C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S3589C7D0Ev,_ZThn68_N7S3589C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3589C7D1Ev,_ZTv0_n20_N7S3589C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S3589C7D1Ev,_ZThn68_N7S3589C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C15D0Ev,_ZTv0_n16_N8S3589C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N8S3589C15D0Ev,_ZThn308_N8S3589C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C15D1Ev,_ZTv0_n16_N8S3589C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N8S3589C15D1Ev,_ZThn308_N8S3589C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C15D0Ev,_ZTv0_n12_N8S3589C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S3589C15D0Ev,_ZThn228_N8S3589C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S3589C15D0Ev,_ZThn200_N8S3589C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C15D1Ev,_ZTv0_n12_N8S3589C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S3589C15D1Ev,_ZThn228_N8S3589C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S3589C15D1Ev,_ZThn200_N8S3589C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3589C8D0Ev,_ZThn32_N7S3589C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3589C8D0Ev,_ZThn4_N7S3589C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3589C8D0Ev,_ZThn36_N7S3589C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3589C8D0Ev,_ZThn8_N7S3589C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S3589C8D0Ev,_ZThn228_N7S3589C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S3589C8D0Ev,_ZThn200_N7S3589C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3589C8D1Ev,_ZThn32_N7S3589C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3589C8D1Ev,_ZThn4_N7S3589C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3589C8D1Ev,_ZThn36_N7S3589C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3589C8D1Ev,_ZThn8_N7S3589C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S3589C8D1Ev,_ZThn228_N7S3589C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S3589C8D1Ev,_ZThn200_N7S3589C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3589C5D0Ev,_ZTv0_n16_N7S3589C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S3589C5D0Ev,_ZThn308_N7S3589C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn432_N7S3589C5D0Ev,_ZThn304_N7S3589C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn408_N7S3589C5D0Ev,_ZThn292_N7S3589C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3589C5D1Ev,_ZTv0_n16_N7S3589C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S3589C5D1Ev,_ZThn308_N7S3589C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn432_N7S3589C5D1Ev,_ZThn304_N7S3589C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn408_N7S3589C5D1Ev,_ZThn292_N7S3589C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S3589C5D0Ev,_ZTv0_n36_N7S3589C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S3589C5D0Ev,_ZThn260_N7S3589C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S3589C5D1Ev,_ZTv0_n36_N7S3589C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S3589C5D1Ev,_ZThn260_N7S3589C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S3589C5D0Ev,_ZTv0_n40_N7S3589C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S3589C5D0Ev,_ZThn256_N7S3589C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S3589C5D1Ev,_ZTv0_n40_N7S3589C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S3589C5D1Ev,_ZThn256_N7S3589C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C5D0Ev,_ZTv0_n12_N7S3589C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N7S3589C5D0Ev,_ZThn240_N7S3589C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S3589C5D0Ev,_ZThn228_N7S3589C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S3589C5D0Ev,_ZThn200_N7S3589C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C5D1Ev,_ZTv0_n12_N7S3589C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N7S3589C5D1Ev,_ZThn240_N7S3589C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S3589C5D1Ev,_ZThn228_N7S3589C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S3589C5D1Ev,_ZThn200_N7S3589C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3589C5D0Ev,_ZTv0_n20_N7S3589C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S3589C5D0Ev,_ZThn196_N7S3589C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3589C5D1Ev,_ZTv0_n20_N7S3589C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S3589C5D1Ev,_ZThn196_N7S3589C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3589C5D0Ev,_ZTv0_n28_N7S3589C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S3589C5D0Ev,_ZThn128_N7S3589C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3589C5D1Ev,_ZTv0_n28_N7S3589C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S3589C5D1Ev,_ZThn128_N7S3589C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3589C5 = {  "S3589C5", // class name
  bases_S3589C5, 22,
  &(vtc_S3589C5[0]), // expected_vtbl_contents
  &(vtt_S3589C5[0]), // expected_vtt_contents
  ABISELECT(464,320), // object size
  NSPAIRA(_ZTI7S3589C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3589C5),100, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3589C5),60, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names50,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3589C19  : S3589C12 {
  short s3589c19f0;
  ::S3589C11 s3589c19f1;
  int s3589c19f2;
  ~S3589C19(); // tgen
  S3589C19(); // tgen
};
//SIG(-1 S3589C19) C1{ BC2{ BC3{ m FD} VBC4{ VBC5{ vd m Fi Fc Fi} Fp[2]} VBC6{ VBC7{ BC8{ vd m Fc FU9{ m Fc[6]}} vd FL FU9} VBC8 vd} BC8 VBC10{ VBC8} Fc Fi} Fs FC10 Fi}


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

static void Test_S3589C19()
{
  extern Class_Descriptor cd_S3589C19;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,34)];
    init_test(&cd_S3589C19, buf);
    S3589C19 *dp, &lv = *(dp=new (buf) S3589C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S3589C19)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3589C19)");
    check_base_class_offset(lv, (S3589C13_nt*)(S3589C12*), ABISELECT(16,12), "S3589C19");
    check_base_class_offset(lv, (S3589C9_nt*)(S3589C14*), ABISELECT(104,68), "S3589C19");
    check_base_class_offset(lv, (S3589C14*)(S3589C12*), ABISELECT(80,56), "S3589C19");
    check_base_class_offset(lv, (S3589C3*)(S3589C2*), ABISELECT(136,88), "S3589C19");
    check_base_class_offset(lv, (S3589C2*)(S3589C8*), ABISELECT(136,88), "S3589C19");
    /*is_ambiguous_... S3589C8::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C8*), ABISELECT(168,116), "S3589C19");
    check_base_class_offset(lv, (S3589C3*)(S3589C11*), ABISELECT(168,116), "S3589C19");
    check_base_class_offset(lv, (S3589C8*)(S3589C12*), ABISELECT(128,84), "S3589C19");
    /*is_ambiguous_... S3589C12::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C12*), 0, "S3589C19");
    check_base_class_offset(lv, (S3589C11*)(S3589C12*), ABISELECT(184,128), "S3589C19");
    check_base_class_offset(lv, (S3589C12*), 0, "S3589C19");
    check_field_offset(lv, s3589c19f0, ABISELECT(40,32), "S3589C19.s3589c19f0");
    check_field_offset(lv, s3589c19f1, ABISELECT(48,36), "S3589C19.s3589c19f1");
    check_field_offset(lv, s3589c19f2, ABISELECT(72,52), "S3589C19.s3589c19f2");
    test_class_info(&lv, &cd_S3589C19);
    dp->~S3589C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3589C19(Test_S3589C19, "S3589C19", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN8S3589C19C1Ev();
extern void _ZN8S3589C19D1Ev();
Name_Map name_map_S3589C19[] = {
  NSPAIR(_ZN8S3589C19C1Ev),
  NSPAIR(_ZN8S3589C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C13_nt;
extern VTBL_ENTRY _ZTI11S3589C13_nt[];
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
extern Class_Descriptor cd_S3589C14;
extern VTBL_ENTRY _ZTI8S3589C14[];
extern  VTBL_ENTRY _ZTV8S3589C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C14[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C2;
extern VTBL_ENTRY _ZTI7S3589C2[];
extern  VTBL_ENTRY _ZTV7S3589C2[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C8;
extern VTBL_ENTRY _ZTI7S3589C8[];
extern  VTBL_ENTRY _ZTV7S3589C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C8[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C11;
extern VTBL_ENTRY _ZTI8S3589C11[];
extern  VTBL_ENTRY _ZTV8S3589C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C11[];
extern Class_Descriptor cd_S3589C12;
extern VTBL_ENTRY _ZTI8S3589C12[];
extern  VTBL_ENTRY _ZTV8S3589C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C12[];
static Base_Class bases_S3589C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C13_nt,    ABISELECT(16,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
    9, //immediately_derived
  0, 0},
  {&cd_S3589C9_nt,    ABISELECT(104,68), //bcp->offset
    16, //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
    2, //immediately_derived
  0, 1},
  {&cd_S3589C14,    ABISELECT(80,56), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(136,88), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3589C2,    ABISELECT(136,88), //bcp->offset
    28, //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
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(168,116), //bcp->offset
    33, //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
    6, //immediately_derived
  0, 1},
  {&cd_S3589C8,    ABISELECT(128,84), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3589C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3589C11,    ABISELECT(184,128), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3589C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S3589C19[];
extern void _ZN8S3589C19D1Ev();
extern void _ZN8S3589C19D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S3589C19D1Ev,_ZTv0_n16_N8S3589C19D1Ev)();
extern void ABISELECT(_ZThn80_N8S3589C19D1Ev,_ZThn56_N8S3589C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C19D0Ev,_ZTv0_n16_N8S3589C19D0Ev)();
extern void ABISELECT(_ZThn80_N8S3589C19D0Ev,_ZThn56_N8S3589C19D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C19D1Ev,_ZTv0_n12_N8S3589C19D1Ev)();
extern void ABISELECT(_ZThn104_N8S3589C19D1Ev,_ZThn68_N8S3589C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C19D0Ev,_ZTv0_n12_N8S3589C19D0Ev)();
extern void ABISELECT(_ZThn104_N8S3589C19D0Ev,_ZThn68_N8S3589C19D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3589C19D1Ev,_ZTv0_n20_N8S3589C19D1Ev)();
extern void ABISELECT(_ZThn128_N8S3589C19D1Ev,_ZThn84_N8S3589C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3589C19D0Ev,_ZTv0_n20_N8S3589C19D0Ev)();
extern void ABISELECT(_ZThn128_N8S3589C19D0Ev,_ZThn84_N8S3589C19D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C19D1Ev,_ZTv0_n12_N8S3589C19D1Ev)();
extern void ABISELECT(_ZThn136_N8S3589C19D1Ev,_ZThn88_N8S3589C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C19D0Ev,_ZTv0_n12_N8S3589C19D0Ev)();
extern void ABISELECT(_ZThn136_N8S3589C19D0Ev,_ZThn88_N8S3589C19D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C19D1Ev,_ZTv0_n12_N8S3589C19D1Ev)();
extern void ABISELECT(_ZThn168_N8S3589C19D1Ev,_ZThn116_N8S3589C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C19D0Ev,_ZTv0_n12_N8S3589C19D0Ev)();
extern void ABISELECT(_ZThn168_N8S3589C19D0Ev,_ZThn116_N8S3589C19D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C19D1Ev,_ZTv0_n16_N8S3589C19D1Ev)();
extern void ABISELECT(_ZThn184_N8S3589C19D1Ev,_ZThn128_N8S3589C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C19D0Ev,_ZTv0_n16_N8S3589C19D0Ev)();
extern void ABISELECT(_ZThn184_N8S3589C19D0Ev,_ZThn128_N8S3589C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3589C19[] = {
  ABISELECT(184,128),
  ABISELECT(168,116),
  ABISELECT(136,88),
  ABISELECT(128,84),
  ABISELECT(104,68),
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C19[0]),
  (VTBL_ENTRY)&_ZN8S3589C19D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C19D0Ev,
  ABISELECT(-80,-56),
  ABISELECT(24,12),
  ABISELECT(-80,-56),
  (VTBL_ENTRY)&(_ZTI8S3589C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C19D1Ev,_ZTv0_n16_N8S3589C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C19D0Ev,_ZTv0_n16_N8S3589C19D0Ev),
  ABISELECT(-104,-68),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S3589C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C19D1Ev,_ZTv0_n12_N8S3589C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C19D0Ev,_ZTv0_n12_N8S3589C19D0Ev),
  ABISELECT(-128,-84),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI8S3589C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C19D1Ev,_ZTv0_n20_N8S3589C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C19D0Ev,_ZTv0_n20_N8S3589C19D0Ev),
  ABISELECT(-136,-88),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI8S3589C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C19D1Ev,_ZTv0_n12_N8S3589C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C19D0Ev,_ZTv0_n12_N8S3589C19D0Ev),
  ABISELECT(-168,-116),
  ABISELECT(-168,-116),
  (VTBL_ENTRY)&(_ZTI8S3589C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C19D1Ev,_ZTv0_n12_N8S3589C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C19D0Ev,_ZTv0_n12_N8S3589C19D0Ev),
  ABISELECT(-184,-128),
  ABISELECT(-16,-12),
  ABISELECT(-184,-128),
  (VTBL_ENTRY)&(_ZTI8S3589C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C19D1Ev,_ZTv0_n16_N8S3589C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C19D0Ev,_ZTv0_n16_N8S3589C19D0Ev),
};
extern VTBL_ENTRY _ZTV8S3589C19[];
extern void _ZN8S3589C12D1Ev();
extern void _ZN8S3589C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C12__8S3589C19[] = {
  ABISELECT(184,128),
  ABISELECT(168,116),
  ABISELECT(136,88),
  ABISELECT(128,84),
  ABISELECT(104,68),
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&_ZN8S3589C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C12D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn80_N8S3589C12D1Ev,_ZThn56_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn80_N8S3589C12D0Ev,_ZThn56_N8S3589C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C14__8S3589C12__8S3589C19[] = {
  ABISELECT(-80,-56),
  ABISELECT(24,12),
  ABISELECT(-80,-56),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn104_N8S3589C12D1Ev,_ZThn68_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn104_N8S3589C12D0Ev,_ZThn68_N8S3589C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__8S3589C12__8S3589C19[] = {
  ABISELECT(-104,-68),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S3589C12D1Ev,_ZTv0_n20_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn128_N8S3589C12D1Ev,_ZThn84_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3589C12D0Ev,_ZTv0_n20_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn128_N8S3589C12D0Ev,_ZThn84_N8S3589C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C8__8S3589C12__8S3589C19[] = {
  ABISELECT(-128,-84),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C12D1Ev,_ZTv0_n20_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C12D0Ev,_ZTv0_n20_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn136_N8S3589C12D1Ev,_ZThn88_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn136_N8S3589C12D0Ev,_ZThn88_N8S3589C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__8S3589C12__8S3589C19[] = {
  ABISELECT(-136,-88),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn168_N8S3589C12D1Ev,_ZThn116_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn168_N8S3589C12D0Ev,_ZThn116_N8S3589C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S3589C12__8S3589C19[] = {
  ABISELECT(-168,-116),
  ABISELECT(-168,-116),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn184_N8S3589C12D1Ev,_ZThn128_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn184_N8S3589C12D0Ev,_ZThn128_N8S3589C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C11__8S3589C12__8S3589C19[] = {
  ABISELECT(-184,-128),
  ABISELECT(-16,-12),
  ABISELECT(-184,-128),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev),
};
extern void _ZN8S3589C14D1Ev();
extern void _ZN8S3589C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C14__8S3589C19[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C14[0]),
  (VTBL_ENTRY)&_ZN8S3589C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3589C14D1Ev,_ZTv0_n12_N8S3589C14D1Ev)();
extern void ABISELECT(_ZThn24_N8S3589C14D1Ev,_ZThn12_N8S3589C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C14D0Ev,_ZTv0_n12_N8S3589C14D0Ev)();
extern void ABISELECT(_ZThn24_N8S3589C14D0Ev,_ZThn12_N8S3589C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__8S3589C14__8S3589C19[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S3589C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C14D1Ev,_ZTv0_n12_N8S3589C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C14D0Ev,_ZTv0_n12_N8S3589C14D0Ev),
};
extern void _ZN7S3589C8D1Ev();
extern void _ZN7S3589C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3589C8__8S3589C19[] = {
  ABISELECT(40,32),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&_ZN7S3589C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn8_N7S3589C8D1Ev,_ZThn4_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn8_N7S3589C8D0Ev,_ZThn4_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__7S3589C8__8S3589C19[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S3589C8D1Ev,_ZThn32_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S3589C8D0Ev,_ZThn32_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S3589C8__8S3589C19[] = {
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void _ZN8S3589C11D1Ev();
extern void _ZN8S3589C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C11__8S3589C19[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C11[0]),
  (VTBL_ENTRY)&_ZN8S3589C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3589C11D1Ev,_ZTv0_n12_N8S3589C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C11D0Ev,_ZTv0_n12_N8S3589C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S3589C11__8S3589C19[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S3589C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C11D1Ev,_ZTv0_n12_N8S3589C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C11D0Ev,_ZTv0_n12_N8S3589C11D0Ev),
};
static  VTT_ENTRY vtt_S3589C19[] = {
  {&(_ZTV8S3589C19[8]),  8,44},
  {&(_tg__ZTV8S3589C12__8S3589C19[8]),  8,10},
  {&(_tg__ZTV8S3589C14__8S3589C12__8S3589C19[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__8S3589C12__8S3589C19[3]),  3,5},
  {&(_tg__ZTV7S3589C8__8S3589C12__8S3589C19[5]),  5,7},
  {&(_tg__ZTV7S3589C2__8S3589C12__8S3589C19[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S3589C12__8S3589C19[3]),  3,5},
  {&(_tg__ZTV8S3589C11__8S3589C12__8S3589C19[4]),  4,6},
  {&(_ZTV8S3589C19[14]),  14,44},
  {&(_ZTV8S3589C19[19]),  19,44},
  {&(_ZTV8S3589C19[26]),  26,44},
  {&(_ZTV8S3589C19[31]),  31,44},
  {&(_ZTV8S3589C19[36]),  36,44},
  {&(_ZTV8S3589C19[42]),  42,44},
  {&(_tg__ZTV8S3589C14__8S3589C19[3]),  3,5},
  {&(_tg__ZTV10S3589C9_nt__8S3589C14__8S3589C19[3]),  3,5},
  {&(_tg__ZTV7S3589C8__8S3589C19[4]),  4,6},
  {&(_tg__ZTV7S3589C2__7S3589C8__8S3589C19[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S3589C8__8S3589C19[3]),  3,5},
  {&(_tg__ZTV8S3589C11__8S3589C19[3]),  3,5},
  {&(_tg__ZTV7S3589C3__8S3589C11__8S3589C19[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S3589C19[];
extern  VTBL_ENTRY _ZTV8S3589C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C19[];
static VTBL_ENTRY alt_thunk_names51[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3589C8D0Ev,_ZThn32_N7S3589C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3589C8D0Ev,_ZThn4_N7S3589C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3589C8D1Ev,_ZThn32_N7S3589C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3589C8D1Ev,_ZThn4_N7S3589C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C14D0Ev,_ZTv0_n12_N8S3589C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S3589C14D0Ev,_ZThn12_N8S3589C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C14D1Ev,_ZTv0_n12_N8S3589C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S3589C14D1Ev,_ZThn12_N8S3589C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3589C12D0Ev,_ZTv0_n20_N8S3589C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S3589C12D0Ev,_ZThn84_N8S3589C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3589C12D1Ev,_ZTv0_n20_N8S3589C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S3589C12D1Ev,_ZThn84_N8S3589C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S3589C12D0Ev,_ZThn116_N8S3589C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S3589C12D0Ev,_ZThn88_N8S3589C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S3589C12D0Ev,_ZThn68_N8S3589C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S3589C12D1Ev,_ZThn116_N8S3589C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S3589C12D1Ev,_ZThn88_N8S3589C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S3589C12D1Ev,_ZThn68_N8S3589C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S3589C12D0Ev,_ZThn128_N8S3589C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S3589C12D0Ev,_ZThn56_N8S3589C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S3589C12D1Ev,_ZThn128_N8S3589C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S3589C12D1Ev,_ZThn56_N8S3589C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3589C19D0Ev,_ZTv0_n20_N8S3589C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S3589C19D0Ev,_ZThn84_N8S3589C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3589C19D1Ev,_ZTv0_n20_N8S3589C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S3589C19D1Ev,_ZThn84_N8S3589C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C19D0Ev,_ZTv0_n12_N8S3589C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S3589C19D0Ev,_ZThn116_N8S3589C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S3589C19D0Ev,_ZThn88_N8S3589C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S3589C19D0Ev,_ZThn68_N8S3589C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C19D1Ev,_ZTv0_n12_N8S3589C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S3589C19D1Ev,_ZThn116_N8S3589C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S3589C19D1Ev,_ZThn88_N8S3589C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S3589C19D1Ev,_ZThn68_N8S3589C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C19D0Ev,_ZTv0_n16_N8S3589C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S3589C19D0Ev,_ZThn128_N8S3589C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S3589C19D0Ev,_ZThn56_N8S3589C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C19D1Ev,_ZTv0_n16_N8S3589C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S3589C19D1Ev,_ZThn128_N8S3589C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S3589C19D1Ev,_ZThn56_N8S3589C19D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3589C19 = {  "S3589C19", // class name
  bases_S3589C19, 10,
  &(vtc_S3589C19[0]), // expected_vtbl_contents
  &(vtt_S3589C19[0]), // expected_vtt_contents
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI8S3589C19),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3589C19),44, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3589C19),21, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names51,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3589C18  : virtual S3589C3 , virtual S3589C16 , S3589C15 , S3589C19 , S3589C8 {
  int s3589c18f0;
  ~S3589C18(); // tgen
  S3589C18(); // tgen
};
//SIG(-1 S3589C18) C1{ VBC2{ vd m Fc FU3{ m Fc[6]}} VBC4{ VBC2 Fi FC5{}} BC6{ BC7{ VBC8{ BC2 vd FL FU3} VBC2 vd} VBC4 vd FD} BC9{ BC10{ BC11{ m FD} VBC12{ VBC13{ vd m Fi Fc Fi} Fp[2]} VBC7 BC2 VBC14{ VBC2} Fc Fi} Fs FC14 Fi} BC7 Fi}


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

static void Test_S3589C18()
{
  extern Class_Descriptor cd_S3589C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,43)];
    init_test(&cd_S3589C18, buf);
    S3589C18 *dp, &lv = *(dp=new (buf) S3589C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,168), "sizeof(S3589C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3589C18)");
    /*is_ambiguous_... S3589C18::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*), ABISELECT(128,80), "S3589C18");
    check_base_class_offset(lv, (S3589C3*)(S3589C16*), ABISELECT(128,80), "S3589C18");
    /*is_ambiguous_... S3589C8::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C8*)(S3589C15*), ABISELECT(128,80), "S3589C18");
    /*is_ambiguous_... S3589C18::S3589C8 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C8*), ABISELECT(128,80), "S3589C18");
    check_base_class_offset(lv, (S3589C3*)(S3589C11*), ABISELECT(128,80), "S3589C18");
    /*is_ambiguous_... S3589C18::S3589C8 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C8*), ABISELECT(128,80), "S3589C18");
    check_base_class_offset(lv, (S3589C16*), ABISELECT(144,92), "S3589C18");
    check_base_class_offset(lv, (S3589C16*)(S3589C15*), ABISELECT(144,92), "S3589C18");
    check_base_class_offset(lv, (S3589C3*)(S3589C2*), ABISELECT(160,104), "S3589C18");
    check_base_class_offset(lv, (S3589C2*)(S3589C8*)(S3589C15*), ABISELECT(160,104), "S3589C18");
    /*is_ambiguous_... S3589C18::S3589C8 */ AMB_check_base_class_offset(lv, (S3589C2*)(S3589C8*), ABISELECT(160,104), "S3589C18");
    /*is_ambiguous_... S3589C18::S3589C8 */ AMB_check_base_class_offset(lv, (S3589C2*)(S3589C8*), ABISELECT(160,104), "S3589C18");
    check_base_class_offset(lv, (S3589C8*)(S3589C15*), 0, "S3589C18");
    check_base_class_offset(lv, (S3589C15*), 0, "S3589C18");
    check_base_class_offset(lv, (S3589C13_nt*)(S3589C12*)(S3589C19*), ABISELECT(48,28), "S3589C18");
    check_base_class_offset(lv, (S3589C9_nt*)(S3589C14*), ABISELECT(216,144), "S3589C18");
    check_base_class_offset(lv, (S3589C14*)(S3589C12*)(S3589C19*), ABISELECT(192,132), "S3589C18");
    check_base_class_offset(lv, (S3589C8*)(S3589C12*)(S3589C19*), ABISELECT(240,160), "S3589C18");
    /*is_ambiguous_... S3589C12::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C12*)(S3589C19*), ABISELECT(32,16), "S3589C18");
    check_base_class_offset(lv, (S3589C11*)(S3589C12*)(S3589C19*), ABISELECT(248,164), "S3589C18");
    check_base_class_offset(lv, (S3589C12*)(S3589C19*), ABISELECT(32,16), "S3589C18");
    check_base_class_offset(lv, (S3589C19*), ABISELECT(32,16), "S3589C18");
    /*is_ambiguous_... S3589C18::S3589C8 */ AMB_check_base_class_offset(lv, (S3589C8*), ABISELECT(112,72), "S3589C18");
    check_field_offset(lv, s3589c18f0, ABISELECT(120,76), "S3589C18.s3589c18f0");
    test_class_info(&lv, &cd_S3589C18);
    dp->~S3589C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3589C18(Test_S3589C18, "S3589C18", ABISELECT(256,168));

#else // __cplusplus

extern void _ZN8S3589C18C1Ev();
extern void _ZN8S3589C18D1Ev();
Name_Map name_map_S3589C18[] = {
  NSPAIR(_ZN8S3589C18C1Ev),
  NSPAIR(_ZN8S3589C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C16;
extern VTBL_ENTRY _ZTI8S3589C16[];
extern  VTBL_ENTRY _ZTV8S3589C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C16[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C2;
extern VTBL_ENTRY _ZTI7S3589C2[];
extern  VTBL_ENTRY _ZTV7S3589C2[];
extern Class_Descriptor cd_S3589C8;
extern VTBL_ENTRY _ZTI7S3589C8[];
extern  VTBL_ENTRY _ZTV7S3589C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C8[];
extern Class_Descriptor cd_S3589C15;
extern VTBL_ENTRY _ZTI8S3589C15[];
extern  VTBL_ENTRY _ZTV8S3589C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C15[];
extern Class_Descriptor cd_S3589C13_nt;
extern VTBL_ENTRY _ZTI11S3589C13_nt[];
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
extern Class_Descriptor cd_S3589C14;
extern VTBL_ENTRY _ZTI8S3589C14[];
extern  VTBL_ENTRY _ZTV8S3589C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C14[];
extern Class_Descriptor cd_S3589C8;
extern VTBL_ENTRY _ZTI7S3589C8[];
extern  VTBL_ENTRY _ZTV7S3589C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C8[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C11;
extern VTBL_ENTRY _ZTI8S3589C11[];
extern  VTBL_ENTRY _ZTV8S3589C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C11[];
extern Class_Descriptor cd_S3589C12;
extern VTBL_ENTRY _ZTI8S3589C12[];
extern  VTBL_ENTRY _ZTV8S3589C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C12[];
extern Class_Descriptor cd_S3589C19;
extern VTBL_ENTRY _ZTI8S3589C19[];
extern  VTBL_ENTRY _ZTV8S3589C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C19[];
extern Class_Descriptor cd_S3589C8;
extern VTBL_ENTRY _ZTI7S3589C8[];
extern  VTBL_ENTRY _ZTV7S3589C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C8[];
static Base_Class bases_S3589C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    ABISELECT(128,80), //bcp->offset
    27, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3589C16,    ABISELECT(144,92), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3589C3,    ABISELECT(160,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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3589C2,    ABISELECT(160,104), //bcp->offset
    38, //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
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3589C8,    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
    9, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3589C15,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3589C13_nt,    ABISELECT(48,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
    12, //immediately_derived
  0, 0},
  {&cd_S3589C9_nt,    ABISELECT(216,144), //bcp->offset
    49, //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
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3589C14,    ABISELECT(192,132), //bcp->offset
    43, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S3589C8,    ABISELECT(240,160), //bcp->offset
    54, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S3589C3,    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
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3589C11,    ABISELECT(248,164), //bcp->offset
    61, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S3589C12,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3589C19,    ABISELECT(32,16), //bcp->offset
    11, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3589C8,    ABISELECT(112,72), //bcp->offset
    21, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3589C18[];
extern void _ZN8S3589C18D1Ev();
extern void _ZN8S3589C18D0Ev();
extern void ABISELECT(_ZThn32_N8S3589C18D1Ev,_ZThn16_N8S3589C18D1Ev)();
extern void ABISELECT(_ZThn32_N8S3589C18D0Ev,_ZThn16_N8S3589C18D0Ev)();
extern void ABISELECT(_ZThn112_N8S3589C18D1Ev,_ZThn72_N8S3589C18D1Ev)();
extern void ABISELECT(_ZThn112_N8S3589C18D0Ev,_ZThn72_N8S3589C18D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C18D1Ev,_ZTv0_n12_N8S3589C18D1Ev)();
extern void ABISELECT(_ZThn128_N8S3589C18D1Ev,_ZThn80_N8S3589C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C18D0Ev,_ZTv0_n12_N8S3589C18D0Ev)();
extern void ABISELECT(_ZThn128_N8S3589C18D0Ev,_ZThn80_N8S3589C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C18D1Ev,_ZTv0_n16_N8S3589C18D1Ev)();
extern void ABISELECT(_ZThn144_N8S3589C18D1Ev,_ZThn92_N8S3589C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C18D0Ev,_ZTv0_n16_N8S3589C18D0Ev)();
extern void ABISELECT(_ZThn144_N8S3589C18D0Ev,_ZThn92_N8S3589C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C18D1Ev,_ZTv0_n12_N8S3589C18D1Ev)();
extern void ABISELECT(_ZThn160_N8S3589C18D1Ev,_ZThn104_N8S3589C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C18D0Ev,_ZTv0_n12_N8S3589C18D0Ev)();
extern void ABISELECT(_ZThn160_N8S3589C18D0Ev,_ZThn104_N8S3589C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C18D1Ev,_ZTv0_n16_N8S3589C18D1Ev)();
extern void ABISELECT(_ZThn192_N8S3589C18D1Ev,_ZThn132_N8S3589C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C18D0Ev,_ZTv0_n16_N8S3589C18D0Ev)();
extern void ABISELECT(_ZThn192_N8S3589C18D0Ev,_ZThn132_N8S3589C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C18D1Ev,_ZTv0_n12_N8S3589C18D1Ev)();
extern void ABISELECT(_ZThn216_N8S3589C18D1Ev,_ZThn144_N8S3589C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C18D0Ev,_ZTv0_n12_N8S3589C18D0Ev)();
extern void ABISELECT(_ZThn216_N8S3589C18D0Ev,_ZThn144_N8S3589C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3589C18D1Ev,_ZTv0_n20_N8S3589C18D1Ev)();
extern void ABISELECT(_ZThn240_N8S3589C18D1Ev,_ZThn160_N8S3589C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3589C18D0Ev,_ZTv0_n20_N8S3589C18D0Ev)();
extern void ABISELECT(_ZThn240_N8S3589C18D0Ev,_ZThn160_N8S3589C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C18D1Ev,_ZTv0_n16_N8S3589C18D1Ev)();
extern void ABISELECT(_ZThn248_N8S3589C18D1Ev,_ZThn164_N8S3589C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C18D0Ev,_ZTv0_n16_N8S3589C18D0Ev)();
extern void ABISELECT(_ZThn248_N8S3589C18D0Ev,_ZThn164_N8S3589C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3589C18[] = {
  ABISELECT(248,164),
  ABISELECT(240,160),
  ABISELECT(216,144),
  ABISELECT(192,132),
  ABISELECT(144,92),
  ABISELECT(128,80),
  ABISELECT(160,104),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C18[0]),
  (VTBL_ENTRY)&_ZN8S3589C18D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C18D0Ev,
  ABISELECT(216,148),
  ABISELECT(96,64),
  ABISELECT(128,88),
  ABISELECT(208,144),
  ABISELECT(184,128),
  ABISELECT(160,116),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S3589C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S3589C18D1Ev,_ZThn16_N8S3589C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S3589C18D0Ev,_ZThn16_N8S3589C18D0Ev),
  ABISELECT(16,8),
  ABISELECT(48,32),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S3589C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S3589C18D1Ev,_ZThn72_N8S3589C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S3589C18D0Ev,_ZThn72_N8S3589C18D0Ev),
  ABISELECT(-128,-80),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S3589C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C18D1Ev,_ZTv0_n12_N8S3589C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C18D0Ev,_ZTv0_n12_N8S3589C18D0Ev),
  ABISELECT(-144,-92),
  ABISELECT(-16,-12),
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI8S3589C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C18D1Ev,_ZTv0_n16_N8S3589C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C18D0Ev,_ZTv0_n16_N8S3589C18D0Ev),
  ABISELECT(-160,-104),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI8S3589C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C18D1Ev,_ZTv0_n12_N8S3589C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C18D0Ev,_ZTv0_n12_N8S3589C18D0Ev),
  ABISELECT(-192,-132),
  ABISELECT(24,12),
  ABISELECT(-192,-132),
  (VTBL_ENTRY)&(_ZTI8S3589C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C18D1Ev,_ZTv0_n16_N8S3589C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C18D0Ev,_ZTv0_n16_N8S3589C18D0Ev),
  ABISELECT(-216,-144),
  ABISELECT(-216,-144),
  (VTBL_ENTRY)&(_ZTI8S3589C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C18D1Ev,_ZTv0_n12_N8S3589C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C18D0Ev,_ZTv0_n12_N8S3589C18D0Ev),
  ABISELECT(-240,-160),
  ABISELECT(-112,-80),
  ABISELECT(-80,-56),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI8S3589C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C18D1Ev,_ZTv0_n20_N8S3589C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C18D0Ev,_ZTv0_n20_N8S3589C18D0Ev),
  ABISELECT(-248,-164),
  ABISELECT(-120,-84),
  ABISELECT(-248,-164),
  (VTBL_ENTRY)&(_ZTI8S3589C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C18D1Ev,_ZTv0_n16_N8S3589C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C18D0Ev,_ZTv0_n16_N8S3589C18D0Ev),
};
extern VTBL_ENTRY _ZTV8S3589C18[];
extern void _ZN8S3589C15D1Ev();
extern void _ZN8S3589C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C15__8S3589C18[] = {
  ABISELECT(144,92),
  ABISELECT(128,80),
  ABISELECT(160,104),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C15[0]),
  (VTBL_ENTRY)&_ZN8S3589C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C15D0Ev,
};
extern void _ZN7S3589C8D1Ev();
extern void _ZN7S3589C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3589C88S3589C15__8S3589C18[] = {
  ABISELECT(128,80),
  ABISELECT(160,104),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&_ZN7S3589C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn160_N7S3589C8D1Ev,_ZThn104_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn160_N7S3589C8D0Ev,_ZThn104_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__7S3589C88S3589C15__8S3589C18[] = {
  ABISELECT(-160,-104),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn128_N7S3589C8D1Ev,_ZThn80_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn128_N7S3589C8D0Ev,_ZThn80_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S3589C88S3589C15__8S3589C18[] = {
  ABISELECT(-128,-80),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C15D1Ev,_ZTv0_n12_N8S3589C15D1Ev)();
extern void ABISELECT(_ZThn160_N8S3589C15D1Ev,_ZThn104_N8S3589C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C15D0Ev,_ZTv0_n12_N8S3589C15D0Ev)();
extern void ABISELECT(_ZThn160_N8S3589C15D0Ev,_ZThn104_N8S3589C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__8S3589C15__8S3589C18[] = {
  ABISELECT(-160,-104),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI8S3589C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C15D1Ev,_ZTv0_n12_N8S3589C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C15D0Ev,_ZTv0_n12_N8S3589C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C15D1Ev,_ZTv0_n12_N8S3589C15D1Ev)();
extern void ABISELECT(_ZThn128_N8S3589C15D1Ev,_ZThn80_N8S3589C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C15D0Ev,_ZTv0_n12_N8S3589C15D0Ev)();
extern void ABISELECT(_ZThn128_N8S3589C15D0Ev,_ZThn80_N8S3589C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S3589C15__8S3589C18[] = {
  ABISELECT(-128,-80),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S3589C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C15D1Ev,_ZTv0_n12_N8S3589C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C15D0Ev,_ZTv0_n12_N8S3589C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3589C15D1Ev,_ZTv0_n16_N8S3589C15D1Ev)();
extern void ABISELECT(_ZThn144_N8S3589C15D1Ev,_ZThn92_N8S3589C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C15D0Ev,_ZTv0_n16_N8S3589C15D0Ev)();
extern void ABISELECT(_ZThn144_N8S3589C15D0Ev,_ZThn92_N8S3589C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C16__8S3589C15__8S3589C18[] = {
  ABISELECT(-144,-92),
  ABISELECT(-16,-12),
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI8S3589C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C15D1Ev,_ZTv0_n16_N8S3589C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C15D0Ev,_ZTv0_n16_N8S3589C15D0Ev),
};
extern void _ZN8S3589C19D1Ev();
extern void _ZN8S3589C19D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C19__8S3589C18[] = {
  ABISELECT(216,148),
  ABISELECT(96,64),
  ABISELECT(128,88),
  ABISELECT(208,144),
  ABISELECT(184,128),
  ABISELECT(160,116),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C19[0]),
  (VTBL_ENTRY)&_ZN8S3589C19D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C19D0Ev,
};
extern void _ZN8S3589C12D1Ev();
extern void _ZN8S3589C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C128S3589C19__8S3589C18[] = {
  ABISELECT(216,148),
  ABISELECT(96,64),
  ABISELECT(128,88),
  ABISELECT(208,144),
  ABISELECT(184,128),
  ABISELECT(160,116),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&_ZN8S3589C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C12D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn160_N8S3589C12D1Ev,_ZThn116_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn160_N8S3589C12D0Ev,_ZThn116_N8S3589C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C14__8S3589C128S3589C19__8S3589C18[] = {
  ABISELECT(-160,-116),
  ABISELECT(24,12),
  ABISELECT(-160,-116),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn184_N8S3589C12D1Ev,_ZThn128_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn184_N8S3589C12D0Ev,_ZThn128_N8S3589C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__8S3589C128S3589C19__8S3589C18[] = {
  ABISELECT(-184,-128),
  ABISELECT(-184,-128),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S3589C12D1Ev,_ZTv0_n20_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn208_N8S3589C12D1Ev,_ZThn144_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3589C12D0Ev,_ZTv0_n20_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn208_N8S3589C12D0Ev,_ZThn144_N8S3589C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C8__8S3589C128S3589C19__8S3589C18[] = {
  ABISELECT(-208,-144),
  ABISELECT(-112,-80),
  ABISELECT(-80,-56),
  ABISELECT(-208,-144),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C12D1Ev,_ZTv0_n20_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C12D0Ev,_ZTv0_n20_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn128_N8S3589C12D1Ev,_ZThn88_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn128_N8S3589C12D0Ev,_ZThn88_N8S3589C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__8S3589C128S3589C19__8S3589C18[] = {
  ABISELECT(-128,-88),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn96_N8S3589C12D1Ev,_ZThn64_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn96_N8S3589C12D0Ev,_ZThn64_N8S3589C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S3589C128S3589C19__8S3589C18[] = {
  ABISELECT(-96,-64),
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn216_N8S3589C12D1Ev,_ZThn148_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn216_N8S3589C12D0Ev,_ZThn148_N8S3589C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C11__8S3589C128S3589C19__8S3589C18[] = {
  ABISELECT(-216,-148),
  ABISELECT(-120,-84),
  ABISELECT(-216,-148),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3589C19D1Ev,_ZTv0_n16_N8S3589C19D1Ev)();
extern void ABISELECT(_ZThn160_N8S3589C19D1Ev,_ZThn116_N8S3589C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C19D0Ev,_ZTv0_n16_N8S3589C19D0Ev)();
extern void ABISELECT(_ZThn160_N8S3589C19D0Ev,_ZThn116_N8S3589C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C14__8S3589C19__8S3589C18[] = {
  ABISELECT(-160,-116),
  ABISELECT(24,12),
  ABISELECT(-160,-116),
  (VTBL_ENTRY)&(_ZTI8S3589C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C19D1Ev,_ZTv0_n16_N8S3589C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C19D0Ev,_ZTv0_n16_N8S3589C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C19D1Ev,_ZTv0_n12_N8S3589C19D1Ev)();
extern void ABISELECT(_ZThn184_N8S3589C19D1Ev,_ZThn128_N8S3589C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C19D0Ev,_ZTv0_n12_N8S3589C19D0Ev)();
extern void ABISELECT(_ZThn184_N8S3589C19D0Ev,_ZThn128_N8S3589C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__8S3589C19__8S3589C18[] = {
  ABISELECT(-184,-128),
  ABISELECT(-184,-128),
  (VTBL_ENTRY)&(_ZTI8S3589C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C19D1Ev,_ZTv0_n12_N8S3589C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C19D0Ev,_ZTv0_n12_N8S3589C19D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S3589C19D1Ev,_ZTv0_n20_N8S3589C19D1Ev)();
extern void ABISELECT(_ZThn208_N8S3589C19D1Ev,_ZThn144_N8S3589C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3589C19D0Ev,_ZTv0_n20_N8S3589C19D0Ev)();
extern void ABISELECT(_ZThn208_N8S3589C19D0Ev,_ZThn144_N8S3589C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C8__8S3589C19__8S3589C18[] = {
  ABISELECT(-208,-144),
  ABISELECT(-112,-80),
  ABISELECT(-80,-56),
  ABISELECT(-208,-144),
  (VTBL_ENTRY)&(_ZTI8S3589C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C19D1Ev,_ZTv0_n20_N8S3589C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C19D0Ev,_ZTv0_n20_N8S3589C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C19D1Ev,_ZTv0_n12_N8S3589C19D1Ev)();
extern void ABISELECT(_ZThn128_N8S3589C19D1Ev,_ZThn88_N8S3589C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C19D0Ev,_ZTv0_n12_N8S3589C19D0Ev)();
extern void ABISELECT(_ZThn128_N8S3589C19D0Ev,_ZThn88_N8S3589C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__8S3589C19__8S3589C18[] = {
  ABISELECT(-128,-88),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI8S3589C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C19D1Ev,_ZTv0_n12_N8S3589C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C19D0Ev,_ZTv0_n12_N8S3589C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C19D1Ev,_ZTv0_n12_N8S3589C19D1Ev)();
extern void ABISELECT(_ZThn96_N8S3589C19D1Ev,_ZThn64_N8S3589C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C19D0Ev,_ZTv0_n12_N8S3589C19D0Ev)();
extern void ABISELECT(_ZThn96_N8S3589C19D0Ev,_ZThn64_N8S3589C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S3589C19__8S3589C18[] = {
  ABISELECT(-96,-64),
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI8S3589C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C19D1Ev,_ZTv0_n12_N8S3589C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C19D0Ev,_ZTv0_n12_N8S3589C19D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3589C19D1Ev,_ZTv0_n16_N8S3589C19D1Ev)();
extern void ABISELECT(_ZThn216_N8S3589C19D1Ev,_ZThn148_N8S3589C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C19D0Ev,_ZTv0_n16_N8S3589C19D0Ev)();
extern void ABISELECT(_ZThn216_N8S3589C19D0Ev,_ZThn148_N8S3589C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C11__8S3589C19__8S3589C18[] = {
  ABISELECT(-216,-148),
  ABISELECT(-120,-84),
  ABISELECT(-216,-148),
  (VTBL_ENTRY)&(_ZTI8S3589C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C19D1Ev,_ZTv0_n16_N8S3589C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C19D0Ev,_ZTv0_n16_N8S3589C19D0Ev),
};
extern void _ZN7S3589C8D1Ev();
extern void _ZN7S3589C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3589C8__A__8S3589C18[] = {
  ABISELECT(16,8),
  ABISELECT(48,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&_ZN7S3589C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn48_N7S3589C8D1Ev,_ZThn32_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn48_N7S3589C8D0Ev,_ZThn32_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__7S3589C8__A__8S3589C18[] = {
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn16_N7S3589C8D1Ev,_ZThn8_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn16_N7S3589C8D0Ev,_ZThn8_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S3589C8__A__8S3589C18[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void _ZN8S3589C16D1Ev();
extern void _ZN8S3589C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C16__8S3589C18[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C16[0]),
  (VTBL_ENTRY)&_ZN8S3589C16D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C16D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3589C16D1Ev,_ZTv0_n12_N8S3589C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C16D0Ev,_ZTv0_n12_N8S3589C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S3589C16__8S3589C18[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S3589C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C16D1Ev,_ZTv0_n12_N8S3589C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C16D0Ev,_ZTv0_n12_N8S3589C16D0Ev),
};
extern void _ZN8S3589C14D1Ev();
extern void _ZN8S3589C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C14__8S3589C18[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C14[0]),
  (VTBL_ENTRY)&_ZN8S3589C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3589C14D1Ev,_ZTv0_n12_N8S3589C14D1Ev)();
extern void ABISELECT(_ZThn24_N8S3589C14D1Ev,_ZThn12_N8S3589C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C14D0Ev,_ZTv0_n12_N8S3589C14D0Ev)();
extern void ABISELECT(_ZThn24_N8S3589C14D0Ev,_ZThn12_N8S3589C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__8S3589C14__8S3589C18[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S3589C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C14D1Ev,_ZTv0_n12_N8S3589C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C14D0Ev,_ZTv0_n12_N8S3589C14D0Ev),
};
extern void _ZN7S3589C8D1Ev();
extern void _ZN7S3589C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3589C8__A1__8S3589C18[] = {
  ABISELECT(-112,-80),
  ABISELECT(-80,-56),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&_ZN7S3589C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C2__7S3589C8__A1__8S3589C18[] = {
  ABISELECT(80,56),
  ABISELECT(80,56),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S3589C8__A1__8S3589C18[] = {
  ABISELECT(112,80),
  ABISELECT(112,80),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void _ZN8S3589C11D1Ev();
extern void _ZN8S3589C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C11__8S3589C18[] = {
  ABISELECT(-120,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C11[0]),
  (VTBL_ENTRY)&_ZN8S3589C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3589C11D1Ev,_ZTv0_n12_N8S3589C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C11D0Ev,_ZTv0_n12_N8S3589C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S3589C11__8S3589C18[] = {
  ABISELECT(120,84),
  ABISELECT(120,84),
  (VTBL_ENTRY)&(_ZTI8S3589C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C11D1Ev,_ZTv0_n12_N8S3589C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C11D0Ev,_ZTv0_n12_N8S3589C11D0Ev),
};
static  VTT_ENTRY vtt_S3589C18[] = {
  {&(_ZTV8S3589C18[9]),  9,67},
  {&(_tg__ZTV8S3589C15__8S3589C18[5]),  5,7},
  {&(_tg__ZTV7S3589C88S3589C15__8S3589C18[4]),  4,6},
  {&(_tg__ZTV7S3589C2__7S3589C88S3589C15__8S3589C18[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S3589C88S3589C15__8S3589C18[3]),  3,5},
  {&(_tg__ZTV7S3589C2__8S3589C15__8S3589C18[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S3589C15__8S3589C18[3]),  3,5},
  {&(_tg__ZTV8S3589C16__8S3589C15__8S3589C18[4]),  4,6},
  {&(_tg__ZTV8S3589C19__8S3589C18[8]),  8,10},
  {&(_tg__ZTV8S3589C128S3589C19__8S3589C18[8]),  8,10},
  {&(_tg__ZTV8S3589C14__8S3589C128S3589C19__8S3589C18[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__8S3589C128S3589C19__8S3589C18[3]),  3,5},
  {&(_tg__ZTV7S3589C8__8S3589C128S3589C19__8S3589C18[5]),  5,7},
  {&(_tg__ZTV7S3589C2__8S3589C128S3589C19__8S3589C18[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S3589C128S3589C19__8S3589C18[3]),  3,5},
  {&(_tg__ZTV8S3589C11__8S3589C128S3589C19__8S3589C18[4]),  4,6},
  {&(_tg__ZTV8S3589C14__8S3589C19__8S3589C18[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__8S3589C19__8S3589C18[3]),  3,5},
  {&(_tg__ZTV7S3589C8__8S3589C19__8S3589C18[5]),  5,7},
  {&(_tg__ZTV7S3589C2__8S3589C19__8S3589C18[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S3589C19__8S3589C18[3]),  3,5},
  {&(_tg__ZTV8S3589C11__8S3589C19__8S3589C18[4]),  4,6},
  {&(_tg__ZTV7S3589C8__A__8S3589C18[4]),  4,6},
  {&(_tg__ZTV7S3589C2__7S3589C8__A__8S3589C18[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S3589C8__A__8S3589C18[3]),  3,5},
  {&(_ZTV8S3589C18[30]),  30,67},
  {&(_ZTV8S3589C18[36]),  36,67},
  {&(_ZTV8S3589C18[41]),  41,67},
  {&(_ZTV8S3589C18[19]),  19,67},
  {&(_ZTV8S3589C18[47]),  47,67},
  {&(_ZTV8S3589C18[52]),  52,67},
  {&(_ZTV8S3589C18[59]),  59,67},
  {&(_ZTV8S3589C18[65]),  65,67},
  {&(_ZTV8S3589C18[25]),  25,67},
  {&(_tg__ZTV8S3589C16__8S3589C18[3]),  3,5},
  {&(_tg__ZTV7S3589C3__8S3589C16__8S3589C18[3]),  3,5},
  {&(_tg__ZTV8S3589C14__8S3589C18[3]),  3,5},
  {&(_tg__ZTV10S3589C9_nt__8S3589C14__8S3589C18[3]),  3,5},
  {&(_tg__ZTV7S3589C8__A1__8S3589C18[4]),  4,6},
  {&(_tg__ZTV7S3589C2__7S3589C8__A1__8S3589C18[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S3589C8__A1__8S3589C18[3]),  3,5},
  {&(_tg__ZTV8S3589C11__8S3589C18[3]),  3,5},
  {&(_tg__ZTV7S3589C3__8S3589C11__8S3589C18[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S3589C18[];
extern  VTBL_ENTRY _ZTV8S3589C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C18[];
static VTBL_ENTRY alt_thunk_names52[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C14D0Ev,_ZTv0_n12_N8S3589C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S3589C14D0Ev,_ZThn12_N8S3589C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C14D1Ev,_ZTv0_n12_N8S3589C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S3589C14D1Ev,_ZThn12_N8S3589C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3589C19D0Ev,_ZTv0_n20_N8S3589C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S3589C19D0Ev,_ZThn144_N8S3589C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3589C19D1Ev,_ZTv0_n20_N8S3589C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S3589C19D1Ev,_ZThn144_N8S3589C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C19D0Ev,_ZTv0_n12_N8S3589C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S3589C19D0Ev,_ZThn64_N8S3589C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S3589C19D0Ev,_ZThn88_N8S3589C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S3589C19D0Ev,_ZThn128_N8S3589C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C19D1Ev,_ZTv0_n12_N8S3589C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S3589C19D1Ev,_ZThn64_N8S3589C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S3589C19D1Ev,_ZThn88_N8S3589C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S3589C19D1Ev,_ZThn128_N8S3589C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C19D0Ev,_ZTv0_n16_N8S3589C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S3589C19D0Ev,_ZThn148_N8S3589C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S3589C19D0Ev,_ZThn116_N8S3589C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C19D1Ev,_ZTv0_n16_N8S3589C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S3589C19D1Ev,_ZThn148_N8S3589C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S3589C19D1Ev,_ZThn116_N8S3589C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3589C12D0Ev,_ZTv0_n20_N8S3589C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S3589C12D0Ev,_ZThn144_N8S3589C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3589C12D1Ev,_ZTv0_n20_N8S3589C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S3589C12D1Ev,_ZThn144_N8S3589C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S3589C12D0Ev,_ZThn64_N8S3589C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S3589C12D0Ev,_ZThn88_N8S3589C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S3589C12D0Ev,_ZThn128_N8S3589C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S3589C12D1Ev,_ZThn64_N8S3589C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S3589C12D1Ev,_ZThn88_N8S3589C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S3589C12D1Ev,_ZThn128_N8S3589C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S3589C12D0Ev,_ZThn148_N8S3589C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S3589C12D0Ev,_ZThn116_N8S3589C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S3589C12D1Ev,_ZThn148_N8S3589C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S3589C12D1Ev,_ZThn116_N8S3589C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C15D0Ev,_ZTv0_n16_N8S3589C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S3589C15D0Ev,_ZThn92_N8S3589C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C15D1Ev,_ZTv0_n16_N8S3589C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S3589C15D1Ev,_ZThn92_N8S3589C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C15D0Ev,_ZTv0_n12_N8S3589C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S3589C15D0Ev,_ZThn80_N8S3589C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S3589C15D0Ev,_ZThn104_N8S3589C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C15D1Ev,_ZTv0_n12_N8S3589C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S3589C15D1Ev,_ZThn80_N8S3589C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S3589C15D1Ev,_ZThn104_N8S3589C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3589C8D0Ev,_ZThn8_N7S3589C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3589C8D0Ev,_ZThn32_N7S3589C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S3589C8D0Ev,_ZThn80_N7S3589C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S3589C8D0Ev,_ZThn104_N7S3589C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3589C8D1Ev,_ZThn8_N7S3589C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3589C8D1Ev,_ZThn32_N7S3589C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S3589C8D1Ev,_ZThn80_N7S3589C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S3589C8D1Ev,_ZThn104_N7S3589C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3589C18D0Ev,_ZTv0_n20_N8S3589C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S3589C18D0Ev,_ZThn160_N8S3589C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3589C18D1Ev,_ZTv0_n20_N8S3589C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S3589C18D1Ev,_ZThn160_N8S3589C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C18D0Ev,_ZTv0_n16_N8S3589C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S3589C18D0Ev,_ZThn164_N8S3589C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S3589C18D0Ev,_ZThn132_N8S3589C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S3589C18D0Ev,_ZThn92_N8S3589C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C18D1Ev,_ZTv0_n16_N8S3589C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S3589C18D1Ev,_ZThn164_N8S3589C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S3589C18D1Ev,_ZThn132_N8S3589C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S3589C18D1Ev,_ZThn92_N8S3589C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C18D0Ev,_ZTv0_n12_N8S3589C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S3589C18D0Ev,_ZThn144_N8S3589C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S3589C18D0Ev,_ZThn104_N8S3589C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S3589C18D0Ev,_ZThn80_N8S3589C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C18D1Ev,_ZTv0_n12_N8S3589C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S3589C18D1Ev,_ZThn144_N8S3589C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S3589C18D1Ev,_ZThn104_N8S3589C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S3589C18D1Ev,_ZThn80_N8S3589C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3589C18 = {  "S3589C18", // class name
  bases_S3589C18, 15,
  &(vtc_S3589C18[0]), // expected_vtbl_contents
  &(vtt_S3589C18[0]), // expected_vtt_contents
  ABISELECT(256,168), // object size
  NSPAIRA(_ZTI8S3589C18),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S3589C18),67, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3589C18),43, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names52,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3589C1  : S3589C2 , S3589C5 , S3589C16 , S3589C18 , virtual S3589C7 {
  virtual  ~S3589C1(); // _ZN7S3589C1D2Ev
  S3589C1(); // tgen
};
//SIG(1 S3589C1) C1{ BC2{ BC3{ vd m Fc FU4{ m Fc[6]}} vd FL FU4} BC5{ VBC6{ BC7{ VBC8{ VBC2 VBC3 vd} BC3 BC9{ vd m Fi Fc Fi} BC2 Fi Fp} BC8 VBC9} VBC10{ VBC8 BC11{ VBC3} VBC12{ BC13{ m FD} VBC14{ VBC9 Fp[2]} VBC8 BC3 VBC11 Fc Fi} vd} BC15{ BC8 VBC16{ VBC3 Fi FC17{}} vd FD} vd Fi[10] Fp FC15} BC16 BC18{ VBC3 VBC16 BC15 BC19{ BC12 Fs FC11 Fi} BC8 Fi} VBC7 vd}


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

static void Test_S3589C1()
{
  extern Class_Descriptor cd_S3589C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(46,127)];
    init_test(&cd_S3589C1, buf);
    S3589C1 *dp, &lv = *(dp=new (buf) S3589C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(720,504), "sizeof(S3589C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3589C1)");
    /*is_ambiguous_... S3589C1::S3589C2 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C2*), 0, "S3589C1");
    /*is_ambiguous_... S3589C1::S3589C2 */ AMB_check_base_class_offset(lv, (S3589C2*), 0, "S3589C1");
    /*is_ambiguous_... S3589C1::S3589C2 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C2*), ABISELECT(456,320), "S3589C1");
    /*is_ambiguous_... S3589C1::S3589C8 */ AMB_check_base_class_offset(lv, (S3589C2*)(S3589C8*), ABISELECT(456,320), "S3589C1");
    /*is_ambiguous_... S3589C6::S3589C8 */ AMB_check_base_class_offset(lv, (S3589C2*)(S3589C8*)(S3589C6*), ABISELECT(456,320), "S3589C1");
    check_base_class_offset(lv, (S3589C2*)(S3589C8*)(S3589C15*)(S3589C5*), ABISELECT(456,320), "S3589C1");
    check_base_class_offset(lv, (S3589C2*)(S3589C8*)(S3589C15*)(S3589C18*), ABISELECT(456,320), "S3589C1");
    /*is_ambiguous_... S3589C18::S3589C8 */ AMB_check_base_class_offset(lv, (S3589C2*)(S3589C8*)(S3589C18*), ABISELECT(456,320), "S3589C1");
    /*is_ambiguous_... S3589C1::S3589C8 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C8*), ABISELECT(488,348), "S3589C1");
    /*is_ambiguous_... S3589C6::S3589C8 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C8*)(S3589C6*), ABISELECT(488,348), "S3589C1");
    /*is_ambiguous_... S3589C10::S3589C11 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C11*)(S3589C10*), ABISELECT(488,348), "S3589C1");
    /*is_ambiguous_... S3589C1::S3589C11 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C11*), ABISELECT(488,348), "S3589C1");
    /*is_ambiguous_... S3589C8::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C8*)(S3589C15*)(S3589C5*), ABISELECT(488,348), "S3589C1");
    /*is_ambiguous_... S3589C1::S3589C16 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C16*), ABISELECT(488,348), "S3589C1");
    /*is_ambiguous_... S3589C1::S3589C16 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C16*), ABISELECT(488,348), "S3589C1");
    /*is_ambiguous_... S3589C18::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C18*), ABISELECT(488,348), "S3589C1");
    /*is_ambiguous_... S3589C8::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C8*)(S3589C15*)(S3589C18*), ABISELECT(488,348), "S3589C1");
    /*is_ambiguous_... S3589C18::S3589C8 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C8*)(S3589C18*), ABISELECT(488,348), "S3589C1");
    check_base_class_offset(lv, (S3589C8*)(S3589C7*)(S3589C6*), ABISELECT(448,316), "S3589C1");
    check_base_class_offset(lv, (S3589C8*)(S3589C10*), ABISELECT(448,316), "S3589C1");
    /*is_ambiguous_... S3589C1::S3589C12 */ AMB_check_base_class_offset(lv, (S3589C8*)(S3589C12*), ABISELECT(448,316), "S3589C1");
    check_base_class_offset(lv, (S3589C8*)(S3589C12*)(S3589C19*)(S3589C18*), ABISELECT(448,316), "S3589C1");
    /*is_ambiguous_... S3589C1::S3589C7 */ AMB_check_base_class_offset(lv, (S3589C8*)(S3589C7*), ABISELECT(448,316), "S3589C1");
    /*is_ambiguous_... S3589C7::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C7*)(S3589C6*), ABISELECT(352,248), "S3589C1");
    check_base_class_offset(lv, (S3589C9_nt*)(S3589C7*)(S3589C6*), ABISELECT(368,260), "S3589C1");
    /*is_ambiguous_... S3589C7::S3589C2 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C2*)(S3589C7*)(S3589C6*), ABISELECT(392,276), "S3589C1");
    /*is_ambiguous_... S3589C7::S3589C2 */ AMB_check_base_class_offset(lv, (S3589C2*)(S3589C7*)(S3589C6*), ABISELECT(392,276), "S3589C1");
    check_base_class_offset(lv, (S3589C7*)(S3589C6*), ABISELECT(352,248), "S3589C1");
    /*is_ambiguous_... S3589C6::S3589C8 */ AMB_check_base_class_offset(lv, (S3589C8*)(S3589C6*), ABISELECT(440,312), "S3589C1");
    /*is_ambiguous_... S3589C6::S3589C9_nt */ AMB_check_base_class_offset(lv, (S3589C9_nt*)(S3589C6*), ABISELECT(504,360), "S3589C1");
    check_base_class_offset(lv, (S3589C9_nt*)(S3589C14*), ABISELECT(504,360), "S3589C1");
    check_base_class_offset(lv, (S3589C6*)(S3589C5*), ABISELECT(352,248), "S3589C1");
    /*is_ambiguous_... S3589C10::S3589C11 */ AMB_check_base_class_offset(lv, (S3589C11*)(S3589C10*), ABISELECT(528,376), "S3589C1");
    /*is_ambiguous_... S3589C1::S3589C12 */ AMB_check_base_class_offset(lv, (S3589C13_nt*)(S3589C12*), ABISELECT(560,392), "S3589C1");
    /*is_ambiguous_... S3589C1::S3589C12 */ AMB_check_base_class_offset(lv, (S3589C14*)(S3589C12*), ABISELECT(584,412), "S3589C1");
    check_base_class_offset(lv, (S3589C14*)(S3589C12*)(S3589C19*)(S3589C18*), ABISELECT(584,412), "S3589C1");
    /*is_ambiguous_... S3589C1::S3589C12 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C12*), ABISELECT(544,380), "S3589C1");
    /*is_ambiguous_... S3589C1::S3589C12 */ AMB_check_base_class_offset(lv, (S3589C11*)(S3589C12*), ABISELECT(608,424), "S3589C1");
    check_base_class_offset(lv, (S3589C11*)(S3589C12*)(S3589C19*)(S3589C18*), ABISELECT(608,424), "S3589C1");
    check_base_class_offset(lv, (S3589C12*)(S3589C10*), ABISELECT(544,380), "S3589C1");
    check_base_class_offset(lv, (S3589C10*)(S3589C5*), ABISELECT(528,376), "S3589C1");
    check_base_class_offset(lv, (S3589C8*)(S3589C15*)(S3589C5*), ABISELECT(32,28), "S3589C1");
    check_base_class_offset(lv, (S3589C16*)(S3589C15*)(S3589C5*), ABISELECT(616,428), "S3589C1");
    check_base_class_offset(lv, (S3589C16*)(S3589C18*), ABISELECT(616,428), "S3589C1");
    check_base_class_offset(lv, (S3589C16*)(S3589C15*)(S3589C18*), ABISELECT(616,428), "S3589C1");
    check_base_class_offset(lv, (S3589C15*)(S3589C5*), ABISELECT(32,28), "S3589C1");
    check_base_class_offset(lv, (S3589C5*), ABISELECT(32,28), "S3589C1");
    /*is_ambiguous_... S3589C1::S3589C16 */ AMB_check_base_class_offset(lv, (S3589C16*), ABISELECT(208,156), "S3589C1");
    check_base_class_offset(lv, (S3589C8*)(S3589C15*)(S3589C18*), ABISELECT(224,168), "S3589C1");
    check_base_class_offset(lv, (S3589C15*)(S3589C18*), ABISELECT(224,168), "S3589C1");
    check_base_class_offset(lv, (S3589C13_nt*)(S3589C12*)(S3589C19*)(S3589C18*), ABISELECT(272,196), "S3589C1");
    /*is_ambiguous_... S3589C12::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C12*)(S3589C19*)(S3589C18*), ABISELECT(256,184), "S3589C1");
    check_base_class_offset(lv, (S3589C12*)(S3589C19*)(S3589C18*), ABISELECT(256,184), "S3589C1");
    check_base_class_offset(lv, (S3589C19*)(S3589C18*), ABISELECT(256,184), "S3589C1");
    /*is_ambiguous_... S3589C18::S3589C8 */ AMB_check_base_class_offset(lv, (S3589C8*)(S3589C18*), ABISELECT(336,240), "S3589C1");
    check_base_class_offset(lv, (S3589C18*), ABISELECT(224,168), "S3589C1");
    /*is_ambiguous_... S3589C1::S3589C7 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C7*), ABISELECT(632,440), "S3589C1");
    /*is_ambiguous_... S3589C1::S3589C7 */ AMB_check_base_class_offset(lv, (S3589C9_nt*)(S3589C7*), ABISELECT(648,452), "S3589C1");
    /*is_ambiguous_... S3589C1::S3589C7 */ AMB_check_base_class_offset(lv, (S3589C3*)(S3589C2*)(S3589C7*), ABISELECT(672,468), "S3589C1");
    /*is_ambiguous_... S3589C1::S3589C7 */ AMB_check_base_class_offset(lv, (S3589C2*)(S3589C7*), ABISELECT(672,468), "S3589C1");
    /*is_ambiguous_... S3589C1::S3589C7 */ AMB_check_base_class_offset(lv, (S3589C7*), ABISELECT(632,440), "S3589C1");
    test_class_info(&lv, &cd_S3589C1);
    dp->~S3589C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3589C1(Test_S3589C1, "S3589C1", ABISELECT(720,504));

#else // __cplusplus

extern void _ZN7S3589C1C1Ev();
extern void _ZN7S3589C1D2Ev();
Name_Map name_map_S3589C1[] = {
  NSPAIR(_ZN7S3589C1C1Ev),
  NSPAIR(_ZN7S3589C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C2;
extern VTBL_ENTRY _ZTI7S3589C2[];
extern  VTBL_ENTRY _ZTV7S3589C2[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C2;
extern VTBL_ENTRY _ZTI7S3589C2[];
extern  VTBL_ENTRY _ZTV7S3589C2[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C8;
extern VTBL_ENTRY _ZTI7S3589C8[];
extern  VTBL_ENTRY _ZTV7S3589C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C8[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C2;
extern VTBL_ENTRY _ZTI7S3589C2[];
extern  VTBL_ENTRY _ZTV7S3589C2[];
extern Class_Descriptor cd_S3589C7;
extern VTBL_ENTRY _ZTI7S3589C7[];
extern  VTBL_ENTRY _ZTV7S3589C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C7[];
extern Class_Descriptor cd_S3589C8;
extern VTBL_ENTRY _ZTI7S3589C8[];
extern  VTBL_ENTRY _ZTV7S3589C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C8[];
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
extern Class_Descriptor cd_S3589C6;
extern VTBL_ENTRY _ZTI7S3589C6[];
extern  VTBL_ENTRY _ZTV7S3589C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C6[];
extern Class_Descriptor cd_S3589C11;
extern VTBL_ENTRY _ZTI8S3589C11[];
extern  VTBL_ENTRY _ZTV8S3589C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C11[];
extern Class_Descriptor cd_S3589C13_nt;
extern VTBL_ENTRY _ZTI11S3589C13_nt[];
extern Class_Descriptor cd_S3589C14;
extern VTBL_ENTRY _ZTI8S3589C14[];
extern  VTBL_ENTRY _ZTV8S3589C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C14[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C11;
extern VTBL_ENTRY _ZTI8S3589C11[];
extern  VTBL_ENTRY _ZTV8S3589C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C11[];
extern Class_Descriptor cd_S3589C12;
extern VTBL_ENTRY _ZTI8S3589C12[];
extern  VTBL_ENTRY _ZTV8S3589C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C12[];
extern Class_Descriptor cd_S3589C10;
extern VTBL_ENTRY _ZTI8S3589C10[];
extern  VTBL_ENTRY _ZTV8S3589C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C10[];
extern Class_Descriptor cd_S3589C8;
extern VTBL_ENTRY _ZTI7S3589C8[];
extern  VTBL_ENTRY _ZTV7S3589C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C8[];
extern Class_Descriptor cd_S3589C16;
extern VTBL_ENTRY _ZTI8S3589C16[];
extern  VTBL_ENTRY _ZTV8S3589C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C16[];
extern Class_Descriptor cd_S3589C15;
extern VTBL_ENTRY _ZTI8S3589C15[];
extern  VTBL_ENTRY _ZTV8S3589C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C15[];
extern Class_Descriptor cd_S3589C5;
extern VTBL_ENTRY _ZTI7S3589C5[];
extern  VTBL_ENTRY _ZTV7S3589C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C5[];
extern Class_Descriptor cd_S3589C16;
extern VTBL_ENTRY _ZTI8S3589C16[];
extern  VTBL_ENTRY _ZTV8S3589C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C16[];
extern Class_Descriptor cd_S3589C8;
extern VTBL_ENTRY _ZTI7S3589C8[];
extern  VTBL_ENTRY _ZTV7S3589C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C8[];
extern Class_Descriptor cd_S3589C15;
extern VTBL_ENTRY _ZTI8S3589C15[];
extern  VTBL_ENTRY _ZTV8S3589C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C15[];
extern Class_Descriptor cd_S3589C13_nt;
extern VTBL_ENTRY _ZTI11S3589C13_nt[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C12;
extern VTBL_ENTRY _ZTI8S3589C12[];
extern  VTBL_ENTRY _ZTV8S3589C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C12[];
extern Class_Descriptor cd_S3589C19;
extern VTBL_ENTRY _ZTI8S3589C19[];
extern  VTBL_ENTRY _ZTV8S3589C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C19[];
extern Class_Descriptor cd_S3589C8;
extern VTBL_ENTRY _ZTI7S3589C8[];
extern  VTBL_ENTRY _ZTV7S3589C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C8[];
extern Class_Descriptor cd_S3589C18;
extern VTBL_ENTRY _ZTI8S3589C18[];
extern  VTBL_ENTRY _ZTV8S3589C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3589C18[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C2;
extern VTBL_ENTRY _ZTI7S3589C2[];
extern  VTBL_ENTRY _ZTV7S3589C2[];
extern Class_Descriptor cd_S3589C7;
extern VTBL_ENTRY _ZTI7S3589C7[];
extern  VTBL_ENTRY _ZTV7S3589C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C7[];
static Base_Class bases_S3589C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3589C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    -1, //immediately_derived
  1, 0},
  {&cd_S3589C3,    ABISELECT(456,320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3589C2,    ABISELECT(456,320), //bcp->offset
    91, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    62, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(488,348), //bcp->offset
    96, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    63, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3589C8,    ABISELECT(448,316), //bcp->offset
    84, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    61, //bcp->index_in_construction_vtbl_array
    93, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(352,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
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3589C9_nt,    ABISELECT(368,260), //bcp->offset
    70, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    64, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3589C3,    ABISELECT(392,276), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3589C2,    ABISELECT(392,276), //bcp->offset
    74, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    65, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3589C7,    ABISELECT(352,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    81, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3589C8,    ABISELECT(440,312), //bcp->offset
    78, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    66, //bcp->index_in_construction_vtbl_array
    85, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3589C9_nt,    ABISELECT(504,360), //bcp->offset
    101, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    67, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S3589C6,    ABISELECT(352,248), //bcp->offset
    61, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    60, //bcp->index_in_construction_vtbl_array
    80, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S3589C11,    ABISELECT(528,376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    97, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S3589C13_nt,    ABISELECT(560,392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3589C14,    ABISELECT(584,412), //bcp->offset
    129, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    70, //bcp->index_in_construction_vtbl_array
    113, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(544,380), //bcp->offset
    -1, //bcp->virtual_function_table_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
    19, //immediately_derived
  0, 0},
  {&cd_S3589C11,    ABISELECT(608,424), //bcp->offset
    135, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    71, //bcp->index_in_construction_vtbl_array
    115, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S3589C12,    ABISELECT(544,380), //bcp->offset
    118, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    69, //bcp->index_in_construction_vtbl_array
    106, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S3589C10,    ABISELECT(528,376), //bcp->offset
    106, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    68, //bcp->index_in_construction_vtbl_array
    96, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S3589C8,    ABISELECT(32,28), //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
    27, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S3589C16,    ABISELECT(616,428), //bcp->offset
    141, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    72, //bcp->index_in_construction_vtbl_array
    117, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S3589C15,    ABISELECT(32,28), //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
    28, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S3589C5,    ABISELECT(32,28), //bcp->offset
    15, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    59, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3589C16,    ABISELECT(208,156), //bcp->offset
    29, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    73, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3589C8,    ABISELECT(224,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S3589C15,    ABISELECT(224,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S3589C13_nt,    ABISELECT(272,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
    30, //immediately_derived
  0, 0},
  {&cd_S3589C3,    ABISELECT(256,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
    33, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S3589C12,    ABISELECT(256,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S3589C19,    ABISELECT(256,184), //bcp->offset
    45, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    75, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S3589C8,    ABISELECT(336,240), //bcp->offset
    55, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    76, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S3589C18,    ABISELECT(224,168), //bcp->offset
    34, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    74, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3589C3,    ABISELECT(632,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
    20, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S3589C9_nt,    ABISELECT(648,452), //bcp->offset
    155, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    78, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S3589C3,    ABISELECT(672,468), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S3589C2,    ABISELECT(672,468), //bcp->offset
    159, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    79, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S3589C7,    ABISELECT(632,440), //bcp->offset
    147, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    77, //bcp->index_in_construction_vtbl_array
    119, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3589C1[];
extern void _ZN7S3589C1D1Ev();
extern void _ZN7S3589C1D0Ev();
extern void ABISELECT(_ZThn32_N7S3589C1D1Ev,_ZThn28_N7S3589C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S3589C1D0Ev,_ZThn28_N7S3589C1D0Ev)();
extern void ABISELECT(_ZThn208_N7S3589C1D1Ev,_ZThn156_N7S3589C1D1Ev)();
extern void ABISELECT(_ZThn208_N7S3589C1D0Ev,_ZThn156_N7S3589C1D0Ev)();
extern void ABISELECT(_ZThn224_N7S3589C1D1Ev,_ZThn168_N7S3589C1D1Ev)();
extern void ABISELECT(_ZThn224_N7S3589C1D0Ev,_ZThn168_N7S3589C1D0Ev)();
extern void ABISELECT(_ZThn256_N7S3589C1D1Ev,_ZThn184_N7S3589C1D1Ev)();
extern void ABISELECT(_ZThn256_N7S3589C1D0Ev,_ZThn184_N7S3589C1D0Ev)();
extern void ABISELECT(_ZThn336_N7S3589C1D1Ev,_ZThn240_N7S3589C1D1Ev)();
extern void ABISELECT(_ZThn336_N7S3589C1D0Ev,_ZThn240_N7S3589C1D0Ev)();
extern void ABISELECT(_ZTv0_n56_N7S3589C1D1Ev,_ZTv0_n28_N7S3589C1D1Ev)();
extern void ABISELECT(_ZThn352_N7S3589C1D1Ev,_ZThn248_N7S3589C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S3589C1D0Ev,_ZTv0_n28_N7S3589C1D0Ev)();
extern void ABISELECT(_ZThn352_N7S3589C1D0Ev,_ZThn248_N7S3589C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n56_N7S3589C1D1Ev,_ZTvn12_n28_N7S3589C1D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N7S3589C1D0Ev,_ZTvn12_n28_N7S3589C1D0Ev)();
extern void ABISELECT(_ZTvn40_n56_N7S3589C1D1Ev,_ZTvn28_n28_N7S3589C1D1Ev)();
extern void ABISELECT(_ZTvn40_n56_N7S3589C1D0Ev,_ZTvn28_n28_N7S3589C1D0Ev)();
extern void ABISELECT(_ZTvn88_n56_N7S3589C1D1Ev,_ZTvn64_n28_N7S3589C1D1Ev)();
extern void ABISELECT(_ZTvn88_n56_N7S3589C1D0Ev,_ZTvn64_n28_N7S3589C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3589C1D1Ev,_ZTv0_n20_N7S3589C1D1Ev)();
extern void ABISELECT(_ZThn448_N7S3589C1D1Ev,_ZThn316_N7S3589C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3589C1D0Ev,_ZTv0_n20_N7S3589C1D0Ev)();
extern void ABISELECT(_ZThn448_N7S3589C1D0Ev,_ZThn316_N7S3589C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C1D1Ev,_ZTv0_n12_N7S3589C1D1Ev)();
extern void ABISELECT(_ZThn456_N7S3589C1D1Ev,_ZThn320_N7S3589C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C1D0Ev,_ZTv0_n12_N7S3589C1D0Ev)();
extern void ABISELECT(_ZThn456_N7S3589C1D0Ev,_ZThn320_N7S3589C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C1D1Ev,_ZTv0_n12_N7S3589C1D1Ev)();
extern void ABISELECT(_ZThn488_N7S3589C1D1Ev,_ZThn348_N7S3589C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C1D0Ev,_ZTv0_n12_N7S3589C1D0Ev)();
extern void ABISELECT(_ZThn488_N7S3589C1D0Ev,_ZThn348_N7S3589C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C1D1Ev,_ZTv0_n12_N7S3589C1D1Ev)();
extern void ABISELECT(_ZThn504_N7S3589C1D1Ev,_ZThn360_N7S3589C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C1D0Ev,_ZTv0_n12_N7S3589C1D0Ev)();
extern void ABISELECT(_ZThn504_N7S3589C1D0Ev,_ZThn360_N7S3589C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S3589C1D1Ev,_ZTv0_n40_N7S3589C1D1Ev)();
extern void ABISELECT(_ZThn528_N7S3589C1D1Ev,_ZThn376_N7S3589C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S3589C1D0Ev,_ZTv0_n40_N7S3589C1D0Ev)();
extern void ABISELECT(_ZThn528_N7S3589C1D0Ev,_ZThn376_N7S3589C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S3589C1D1Ev,_ZTv0_n36_N7S3589C1D1Ev)();
extern void ABISELECT(_ZThn544_N7S3589C1D1Ev,_ZThn380_N7S3589C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S3589C1D0Ev,_ZTv0_n36_N7S3589C1D0Ev)();
extern void ABISELECT(_ZThn544_N7S3589C1D0Ev,_ZThn380_N7S3589C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3589C1D1Ev,_ZTv0_n16_N7S3589C1D1Ev)();
extern void ABISELECT(_ZThn584_N7S3589C1D1Ev,_ZThn412_N7S3589C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3589C1D0Ev,_ZTv0_n16_N7S3589C1D0Ev)();
extern void ABISELECT(_ZThn584_N7S3589C1D0Ev,_ZThn412_N7S3589C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3589C1D1Ev,_ZTv0_n16_N7S3589C1D1Ev)();
extern void ABISELECT(_ZThn608_N7S3589C1D1Ev,_ZThn424_N7S3589C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3589C1D0Ev,_ZTv0_n16_N7S3589C1D0Ev)();
extern void ABISELECT(_ZThn608_N7S3589C1D0Ev,_ZThn424_N7S3589C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3589C1D1Ev,_ZTv0_n16_N7S3589C1D1Ev)();
extern void ABISELECT(_ZThn616_N7S3589C1D1Ev,_ZThn428_N7S3589C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3589C1D0Ev,_ZTv0_n16_N7S3589C1D0Ev)();
extern void ABISELECT(_ZThn616_N7S3589C1D0Ev,_ZThn428_N7S3589C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3589C1D1Ev,_ZTv0_n24_N7S3589C1D1Ev)();
extern void ABISELECT(_ZThn632_N7S3589C1D1Ev,_ZThn440_N7S3589C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3589C1D0Ev,_ZTv0_n24_N7S3589C1D0Ev)();
extern void ABISELECT(_ZThn632_N7S3589C1D0Ev,_ZThn440_N7S3589C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n48_N7S3589C1D1Ev,_ZTvn12_n24_N7S3589C1D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N7S3589C1D0Ev,_ZTvn12_n24_N7S3589C1D0Ev)();
extern void ABISELECT(_ZTvn40_n48_N7S3589C1D1Ev,_ZTvn28_n24_N7S3589C1D1Ev)();
extern void ABISELECT(_ZTvn40_n48_N7S3589C1D0Ev,_ZTvn28_n24_N7S3589C1D0Ev)();
static  VTBL_ENTRY vtc_S3589C1[] = {
  ABISELECT(632,440),
  ABISELECT(616,428),
  ABISELECT(608,424),
  ABISELECT(584,412),
  ABISELECT(544,380),
  ABISELECT(528,376),
  ABISELECT(504,360),
  ABISELECT(488,348),
  ABISELECT(456,320),
  ABISELECT(448,316),
  ABISELECT(352,248),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C1[0]),
  (VTBL_ENTRY)&_ZN7S3589C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C1D0Ev,
  ABISELECT(576,396),
  ABISELECT(552,384),
  ABISELECT(512,352),
  ABISELECT(496,348),
  ABISELECT(472,332),
  ABISELECT(416,288),
  ABISELECT(320,220),
  ABISELECT(584,400),
  ABISELECT(456,320),
  ABISELECT(424,292),
  ABISELECT(-32,-28),
  (VTBL_ENTRY)&(_ZTI7S3589C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S3589C1D1Ev,_ZThn28_N7S3589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S3589C1D0Ev,_ZThn28_N7S3589C1D0Ev),
  ABISELECT(280,192),
  ABISELECT(-208,-156),
  (VTBL_ENTRY)&(_ZTI7S3589C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N7S3589C1D1Ev,_ZThn156_N7S3589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N7S3589C1D0Ev,_ZThn156_N7S3589C1D0Ev),
  ABISELECT(384,256),
  ABISELECT(224,148),
  ABISELECT(280,192),
  ABISELECT(360,244),
  ABISELECT(392,260),
  ABISELECT(264,180),
  ABISELECT(232,152),
  ABISELECT(-224,-168),
  (VTBL_ENTRY)&(_ZTI7S3589C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S3589C1D1Ev,_ZThn168_N7S3589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S3589C1D0Ev,_ZThn168_N7S3589C1D0Ev),
  ABISELECT(352,240),
  ABISELECT(232,164),
  ABISELECT(200,136),
  ABISELECT(192,132),
  ABISELECT(248,176),
  ABISELECT(328,228),
  ABISELECT(-256,-184),
  (VTBL_ENTRY)&(_ZTI7S3589C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S3589C1D1Ev,_ZThn184_N7S3589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S3589C1D0Ev,_ZThn184_N7S3589C1D0Ev),
  ABISELECT(152,108),
  ABISELECT(120,80),
  ABISELECT(-336,-240),
  (VTBL_ENTRY)&(_ZTI7S3589C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn336_N7S3589C1D1Ev,_ZThn240_N7S3589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn336_N7S3589C1D0Ev,_ZThn240_N7S3589C1D0Ev),
  ABISELECT(-352,-248),
  ABISELECT(152,112),
  ABISELECT(136,100),
  ABISELECT(104,72),
  ABISELECT(96,68),
  ABISELECT(-352,-248),
  (VTBL_ENTRY)&(_ZTI7S3589C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3589C1D1Ev,_ZTv0_n28_N7S3589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3589C1D0Ev,_ZTv0_n28_N7S3589C1D0Ev),
  ABISELECT(-368,-260),
  (VTBL_ENTRY)&(_ZTI7S3589C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N7S3589C1D1Ev,_ZTvn12_n28_N7S3589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N7S3589C1D0Ev,_ZTvn12_n28_N7S3589C1D0Ev),
  ABISELECT(-392,-276),
  (VTBL_ENTRY)&(_ZTI7S3589C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n56_N7S3589C1D1Ev,_ZTvn28_n28_N7S3589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n56_N7S3589C1D0Ev,_ZTvn28_n28_N7S3589C1D0Ev),
  ABISELECT(48,36),
  ABISELECT(16,8),
  ABISELECT(-440,-312),
  (VTBL_ENTRY)&(_ZTI7S3589C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n56_N7S3589C1D1Ev,_ZTvn64_n28_N7S3589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n56_N7S3589C1D0Ev,_ZTvn64_n28_N7S3589C1D0Ev),
  ABISELECT(-448,-316),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-448,-316),
  (VTBL_ENTRY)&(_ZTI7S3589C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3589C1D1Ev,_ZTv0_n20_N7S3589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3589C1D0Ev,_ZTv0_n20_N7S3589C1D0Ev),
  ABISELECT(-456,-320),
  ABISELECT(-456,-320),
  (VTBL_ENTRY)&(_ZTI7S3589C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C1D1Ev,_ZTv0_n12_N7S3589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C1D0Ev,_ZTv0_n12_N7S3589C1D0Ev),
  ABISELECT(-488,-348),
  ABISELECT(-488,-348),
  (VTBL_ENTRY)&(_ZTI7S3589C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C1D1Ev,_ZTv0_n12_N7S3589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C1D0Ev,_ZTv0_n12_N7S3589C1D0Ev),
  ABISELECT(-504,-360),
  ABISELECT(-504,-360),
  (VTBL_ENTRY)&(_ZTI7S3589C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C1D1Ev,_ZTv0_n12_N7S3589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C1D0Ev,_ZTv0_n12_N7S3589C1D0Ev),
  ABISELECT(-528,-376),
  ABISELECT(80,48),
  ABISELECT(-24,-16),
  ABISELECT(56,36),
  ABISELECT(16,4),
  ABISELECT(-72,-56),
  ABISELECT(-80,-60),
  ABISELECT(-40,-28),
  ABISELECT(-528,-376),
  (VTBL_ENTRY)&(_ZTI7S3589C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S3589C1D1Ev,_ZTv0_n40_N7S3589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S3589C1D0Ev,_ZTv0_n40_N7S3589C1D0Ev),
  ABISELECT(-544,-380),
  ABISELECT(64,44),
  ABISELECT(-56,-32),
  ABISELECT(-88,-60),
  ABISELECT(-96,-64),
  ABISELECT(-40,-20),
  ABISELECT(40,32),
  ABISELECT(-544,-380),
  (VTBL_ENTRY)&(_ZTI7S3589C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3589C1D1Ev,_ZTv0_n36_N7S3589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3589C1D0Ev,_ZTv0_n36_N7S3589C1D0Ev),
  ABISELECT(-584,-412),
  ABISELECT(-80,-52),
  ABISELECT(-584,-412),
  (VTBL_ENTRY)&(_ZTI7S3589C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3589C1D1Ev,_ZTv0_n16_N7S3589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3589C1D0Ev,_ZTv0_n16_N7S3589C1D0Ev),
  ABISELECT(-608,-424),
  ABISELECT(-120,-76),
  ABISELECT(-608,-424),
  (VTBL_ENTRY)&(_ZTI7S3589C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3589C1D1Ev,_ZTv0_n16_N7S3589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3589C1D0Ev,_ZTv0_n16_N7S3589C1D0Ev),
  ABISELECT(-616,-428),
  ABISELECT(-128,-80),
  ABISELECT(-616,-428),
  (VTBL_ENTRY)&(_ZTI7S3589C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3589C1D1Ev,_ZTv0_n16_N7S3589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3589C1D0Ev,_ZTv0_n16_N7S3589C1D0Ev),
  ABISELECT(-632,-440),
  ABISELECT(-144,-92),
  ABISELECT(-176,-120),
  ABISELECT(-184,-124),
  ABISELECT(-632,-440),
  (VTBL_ENTRY)&(_ZTI7S3589C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3589C1D1Ev,_ZTv0_n24_N7S3589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3589C1D0Ev,_ZTv0_n24_N7S3589C1D0Ev),
  ABISELECT(-648,-452),
  (VTBL_ENTRY)&(_ZTI7S3589C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S3589C1D1Ev,_ZTvn12_n24_N7S3589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S3589C1D0Ev,_ZTvn12_n24_N7S3589C1D0Ev),
  ABISELECT(-672,-468),
  (VTBL_ENTRY)&(_ZTI7S3589C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n48_N7S3589C1D1Ev,_ZTvn28_n24_N7S3589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n48_N7S3589C1D0Ev,_ZTvn28_n24_N7S3589C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S3589C1[];
extern void _ZN7S3589C5D1Ev();
extern void _ZN7S3589C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3589C5__7S3589C1[] = {
  ABISELECT(576,396),
  ABISELECT(552,384),
  ABISELECT(512,352),
  ABISELECT(496,348),
  ABISELECT(472,332),
  ABISELECT(416,288),
  ABISELECT(320,220),
  ABISELECT(584,400),
  ABISELECT(456,320),
  ABISELECT(424,292),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C5[0]),
  (VTBL_ENTRY)&_ZN7S3589C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C5D0Ev,
};
extern void _ZN8S3589C15D1Ev();
extern void _ZN8S3589C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C157S3589C5__7S3589C1[] = {
  ABISELECT(584,400),
  ABISELECT(456,320),
  ABISELECT(424,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C15[0]),
  (VTBL_ENTRY)&_ZN8S3589C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C15D0Ev,
};
extern void _ZN7S3589C8D1Ev();
extern void _ZN7S3589C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3589C88S3589C157S3589C5__A2__7S3589C1[] = {
  ABISELECT(456,320),
  ABISELECT(424,292),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&_ZN7S3589C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn424_N7S3589C8D1Ev,_ZThn292_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn424_N7S3589C8D0Ev,_ZThn292_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__7S3589C88S3589C157S3589C5__A2__7S3589C1[] = {
  ABISELECT(-424,-292),
  ABISELECT(-424,-292),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn456_N7S3589C8D1Ev,_ZThn320_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn456_N7S3589C8D0Ev,_ZThn320_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S3589C88S3589C157S3589C5__A2__7S3589C1[] = {
  ABISELECT(-456,-320),
  ABISELECT(-456,-320),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C15D1Ev,_ZTv0_n12_N8S3589C15D1Ev)();
extern void ABISELECT(_ZThn424_N8S3589C15D1Ev,_ZThn292_N8S3589C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C15D0Ev,_ZTv0_n12_N8S3589C15D0Ev)();
extern void ABISELECT(_ZThn424_N8S3589C15D0Ev,_ZThn292_N8S3589C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__8S3589C157S3589C5__7S3589C1[] = {
  ABISELECT(-424,-292),
  ABISELECT(-424,-292),
  (VTBL_ENTRY)&(_ZTI8S3589C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C15D1Ev,_ZTv0_n12_N8S3589C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C15D0Ev,_ZTv0_n12_N8S3589C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C15D1Ev,_ZTv0_n12_N8S3589C15D1Ev)();
extern void ABISELECT(_ZThn456_N8S3589C15D1Ev,_ZThn320_N8S3589C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C15D0Ev,_ZTv0_n12_N8S3589C15D0Ev)();
extern void ABISELECT(_ZThn456_N8S3589C15D0Ev,_ZThn320_N8S3589C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S3589C157S3589C5__7S3589C1[] = {
  ABISELECT(-456,-320),
  ABISELECT(-456,-320),
  (VTBL_ENTRY)&(_ZTI8S3589C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C15D1Ev,_ZTv0_n12_N8S3589C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C15D0Ev,_ZTv0_n12_N8S3589C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3589C15D1Ev,_ZTv0_n16_N8S3589C15D1Ev)();
extern void ABISELECT(_ZThn584_N8S3589C15D1Ev,_ZThn400_N8S3589C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C15D0Ev,_ZTv0_n16_N8S3589C15D0Ev)();
extern void ABISELECT(_ZThn584_N8S3589C15D0Ev,_ZThn400_N8S3589C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C16__8S3589C157S3589C5__7S3589C1[] = {
  ABISELECT(-584,-400),
  ABISELECT(-128,-80),
  ABISELECT(-584,-400),
  (VTBL_ENTRY)&(_ZTI8S3589C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C15D1Ev,_ZTv0_n16_N8S3589C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C15D0Ev,_ZTv0_n16_N8S3589C15D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N7S3589C5D1Ev,_ZTv0_n28_N7S3589C5D1Ev)();
extern void ABISELECT(_ZThn320_N7S3589C5D1Ev,_ZThn220_N7S3589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S3589C5D0Ev,_ZTv0_n28_N7S3589C5D0Ev)();
extern void ABISELECT(_ZThn320_N7S3589C5D0Ev,_ZThn220_N7S3589C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C6__7S3589C5__7S3589C1[] = {
  ABISELECT(-320,-220),
  ABISELECT(152,112),
  ABISELECT(136,100),
  ABISELECT(104,72),
  ABISELECT(96,68),
  ABISELECT(-320,-220),
  (VTBL_ENTRY)&(_ZTI7S3589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3589C5D1Ev,_ZTv0_n28_N7S3589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3589C5D0Ev,_ZTv0_n28_N7S3589C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S3589C5D1Ev,_ZTv0_n20_N7S3589C5D1Ev)();
extern void ABISELECT(_ZThn416_N7S3589C5D1Ev,_ZThn288_N7S3589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3589C5D0Ev,_ZTv0_n20_N7S3589C5D0Ev)();
extern void ABISELECT(_ZThn416_N7S3589C5D0Ev,_ZThn288_N7S3589C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C8__7S3589C5__7S3589C1[] = {
  ABISELECT(-416,-288),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-416,-288),
  (VTBL_ENTRY)&(_ZTI7S3589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3589C5D1Ev,_ZTv0_n20_N7S3589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3589C5D0Ev,_ZTv0_n20_N7S3589C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C5D1Ev,_ZTv0_n12_N7S3589C5D1Ev)();
extern void ABISELECT(_ZThn424_N7S3589C5D1Ev,_ZThn292_N7S3589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C5D0Ev,_ZTv0_n12_N7S3589C5D0Ev)();
extern void ABISELECT(_ZThn424_N7S3589C5D0Ev,_ZThn292_N7S3589C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__7S3589C5__7S3589C1[] = {
  ABISELECT(-424,-292),
  ABISELECT(-424,-292),
  (VTBL_ENTRY)&(_ZTI7S3589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C5D1Ev,_ZTv0_n12_N7S3589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C5D0Ev,_ZTv0_n12_N7S3589C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C5D1Ev,_ZTv0_n12_N7S3589C5D1Ev)();
extern void ABISELECT(_ZThn456_N7S3589C5D1Ev,_ZThn320_N7S3589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C5D0Ev,_ZTv0_n12_N7S3589C5D0Ev)();
extern void ABISELECT(_ZThn456_N7S3589C5D0Ev,_ZThn320_N7S3589C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S3589C5__7S3589C1[] = {
  ABISELECT(-456,-320),
  ABISELECT(-456,-320),
  (VTBL_ENTRY)&(_ZTI7S3589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C5D1Ev,_ZTv0_n12_N7S3589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C5D0Ev,_ZTv0_n12_N7S3589C5D0Ev),
};
extern void ABISELECT(_ZTvn16_n56_N7S3589C5D1Ev,_ZTvn12_n28_N7S3589C5D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N7S3589C5D0Ev,_ZTvn12_n28_N7S3589C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt7S3589C77S3589C6__7S3589C5__7S3589C1[] = {
  ABISELECT(-336,-232),
  (VTBL_ENTRY)&(_ZTI7S3589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N7S3589C5D1Ev,_ZTvn12_n28_N7S3589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N7S3589C5D0Ev,_ZTvn12_n28_N7S3589C5D0Ev),
};
extern void ABISELECT(_ZTvn40_n56_N7S3589C5D1Ev,_ZTvn28_n28_N7S3589C5D1Ev)();
extern void ABISELECT(_ZTvn40_n56_N7S3589C5D0Ev,_ZTvn28_n28_N7S3589C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C27S3589C77S3589C6__A1__7S3589C5__7S3589C1[] = {
  ABISELECT(-360,-248),
  (VTBL_ENTRY)&(_ZTI7S3589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n56_N7S3589C5D1Ev,_ZTvn28_n28_N7S3589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n56_N7S3589C5D0Ev,_ZTvn28_n28_N7S3589C5D0Ev),
};
extern void ABISELECT(_ZTvn88_n56_N7S3589C5D1Ev,_ZTvn64_n28_N7S3589C5D1Ev)();
extern void ABISELECT(_ZTvn88_n56_N7S3589C5D0Ev,_ZTvn64_n28_N7S3589C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C87S3589C6__A1__7S3589C5__7S3589C1[] = {
  ABISELECT(48,36),
  ABISELECT(16,8),
  ABISELECT(-408,-284),
  (VTBL_ENTRY)&(_ZTI7S3589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n56_N7S3589C5D1Ev,_ZTvn64_n28_N7S3589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n56_N7S3589C5D0Ev,_ZTvn64_n28_N7S3589C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C5D1Ev,_ZTv0_n12_N7S3589C5D1Ev)();
extern void ABISELECT(_ZThn472_N7S3589C5D1Ev,_ZThn332_N7S3589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C5D0Ev,_ZTv0_n12_N7S3589C5D0Ev)();
extern void ABISELECT(_ZThn472_N7S3589C5D0Ev,_ZThn332_N7S3589C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__A1__7S3589C5__7S3589C1[] = {
  ABISELECT(-472,-332),
  ABISELECT(-472,-332),
  (VTBL_ENTRY)&(_ZTI7S3589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C5D1Ev,_ZTv0_n12_N7S3589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C5D0Ev,_ZTv0_n12_N7S3589C5D0Ev),
};
extern void ABISELECT(_ZTv0_n80_N7S3589C5D1Ev,_ZTv0_n40_N7S3589C5D1Ev)();
extern void ABISELECT(_ZThn496_N7S3589C5D1Ev,_ZThn348_N7S3589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S3589C5D0Ev,_ZTv0_n40_N7S3589C5D0Ev)();
extern void ABISELECT(_ZThn496_N7S3589C5D0Ev,_ZThn348_N7S3589C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C10__7S3589C5__7S3589C1[] = {
  ABISELECT(-496,-348),
  ABISELECT(80,48),
  ABISELECT(-24,-16),
  ABISELECT(56,36),
  ABISELECT(16,4),
  ABISELECT(-72,-56),
  ABISELECT(-80,-60),
  ABISELECT(-40,-28),
  ABISELECT(-496,-348),
  (VTBL_ENTRY)&(_ZTI7S3589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S3589C5D1Ev,_ZTv0_n40_N7S3589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S3589C5D0Ev,_ZTv0_n40_N7S3589C5D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N7S3589C5D1Ev,_ZTv0_n36_N7S3589C5D1Ev)();
extern void ABISELECT(_ZThn512_N7S3589C5D1Ev,_ZThn352_N7S3589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S3589C5D0Ev,_ZTv0_n36_N7S3589C5D0Ev)();
extern void ABISELECT(_ZThn512_N7S3589C5D0Ev,_ZThn352_N7S3589C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C12__7S3589C5__7S3589C1[] = {
  ABISELECT(-512,-352),
  ABISELECT(64,44),
  ABISELECT(-56,-32),
  ABISELECT(-88,-60),
  ABISELECT(-96,-64),
  ABISELECT(-40,-20),
  ABISELECT(40,32),
  ABISELECT(-512,-352),
  (VTBL_ENTRY)&(_ZTI7S3589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3589C5D1Ev,_ZTv0_n36_N7S3589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3589C5D0Ev,_ZTv0_n36_N7S3589C5D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3589C5D1Ev,_ZTv0_n16_N7S3589C5D1Ev)();
extern void ABISELECT(_ZThn552_N7S3589C5D1Ev,_ZThn384_N7S3589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3589C5D0Ev,_ZTv0_n16_N7S3589C5D0Ev)();
extern void ABISELECT(_ZThn552_N7S3589C5D0Ev,_ZThn384_N7S3589C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C14__7S3589C5__7S3589C1[] = {
  ABISELECT(-552,-384),
  ABISELECT(-80,-52),
  ABISELECT(-552,-384),
  (VTBL_ENTRY)&(_ZTI7S3589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3589C5D1Ev,_ZTv0_n16_N7S3589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3589C5D0Ev,_ZTv0_n16_N7S3589C5D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3589C5D1Ev,_ZTv0_n16_N7S3589C5D1Ev)();
extern void ABISELECT(_ZThn576_N7S3589C5D1Ev,_ZThn396_N7S3589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3589C5D0Ev,_ZTv0_n16_N7S3589C5D0Ev)();
extern void ABISELECT(_ZThn576_N7S3589C5D0Ev,_ZThn396_N7S3589C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C11__A1__7S3589C5__7S3589C1[] = {
  ABISELECT(-576,-396),
  ABISELECT(-120,-76),
  ABISELECT(-576,-396),
  (VTBL_ENTRY)&(_ZTI7S3589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3589C5D1Ev,_ZTv0_n16_N7S3589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3589C5D0Ev,_ZTv0_n16_N7S3589C5D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3589C5D1Ev,_ZTv0_n16_N7S3589C5D1Ev)();
extern void ABISELECT(_ZThn584_N7S3589C5D1Ev,_ZThn400_N7S3589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3589C5D0Ev,_ZTv0_n16_N7S3589C5D0Ev)();
extern void ABISELECT(_ZThn584_N7S3589C5D0Ev,_ZThn400_N7S3589C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C16__7S3589C5__7S3589C1[] = {
  ABISELECT(-584,-400),
  ABISELECT(-128,-80),
  ABISELECT(-584,-400),
  (VTBL_ENTRY)&(_ZTI7S3589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3589C5D1Ev,_ZTv0_n16_N7S3589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3589C5D0Ev,_ZTv0_n16_N7S3589C5D0Ev),
};
extern void _ZN8S3589C16D1Ev();
extern void _ZN8S3589C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C16__A__7S3589C1[] = {
  ABISELECT(280,192),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C16[0]),
  (VTBL_ENTRY)&_ZN8S3589C16D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C16D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3589C16D1Ev,_ZTv0_n12_N8S3589C16D1Ev)();
extern void ABISELECT(_ZThn280_N8S3589C16D1Ev,_ZThn192_N8S3589C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C16D0Ev,_ZTv0_n12_N8S3589C16D0Ev)();
extern void ABISELECT(_ZThn280_N8S3589C16D0Ev,_ZThn192_N8S3589C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S3589C16__A__7S3589C1[] = {
  ABISELECT(-280,-192),
  ABISELECT(-280,-192),
  (VTBL_ENTRY)&(_ZTI8S3589C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C16D1Ev,_ZTv0_n12_N8S3589C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C16D0Ev,_ZTv0_n12_N8S3589C16D0Ev),
};
extern void _ZN8S3589C18D1Ev();
extern void _ZN8S3589C18D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C18__7S3589C1[] = {
  ABISELECT(384,256),
  ABISELECT(224,148),
  ABISELECT(280,192),
  ABISELECT(360,244),
  ABISELECT(392,260),
  ABISELECT(264,180),
  ABISELECT(232,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C18[0]),
  (VTBL_ENTRY)&_ZN8S3589C18D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C18D0Ev,
};
extern void _ZN8S3589C15D1Ev();
extern void _ZN8S3589C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C158S3589C18__A1__7S3589C1[] = {
  ABISELECT(392,260),
  ABISELECT(264,180),
  ABISELECT(232,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C15[0]),
  (VTBL_ENTRY)&_ZN8S3589C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C15D0Ev,
};
extern void _ZN7S3589C8D1Ev();
extern void _ZN7S3589C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3589C88S3589C158S3589C18__A3__7S3589C1[] = {
  ABISELECT(264,180),
  ABISELECT(232,152),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&_ZN7S3589C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn232_N7S3589C8D1Ev,_ZThn152_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn232_N7S3589C8D0Ev,_ZThn152_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__7S3589C88S3589C158S3589C18__A3__7S3589C1[] = {
  ABISELECT(-232,-152),
  ABISELECT(-232,-152),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn264_N7S3589C8D1Ev,_ZThn180_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn264_N7S3589C8D0Ev,_ZThn180_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S3589C88S3589C158S3589C18__A3__7S3589C1[] = {
  ABISELECT(-264,-180),
  ABISELECT(-264,-180),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C15D1Ev,_ZTv0_n12_N8S3589C15D1Ev)();
extern void ABISELECT(_ZThn232_N8S3589C15D1Ev,_ZThn152_N8S3589C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C15D0Ev,_ZTv0_n12_N8S3589C15D0Ev)();
extern void ABISELECT(_ZThn232_N8S3589C15D0Ev,_ZThn152_N8S3589C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__8S3589C158S3589C18__A1__7S3589C1[] = {
  ABISELECT(-232,-152),
  ABISELECT(-232,-152),
  (VTBL_ENTRY)&(_ZTI8S3589C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C15D1Ev,_ZTv0_n12_N8S3589C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C15D0Ev,_ZTv0_n12_N8S3589C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C15D1Ev,_ZTv0_n12_N8S3589C15D1Ev)();
extern void ABISELECT(_ZThn264_N8S3589C15D1Ev,_ZThn180_N8S3589C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C15D0Ev,_ZTv0_n12_N8S3589C15D0Ev)();
extern void ABISELECT(_ZThn264_N8S3589C15D0Ev,_ZThn180_N8S3589C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S3589C158S3589C18__A1__7S3589C1[] = {
  ABISELECT(-264,-180),
  ABISELECT(-264,-180),
  (VTBL_ENTRY)&(_ZTI8S3589C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C15D1Ev,_ZTv0_n12_N8S3589C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C15D0Ev,_ZTv0_n12_N8S3589C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3589C15D1Ev,_ZTv0_n16_N8S3589C15D1Ev)();
extern void ABISELECT(_ZThn392_N8S3589C15D1Ev,_ZThn260_N8S3589C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C15D0Ev,_ZTv0_n16_N8S3589C15D0Ev)();
extern void ABISELECT(_ZThn392_N8S3589C15D0Ev,_ZThn260_N8S3589C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C16__8S3589C158S3589C18__A1__7S3589C1[] = {
  ABISELECT(-392,-260),
  ABISELECT(-128,-80),
  ABISELECT(-392,-260),
  (VTBL_ENTRY)&(_ZTI8S3589C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C15D1Ev,_ZTv0_n16_N8S3589C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C15D0Ev,_ZTv0_n16_N8S3589C15D0Ev),
};
extern void _ZN8S3589C19D1Ev();
extern void _ZN8S3589C19D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C198S3589C18__7S3589C1[] = {
  ABISELECT(352,240),
  ABISELECT(232,164),
  ABISELECT(200,136),
  ABISELECT(192,132),
  ABISELECT(248,176),
  ABISELECT(328,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C19[0]),
  (VTBL_ENTRY)&_ZN8S3589C19D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C19D0Ev,
};
extern void _ZN8S3589C12D1Ev();
extern void _ZN8S3589C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C128S3589C198S3589C18__A1__7S3589C1[] = {
  ABISELECT(352,240),
  ABISELECT(232,164),
  ABISELECT(200,136),
  ABISELECT(192,132),
  ABISELECT(248,176),
  ABISELECT(328,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&_ZN8S3589C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C12D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn328_N8S3589C12D1Ev,_ZThn228_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn328_N8S3589C12D0Ev,_ZThn228_N8S3589C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C14__8S3589C128S3589C198S3589C18__A1__7S3589C1[] = {
  ABISELECT(-328,-228),
  ABISELECT(-80,-52),
  ABISELECT(-328,-228),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn248_N8S3589C12D1Ev,_ZThn176_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn248_N8S3589C12D0Ev,_ZThn176_N8S3589C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__8S3589C128S3589C198S3589C18__A1__7S3589C1[] = {
  ABISELECT(-248,-176),
  ABISELECT(-248,-176),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S3589C12D1Ev,_ZTv0_n20_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn192_N8S3589C12D1Ev,_ZThn132_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3589C12D0Ev,_ZTv0_n20_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn192_N8S3589C12D0Ev,_ZThn132_N8S3589C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C8__8S3589C128S3589C198S3589C18__A1__7S3589C1[] = {
  ABISELECT(-192,-132),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-192,-132),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C12D1Ev,_ZTv0_n20_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C12D0Ev,_ZTv0_n20_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn200_N8S3589C12D1Ev,_ZThn136_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn200_N8S3589C12D0Ev,_ZThn136_N8S3589C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__8S3589C128S3589C198S3589C18__A1__7S3589C1[] = {
  ABISELECT(-200,-136),
  ABISELECT(-200,-136),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn232_N8S3589C12D1Ev,_ZThn164_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn232_N8S3589C12D0Ev,_ZThn164_N8S3589C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S3589C128S3589C198S3589C18__A1__7S3589C1[] = {
  ABISELECT(-232,-164),
  ABISELECT(-232,-164),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn352_N8S3589C12D1Ev,_ZThn240_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn352_N8S3589C12D0Ev,_ZThn240_N8S3589C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C11__8S3589C128S3589C198S3589C18__A1__7S3589C1[] = {
  ABISELECT(-352,-240),
  ABISELECT(-120,-76),
  ABISELECT(-352,-240),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3589C19D1Ev,_ZTv0_n16_N8S3589C19D1Ev)();
extern void ABISELECT(_ZThn328_N8S3589C19D1Ev,_ZThn228_N8S3589C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C19D0Ev,_ZTv0_n16_N8S3589C19D0Ev)();
extern void ABISELECT(_ZThn328_N8S3589C19D0Ev,_ZThn228_N8S3589C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C14__8S3589C198S3589C18__7S3589C1[] = {
  ABISELECT(-328,-228),
  ABISELECT(-80,-52),
  ABISELECT(-328,-228),
  (VTBL_ENTRY)&(_ZTI8S3589C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C19D1Ev,_ZTv0_n16_N8S3589C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C19D0Ev,_ZTv0_n16_N8S3589C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C19D1Ev,_ZTv0_n12_N8S3589C19D1Ev)();
extern void ABISELECT(_ZThn248_N8S3589C19D1Ev,_ZThn176_N8S3589C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C19D0Ev,_ZTv0_n12_N8S3589C19D0Ev)();
extern void ABISELECT(_ZThn248_N8S3589C19D0Ev,_ZThn176_N8S3589C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__8S3589C198S3589C18__7S3589C1[] = {
  ABISELECT(-248,-176),
  ABISELECT(-248,-176),
  (VTBL_ENTRY)&(_ZTI8S3589C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C19D1Ev,_ZTv0_n12_N8S3589C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C19D0Ev,_ZTv0_n12_N8S3589C19D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S3589C19D1Ev,_ZTv0_n20_N8S3589C19D1Ev)();
extern void ABISELECT(_ZThn192_N8S3589C19D1Ev,_ZThn132_N8S3589C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3589C19D0Ev,_ZTv0_n20_N8S3589C19D0Ev)();
extern void ABISELECT(_ZThn192_N8S3589C19D0Ev,_ZThn132_N8S3589C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C8__8S3589C198S3589C18__7S3589C1[] = {
  ABISELECT(-192,-132),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-192,-132),
  (VTBL_ENTRY)&(_ZTI8S3589C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C19D1Ev,_ZTv0_n20_N8S3589C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C19D0Ev,_ZTv0_n20_N8S3589C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C19D1Ev,_ZTv0_n12_N8S3589C19D1Ev)();
extern void ABISELECT(_ZThn200_N8S3589C19D1Ev,_ZThn136_N8S3589C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C19D0Ev,_ZTv0_n12_N8S3589C19D0Ev)();
extern void ABISELECT(_ZThn200_N8S3589C19D0Ev,_ZThn136_N8S3589C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__8S3589C198S3589C18__7S3589C1[] = {
  ABISELECT(-200,-136),
  ABISELECT(-200,-136),
  (VTBL_ENTRY)&(_ZTI8S3589C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C19D1Ev,_ZTv0_n12_N8S3589C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C19D0Ev,_ZTv0_n12_N8S3589C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C19D1Ev,_ZTv0_n12_N8S3589C19D1Ev)();
extern void ABISELECT(_ZThn232_N8S3589C19D1Ev,_ZThn164_N8S3589C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C19D0Ev,_ZTv0_n12_N8S3589C19D0Ev)();
extern void ABISELECT(_ZThn232_N8S3589C19D0Ev,_ZThn164_N8S3589C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S3589C198S3589C18__7S3589C1[] = {
  ABISELECT(-232,-164),
  ABISELECT(-232,-164),
  (VTBL_ENTRY)&(_ZTI8S3589C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C19D1Ev,_ZTv0_n12_N8S3589C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C19D0Ev,_ZTv0_n12_N8S3589C19D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3589C19D1Ev,_ZTv0_n16_N8S3589C19D1Ev)();
extern void ABISELECT(_ZThn352_N8S3589C19D1Ev,_ZThn240_N8S3589C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C19D0Ev,_ZTv0_n16_N8S3589C19D0Ev)();
extern void ABISELECT(_ZThn352_N8S3589C19D0Ev,_ZThn240_N8S3589C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C11__8S3589C198S3589C18__7S3589C1[] = {
  ABISELECT(-352,-240),
  ABISELECT(-120,-76),
  ABISELECT(-352,-240),
  (VTBL_ENTRY)&(_ZTI8S3589C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C19D1Ev,_ZTv0_n16_N8S3589C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C19D0Ev,_ZTv0_n16_N8S3589C19D0Ev),
};
extern void _ZN7S3589C8D1Ev();
extern void _ZN7S3589C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3589C88S3589C18__A4__7S3589C1[] = {
  ABISELECT(152,108),
  ABISELECT(120,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&_ZN7S3589C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn120_N7S3589C8D1Ev,_ZThn80_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn120_N7S3589C8D0Ev,_ZThn80_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__7S3589C88S3589C18__A4__7S3589C1[] = {
  ABISELECT(-120,-80),
  ABISELECT(-120,-80),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn152_N7S3589C8D1Ev,_ZThn108_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn152_N7S3589C8D0Ev,_ZThn108_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S3589C88S3589C18__A4__7S3589C1[] = {
  ABISELECT(-152,-108),
  ABISELECT(-152,-108),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C18D1Ev,_ZTv0_n12_N8S3589C18D1Ev)();
extern void ABISELECT(_ZThn264_N8S3589C18D1Ev,_ZThn180_N8S3589C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C18D0Ev,_ZTv0_n12_N8S3589C18D0Ev)();
extern void ABISELECT(_ZThn264_N8S3589C18D0Ev,_ZThn180_N8S3589C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S3589C18__7S3589C1[] = {
  ABISELECT(-264,-180),
  ABISELECT(-264,-180),
  (VTBL_ENTRY)&(_ZTI8S3589C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C18D1Ev,_ZTv0_n12_N8S3589C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C18D0Ev,_ZTv0_n12_N8S3589C18D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3589C18D1Ev,_ZTv0_n16_N8S3589C18D1Ev)();
extern void ABISELECT(_ZThn392_N8S3589C18D1Ev,_ZThn260_N8S3589C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C18D0Ev,_ZTv0_n16_N8S3589C18D0Ev)();
extern void ABISELECT(_ZThn392_N8S3589C18D0Ev,_ZThn260_N8S3589C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C16__8S3589C18__7S3589C1[] = {
  ABISELECT(-392,-260),
  ABISELECT(-128,-80),
  ABISELECT(-392,-260),
  (VTBL_ENTRY)&(_ZTI8S3589C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C18D1Ev,_ZTv0_n16_N8S3589C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C18D0Ev,_ZTv0_n16_N8S3589C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C18D1Ev,_ZTv0_n12_N8S3589C18D1Ev)();
extern void ABISELECT(_ZThn232_N8S3589C18D1Ev,_ZThn152_N8S3589C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C18D0Ev,_ZTv0_n12_N8S3589C18D0Ev)();
extern void ABISELECT(_ZThn232_N8S3589C18D0Ev,_ZThn152_N8S3589C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__8S3589C18__7S3589C1[] = {
  ABISELECT(-232,-152),
  ABISELECT(-232,-152),
  (VTBL_ENTRY)&(_ZTI8S3589C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C18D1Ev,_ZTv0_n12_N8S3589C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C18D0Ev,_ZTv0_n12_N8S3589C18D0Ev),
};
extern void ABISELECT(_ZThn32_N8S3589C18D1Ev,_ZThn16_N8S3589C18D1Ev)();
extern void ABISELECT(_ZThn32_N8S3589C18D0Ev,_ZThn16_N8S3589C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S3589C19__8S3589C18__7S3589C1[] = {
  ABISELECT(352,240),
  ABISELECT(232,164),
  ABISELECT(200,136),
  ABISELECT(192,132),
  ABISELECT(248,176),
  ABISELECT(328,228),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S3589C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S3589C18D1Ev,_ZThn16_N8S3589C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S3589C18D0Ev,_ZThn16_N8S3589C18D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3589C18D1Ev,_ZTv0_n16_N8S3589C18D1Ev)();
extern void ABISELECT(_ZThn360_N8S3589C18D1Ev,_ZThn244_N8S3589C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C18D0Ev,_ZTv0_n16_N8S3589C18D0Ev)();
extern void ABISELECT(_ZThn360_N8S3589C18D0Ev,_ZThn244_N8S3589C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C14__8S3589C18__7S3589C1[] = {
  ABISELECT(-360,-244),
  ABISELECT(-80,-52),
  ABISELECT(-360,-244),
  (VTBL_ENTRY)&(_ZTI8S3589C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C18D1Ev,_ZTv0_n16_N8S3589C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C18D0Ev,_ZTv0_n16_N8S3589C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C18D1Ev,_ZTv0_n12_N8S3589C18D1Ev)();
extern void ABISELECT(_ZThn280_N8S3589C18D1Ev,_ZThn192_N8S3589C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3589C18D0Ev,_ZTv0_n12_N8S3589C18D0Ev)();
extern void ABISELECT(_ZThn280_N8S3589C18D0Ev,_ZThn192_N8S3589C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__8S3589C18__7S3589C1[] = {
  ABISELECT(-280,-192),
  ABISELECT(-280,-192),
  (VTBL_ENTRY)&(_ZTI8S3589C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C18D1Ev,_ZTv0_n12_N8S3589C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C18D0Ev,_ZTv0_n12_N8S3589C18D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S3589C18D1Ev,_ZTv0_n20_N8S3589C18D1Ev)();
extern void ABISELECT(_ZThn224_N8S3589C18D1Ev,_ZThn148_N8S3589C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3589C18D0Ev,_ZTv0_n20_N8S3589C18D0Ev)();
extern void ABISELECT(_ZThn224_N8S3589C18D0Ev,_ZThn148_N8S3589C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C8__A1__8S3589C18__7S3589C1[] = {
  ABISELECT(-224,-148),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-224,-148),
  (VTBL_ENTRY)&(_ZTI8S3589C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C18D1Ev,_ZTv0_n20_N8S3589C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C18D0Ev,_ZTv0_n20_N8S3589C18D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3589C18D1Ev,_ZTv0_n16_N8S3589C18D1Ev)();
extern void ABISELECT(_ZThn384_N8S3589C18D1Ev,_ZThn256_N8S3589C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C18D0Ev,_ZTv0_n16_N8S3589C18D0Ev)();
extern void ABISELECT(_ZThn384_N8S3589C18D0Ev,_ZThn256_N8S3589C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C11__8S3589C18__7S3589C1[] = {
  ABISELECT(-384,-256),
  ABISELECT(-120,-76),
  ABISELECT(-384,-256),
  (VTBL_ENTRY)&(_ZTI8S3589C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C18D1Ev,_ZTv0_n16_N8S3589C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C18D0Ev,_ZTv0_n16_N8S3589C18D0Ev),
};
extern void ABISELECT(_ZThn112_N8S3589C18D1Ev,_ZThn72_N8S3589C18D1Ev)();
extern void ABISELECT(_ZThn112_N8S3589C18D0Ev,_ZThn72_N8S3589C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C8__A__8S3589C18__7S3589C1[] = {
  ABISELECT(152,108),
  ABISELECT(120,80),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S3589C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S3589C18D1Ev,_ZThn72_N8S3589C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S3589C18D0Ev,_ZThn72_N8S3589C18D0Ev),
};
extern void _ZN7S3589C6D1Ev();
extern void _ZN7S3589C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3589C6__7S3589C1[] = {
  ABISELECT(152,112),
  ABISELECT(136,100),
  ABISELECT(104,72),
  ABISELECT(96,68),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C6[0]),
  (VTBL_ENTRY)&_ZN7S3589C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C6D0Ev,
};
extern void _ZN7S3589C7D1Ev();
extern void _ZN7S3589C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3589C77S3589C6__7S3589C1[] = {
  ABISELECT(136,100),
  ABISELECT(104,72),
  ABISELECT(96,68),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C7[0]),
  (VTBL_ENTRY)&_ZN7S3589C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S3589C7D1Ev,_ZTv0_n20_N7S3589C7D1Ev)();
extern void ABISELECT(_ZThn96_N7S3589C7D1Ev,_ZThn68_N7S3589C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3589C7D0Ev,_ZTv0_n20_N7S3589C7D0Ev)();
extern void ABISELECT(_ZThn96_N7S3589C7D0Ev,_ZThn68_N7S3589C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C8__7S3589C77S3589C6__7S3589C1[] = {
  ABISELECT(-96,-68),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI7S3589C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3589C7D1Ev,_ZTv0_n20_N7S3589C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3589C7D0Ev,_ZTv0_n20_N7S3589C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C7D1Ev,_ZTv0_n12_N7S3589C7D1Ev)();
extern void ABISELECT(_ZThn104_N7S3589C7D1Ev,_ZThn72_N7S3589C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C7D0Ev,_ZTv0_n12_N7S3589C7D0Ev)();
extern void ABISELECT(_ZThn104_N7S3589C7D0Ev,_ZThn72_N7S3589C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__7S3589C77S3589C6__7S3589C1[] = {
  ABISELECT(-104,-72),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI7S3589C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C7D1Ev,_ZTv0_n12_N7S3589C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C7D0Ev,_ZTv0_n12_N7S3589C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C7D1Ev,_ZTv0_n12_N7S3589C7D1Ev)();
extern void ABISELECT(_ZThn136_N7S3589C7D1Ev,_ZThn100_N7S3589C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C7D0Ev,_ZTv0_n12_N7S3589C7D0Ev)();
extern void ABISELECT(_ZThn136_N7S3589C7D0Ev,_ZThn100_N7S3589C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S3589C77S3589C6__7S3589C1[] = {
  ABISELECT(-136,-100),
  ABISELECT(-136,-100),
  (VTBL_ENTRY)&(_ZTI7S3589C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C7D1Ev,_ZTv0_n12_N7S3589C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C7D0Ev,_ZTv0_n12_N7S3589C7D0Ev),
};
extern void _ZN7S3589C8D1Ev();
extern void _ZN7S3589C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3589C87S3589C6__A1__7S3589C1[] = {
  ABISELECT(48,36),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&_ZN7S3589C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn16_N7S3589C8D1Ev,_ZThn8_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn16_N7S3589C8D0Ev,_ZThn8_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__7S3589C87S3589C6__A1__7S3589C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn48_N7S3589C8D1Ev,_ZThn36_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn48_N7S3589C8D0Ev,_ZThn36_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S3589C87S3589C6__A1__7S3589C1[] = {
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S3589C6D1Ev,_ZTv0_n20_N7S3589C6D1Ev)();
extern void ABISELECT(_ZThn96_N7S3589C6D1Ev,_ZThn68_N7S3589C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3589C6D0Ev,_ZTv0_n20_N7S3589C6D0Ev)();
extern void ABISELECT(_ZThn96_N7S3589C6D0Ev,_ZThn68_N7S3589C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C8__7S3589C6__7S3589C1[] = {
  ABISELECT(-96,-68),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI7S3589C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3589C6D1Ev,_ZTv0_n20_N7S3589C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3589C6D0Ev,_ZTv0_n20_N7S3589C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C6D1Ev,_ZTv0_n12_N7S3589C6D1Ev)();
extern void ABISELECT(_ZThn104_N7S3589C6D1Ev,_ZThn72_N7S3589C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C6D0Ev,_ZTv0_n12_N7S3589C6D0Ev)();
extern void ABISELECT(_ZThn104_N7S3589C6D0Ev,_ZThn72_N7S3589C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__7S3589C6__7S3589C1[] = {
  ABISELECT(-104,-72),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI7S3589C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C6D1Ev,_ZTv0_n12_N7S3589C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C6D0Ev,_ZTv0_n12_N7S3589C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C6D1Ev,_ZTv0_n12_N7S3589C6D1Ev)();
extern void ABISELECT(_ZThn136_N7S3589C6D1Ev,_ZThn100_N7S3589C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C6D0Ev,_ZTv0_n12_N7S3589C6D0Ev)();
extern void ABISELECT(_ZThn136_N7S3589C6D0Ev,_ZThn100_N7S3589C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S3589C6__7S3589C1[] = {
  ABISELECT(-136,-100),
  ABISELECT(-136,-100),
  (VTBL_ENTRY)&(_ZTI7S3589C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C6D1Ev,_ZTv0_n12_N7S3589C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C6D0Ev,_ZTv0_n12_N7S3589C6D0Ev),
};
extern void ABISELECT(_ZThn88_N7S3589C6D1Ev,_ZThn64_N7S3589C6D1Ev)();
extern void ABISELECT(_ZThn88_N7S3589C6D0Ev,_ZThn64_N7S3589C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C8__A__7S3589C6__7S3589C1[] = {
  ABISELECT(48,36),
  ABISELECT(16,8),
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI7S3589C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N7S3589C6D1Ev,_ZThn64_N7S3589C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N7S3589C6D0Ev,_ZThn64_N7S3589C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C6D1Ev,_ZTv0_n12_N7S3589C6D1Ev)();
extern void ABISELECT(_ZThn152_N7S3589C6D1Ev,_ZThn112_N7S3589C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C6D0Ev,_ZTv0_n12_N7S3589C6D0Ev)();
extern void ABISELECT(_ZThn152_N7S3589C6D0Ev,_ZThn112_N7S3589C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__A1__7S3589C6__7S3589C1[] = {
  ABISELECT(-152,-112),
  ABISELECT(-152,-112),
  (VTBL_ENTRY)&(_ZTI7S3589C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C6D1Ev,_ZTv0_n12_N7S3589C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C6D0Ev,_ZTv0_n12_N7S3589C6D0Ev),
};
extern void _ZN7S3589C8D1Ev();
extern void _ZN7S3589C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3589C8__7S3589C1[] = {
  ABISELECT(40,32),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&_ZN7S3589C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn8_N7S3589C8D1Ev,_ZThn4_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn8_N7S3589C8D0Ev,_ZThn4_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C2__7S3589C8__7S3589C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S3589C8D1Ev,_ZThn32_N7S3589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S3589C8D0Ev,_ZThn32_N7S3589C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S3589C8__7S3589C1[] = {
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S3589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev),
};
extern void _ZN8S3589C10D1Ev();
extern void _ZN8S3589C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C10__7S3589C1[] = {
  ABISELECT(80,48),
  ABISELECT(-24,-16),
  ABISELECT(56,36),
  ABISELECT(16,4),
  ABISELECT(-72,-56),
  ABISELECT(-80,-60),
  ABISELECT(-40,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C10[0]),
  (VTBL_ENTRY)&_ZN8S3589C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C10D0Ev,
};
extern void _ZN8S3589C11D1Ev();
extern void _ZN8S3589C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C118S3589C10__7S3589C1[] = {
  ABISELECT(-40,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C11[0]),
  (VTBL_ENTRY)&_ZN8S3589C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3589C11D1Ev,_ZTv0_n12_N8S3589C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C11D0Ev,_ZTv0_n12_N8S3589C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S3589C118S3589C10__7S3589C1[] = {
  ABISELECT(40,28),
  ABISELECT(40,28),
  (VTBL_ENTRY)&(_ZTI8S3589C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C11D1Ev,_ZTv0_n12_N8S3589C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C11D0Ev,_ZTv0_n12_N8S3589C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S3589C10D1Ev,_ZTv0_n20_N8S3589C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S3589C10D0Ev,_ZTv0_n20_N8S3589C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C8__8S3589C10__7S3589C1[] = {
  ABISELECT(80,60),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(80,60),
  (VTBL_ENTRY)&(_ZTI8S3589C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C10D1Ev,_ZTv0_n20_N8S3589C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C10D0Ev,_ZTv0_n20_N8S3589C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C10D1Ev,_ZTv0_n12_N8S3589C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C10D0Ev,_ZTv0_n12_N8S3589C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C2__8S3589C10__7S3589C1[] = {
  ABISELECT(72,56),
  ABISELECT(72,56),
  (VTBL_ENTRY)&(_ZTI8S3589C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C10D1Ev,_ZTv0_n12_N8S3589C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C10D0Ev,_ZTv0_n12_N8S3589C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C10D1Ev,_ZTv0_n12_N8S3589C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C10D0Ev,_ZTv0_n12_N8S3589C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S3589C10__7S3589C1[] = {
  ABISELECT(40,28),
  ABISELECT(40,28),
  (VTBL_ENTRY)&(_ZTI8S3589C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C10D1Ev,_ZTv0_n12_N8S3589C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C10D0Ev,_ZTv0_n12_N8S3589C10D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N8S3589C10D1Ev,_ZTv0_n36_N8S3589C10D1Ev)();
extern void ABISELECT(_ZThn16_N8S3589C10D1Ev,_ZThn4_N8S3589C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S3589C10D0Ev,_ZTv0_n36_N8S3589C10D0Ev)();
extern void ABISELECT(_ZThn16_N8S3589C10D0Ev,_ZThn4_N8S3589C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C12__8S3589C10__7S3589C1[] = {
  ABISELECT(-16,-4),
  ABISELECT(64,44),
  ABISELECT(-56,-32),
  ABISELECT(-88,-60),
  ABISELECT(-96,-64),
  ABISELECT(-40,-20),
  ABISELECT(40,32),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S3589C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S3589C10D1Ev,_ZTv0_n36_N8S3589C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S3589C10D0Ev,_ZTv0_n36_N8S3589C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3589C10D1Ev,_ZTv0_n16_N8S3589C10D1Ev)();
extern void ABISELECT(_ZThn56_N8S3589C10D1Ev,_ZThn36_N8S3589C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C10D0Ev,_ZTv0_n16_N8S3589C10D0Ev)();
extern void ABISELECT(_ZThn56_N8S3589C10D0Ev,_ZThn36_N8S3589C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C14__8S3589C10__7S3589C1[] = {
  ABISELECT(-56,-36),
  ABISELECT(-80,-52),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S3589C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C10D1Ev,_ZTv0_n16_N8S3589C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C10D0Ev,_ZTv0_n16_N8S3589C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C10D1Ev,_ZTv0_n12_N8S3589C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C10D0Ev,_ZTv0_n12_N8S3589C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__8S3589C10__7S3589C1[] = {
  ABISELECT(24,16),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI8S3589C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C10D1Ev,_ZTv0_n12_N8S3589C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C10D0Ev,_ZTv0_n12_N8S3589C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3589C10D1Ev,_ZTv0_n16_N8S3589C10D1Ev)();
extern void ABISELECT(_ZThn80_N8S3589C10D1Ev,_ZThn48_N8S3589C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C10D0Ev,_ZTv0_n16_N8S3589C10D0Ev)();
extern void ABISELECT(_ZThn80_N8S3589C10D0Ev,_ZThn48_N8S3589C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C11__A1__8S3589C10__7S3589C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(-120,-76),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI8S3589C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C10D1Ev,_ZTv0_n16_N8S3589C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C10D0Ev,_ZTv0_n16_N8S3589C10D0Ev),
};
extern void _ZN8S3589C12D1Ev();
extern void _ZN8S3589C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C12__7S3589C1[] = {
  ABISELECT(64,44),
  ABISELECT(-56,-32),
  ABISELECT(-88,-60),
  ABISELECT(-96,-64),
  ABISELECT(-40,-20),
  ABISELECT(40,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&_ZN8S3589C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C12D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn40_N8S3589C12D1Ev,_ZThn32_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn40_N8S3589C12D0Ev,_ZThn32_N8S3589C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C14__8S3589C12__7S3589C1[] = {
  ABISELECT(-40,-32),
  ABISELECT(-80,-52),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__8S3589C12__7S3589C1[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S3589C12D1Ev,_ZTv0_n20_N8S3589C12D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S3589C12D0Ev,_ZTv0_n20_N8S3589C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C8__8S3589C12__7S3589C1[] = {
  ABISELECT(96,64),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(96,64),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C12D1Ev,_ZTv0_n20_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3589C12D0Ev,_ZTv0_n20_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C2__8S3589C12__7S3589C1[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S3589C12__7S3589C1[] = {
  ABISELECT(56,32),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev)();
extern void ABISELECT(_ZThn64_N8S3589C12D1Ev,_ZThn44_N8S3589C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev)();
extern void ABISELECT(_ZThn64_N8S3589C12D0Ev,_ZThn44_N8S3589C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3589C11__8S3589C12__7S3589C1[] = {
  ABISELECT(-64,-44),
  ABISELECT(-120,-76),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S3589C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev),
};
extern void _ZN8S3589C14D1Ev();
extern void _ZN8S3589C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C14__7S3589C1[] = {
  ABISELECT(-80,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C14[0]),
  (VTBL_ENTRY)&_ZN8S3589C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3589C14D1Ev,_ZTv0_n12_N8S3589C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C14D0Ev,_ZTv0_n12_N8S3589C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__8S3589C14__7S3589C1[] = {
  ABISELECT(80,52),
  ABISELECT(80,52),
  (VTBL_ENTRY)&(_ZTI8S3589C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C14D1Ev,_ZTv0_n12_N8S3589C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C14D0Ev,_ZTv0_n12_N8S3589C14D0Ev),
};
extern void _ZN8S3589C11D1Ev();
extern void _ZN8S3589C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C11__A1__7S3589C1[] = {
  ABISELECT(-120,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C11[0]),
  (VTBL_ENTRY)&_ZN8S3589C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3589C11D1Ev,_ZTv0_n12_N8S3589C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C11D0Ev,_ZTv0_n12_N8S3589C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S3589C11__A1__7S3589C1[] = {
  ABISELECT(120,76),
  ABISELECT(120,76),
  (VTBL_ENTRY)&(_ZTI8S3589C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C11D1Ev,_ZTv0_n12_N8S3589C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C11D0Ev,_ZTv0_n12_N8S3589C11D0Ev),
};
extern void _ZN8S3589C16D1Ev();
extern void _ZN8S3589C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3589C16__7S3589C1[] = {
  ABISELECT(-128,-80),
  0,
  (VTBL_ENTRY)&(_ZTI8S3589C16[0]),
  (VTBL_ENTRY)&_ZN8S3589C16D1Ev,
  (VTBL_ENTRY)&_ZN8S3589C16D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3589C16D1Ev,_ZTv0_n12_N8S3589C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3589C16D0Ev,_ZTv0_n12_N8S3589C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S3589C16__7S3589C1[] = {
  ABISELECT(128,80),
  ABISELECT(128,80),
  (VTBL_ENTRY)&(_ZTI8S3589C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C16D1Ev,_ZTv0_n12_N8S3589C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3589C16D0Ev,_ZTv0_n12_N8S3589C16D0Ev),
};
extern void _ZN7S3589C7D1Ev();
extern void _ZN7S3589C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3589C7__A1__7S3589C1[] = {
  ABISELECT(-144,-92),
  ABISELECT(-176,-120),
  ABISELECT(-184,-124),
  0,
  (VTBL_ENTRY)&(_ZTI7S3589C7[0]),
  (VTBL_ENTRY)&_ZN7S3589C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3589C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S3589C7D1Ev,_ZTv0_n20_N7S3589C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3589C7D0Ev,_ZTv0_n20_N7S3589C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C8__7S3589C7__A1__7S3589C1[] = {
  ABISELECT(184,124),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(184,124),
  (VTBL_ENTRY)&(_ZTI7S3589C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3589C7D1Ev,_ZTv0_n20_N7S3589C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3589C7D0Ev,_ZTv0_n20_N7S3589C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C7D1Ev,_ZTv0_n12_N7S3589C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3589C7D0Ev,_ZTv0_n12_N7S3589C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C2__7S3589C7__A1__7S3589C1[] = {
  ABISELECT(176,120),
  ABISELECT(176,120),
  (VTBL_ENTRY)&(_ZTI7S3589C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C7D1Ev,_ZTv0_n12_N7S3589C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C7D0Ev,_ZTv0_n12_N7S3589C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3589C7D1Ev,_ZTv0_n12_N7S3589C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3589C7D0Ev,_ZTv0_n12_N7S3589C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S3589C7__A1__7S3589C1[] = {
  ABISELECT(144,92),
  ABISELECT(144,92),
  (VTBL_ENTRY)&(_ZTI7S3589C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C7D1Ev,_ZTv0_n12_N7S3589C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3589C7D0Ev,_ZTv0_n12_N7S3589C7D0Ev),
};
static  VTT_ENTRY vtt_S3589C1[] = {
  {&(_ZTV7S3589C1[13]),  13,163},
  {&(_tg__ZTV7S3589C5__7S3589C1[12]),  12,14},
  {&(_tg__ZTV8S3589C157S3589C5__7S3589C1[5]),  5,7},
  {&(_tg__ZTV7S3589C88S3589C157S3589C5__A2__7S3589C1[4]),  4,6},
  {&(_tg__ZTV7S3589C2__7S3589C88S3589C157S3589C5__A2__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S3589C88S3589C157S3589C5__A2__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C2__8S3589C157S3589C5__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S3589C157S3589C5__7S3589C1[3]),  3,5},
  {&(_tg__ZTV8S3589C16__8S3589C157S3589C5__7S3589C1[4]),  4,6},
  {&(_tg__ZTV7S3589C6__7S3589C5__7S3589C1[7]),  7,9},
  {&(_tg__ZTV7S3589C8__7S3589C5__7S3589C1[5]),  5,7},
  {&(_tg__ZTV7S3589C2__7S3589C5__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S3589C5__7S3589C1[3]),  3,5},
  {&(_tg__ZTV10S3589C9_nt7S3589C77S3589C6__7S3589C5__7S3589C1[2]),  2,4},
  {&(_tg__ZTV7S3589C27S3589C77S3589C6__A1__7S3589C5__7S3589C1[2]),  2,4},
  {&(_tg__ZTV7S3589C87S3589C6__A1__7S3589C5__7S3589C1[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__A1__7S3589C5__7S3589C1[3]),  3,5},
  {&(_tg__ZTV8S3589C10__7S3589C5__7S3589C1[10]),  10,12},
  {&(_tg__ZTV8S3589C12__7S3589C5__7S3589C1[9]),  9,11},
  {&(_tg__ZTV8S3589C14__7S3589C5__7S3589C1[4]),  4,6},
  {&(_tg__ZTV8S3589C11__A1__7S3589C5__7S3589C1[4]),  4,6},
  {&(_tg__ZTV8S3589C16__7S3589C5__7S3589C1[4]),  4,6},
  {&(_tg__ZTV8S3589C16__A__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__8S3589C16__A__7S3589C1[3]),  3,5},
  {&(_tg__ZTV8S3589C18__7S3589C1[9]),  9,11},
  {&(_tg__ZTV8S3589C158S3589C18__A1__7S3589C1[5]),  5,7},
  {&(_tg__ZTV7S3589C88S3589C158S3589C18__A3__7S3589C1[4]),  4,6},
  {&(_tg__ZTV7S3589C2__7S3589C88S3589C158S3589C18__A3__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S3589C88S3589C158S3589C18__A3__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C2__8S3589C158S3589C18__A1__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S3589C158S3589C18__A1__7S3589C1[3]),  3,5},
  {&(_tg__ZTV8S3589C16__8S3589C158S3589C18__A1__7S3589C1[4]),  4,6},
  {&(_tg__ZTV8S3589C198S3589C18__7S3589C1[8]),  8,10},
  {&(_tg__ZTV8S3589C128S3589C198S3589C18__A1__7S3589C1[8]),  8,10},
  {&(_tg__ZTV8S3589C14__8S3589C128S3589C198S3589C18__A1__7S3589C1[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__8S3589C128S3589C198S3589C18__A1__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C8__8S3589C128S3589C198S3589C18__A1__7S3589C1[5]),  5,7},
  {&(_tg__ZTV7S3589C2__8S3589C128S3589C198S3589C18__A1__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S3589C128S3589C198S3589C18__A1__7S3589C1[3]),  3,5},
  {&(_tg__ZTV8S3589C11__8S3589C128S3589C198S3589C18__A1__7S3589C1[4]),  4,6},
  {&(_tg__ZTV8S3589C14__8S3589C198S3589C18__7S3589C1[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__8S3589C198S3589C18__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C8__8S3589C198S3589C18__7S3589C1[5]),  5,7},
  {&(_tg__ZTV7S3589C2__8S3589C198S3589C18__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S3589C198S3589C18__7S3589C1[3]),  3,5},
  {&(_tg__ZTV8S3589C11__8S3589C198S3589C18__7S3589C1[4]),  4,6},
  {&(_tg__ZTV7S3589C88S3589C18__A4__7S3589C1[4]),  4,6},
  {&(_tg__ZTV7S3589C2__7S3589C88S3589C18__A4__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S3589C88S3589C18__A4__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__8S3589C18__7S3589C1[3]),  3,5},
  {&(_tg__ZTV8S3589C16__8S3589C18__7S3589C1[4]),  4,6},
  {&(_tg__ZTV7S3589C2__8S3589C18__7S3589C1[3]),  3,5},
  {&(_tg__ZTV8S3589C19__8S3589C18__7S3589C1[8]),  8,10},
  {&(_tg__ZTV8S3589C14__8S3589C18__7S3589C1[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__8S3589C18__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C8__A1__8S3589C18__7S3589C1[5]),  5,7},
  {&(_tg__ZTV8S3589C11__8S3589C18__7S3589C1[4]),  4,6},
  {&(_tg__ZTV7S3589C8__A__8S3589C18__7S3589C1[4]),  4,6},
  {&(_ZTV7S3589C1[27]),  27,163},
  {&(_ZTV7S3589C1[68]),  68,163},
  {&(_ZTV7S3589C1[89]),  89,163},
  {&(_ZTV7S3589C1[94]),  94,163},
  {&(_ZTV7S3589C1[99]),  99,163},
  {&(_ZTV7S3589C1[72]),  72,163},
  {&(_ZTV7S3589C1[76]),  76,163},
  {&(_ZTV7S3589C1[82]),  82,163},
  {&(_ZTV7S3589C1[104]),  104,163},
  {&(_ZTV7S3589C1[116]),  116,163},
  {&(_ZTV7S3589C1[127]),  127,163},
  {&(_ZTV7S3589C1[133]),  133,163},
  {&(_ZTV7S3589C1[139]),  139,163},
  {&(_ZTV7S3589C1[145]),  145,163},
  {&(_ZTV7S3589C1[32]),  32,163},
  {&(_ZTV7S3589C1[43]),  43,163},
  {&(_ZTV7S3589C1[53]),  53,163},
  {&(_ZTV7S3589C1[59]),  59,163},
  {&(_ZTV7S3589C1[153]),  153,163},
  {&(_ZTV7S3589C1[157]),  157,163},
  {&(_ZTV7S3589C1[161]),  161,163},
  {&(_tg__ZTV7S3589C6__7S3589C1[6]),  6,8},
  {&(_tg__ZTV7S3589C77S3589C6__7S3589C1[5]),  5,7},
  {&(_tg__ZTV7S3589C8__7S3589C77S3589C6__7S3589C1[5]),  5,7},
  {&(_tg__ZTV7S3589C2__7S3589C77S3589C6__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S3589C77S3589C6__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C87S3589C6__A1__7S3589C1[4]),  4,6},
  {&(_tg__ZTV7S3589C2__7S3589C87S3589C6__A1__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S3589C87S3589C6__A1__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C8__7S3589C6__7S3589C1[5]),  5,7},
  {&(_tg__ZTV7S3589C2__7S3589C6__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S3589C6__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C8__A__7S3589C6__7S3589C1[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__A1__7S3589C6__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C8__7S3589C1[4]),  4,6},
  {&(_tg__ZTV7S3589C2__7S3589C8__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S3589C8__7S3589C1[3]),  3,5},
  {&(_tg__ZTV8S3589C10__7S3589C1[9]),  9,11},
  {&(_tg__ZTV8S3589C118S3589C10__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__8S3589C118S3589C10__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C8__8S3589C10__7S3589C1[5]),  5,7},
  {&(_tg__ZTV7S3589C2__8S3589C10__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S3589C10__7S3589C1[3]),  3,5},
  {&(_tg__ZTV8S3589C12__8S3589C10__7S3589C1[9]),  9,11},
  {&(_tg__ZTV8S3589C14__8S3589C10__7S3589C1[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__8S3589C10__7S3589C1[3]),  3,5},
  {&(_tg__ZTV8S3589C11__A1__8S3589C10__7S3589C1[4]),  4,6},
  {&(_tg__ZTV8S3589C12__7S3589C1[8]),  8,10},
  {&(_tg__ZTV8S3589C14__8S3589C12__7S3589C1[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__8S3589C12__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C8__8S3589C12__7S3589C1[5]),  5,7},
  {&(_tg__ZTV7S3589C2__8S3589C12__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S3589C12__7S3589C1[3]),  3,5},
  {&(_tg__ZTV8S3589C11__8S3589C12__7S3589C1[4]),  4,6},
  {&(_tg__ZTV8S3589C14__7S3589C1[3]),  3,5},
  {&(_tg__ZTV10S3589C9_nt__8S3589C14__7S3589C1[3]),  3,5},
  {&(_tg__ZTV8S3589C11__A1__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__8S3589C11__A1__7S3589C1[3]),  3,5},
  {&(_tg__ZTV8S3589C16__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__8S3589C16__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C7__A1__7S3589C1[5]),  5,7},
  {&(_tg__ZTV7S3589C8__7S3589C7__A1__7S3589C1[5]),  5,7},
  {&(_tg__ZTV7S3589C2__7S3589C7__A1__7S3589C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S3589C7__A1__7S3589C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S3589C1[];
extern  VTBL_ENTRY _ZTV7S3589C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3589C1[];
static VTBL_ENTRY alt_thunk_names53[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C10D0Ev,_ZTv0_n16_N8S3589C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S3589C10D0Ev,_ZThn48_N8S3589C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S3589C10D0Ev,_ZThn36_N8S3589C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C10D1Ev,_ZTv0_n16_N8S3589C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S3589C10D1Ev,_ZThn48_N8S3589C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S3589C10D1Ev,_ZThn36_N8S3589C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S3589C10D0Ev,_ZTv0_n36_N8S3589C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S3589C10D0Ev,_ZThn4_N8S3589C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S3589C10D1Ev,_ZTv0_n36_N8S3589C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S3589C10D1Ev,_ZThn4_N8S3589C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C6D0Ev,_ZTv0_n12_N7S3589C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S3589C6D0Ev,_ZThn112_N7S3589C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S3589C6D0Ev,_ZThn100_N7S3589C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S3589C6D0Ev,_ZThn72_N7S3589C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C6D1Ev,_ZTv0_n12_N7S3589C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S3589C6D1Ev,_ZThn112_N7S3589C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S3589C6D1Ev,_ZThn100_N7S3589C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S3589C6D1Ev,_ZThn72_N7S3589C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3589C6D0Ev,_ZTv0_n20_N7S3589C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S3589C6D0Ev,_ZThn68_N7S3589C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3589C6D1Ev,_ZTv0_n20_N7S3589C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S3589C6D1Ev,_ZThn68_N7S3589C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C7D0Ev,_ZTv0_n12_N7S3589C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S3589C7D0Ev,_ZThn100_N7S3589C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S3589C7D0Ev,_ZThn72_N7S3589C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C7D1Ev,_ZTv0_n12_N7S3589C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S3589C7D1Ev,_ZThn100_N7S3589C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S3589C7D1Ev,_ZThn72_N7S3589C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3589C7D0Ev,_ZTv0_n20_N7S3589C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S3589C7D0Ev,_ZThn68_N7S3589C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3589C7D1Ev,_ZTv0_n20_N7S3589C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S3589C7D1Ev,_ZThn68_N7S3589C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3589C18D0Ev,_ZTv0_n20_N8S3589C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S3589C18D0Ev,_ZThn148_N8S3589C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3589C18D1Ev,_ZTv0_n20_N8S3589C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S3589C18D1Ev,_ZThn148_N8S3589C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C18D0Ev,_ZTv0_n16_N8S3589C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S3589C18D0Ev,_ZThn256_N8S3589C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn360_N8S3589C18D0Ev,_ZThn244_N8S3589C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn392_N8S3589C18D0Ev,_ZThn260_N8S3589C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C18D1Ev,_ZTv0_n16_N8S3589C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S3589C18D1Ev,_ZThn256_N8S3589C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn360_N8S3589C18D1Ev,_ZThn244_N8S3589C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn392_N8S3589C18D1Ev,_ZThn260_N8S3589C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C18D0Ev,_ZTv0_n12_N8S3589C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S3589C18D0Ev,_ZThn192_N8S3589C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S3589C18D0Ev,_ZThn152_N8S3589C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S3589C18D0Ev,_ZThn180_N8S3589C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C18D1Ev,_ZTv0_n12_N8S3589C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S3589C18D1Ev,_ZThn192_N8S3589C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S3589C18D1Ev,_ZThn152_N8S3589C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S3589C18D1Ev,_ZThn180_N8S3589C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3589C19D0Ev,_ZTv0_n20_N8S3589C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S3589C19D0Ev,_ZThn132_N8S3589C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3589C19D1Ev,_ZTv0_n20_N8S3589C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S3589C19D1Ev,_ZThn132_N8S3589C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C19D0Ev,_ZTv0_n12_N8S3589C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S3589C19D0Ev,_ZThn164_N8S3589C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S3589C19D0Ev,_ZThn136_N8S3589C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S3589C19D0Ev,_ZThn176_N8S3589C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C19D1Ev,_ZTv0_n12_N8S3589C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S3589C19D1Ev,_ZThn164_N8S3589C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S3589C19D1Ev,_ZThn136_N8S3589C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S3589C19D1Ev,_ZThn176_N8S3589C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C19D0Ev,_ZTv0_n16_N8S3589C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S3589C19D0Ev,_ZThn240_N8S3589C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S3589C19D0Ev,_ZThn228_N8S3589C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C19D1Ev,_ZTv0_n16_N8S3589C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S3589C19D1Ev,_ZThn240_N8S3589C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S3589C19D1Ev,_ZThn228_N8S3589C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3589C12D0Ev,_ZTv0_n20_N8S3589C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S3589C12D0Ev,_ZThn132_N8S3589C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3589C12D1Ev,_ZTv0_n20_N8S3589C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S3589C12D1Ev,_ZThn132_N8S3589C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C12D0Ev,_ZTv0_n12_N8S3589C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S3589C12D0Ev,_ZThn164_N8S3589C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S3589C12D0Ev,_ZThn136_N8S3589C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S3589C12D0Ev,_ZThn176_N8S3589C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C12D1Ev,_ZTv0_n12_N8S3589C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S3589C12D1Ev,_ZThn164_N8S3589C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S3589C12D1Ev,_ZThn136_N8S3589C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S3589C12D1Ev,_ZThn176_N8S3589C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C12D0Ev,_ZTv0_n16_N8S3589C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S3589C12D0Ev,_ZThn44_N8S3589C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S3589C12D0Ev,_ZThn32_N8S3589C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S3589C12D0Ev,_ZThn240_N8S3589C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S3589C12D0Ev,_ZThn228_N8S3589C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C12D1Ev,_ZTv0_n16_N8S3589C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S3589C12D1Ev,_ZThn44_N8S3589C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S3589C12D1Ev,_ZThn32_N8S3589C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S3589C12D1Ev,_ZThn240_N8S3589C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S3589C12D1Ev,_ZThn228_N8S3589C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C16D0Ev,_ZTv0_n12_N8S3589C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S3589C16D0Ev,_ZThn192_N8S3589C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C16D1Ev,_ZTv0_n12_N8S3589C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S3589C16D1Ev,_ZThn192_N8S3589C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3589C5D0Ev,_ZTv0_n16_N7S3589C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn584_N7S3589C5D0Ev,_ZThn400_N7S3589C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn576_N7S3589C5D0Ev,_ZThn396_N7S3589C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn552_N7S3589C5D0Ev,_ZThn384_N7S3589C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3589C5D1Ev,_ZTv0_n16_N7S3589C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn584_N7S3589C5D1Ev,_ZThn400_N7S3589C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn576_N7S3589C5D1Ev,_ZThn396_N7S3589C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn552_N7S3589C5D1Ev,_ZThn384_N7S3589C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S3589C5D0Ev,_ZTv0_n36_N7S3589C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn512_N7S3589C5D0Ev,_ZThn352_N7S3589C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S3589C5D1Ev,_ZTv0_n36_N7S3589C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn512_N7S3589C5D1Ev,_ZThn352_N7S3589C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S3589C5D0Ev,_ZTv0_n40_N7S3589C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N7S3589C5D0Ev,_ZThn348_N7S3589C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S3589C5D1Ev,_ZTv0_n40_N7S3589C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N7S3589C5D1Ev,_ZThn348_N7S3589C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C5D0Ev,_ZTv0_n12_N7S3589C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N7S3589C5D0Ev,_ZThn332_N7S3589C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn456_N7S3589C5D0Ev,_ZThn320_N7S3589C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn424_N7S3589C5D0Ev,_ZThn292_N7S3589C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C5D1Ev,_ZTv0_n12_N7S3589C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N7S3589C5D1Ev,_ZThn332_N7S3589C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn456_N7S3589C5D1Ev,_ZThn320_N7S3589C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn424_N7S3589C5D1Ev,_ZThn292_N7S3589C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3589C5D0Ev,_ZTv0_n20_N7S3589C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N7S3589C5D0Ev,_ZThn288_N7S3589C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3589C5D1Ev,_ZTv0_n20_N7S3589C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N7S3589C5D1Ev,_ZThn288_N7S3589C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3589C5D0Ev,_ZTv0_n28_N7S3589C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S3589C5D0Ev,_ZThn220_N7S3589C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3589C5D1Ev,_ZTv0_n28_N7S3589C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S3589C5D1Ev,_ZThn220_N7S3589C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C15D0Ev,_ZTv0_n16_N8S3589C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn392_N8S3589C15D0Ev,_ZThn260_N8S3589C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn584_N8S3589C15D0Ev,_ZThn400_N8S3589C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3589C15D1Ev,_ZTv0_n16_N8S3589C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn392_N8S3589C15D1Ev,_ZThn260_N8S3589C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn584_N8S3589C15D1Ev,_ZThn400_N8S3589C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C15D0Ev,_ZTv0_n12_N8S3589C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S3589C15D0Ev,_ZThn180_N8S3589C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S3589C15D0Ev,_ZThn152_N8S3589C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn456_N8S3589C15D0Ev,_ZThn320_N8S3589C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn424_N8S3589C15D0Ev,_ZThn292_N8S3589C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3589C15D1Ev,_ZTv0_n12_N8S3589C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S3589C15D1Ev,_ZThn180_N8S3589C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S3589C15D1Ev,_ZThn152_N8S3589C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn456_N8S3589C15D1Ev,_ZThn320_N8S3589C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn424_N8S3589C15D1Ev,_ZThn292_N8S3589C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C8D0Ev,_ZTv0_n12_N7S3589C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3589C8D0Ev,_ZThn32_N7S3589C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3589C8D0Ev,_ZThn4_N7S3589C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3589C8D0Ev,_ZThn36_N7S3589C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3589C8D0Ev,_ZThn8_N7S3589C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S3589C8D0Ev,_ZThn108_N7S3589C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S3589C8D0Ev,_ZThn80_N7S3589C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn264_N7S3589C8D0Ev,_ZThn180_N7S3589C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N7S3589C8D0Ev,_ZThn152_N7S3589C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn456_N7S3589C8D0Ev,_ZThn320_N7S3589C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn424_N7S3589C8D0Ev,_ZThn292_N7S3589C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C8D1Ev,_ZTv0_n12_N7S3589C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3589C8D1Ev,_ZThn32_N7S3589C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3589C8D1Ev,_ZThn4_N7S3589C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3589C8D1Ev,_ZThn36_N7S3589C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3589C8D1Ev,_ZThn8_N7S3589C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S3589C8D1Ev,_ZThn108_N7S3589C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S3589C8D1Ev,_ZThn80_N7S3589C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn264_N7S3589C8D1Ev,_ZThn180_N7S3589C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N7S3589C8D1Ev,_ZThn152_N7S3589C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn456_N7S3589C8D1Ev,_ZThn320_N7S3589C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn424_N7S3589C8D1Ev,_ZThn292_N7S3589C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3589C1D0Ev,_ZTv0_n24_N7S3589C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn632_N7S3589C1D0Ev,_ZThn440_N7S3589C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3589C1D1Ev,_ZTv0_n24_N7S3589C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn632_N7S3589C1D1Ev,_ZThn440_N7S3589C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3589C1D0Ev,_ZTv0_n16_N7S3589C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn616_N7S3589C1D0Ev,_ZThn428_N7S3589C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn608_N7S3589C1D0Ev,_ZThn424_N7S3589C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn584_N7S3589C1D0Ev,_ZThn412_N7S3589C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3589C1D1Ev,_ZTv0_n16_N7S3589C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn616_N7S3589C1D1Ev,_ZThn428_N7S3589C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn608_N7S3589C1D1Ev,_ZThn424_N7S3589C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn584_N7S3589C1D1Ev,_ZThn412_N7S3589C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S3589C1D0Ev,_ZTv0_n36_N7S3589C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N7S3589C1D0Ev,_ZThn380_N7S3589C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S3589C1D1Ev,_ZTv0_n36_N7S3589C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N7S3589C1D1Ev,_ZThn380_N7S3589C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S3589C1D0Ev,_ZTv0_n40_N7S3589C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn528_N7S3589C1D0Ev,_ZThn376_N7S3589C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S3589C1D1Ev,_ZTv0_n40_N7S3589C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn528_N7S3589C1D1Ev,_ZThn376_N7S3589C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C1D0Ev,_ZTv0_n12_N7S3589C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn504_N7S3589C1D0Ev,_ZThn360_N7S3589C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn488_N7S3589C1D0Ev,_ZThn348_N7S3589C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn456_N7S3589C1D0Ev,_ZThn320_N7S3589C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3589C1D1Ev,_ZTv0_n12_N7S3589C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn504_N7S3589C1D1Ev,_ZThn360_N7S3589C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn488_N7S3589C1D1Ev,_ZThn348_N7S3589C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn456_N7S3589C1D1Ev,_ZThn320_N7S3589C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3589C1D0Ev,_ZTv0_n20_N7S3589C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N7S3589C1D0Ev,_ZThn316_N7S3589C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3589C1D1Ev,_ZTv0_n20_N7S3589C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N7S3589C1D1Ev,_ZThn316_N7S3589C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3589C1D0Ev,_ZTv0_n28_N7S3589C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S3589C1D0Ev,_ZThn248_N7S3589C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3589C1D1Ev,_ZTv0_n28_N7S3589C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S3589C1D1Ev,_ZThn248_N7S3589C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3589C1 = {  "S3589C1", // class name
  bases_S3589C1, 39,
  &(vtc_S3589C1[0]), // expected_vtbl_contents
  &(vtt_S3589C1[0]), // expected_vtt_contents
  ABISELECT(720,504), // object size
  NSPAIRA(_ZTI7S3589C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3589C1),163, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3589C1),122, //virtual table table var
  37, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names53,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4533C3  {
  ::S17777C5_nt s4533c3f0;
  unsigned int s4533c3f1:1;
  virtual  ~S4533C3(); // _ZN7S4533C3D1Ev
  virtual void  v2(); // _ZN7S4533C32v2Ev
  virtual void  v3(); // _ZN7S4533C32v3Ev
  virtual void  v4(); // _ZN7S4533C32v4Ev
  virtual void  v5(); // _ZN7S4533C32v5Ev
  virtual void  v6(); // _ZN7S4533C32v6Ev
  virtual void  v7(); // _ZN7S4533C32v7Ev
  virtual void  v8(); // _ZN7S4533C32v8Ev
  S4533C3(); // tgen
};
//SIG(-1 S4533C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 FC2{ m Fp[3]} Fi:1}


 S4533C3 ::~S4533C3(){ note_dtor("S4533C3", this);}
void  S4533C3 ::v2(){vfunc_called(this, "_ZN7S4533C32v2Ev");}
void  S4533C3 ::v3(){vfunc_called(this, "_ZN7S4533C32v3Ev");}
void  S4533C3 ::v4(){vfunc_called(this, "_ZN7S4533C32v4Ev");}
void  S4533C3 ::v5(){vfunc_called(this, "_ZN7S4533C32v5Ev");}
void  S4533C3 ::v6(){vfunc_called(this, "_ZN7S4533C32v6Ev");}
void  S4533C3 ::v7(){vfunc_called(this, "_ZN7S4533C32v7Ev");}
void  S4533C3 ::v8(){vfunc_called(this, "_ZN7S4533C32v8Ev");}
S4533C3 ::S4533C3(){ note_ctor("S4533C3", this);} // tgen

static void Test_S4533C3()
{
  extern Class_Descriptor cd_S4533C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S4533C3, buf);
    S4533C3 *dp, &lv = *(dp=new (buf) S4533C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S4533C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4533C3)");
    check_field_offset(lv, s4533c3f0, ABISELECT(8,4), "S4533C3.s4533c3f0");
    set_bf_and_test(lv, s4533c3f1, ABISELECT(32,16), 0, 1, 1, "S4533C3");
    test_class_info(&lv, &cd_S4533C3);
    dp->~S4533C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4533C3(Test_S4533C3, "S4533C3", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S4533C3C1Ev();
extern void _ZN7S4533C3D1Ev();
Name_Map name_map_S4533C3[] = {
  NSPAIR(_ZN7S4533C3C1Ev),
  NSPAIR(_ZN7S4533C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4533C3[];
extern void _ZN7S4533C3D1Ev();
extern void _ZN7S4533C3D0Ev();
extern void _ZN7S4533C32v2Ev();
extern void _ZN7S4533C32v3Ev();
extern void _ZN7S4533C32v4Ev();
extern void _ZN7S4533C32v5Ev();
extern void _ZN7S4533C32v6Ev();
extern void _ZN7S4533C32v7Ev();
extern void _ZN7S4533C32v8Ev();
static  VTBL_ENTRY vtc_S4533C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4533C3[0]),
  (VTBL_ENTRY)&_ZN7S4533C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4533C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4533C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4533C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4533C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4533C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4533C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4533C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4533C32v8Ev,
};
extern VTBL_ENTRY _ZTI7S4533C3[];
extern  VTBL_ENTRY _ZTV7S4533C3[];
Class_Descriptor cd_S4533C3 = {  "S4533C3", // class name
  0,0,//no base classes
  &(vtc_S4533C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S4533C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4533C3),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4533C5  {
  virtual void  v9(); // _ZN7S4533C52v9Ev
  ~S4533C5(); // tgen
  S4533C5(); // tgen
};
//SIG(-1 S4533C5) C1{ v1}


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

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

#else // __cplusplus

extern void _ZN7S4533C5C1Ev();
extern void _ZN7S4533C5D1Ev();
Name_Map name_map_S4533C5[] = {
  NSPAIR(_ZN7S4533C5C1Ev),
  NSPAIR(_ZN7S4533C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4533C5[];
extern void _ZN7S4533C52v9Ev();
static  VTBL_ENTRY vtc_S4533C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4533C5[0]),
  (VTBL_ENTRY)&_ZN7S4533C52v9Ev,
};
extern VTBL_ENTRY _ZTI7S4533C5[];
extern  VTBL_ENTRY _ZTV7S4533C5[];
Class_Descriptor cd_S4533C5 = {  "S4533C5", // class name
  0,0,//no base classes
  &(vtc_S4533C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4533C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4533C5),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  S4533C6_nt  {
  ::S6961C7 s4533c6f0;
  int s4533c6f1;
  void  mf4533c6(); // _ZN10S4533C6_nt8mf4533c6Ev
};
//SIG(-1 S4533C6_nt) C1{ m FC2{ BC3{ m Fp Fi[2]}} Fi}


void  S4533C6_nt ::mf4533c6(){}

//skip512 S4533C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4533C9_nt  {
  unsigned int s4533c9f0:1;
  int s4533c9f1:3;
};
//SIG(-1 S4533C9_nt) C1{ Fi:1 Fi:3}



//skip512 S4533C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4533C11_nt  {
  void *s4533c11f0;
  void  mf4533c11(); // _ZN11S4533C11_nt9mf4533c11Ev
};
//SIG(-1 S4533C11_nt) C1{ m Fp}


void  S4533C11_nt ::mf4533c11(){}

//skip512 S4533C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4533C2_nt  : S4533C3 , S4533C5 {
  ::S4533C6_nt s4533c2f0;
  ::S4533C9_nt s4533c2f1;
  ::S17777C6_nt s4533c2f2;
  ::S4533C11_nt s4533c2f3;
  void *s4533c2f4;
  ::S79C23_nt s4533c2f5;
  int s4533c2f6;
  void *s4533c2f7;
  int s4533c2f8[2];
  virtual  ~S4533C2_nt(); // _ZN10S4533C2_ntD1Ev
  virtual void  v10(); // _ZN10S4533C2_nt3v10Ev
  virtual void  v11(); // _ZN10S4533C2_nt3v11Ev
  virtual void  v12(); // _ZN10S4533C2_nt3v12Ev
  virtual void  v13(); // _ZN10S4533C2_nt3v13Ev
  virtual void  v14(); // _ZN10S4533C2_nt3v14Ev
  S4533C2_nt(); // tgen
};
//SIG(-1 S4533C2_nt) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12 FC3{ m Fp[3]} Fi:1} BC4{ v13} vd v1 v2 v3 v4 v5 FC5{ m FC6{ BC7{ m Fp Fi[2]}} Fi} FC8{ Fi:1 Fi:3} FC9{ m Fp} FC10{ m Fp} Fp FC11{ m Fi[4]} Fi Fp Fi[2]}


 S4533C2_nt ::~S4533C2_nt(){ note_dtor("S4533C2_nt", this);}
void  S4533C2_nt ::v10(){vfunc_called(this, "_ZN10S4533C2_nt3v10Ev");}
void  S4533C2_nt ::v11(){vfunc_called(this, "_ZN10S4533C2_nt3v11Ev");}
void  S4533C2_nt ::v12(){vfunc_called(this, "_ZN10S4533C2_nt3v12Ev");}
void  S4533C2_nt ::v13(){vfunc_called(this, "_ZN10S4533C2_nt3v13Ev");}
void  S4533C2_nt ::v14(){vfunc_called(this, "_ZN10S4533C2_nt3v14Ev");}
S4533C2_nt ::S4533C2_nt(){ note_ctor("S4533C2_nt", this);} // tgen

//skip512 S4533C2_nt

#else // __cplusplus

extern void _ZN10S4533C2_ntC1Ev();
extern void _ZN10S4533C2_ntD1Ev();
Name_Map name_map_S4533C2_nt[] = {
  NSPAIR(_ZN10S4533C2_ntC1Ev),
  NSPAIR(_ZN10S4533C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4533C3;
extern VTBL_ENTRY _ZTI7S4533C3[];
extern  VTBL_ENTRY _ZTV7S4533C3[];
extern Class_Descriptor cd_S4533C5;
extern VTBL_ENTRY _ZTI7S4533C5[];
extern  VTBL_ENTRY _ZTV7S4533C5[];
static Base_Class bases_S4533C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4533C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4533C5,    ABISELECT(40,20), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S4533C2_nt[];
extern void _ZN10S4533C2_ntD1Ev();
extern void _ZN10S4533C2_ntD0Ev();
extern void _ZN7S4533C32v2Ev();
extern void _ZN7S4533C32v3Ev();
extern void _ZN7S4533C32v4Ev();
extern void _ZN7S4533C32v5Ev();
extern void _ZN7S4533C32v6Ev();
extern void _ZN7S4533C32v7Ev();
extern void _ZN7S4533C32v8Ev();
extern void _ZN10S4533C2_nt3v10Ev();
extern void _ZN10S4533C2_nt3v11Ev();
extern void _ZN10S4533C2_nt3v12Ev();
extern void _ZN10S4533C2_nt3v13Ev();
extern void _ZN10S4533C2_nt3v14Ev();
extern void _ZN7S4533C52v9Ev();
static  VTBL_ENTRY vtc_S4533C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4533C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S4533C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4533C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S4533C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4533C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4533C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4533C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4533C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4533C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4533C32v8Ev,
  (VTBL_ENTRY)&_ZN10S4533C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S4533C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S4533C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S4533C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S4533C2_nt3v14Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI10S4533C2_nt[0]),
  (VTBL_ENTRY)&_ZN7S4533C52v9Ev,
};
extern VTBL_ENTRY _ZTI10S4533C2_nt[];
VTBL_ENTRY *P__ZTI10S4533C2_nt = _ZTI10S4533C2_nt; 
extern  VTBL_ENTRY _ZTV10S4533C2_nt[];
Class_Descriptor cd_S4533C2_nt = {  "S4533C2_nt", // class name
  bases_S4533C2_nt, 2,
  &(vtc_S4533C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI10S4533C2_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV10S4533C2_nt),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  S4533C13_nt  {
  short s4533c13f0[3];
  void  mf4533c13(); // _ZN11S4533C13_nt9mf4533c13Ev
};
//SIG(-1 S4533C13_nt) C1{ m Fs[3]}


void  S4533C13_nt ::mf4533c13(){}

//skip512 S4533C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4533C18_nt  {
  ::S4533C13_nt s4533c18f0;
  ::S4533C13_nt s4533c18f1;
  ::S4533C13_nt s4533c18f2;
  ::S4533C13_nt s4533c18f3;
  void  mf4533c18(); // _ZN11S4533C18_nt9mf4533c18Ev
};
//SIG(-1 S4533C18_nt) C1{ m FC2{ m Fs[3]} FC2 FC2 FC2}


void  S4533C18_nt ::mf4533c18(){}

//skip512 S4533C18_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4533C15_nt  {
  ::S79C45 s4533c15f0;
  ::S79C41 s4533c15f1;
  ::S4533C13_nt s4533c15f2;
  ::S4533C13_nt s4533c15f3;
  ::S4533C13_nt s4533c15f4;
  ::S4533C13_nt s4533c15f5;
  ::S4533C18_nt s4533c15f6;
  ::S4533C13_nt s4533c15f7;
  ::S4533C13_nt s4533c15f8;
  void  mf4533c15(); // _ZN11S4533C15_nt9mf4533c15Ev
};
//SIG(-1 S4533C15_nt) C1{ m FC2{ BC3{ m Fp Fi[2]}} FC4{ BC3} FC5{ m Fs[3]} FC5 FC5 FC5 FC6{ m FC5 FC5 FC5 FC5} FC5 FC5}


void  S4533C15_nt ::mf4533c15(){}

//skip512 S4533C15_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4533C1  : S4533C2_nt {
  ::S4533C13_nt s4533c1f0;
  ::S4533C13_nt s4533c1f1;
  ::S4533C13_nt s4533c1f2;
  ::S4533C13_nt s4533c1f3;
  ::S4533C13_nt s4533c1f4;
  ::S4533C15_nt s4533c1f5;
  virtual void  v1(); // _ZN7S4533C12v1Ev
  ~S4533C1(); // tgen
  S4533C1(); // tgen
};
//SIG(1 S4533C1) C1{ BC2{ BC3{ vd v2 v3 v4 v5 v6 v7 v8 FC4{ m Fp[3]} Fi:1} BC5{ v9} vd v10 v11 v12 v13 v14 FC6{ m FC7{ BC8{ m Fp Fi[2]}} Fi} FC9{ Fi:1 Fi:3} FC10{ m Fp} FC11{ m Fp} Fp FC12{ m Fi[4]} Fi Fp Fi[2]} v1 FC13{ m Fs[3]} FC13 FC13 FC13 FC13 FC14{ m FC15{ BC8} FC16{ BC8} FC13 FC13 FC13 FC13 FC17{ m FC13 FC13 FC13 FC13} FC13 FC13}}


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

static void Test_S4533C1()
{
  extern Class_Descriptor cd_S4533C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,52)];
    init_test(&cd_S4533C1, buf);
    S4533C1 *dp, &lv = *(dp=new (buf) S4533C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,204), "sizeof(S4533C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4533C1)");
    check_base_class_offset(lv, (S4533C3*)(S4533C2_nt*), 0, "S4533C1");
    check_base_class_offset(lv, (S4533C5*)(S4533C2_nt*), ABISELECT(40,20), "S4533C1");
    check_base_class_offset(lv, (S4533C2_nt*), 0, "S4533C1");
    check_field_offset(lv, s4533c1f0, ABISELECT(144,88), "S4533C1.s4533c1f0");
    check_field_offset(lv, s4533c1f1, ABISELECT(150,94), "S4533C1.s4533c1f1");
    check_field_offset(lv, s4533c1f2, ABISELECT(156,100), "S4533C1.s4533c1f2");
    check_field_offset(lv, s4533c1f3, ABISELECT(162,106), "S4533C1.s4533c1f3");
    check_field_offset(lv, s4533c1f4, ABISELECT(168,112), "S4533C1.s4533c1f4");
    check_field_offset(lv, s4533c1f5, ABISELECT(176,120), "S4533C1.s4533c1f5");
    test_class_info(&lv, &cd_S4533C1);
    dp->~S4533C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4533C1(Test_S4533C1, "S4533C1", ABISELECT(272,204));

#else // __cplusplus

extern void _ZN7S4533C1C1Ev();
extern void _ZN7S4533C1D1Ev();
Name_Map name_map_S4533C1[] = {
  NSPAIR(_ZN7S4533C1C1Ev),
  NSPAIR(_ZN7S4533C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4533C3;
extern VTBL_ENTRY _ZTI7S4533C3[];
extern  VTBL_ENTRY _ZTV7S4533C3[];
extern Class_Descriptor cd_S4533C5;
extern VTBL_ENTRY _ZTI7S4533C5[];
extern  VTBL_ENTRY _ZTV7S4533C5[];
extern Class_Descriptor cd_S4533C2_nt;
extern VTBL_ENTRY _ZTI10S4533C2_nt[];
extern  VTBL_ENTRY _ZTV10S4533C2_nt[];
static Base_Class bases_S4533C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4533C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4533C5,    ABISELECT(40,20), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S4533C2_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 _ZTI7S4533C1[];
extern void _ZN7S4533C1D1Ev();
extern void _ZN7S4533C1D0Ev();
extern void _ZN7S4533C32v2Ev();
extern void _ZN7S4533C32v3Ev();
extern void _ZN7S4533C32v4Ev();
extern void _ZN7S4533C32v5Ev();
extern void _ZN7S4533C32v6Ev();
extern void _ZN7S4533C32v7Ev();
extern void _ZN7S4533C32v8Ev();
extern void _ZN10S4533C2_nt3v10Ev();
extern void _ZN10S4533C2_nt3v11Ev();
extern void _ZN10S4533C2_nt3v12Ev();
extern void _ZN10S4533C2_nt3v13Ev();
extern void _ZN10S4533C2_nt3v14Ev();
extern void _ZN7S4533C12v1Ev();
extern void _ZN7S4533C52v9Ev();
static  VTBL_ENTRY vtc_S4533C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4533C1[0]),
  (VTBL_ENTRY)&_ZN7S4533C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4533C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4533C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4533C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4533C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4533C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4533C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4533C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4533C32v8Ev,
  (VTBL_ENTRY)&_ZN10S4533C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S4533C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S4533C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S4533C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S4533C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S4533C12v1Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S4533C1[0]),
  (VTBL_ENTRY)&_ZN7S4533C52v9Ev,
};
extern VTBL_ENTRY _ZTI7S4533C1[];
extern  VTBL_ENTRY _ZTV7S4533C1[];
Class_Descriptor cd_S4533C1 = {  "S4533C1", // class name
  bases_S4533C1, 3,
  &(vtc_S4533C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,204), // object size
  NSPAIRA(_ZTI7S4533C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4533C1),20, //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  S21142C3  : virtual S3589C3 {
  ~S21142C3(); // tgen
  S21142C3(); // tgen
};
//SIG(-1 S21142C3) C1{ VBC2{ vd m Fc FU3{ m Fc[6]}}}


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

static void Test_S21142C3()
{
  extern Class_Descriptor cd_S21142C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S21142C3, buf);
    S21142C3 *dp, &lv = *(dp=new (buf) S21142C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S21142C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21142C3)");
    check_base_class_offset(lv, (S3589C3*), ABISELECT(8,4), "S21142C3");
    test_class_info(&lv, &cd_S21142C3);
    dp->~S21142C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21142C3(Test_S21142C3, "S21142C3", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S21142C3C1Ev();
extern void _ZN8S21142C3D1Ev();
Name_Map name_map_S21142C3[] = {
  NSPAIR(_ZN8S21142C3C1Ev),
  NSPAIR(_ZN8S21142C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
static Base_Class bases_S21142C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    ABISELECT(8,4), //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},
  {0}};
extern VTBL_ENTRY _ZTI8S21142C3[];
extern void _ZN8S21142C3D1Ev();
extern void _ZN8S21142C3D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S21142C3D1Ev,_ZTv0_n12_N8S21142C3D1Ev)();
extern void ABISELECT(_ZThn8_N8S21142C3D1Ev,_ZThn4_N8S21142C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C3D0Ev,_ZTv0_n12_N8S21142C3D0Ev)();
extern void ABISELECT(_ZThn8_N8S21142C3D0Ev,_ZThn4_N8S21142C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21142C3[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C3[0]),
  (VTBL_ENTRY)&_ZN8S21142C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C3D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21142C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C3D1Ev,_ZTv0_n12_N8S21142C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C3D0Ev,_ZTv0_n12_N8S21142C3D0Ev),
};
extern VTBL_ENTRY _ZTV8S21142C3[];
static  VTT_ENTRY vtt_S21142C3[] = {
  {&(_ZTV8S21142C3[3]),  3,10},
  {&(_ZTV8S21142C3[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S21142C3[];
extern  VTBL_ENTRY _ZTV8S21142C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C3[];
static VTBL_ENTRY alt_thunk_names54[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C3D0Ev,_ZTv0_n12_N8S21142C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21142C3D0Ev,_ZThn4_N8S21142C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C3D1Ev,_ZTv0_n12_N8S21142C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21142C3D1Ev,_ZThn4_N8S21142C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21142C3 = {  "S21142C3", // class name
  bases_S21142C3, 1,
  &(vtc_S21142C3[0]), // expected_vtbl_contents
  &(vtt_S21142C3[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S21142C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21142C3),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21142C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names54,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21142C10  : S3589C3 {
  __tsi64 s21142c10f0;
  ::S3589C4 s21142c10f1;
  virtual  ~S21142C10(); // _ZN9S21142C10D1Ev
  S21142C10(); // tgen
};
//SIG(-1 S21142C10) C1{ BC2{ vd m Fc FU3{ m Fc[6]}} vd FL FU3}


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

static void Test_S21142C10()
{
  extern Class_Descriptor cd_S21142C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,8)];
    init_test(&cd_S21142C10, buf);
    S21142C10 *dp, &lv = *(dp=new (buf) S21142C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S21142C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21142C10)");
    check_base_class_offset(lv, (S3589C3*), 0, "S21142C10");
    check_field_offset(lv, s21142c10f0, ABISELECT(16,12), "S21142C10.s21142c10f0");
    check_field_offset(lv, s21142c10f1, ABISELECT(24,20), "S21142C10.s21142c10f1");
    test_class_info(&lv, &cd_S21142C10);
    dp->~S21142C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21142C10(Test_S21142C10, "S21142C10", ABISELECT(32,28));

#else // __cplusplus

extern void _ZN9S21142C10C1Ev();
extern void _ZN9S21142C10D1Ev();
Name_Map name_map_S21142C10[] = {
  NSPAIR(_ZN9S21142C10C1Ev),
  NSPAIR(_ZN9S21142C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
static Base_Class bases_S21142C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S21142C10[];
extern void _ZN9S21142C10D1Ev();
extern void _ZN9S21142C10D0Ev();
static  VTBL_ENTRY vtc_S21142C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C10[0]),
  (VTBL_ENTRY)&_ZN9S21142C10D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C10D0Ev,
};
extern VTBL_ENTRY _ZTI9S21142C10[];
extern  VTBL_ENTRY _ZTV9S21142C10[];
Class_Descriptor cd_S21142C10 = {  "S21142C10", // class name
  bases_S21142C10, 1,
  &(vtc_S21142C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,28), // object size
  NSPAIRA(_ZTI9S21142C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S21142C10),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  S21142C9  : virtual S21142C10 , virtual S3589C3 {
  virtual  ~S21142C9(); // _ZN8S21142C9D2Ev
  S21142C9(); // tgen
};
//SIG(-1 S21142C9) C1{ VBC2{ BC3{ vd m Fc FU4{ m Fc[6]}} vd FL FU4} VBC3 vd}


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

static void Test_S21142C9()
{
  extern Class_Descriptor cd_S21142C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S21142C9, buf);
    S21142C9 *dp, &lv = *(dp=new (buf) S21142C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S21142C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21142C9)");
    check_base_class_offset(lv, (S3589C3*)(S21142C10*), ABISELECT(8,4), "S21142C9");
    check_base_class_offset(lv, (S21142C10*), ABISELECT(8,4), "S21142C9");
    /*is_ambiguous_... S21142C9::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*), ABISELECT(40,32), "S21142C9");
    test_class_info(&lv, &cd_S21142C9);
    dp->~S21142C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21142C9(Test_S21142C9, "S21142C9", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN8S21142C9C1Ev();
extern void _ZN8S21142C9D2Ev();
Name_Map name_map_S21142C9[] = {
  NSPAIR(_ZN8S21142C9C1Ev),
  NSPAIR(_ZN8S21142C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C10;
extern VTBL_ENTRY _ZTI9S21142C10[];
extern  VTBL_ENTRY _ZTV9S21142C10[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
static Base_Class bases_S21142C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    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_S21142C10,    ABISELECT(8,4), //bcp->offset
    6, //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},
  {&cd_S3589C3,    ABISELECT(40,32), //bcp->offset
    11, //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 _ZTI8S21142C9[];
extern void _ZN8S21142C9D1Ev();
extern void _ZN8S21142C9D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZThn8_N8S21142C9D1Ev,_ZThn4_N8S21142C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
extern void ABISELECT(_ZThn8_N8S21142C9D0Ev,_ZThn4_N8S21142C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZThn40_N8S21142C9D1Ev,_ZThn32_N8S21142C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
extern void ABISELECT(_ZThn40_N8S21142C9D0Ev,_ZThn32_N8S21142C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21142C9[] = {
  ABISELECT(40,32),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&_ZN8S21142C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C9D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S21142C9[];
static  VTT_ENTRY vtt_S21142C9[] = {
  {&(_ZTV8S21142C9[4]),  4,16},
  {&(_ZTV8S21142C9[9]),  9,16},
  {&(_ZTV8S21142C9[14]),  14,16},
};
extern VTBL_ENTRY _ZTI8S21142C9[];
extern  VTBL_ENTRY _ZTV8S21142C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C9[];
static VTBL_ENTRY alt_thunk_names55[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21142C9D0Ev,_ZThn32_N8S21142C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21142C9D0Ev,_ZThn4_N8S21142C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21142C9D1Ev,_ZThn32_N8S21142C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21142C9D1Ev,_ZThn4_N8S21142C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21142C9 = {  "S21142C9", // class name
  bases_S21142C9, 3,
  &(vtc_S21142C9[0]), // expected_vtbl_contents
  &(vtt_S21142C9[0]), // expected_vtt_contents
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI8S21142C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21142C9),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21142C9),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names55,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21142C8  : virtual S21142C9 , S3589C3 , S3589C9_nt , S21142C10 {
  int s21142c8f0;
  void *s21142c8f1;
  ~S21142C8(); // tgen
  S21142C8(); // tgen
};
//SIG(-1 S21142C8) C1{ VBC2{ VBC3{ BC4{ vd m Fc FU5{ m Fc[6]}} vd FL FU5} VBC4 vd} BC4 BC6{ vd m Fi Fc Fi} BC3 Fi Fp}


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

static void Test_S21142C8()
{
  extern Class_Descriptor cd_S21142C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,28)];
    init_test(&cd_S21142C8, buf);
    S21142C8 *dp, &lv = *(dp=new (buf) S21142C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,108), "sizeof(S21142C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21142C8)");
    /*is_ambiguous_... S21142C8::S21142C10 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C10*), ABISELECT(96,68), "S21142C8");
    check_base_class_offset(lv, (S21142C10*)(S21142C9*), ABISELECT(96,68), "S21142C8");
    /*is_ambiguous_... S21142C9::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C9*), ABISELECT(128,96), "S21142C8");
    check_base_class_offset(lv, (S21142C9*), ABISELECT(88,64), "S21142C8");
    /*is_ambiguous_... S21142C8::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*), 0, "S21142C8");
    check_base_class_offset(lv, (S3589C9_nt*), ABISELECT(16,12), "S21142C8");
    /*is_ambiguous_... S21142C8::S21142C10 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C10*), ABISELECT(40,28), "S21142C8");
    /*is_ambiguous_... S21142C8::S21142C10 */ AMB_check_base_class_offset(lv, (S21142C10*), ABISELECT(40,28), "S21142C8");
    check_field_offset(lv, s21142c8f0, ABISELECT(72,56), "S21142C8.s21142c8f0");
    check_field_offset(lv, s21142c8f1, ABISELECT(80,60), "S21142C8.s21142c8f1");
    test_class_info(&lv, &cd_S21142C8);
    dp->~S21142C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21142C8(Test_S21142C8, "S21142C8", ABISELECT(144,108));

#else // __cplusplus

extern void _ZN8S21142C8C1Ev();
extern void _ZN8S21142C8D1Ev();
Name_Map name_map_S21142C8[] = {
  NSPAIR(_ZN8S21142C8C1Ev),
  NSPAIR(_ZN8S21142C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C10;
extern VTBL_ENTRY _ZTI9S21142C10[];
extern  VTBL_ENTRY _ZTV9S21142C10[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C9;
extern VTBL_ENTRY _ZTI8S21142C9[];
extern  VTBL_ENTRY _ZTV8S21142C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C9[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C10;
extern VTBL_ENTRY _ZTI9S21142C10[];
extern  VTBL_ENTRY _ZTV9S21142C10[];
static Base_Class bases_S21142C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    ABISELECT(96,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
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S21142C10,    ABISELECT(96,68), //bcp->offset
    22, //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
    3, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(128,96), //bcp->offset
    27, //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_S21142C9,    ABISELECT(88,64), //bcp->offset
    15, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3589C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3589C9_nt,    ABISELECT(16,12), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3589C3,    ABISELECT(40,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
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S21142C10,    ABISELECT(40,28), //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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21142C8[];
extern void _ZN8S21142C8D1Ev();
extern void _ZN8S21142C8D0Ev();
extern void ABISELECT(_ZThn16_N8S21142C8D1Ev,_ZThn12_N8S21142C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S21142C8D0Ev,_ZThn12_N8S21142C8D0Ev)();
extern void ABISELECT(_ZThn40_N8S21142C8D1Ev,_ZThn28_N8S21142C8D1Ev)();
extern void ABISELECT(_ZThn40_N8S21142C8D0Ev,_ZThn28_N8S21142C8D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S21142C8D1Ev,_ZTv0_n20_N8S21142C8D1Ev)();
extern void ABISELECT(_ZThn88_N8S21142C8D1Ev,_ZThn64_N8S21142C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21142C8D0Ev,_ZTv0_n20_N8S21142C8D0Ev)();
extern void ABISELECT(_ZThn88_N8S21142C8D0Ev,_ZThn64_N8S21142C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev)();
extern void ABISELECT(_ZThn96_N8S21142C8D1Ev,_ZThn68_N8S21142C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev)();
extern void ABISELECT(_ZThn96_N8S21142C8D0Ev,_ZThn68_N8S21142C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev)();
extern void ABISELECT(_ZThn128_N8S21142C8D1Ev,_ZThn96_N8S21142C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev)();
extern void ABISELECT(_ZThn128_N8S21142C8D0Ev,_ZThn96_N8S21142C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21142C8[] = {
  ABISELECT(128,96),
  ABISELECT(96,68),
  ABISELECT(88,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&_ZN8S21142C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C8D0Ev,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21142C8D1Ev,_ZThn12_N8S21142C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21142C8D0Ev,_ZThn12_N8S21142C8D0Ev),
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S21142C8D1Ev,_ZThn28_N8S21142C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S21142C8D0Ev,_ZThn28_N8S21142C8D0Ev),
  ABISELECT(-88,-64),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C8D1Ev,_ZTv0_n20_N8S21142C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C8D0Ev,_ZTv0_n20_N8S21142C8D0Ev),
  ABISELECT(-96,-68),
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev),
  ABISELECT(-128,-96),
  ABISELECT(-128,-96),
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev),
};
extern VTBL_ENTRY _ZTV8S21142C8[];
extern void _ZN8S21142C9D1Ev();
extern void _ZN8S21142C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C9__8S21142C8[] = {
  ABISELECT(40,32),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&_ZN8S21142C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZThn8_N8S21142C9D1Ev,_ZThn4_N8S21142C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
extern void ABISELECT(_ZThn8_N8S21142C9D0Ev,_ZThn4_N8S21142C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__8S21142C9__8S21142C8[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZThn40_N8S21142C9D1Ev,_ZThn32_N8S21142C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
extern void ABISELECT(_ZThn40_N8S21142C9D0Ev,_ZThn32_N8S21142C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S21142C9__8S21142C8[] = {
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
static  VTT_ENTRY vtt_S21142C8[] = {
  {&(_ZTV8S21142C8[5]),  5,32},
  {&(_ZTV8S21142C8[20]),  20,32},
  {&(_ZTV8S21142C8[25]),  25,32},
  {&(_ZTV8S21142C8[30]),  30,32},
  {&(_tg__ZTV8S21142C9__8S21142C8[4]),  4,6},
  {&(_tg__ZTV9S21142C10__8S21142C9__8S21142C8[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S21142C9__8S21142C8[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21142C8[];
extern  VTBL_ENTRY _ZTV8S21142C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C8[];
static VTBL_ENTRY alt_thunk_names56[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21142C9D0Ev,_ZThn32_N8S21142C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21142C9D0Ev,_ZThn4_N8S21142C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21142C9D1Ev,_ZThn32_N8S21142C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21142C9D1Ev,_ZThn4_N8S21142C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S21142C8D0Ev,_ZThn96_N8S21142C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S21142C8D0Ev,_ZThn68_N8S21142C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S21142C8D1Ev,_ZThn96_N8S21142C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S21142C8D1Ev,_ZThn68_N8S21142C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C8D0Ev,_ZTv0_n20_N8S21142C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S21142C8D0Ev,_ZThn64_N8S21142C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C8D1Ev,_ZTv0_n20_N8S21142C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S21142C8D1Ev,_ZThn64_N8S21142C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21142C8 = {  "S21142C8", // class name
  bases_S21142C8, 8,
  &(vtc_S21142C8[0]), // expected_vtbl_contents
  &(vtt_S21142C8[0]), // expected_vtt_contents
  ABISELECT(144,108), // object size
  NSPAIRA(_ZTI8S21142C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S21142C8),32, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21142C8),7, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names56,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21142C7  : S21142C8 , S21142C9 , virtual S3589C9_nt {
  ~S21142C7(); // tgen
  S21142C7(); // tgen
};
//SIG(-1 S21142C7) C1{ BC2{ VBC3{ VBC4{ BC5{ vd m Fc FU6{ m Fc[6]}} vd FL FU6} VBC5 vd} BC5 BC7{ vd m Fi Fc Fi} BC4 Fi Fp} BC3 VBC7}


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

static void Test_S21142C7()
{
  extern Class_Descriptor cd_S21142C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,33)];
    init_test(&cd_S21142C7, buf);
    S21142C7 *dp, &lv = *(dp=new (buf) S21142C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,128), "sizeof(S21142C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21142C7)");
    /*is_ambiguous_... S21142C7::S21142C10 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C10*), ABISELECT(104,72), "S21142C7");
    /*is_ambiguous_... S21142C7::S21142C9 */ AMB_check_base_class_offset(lv, (S21142C10*)(S21142C9*), ABISELECT(104,72), "S21142C7");
    /*is_ambiguous_... S21142C7::S21142C9 */ AMB_check_base_class_offset(lv, (S21142C10*)(S21142C9*), ABISELECT(104,72), "S21142C7");
    /*is_ambiguous_... S21142C7::S21142C9 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C9*), ABISELECT(136,100), "S21142C7");
    /*is_ambiguous_... S21142C7::S21142C9 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C9*), ABISELECT(136,100), "S21142C7");
    check_base_class_offset(lv, (S21142C9*)(S21142C8*), ABISELECT(96,68), "S21142C7");
    /*is_ambiguous_... S21142C8::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C8*), 0, "S21142C7");
    check_base_class_offset(lv, (S3589C9_nt*)(S21142C8*), ABISELECT(16,12), "S21142C7");
    /*is_ambiguous_... S21142C8::S21142C10 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C10*)(S21142C8*), ABISELECT(40,28), "S21142C7");
    /*is_ambiguous_... S21142C8::S21142C10 */ AMB_check_base_class_offset(lv, (S21142C10*)(S21142C8*), ABISELECT(40,28), "S21142C7");
    check_base_class_offset(lv, (S21142C8*), 0, "S21142C7");
    /*is_ambiguous_... S21142C7::S21142C9 */ AMB_check_base_class_offset(lv, (S21142C9*), ABISELECT(88,64), "S21142C7");
    /*is_ambiguous_... S21142C7::S3589C9_nt */ AMB_check_base_class_offset(lv, (S3589C9_nt*), ABISELECT(152,112), "S21142C7");
    test_class_info(&lv, &cd_S21142C7);
    dp->~S21142C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21142C7(Test_S21142C7, "S21142C7", ABISELECT(176,128));

#else // __cplusplus

extern void _ZN8S21142C7C1Ev();
extern void _ZN8S21142C7D1Ev();
Name_Map name_map_S21142C7[] = {
  NSPAIR(_ZN8S21142C7C1Ev),
  NSPAIR(_ZN8S21142C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C10;
extern VTBL_ENTRY _ZTI9S21142C10[];
extern  VTBL_ENTRY _ZTV9S21142C10[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C9;
extern VTBL_ENTRY _ZTI8S21142C9[];
extern  VTBL_ENTRY _ZTV8S21142C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C9[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C10;
extern VTBL_ENTRY _ZTI9S21142C10[];
extern  VTBL_ENTRY _ZTV9S21142C10[];
extern Class_Descriptor cd_S21142C8;
extern VTBL_ENTRY _ZTI8S21142C8[];
extern  VTBL_ENTRY _ZTV8S21142C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C8[];
extern Class_Descriptor cd_S21142C9;
extern VTBL_ENTRY _ZTI8S21142C9[];
extern  VTBL_ENTRY _ZTV8S21142C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C9[];
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
static Base_Class bases_S21142C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    ABISELECT(104,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
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S21142C10,    ABISELECT(104,72), //bcp->offset
    29, //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
    3, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(136,100), //bcp->offset
    34, //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
    3, //immediately_derived
  0, 1},
  {&cd_S21142C9,    ABISELECT(96,68), //bcp->offset
    22, //bcp->virtual_function_table_offset
    5, //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
    8, //immediately_derived
  0, 1},
  {&cd_S3589C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3589C9_nt,    ABISELECT(16,12), //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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3589C3,    ABISELECT(40,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
    8, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S21142C10,    ABISELECT(40,28), //bcp->offset
    12, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S21142C8,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21142C9,    ABISELECT(88,64), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3589C9_nt,    ABISELECT(152,112), //bcp->offset
    39, //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 _ZTI8S21142C7[];
extern void _ZN8S21142C7D1Ev();
extern void _ZN8S21142C7D0Ev();
extern void ABISELECT(_ZThn16_N8S21142C7D1Ev,_ZThn12_N8S21142C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S21142C7D0Ev,_ZThn12_N8S21142C7D0Ev)();
extern void ABISELECT(_ZThn40_N8S21142C7D1Ev,_ZThn28_N8S21142C7D1Ev)();
extern void ABISELECT(_ZThn40_N8S21142C7D0Ev,_ZThn28_N8S21142C7D0Ev)();
extern void ABISELECT(_ZThn88_N8S21142C7D1Ev,_ZThn64_N8S21142C7D1Ev)();
extern void ABISELECT(_ZThn88_N8S21142C7D0Ev,_ZThn64_N8S21142C7D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S21142C7D1Ev,_ZTv0_n20_N8S21142C7D1Ev)();
extern void ABISELECT(_ZThn96_N8S21142C7D1Ev,_ZThn68_N8S21142C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21142C7D0Ev,_ZTv0_n20_N8S21142C7D0Ev)();
extern void ABISELECT(_ZThn96_N8S21142C7D0Ev,_ZThn68_N8S21142C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C7D1Ev,_ZTv0_n12_N8S21142C7D1Ev)();
extern void ABISELECT(_ZThn104_N8S21142C7D1Ev,_ZThn72_N8S21142C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C7D0Ev,_ZTv0_n12_N8S21142C7D0Ev)();
extern void ABISELECT(_ZThn104_N8S21142C7D0Ev,_ZThn72_N8S21142C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C7D1Ev,_ZTv0_n12_N8S21142C7D1Ev)();
extern void ABISELECT(_ZThn136_N8S21142C7D1Ev,_ZThn100_N8S21142C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C7D0Ev,_ZTv0_n12_N8S21142C7D0Ev)();
extern void ABISELECT(_ZThn136_N8S21142C7D0Ev,_ZThn100_N8S21142C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C7D1Ev,_ZTv0_n12_N8S21142C7D1Ev)();
extern void ABISELECT(_ZThn152_N8S21142C7D1Ev,_ZThn112_N8S21142C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C7D0Ev,_ZTv0_n12_N8S21142C7D0Ev)();
extern void ABISELECT(_ZThn152_N8S21142C7D0Ev,_ZThn112_N8S21142C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21142C7[] = {
  ABISELECT(152,112),
  ABISELECT(136,100),
  ABISELECT(104,72),
  ABISELECT(96,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C7[0]),
  (VTBL_ENTRY)&_ZN8S21142C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C7D0Ev,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S21142C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21142C7D1Ev,_ZThn12_N8S21142C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21142C7D0Ev,_ZThn12_N8S21142C7D0Ev),
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI8S21142C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S21142C7D1Ev,_ZThn28_N8S21142C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S21142C7D0Ev,_ZThn28_N8S21142C7D0Ev),
  ABISELECT(48,36),
  ABISELECT(16,8),
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI8S21142C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N8S21142C7D1Ev,_ZThn64_N8S21142C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N8S21142C7D0Ev,_ZThn64_N8S21142C7D0Ev),
  ABISELECT(-96,-68),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI8S21142C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C7D1Ev,_ZTv0_n20_N8S21142C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C7D0Ev,_ZTv0_n20_N8S21142C7D0Ev),
  ABISELECT(-104,-72),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI8S21142C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C7D1Ev,_ZTv0_n12_N8S21142C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C7D0Ev,_ZTv0_n12_N8S21142C7D0Ev),
  ABISELECT(-136,-100),
  ABISELECT(-136,-100),
  (VTBL_ENTRY)&(_ZTI8S21142C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C7D1Ev,_ZTv0_n12_N8S21142C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C7D0Ev,_ZTv0_n12_N8S21142C7D0Ev),
  ABISELECT(-152,-112),
  ABISELECT(-152,-112),
  (VTBL_ENTRY)&(_ZTI8S21142C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C7D1Ev,_ZTv0_n12_N8S21142C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C7D0Ev,_ZTv0_n12_N8S21142C7D0Ev),
};
extern VTBL_ENTRY _ZTV8S21142C7[];
extern void _ZN8S21142C8D1Ev();
extern void _ZN8S21142C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C8__8S21142C7[] = {
  ABISELECT(136,100),
  ABISELECT(104,72),
  ABISELECT(96,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&_ZN8S21142C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S21142C8D1Ev,_ZTv0_n20_N8S21142C8D1Ev)();
extern void ABISELECT(_ZThn96_N8S21142C8D1Ev,_ZThn68_N8S21142C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21142C8D0Ev,_ZTv0_n20_N8S21142C8D0Ev)();
extern void ABISELECT(_ZThn96_N8S21142C8D0Ev,_ZThn68_N8S21142C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21142C9__8S21142C8__8S21142C7[] = {
  ABISELECT(-96,-68),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C8D1Ev,_ZTv0_n20_N8S21142C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C8D0Ev,_ZTv0_n20_N8S21142C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev)();
extern void ABISELECT(_ZThn104_N8S21142C8D1Ev,_ZThn72_N8S21142C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev)();
extern void ABISELECT(_ZThn104_N8S21142C8D0Ev,_ZThn72_N8S21142C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__8S21142C8__8S21142C7[] = {
  ABISELECT(-104,-72),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev)();
extern void ABISELECT(_ZThn136_N8S21142C8D1Ev,_ZThn100_N8S21142C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev)();
extern void ABISELECT(_ZThn136_N8S21142C8D0Ev,_ZThn100_N8S21142C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S21142C8__8S21142C7[] = {
  ABISELECT(-136,-100),
  ABISELECT(-136,-100),
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev),
};
extern void _ZN8S21142C9D1Ev();
extern void _ZN8S21142C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C9__A__8S21142C7[] = {
  ABISELECT(48,36),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&_ZN8S21142C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S21142C9D1Ev,_ZThn8_N8S21142C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S21142C9D0Ev,_ZThn8_N8S21142C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__8S21142C9__A__8S21142C7[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZThn48_N8S21142C9D1Ev,_ZThn36_N8S21142C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
extern void ABISELECT(_ZThn48_N8S21142C9D0Ev,_ZThn36_N8S21142C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S21142C9__A__8S21142C7[] = {
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void _ZN8S21142C9D1Ev();
extern void _ZN8S21142C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C9__8S21142C7[] = {
  ABISELECT(40,32),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&_ZN8S21142C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZThn8_N8S21142C9D1Ev,_ZThn4_N8S21142C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
extern void ABISELECT(_ZThn8_N8S21142C9D0Ev,_ZThn4_N8S21142C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__8S21142C9__8S21142C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZThn40_N8S21142C9D1Ev,_ZThn32_N8S21142C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
extern void ABISELECT(_ZThn40_N8S21142C9D0Ev,_ZThn32_N8S21142C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S21142C9__8S21142C7[] = {
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
static  VTT_ENTRY vtt_S21142C7[] = {
  {&(_ZTV8S21142C7[6]),  6,44},
  {&(_tg__ZTV8S21142C8__8S21142C7[5]),  5,7},
  {&(_tg__ZTV8S21142C9__8S21142C8__8S21142C7[5]),  5,7},
  {&(_tg__ZTV9S21142C10__8S21142C8__8S21142C7[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S21142C8__8S21142C7[3]),  3,5},
  {&(_tg__ZTV8S21142C9__A__8S21142C7[4]),  4,6},
  {&(_tg__ZTV9S21142C10__8S21142C9__A__8S21142C7[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S21142C9__A__8S21142C7[3]),  3,5},
  {&(_ZTV8S21142C7[27]),  27,44},
  {&(_ZTV8S21142C7[32]),  32,44},
  {&(_ZTV8S21142C7[37]),  37,44},
  {&(_ZTV8S21142C7[20]),  20,44},
  {&(_ZTV8S21142C7[42]),  42,44},
  {&(_tg__ZTV8S21142C9__8S21142C7[4]),  4,6},
  {&(_tg__ZTV9S21142C10__8S21142C9__8S21142C7[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S21142C9__8S21142C7[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21142C7[];
extern  VTBL_ENTRY _ZTV8S21142C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C7[];
static VTBL_ENTRY alt_thunk_names57[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21142C9D0Ev,_ZThn32_N8S21142C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21142C9D0Ev,_ZThn4_N8S21142C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21142C9D0Ev,_ZThn36_N8S21142C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21142C9D0Ev,_ZThn8_N8S21142C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21142C9D1Ev,_ZThn32_N8S21142C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21142C9D1Ev,_ZThn4_N8S21142C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21142C9D1Ev,_ZThn36_N8S21142C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21142C9D1Ev,_ZThn8_N8S21142C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S21142C8D0Ev,_ZThn100_N8S21142C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21142C8D0Ev,_ZThn72_N8S21142C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S21142C8D1Ev,_ZThn100_N8S21142C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21142C8D1Ev,_ZThn72_N8S21142C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C8D0Ev,_ZTv0_n20_N8S21142C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S21142C8D0Ev,_ZThn68_N8S21142C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C8D1Ev,_ZTv0_n20_N8S21142C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S21142C8D1Ev,_ZThn68_N8S21142C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C7D0Ev,_ZTv0_n12_N8S21142C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S21142C7D0Ev,_ZThn112_N8S21142C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S21142C7D0Ev,_ZThn100_N8S21142C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21142C7D0Ev,_ZThn72_N8S21142C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C7D1Ev,_ZTv0_n12_N8S21142C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S21142C7D1Ev,_ZThn112_N8S21142C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S21142C7D1Ev,_ZThn100_N8S21142C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21142C7D1Ev,_ZThn72_N8S21142C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C7D0Ev,_ZTv0_n20_N8S21142C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S21142C7D0Ev,_ZThn68_N8S21142C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C7D1Ev,_ZTv0_n20_N8S21142C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S21142C7D1Ev,_ZThn68_N8S21142C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21142C7 = {  "S21142C7", // class name
  bases_S21142C7, 11,
  &(vtc_S21142C7[0]), // expected_vtbl_contents
  &(vtt_S21142C7[0]), // expected_vtt_contents
  ABISELECT(176,128), // object size
  NSPAIRA(_ZTI8S21142C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21142C7),44, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21142C7),16, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names57,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21142C15  : virtual S3589C9_nt {
  void *s21142c15f0[2];
  ~S21142C15(); // tgen
  S21142C15(); // tgen
};
//SIG(-1 S21142C15) C1{ VBC2{ vd m Fi Fc Fi} Fp[2]}


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

static void Test_S21142C15()
{
  extern Class_Descriptor cd_S21142C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S21142C15, buf);
    S21142C15 *dp, &lv = *(dp=new (buf) S21142C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S21142C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21142C15)");
    check_base_class_offset(lv, (S3589C9_nt*), ABISELECT(24,12), "S21142C15");
    check_field_offset(lv, s21142c15f0, ABISELECT(8,4), "S21142C15.s21142c15f0");
    test_class_info(&lv, &cd_S21142C15);
    dp->~S21142C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21142C15(Test_S21142C15, "S21142C15", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN9S21142C15C1Ev();
extern void _ZN9S21142C15D1Ev();
Name_Map name_map_S21142C15[] = {
  NSPAIR(_ZN9S21142C15C1Ev),
  NSPAIR(_ZN9S21142C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
static Base_Class bases_S21142C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C9_nt,    ABISELECT(24,12), //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},
  {0}};
extern VTBL_ENTRY _ZTI9S21142C15[];
extern void _ZN9S21142C15D1Ev();
extern void _ZN9S21142C15D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S21142C15D1Ev,_ZTv0_n12_N9S21142C15D1Ev)();
extern void ABISELECT(_ZThn24_N9S21142C15D1Ev,_ZThn12_N9S21142C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C15D0Ev,_ZTv0_n12_N9S21142C15D0Ev)();
extern void ABISELECT(_ZThn24_N9S21142C15D0Ev,_ZThn12_N9S21142C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21142C15[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C15[0]),
  (VTBL_ENTRY)&_ZN9S21142C15D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C15D0Ev,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S21142C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C15D1Ev,_ZTv0_n12_N9S21142C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C15D0Ev,_ZTv0_n12_N9S21142C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S21142C15[];
static  VTT_ENTRY vtt_S21142C15[] = {
  {&(_ZTV9S21142C15[3]),  3,10},
  {&(_ZTV9S21142C15[8]),  8,10},
};
extern VTBL_ENTRY _ZTI9S21142C15[];
extern  VTBL_ENTRY _ZTV9S21142C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C15[];
static VTBL_ENTRY alt_thunk_names58[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C15D0Ev,_ZTv0_n12_N9S21142C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S21142C15D0Ev,_ZThn12_N9S21142C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C15D1Ev,_ZTv0_n12_N9S21142C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S21142C15D1Ev,_ZThn12_N9S21142C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21142C15 = {  "S21142C15", // class name
  bases_S21142C15, 1,
  &(vtc_S21142C15[0]), // expected_vtbl_contents
  &(vtt_S21142C15[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI9S21142C15),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S21142C15),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21142C15),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names58,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21142C13  : S3589C13_nt , virtual S21142C15 , virtual S21142C9 , S3589C3 , virtual S21142C3 {
  char s21142c13f0;
  int s21142c13f1;
  ~S21142C13(); // tgen
  S21142C13(); // tgen
};
//SIG(-1 S21142C13) C1{ BC2{ m FD} VBC3{ VBC4{ vd m Fi Fc Fi} Fp[2]} VBC5{ VBC6{ BC7{ vd m Fc FU8{ m Fc[6]}} vd FL FU8} VBC7 vd} BC7 VBC9{ VBC7} Fc Fi}


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

static void Test_S21142C13()
{
  extern Class_Descriptor cd_S21142C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,28)];
    init_test(&cd_S21142C13, buf);
    S21142C13 *dp, &lv = *(dp=new (buf) S21142C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S21142C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21142C13)");
    check_base_class_offset(lv, (S3589C13_nt*), ABISELECT(16,12), "S21142C13");
    check_base_class_offset(lv, (S3589C9_nt*)(S21142C15*), ABISELECT(64,44), "S21142C13");
    check_base_class_offset(lv, (S21142C15*), ABISELECT(40,32), "S21142C13");
    check_base_class_offset(lv, (S3589C3*)(S21142C10*), ABISELECT(96,64), "S21142C13");
    check_base_class_offset(lv, (S21142C10*)(S21142C9*), ABISELECT(96,64), "S21142C13");
    /*is_ambiguous_... S21142C9::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C9*), ABISELECT(128,92), "S21142C13");
    check_base_class_offset(lv, (S3589C3*)(S21142C3*), ABISELECT(128,92), "S21142C13");
    check_base_class_offset(lv, (S21142C9*), ABISELECT(88,60), "S21142C13");
    /*is_ambiguous_... S21142C13::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*), 0, "S21142C13");
    check_base_class_offset(lv, (S21142C3*), ABISELECT(144,104), "S21142C13");
    check_field_offset(lv, s21142c13f0, ABISELECT(32,24), "S21142C13.s21142c13f0");
    check_field_offset(lv, s21142c13f1, ABISELECT(36,28), "S21142C13.s21142c13f1");
    test_class_info(&lv, &cd_S21142C13);
    dp->~S21142C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21142C13(Test_S21142C13, "S21142C13", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN9S21142C13C1Ev();
extern void _ZN9S21142C13D1Ev();
Name_Map name_map_S21142C13[] = {
  NSPAIR(_ZN9S21142C13C1Ev),
  NSPAIR(_ZN9S21142C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C13_nt;
extern VTBL_ENTRY _ZTI11S3589C13_nt[];
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
extern Class_Descriptor cd_S21142C15;
extern VTBL_ENTRY _ZTI9S21142C15[];
extern  VTBL_ENTRY _ZTV9S21142C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C15[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C10;
extern VTBL_ENTRY _ZTI9S21142C10[];
extern  VTBL_ENTRY _ZTV9S21142C10[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C9;
extern VTBL_ENTRY _ZTI8S21142C9[];
extern  VTBL_ENTRY _ZTV8S21142C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C9[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C3;
extern VTBL_ENTRY _ZTI8S21142C3[];
extern  VTBL_ENTRY _ZTV8S21142C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C3[];
static Base_Class bases_S21142C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C13_nt,    ABISELECT(16,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},
  {&cd_S3589C9_nt,    ABISELECT(64,44), //bcp->offset
    16, //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
    2, //immediately_derived
  0, 1},
  {&cd_S21142C15,    ABISELECT(40,32), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3589C3,    ABISELECT(96,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_S21142C10,    ABISELECT(96,64), //bcp->offset
    28, //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
    6, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(128,92), //bcp->offset
    33, //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
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S21142C9,    ABISELECT(88,60), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3589C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S21142C3,    ABISELECT(144,104), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S21142C13[];
extern void _ZN9S21142C13D1Ev();
extern void _ZN9S21142C13D0Ev();
extern void ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn40_N9S21142C13D1Ev,_ZThn32_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn40_N9S21142C13D0Ev,_ZThn32_N9S21142C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn64_N9S21142C13D1Ev,_ZThn44_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn64_N9S21142C13D0Ev,_ZThn44_N9S21142C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21142C13D1Ev,_ZTv0_n20_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn88_N9S21142C13D1Ev,_ZThn60_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21142C13D0Ev,_ZTv0_n20_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn88_N9S21142C13D0Ev,_ZThn60_N9S21142C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn96_N9S21142C13D1Ev,_ZThn64_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn96_N9S21142C13D0Ev,_ZThn64_N9S21142C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn128_N9S21142C13D1Ev,_ZThn92_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn128_N9S21142C13D0Ev,_ZThn92_N9S21142C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn144_N9S21142C13D1Ev,_ZThn104_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn144_N9S21142C13D0Ev,_ZThn104_N9S21142C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21142C13[] = {
  ABISELECT(144,104),
  ABISELECT(128,92),
  ABISELECT(96,64),
  ABISELECT(88,60),
  ABISELECT(64,44),
  ABISELECT(40,32),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&_ZN9S21142C13D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C13D0Ev,
  ABISELECT(-40,-32),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev),
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev),
  ABISELECT(-88,-60),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C13D1Ev,_ZTv0_n20_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C13D0Ev,_ZTv0_n20_N9S21142C13D0Ev),
  ABISELECT(-96,-64),
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev),
  ABISELECT(-128,-92),
  ABISELECT(-128,-92),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev),
  ABISELECT(-144,-104),
  ABISELECT(-16,-12),
  ABISELECT(-144,-104),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S21142C13[];
extern void _ZN9S21142C15D1Ev();
extern void _ZN9S21142C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21142C15__9S21142C13[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C15[0]),
  (VTBL_ENTRY)&_ZN9S21142C15D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C15D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21142C15D1Ev,_ZTv0_n12_N9S21142C15D1Ev)();
extern void ABISELECT(_ZThn24_N9S21142C15D1Ev,_ZThn12_N9S21142C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C15D0Ev,_ZTv0_n12_N9S21142C15D0Ev)();
extern void ABISELECT(_ZThn24_N9S21142C15D0Ev,_ZThn12_N9S21142C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__9S21142C15__9S21142C13[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S21142C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C15D1Ev,_ZTv0_n12_N9S21142C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C15D0Ev,_ZTv0_n12_N9S21142C15D0Ev),
};
extern void _ZN8S21142C9D1Ev();
extern void _ZN8S21142C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C9__9S21142C13[] = {
  ABISELECT(40,32),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&_ZN8S21142C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZThn8_N8S21142C9D1Ev,_ZThn4_N8S21142C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
extern void ABISELECT(_ZThn8_N8S21142C9D0Ev,_ZThn4_N8S21142C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__8S21142C9__9S21142C13[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZThn40_N8S21142C9D1Ev,_ZThn32_N8S21142C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
extern void ABISELECT(_ZThn40_N8S21142C9D0Ev,_ZThn32_N8S21142C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S21142C9__9S21142C13[] = {
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void _ZN8S21142C3D1Ev();
extern void _ZN8S21142C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C3__9S21142C13[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C3[0]),
  (VTBL_ENTRY)&_ZN8S21142C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21142C3D1Ev,_ZTv0_n12_N8S21142C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21142C3D0Ev,_ZTv0_n12_N8S21142C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S21142C3__9S21142C13[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S21142C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C3D1Ev,_ZTv0_n12_N8S21142C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C3D0Ev,_ZTv0_n12_N8S21142C3D0Ev),
};
static  VTT_ENTRY vtt_S21142C13[] = {
  {&(_ZTV9S21142C13[8]),  8,44},
  {&(_ZTV9S21142C13[14]),  14,44},
  {&(_ZTV9S21142C13[19]),  19,44},
  {&(_ZTV9S21142C13[26]),  26,44},
  {&(_ZTV9S21142C13[31]),  31,44},
  {&(_ZTV9S21142C13[36]),  36,44},
  {&(_ZTV9S21142C13[42]),  42,44},
  {&(_tg__ZTV9S21142C15__9S21142C13[3]),  3,5},
  {&(_tg__ZTV10S3589C9_nt__9S21142C15__9S21142C13[3]),  3,5},
  {&(_tg__ZTV8S21142C9__9S21142C13[4]),  4,6},
  {&(_tg__ZTV9S21142C10__8S21142C9__9S21142C13[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S21142C9__9S21142C13[3]),  3,5},
  {&(_tg__ZTV8S21142C3__9S21142C13[3]),  3,5},
  {&(_tg__ZTV7S3589C3__8S21142C3__9S21142C13[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S21142C13[];
extern  VTBL_ENTRY _ZTV9S21142C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C13[];
static VTBL_ENTRY alt_thunk_names59[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21142C9D0Ev,_ZThn32_N8S21142C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21142C9D0Ev,_ZThn4_N8S21142C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21142C9D1Ev,_ZThn32_N8S21142C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21142C9D1Ev,_ZThn4_N8S21142C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C15D0Ev,_ZTv0_n12_N9S21142C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S21142C15D0Ev,_ZThn12_N9S21142C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C15D1Ev,_ZTv0_n12_N9S21142C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S21142C15D1Ev,_ZThn12_N9S21142C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21142C13D0Ev,_ZTv0_n20_N9S21142C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S21142C13D0Ev,_ZThn60_N9S21142C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21142C13D1Ev,_ZTv0_n20_N9S21142C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S21142C13D1Ev,_ZThn60_N9S21142C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S21142C13D0Ev,_ZThn92_N9S21142C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S21142C13D0Ev,_ZThn64_N9S21142C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S21142C13D0Ev,_ZThn44_N9S21142C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S21142C13D1Ev,_ZThn92_N9S21142C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S21142C13D1Ev,_ZThn64_N9S21142C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S21142C13D1Ev,_ZThn44_N9S21142C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S21142C13D0Ev,_ZThn104_N9S21142C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S21142C13D0Ev,_ZThn32_N9S21142C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S21142C13D1Ev,_ZThn104_N9S21142C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S21142C13D1Ev,_ZThn32_N9S21142C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21142C13 = {  "S21142C13", // class name
  bases_S21142C13, 9,
  &(vtc_S21142C13[0]), // expected_vtbl_contents
  &(vtt_S21142C13[0]), // expected_vtt_contents
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI9S21142C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S21142C13),44, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21142C13),14, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names59,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21142C12  : virtual S21142C9 , S21142C3 , virtual S21142C13 {
  virtual  ~S21142C12(); // _ZN9S21142C12D2Ev
  S21142C12(); // tgen
};
//SIG(-1 S21142C12) C1{ VBC2{ VBC3{ BC4{ vd m Fc FU5{ m Fc[6]}} vd FL FU5} VBC4 vd} BC6{ VBC4} VBC7{ BC8{ m FD} VBC9{ VBC10{ vd m Fi Fc Fi} Fp[2]} VBC2 BC4 VBC6 Fc Fi} vd}


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

static void Test_S21142C12()
{
  extern Class_Descriptor cd_S21142C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S21142C12, buf);
    S21142C12 *dp, &lv = *(dp=new (buf) S21142C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S21142C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21142C12)");
    check_base_class_offset(lv, (S3589C3*)(S21142C10*), ABISELECT(16,8), "S21142C12");
    check_base_class_offset(lv, (S21142C10*)(S21142C9*), ABISELECT(16,8), "S21142C12");
    /*is_ambiguous_... S21142C9::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C9*), ABISELECT(48,36), "S21142C12");
    /*is_ambiguous_... S21142C12::S21142C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C3*), ABISELECT(48,36), "S21142C12");
    /*is_ambiguous_... S21142C12::S21142C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C3*), ABISELECT(48,36), "S21142C12");
    check_base_class_offset(lv, (S21142C9*), ABISELECT(8,4), "S21142C12");
    check_base_class_offset(lv, (S21142C9*)(S21142C13*), ABISELECT(8,4), "S21142C12");
    /*is_ambiguous_... S21142C12::S21142C3 */ AMB_check_base_class_offset(lv, (S21142C3*), 0, "S21142C12");
    check_base_class_offset(lv, (S3589C13_nt*)(S21142C13*), ABISELECT(80,60), "S21142C12");
    check_base_class_offset(lv, (S3589C9_nt*)(S21142C15*), ABISELECT(128,92), "S21142C12");
    check_base_class_offset(lv, (S21142C15*)(S21142C13*), ABISELECT(104,80), "S21142C12");
    /*is_ambiguous_... S21142C13::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C13*), ABISELECT(64,48), "S21142C12");
    check_base_class_offset(lv, (S21142C3*)(S21142C13*), ABISELECT(152,108), "S21142C12");
    check_base_class_offset(lv, (S21142C13*), ABISELECT(64,48), "S21142C12");
    test_class_info(&lv, &cd_S21142C12);
    dp->~S21142C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21142C12(Test_S21142C12, "S21142C12", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN9S21142C12C1Ev();
extern void _ZN9S21142C12D2Ev();
Name_Map name_map_S21142C12[] = {
  NSPAIR(_ZN9S21142C12C1Ev),
  NSPAIR(_ZN9S21142C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C10;
extern VTBL_ENTRY _ZTI9S21142C10[];
extern  VTBL_ENTRY _ZTV9S21142C10[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C9;
extern VTBL_ENTRY _ZTI8S21142C9[];
extern  VTBL_ENTRY _ZTV8S21142C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C9[];
extern Class_Descriptor cd_S21142C3;
extern VTBL_ENTRY _ZTI8S21142C3[];
extern  VTBL_ENTRY _ZTV8S21142C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C3[];
extern Class_Descriptor cd_S3589C13_nt;
extern VTBL_ENTRY _ZTI11S3589C13_nt[];
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
extern Class_Descriptor cd_S21142C15;
extern VTBL_ENTRY _ZTI9S21142C15[];
extern  VTBL_ENTRY _ZTV9S21142C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C15[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C3;
extern VTBL_ENTRY _ZTI8S21142C3[];
extern  VTBL_ENTRY _ZTV8S21142C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C3[];
extern Class_Descriptor cd_S21142C13;
extern VTBL_ENTRY _ZTI9S21142C13[];
extern  VTBL_ENTRY _ZTV9S21142C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C13[];
static Base_Class bases_S21142C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    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
  0, 0},
  {&cd_S21142C10,    ABISELECT(16,8), //bcp->offset
    18, //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
    3, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(48,36), //bcp->offset
    23, //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
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21142C9,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21142C3,    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_S3589C13_nt,    ABISELECT(80,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
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3589C9_nt,    ABISELECT(128,92), //bcp->offset
    45, //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
    7, //immediately_derived
  0, 1},
  {&cd_S21142C15,    ABISELECT(104,80), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(64,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
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S21142C3,    ABISELECT(152,108), //bcp->offset
    50, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S21142C13,    ABISELECT(64,48), //bcp->offset
    28, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S21142C12[];
extern void _ZN9S21142C12D1Ev();
extern void _ZN9S21142C12D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S21142C12D1Ev,_ZTv0_n20_N9S21142C12D1Ev)();
extern void ABISELECT(_ZThn8_N9S21142C12D1Ev,_ZThn4_N9S21142C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21142C12D0Ev,_ZTv0_n20_N9S21142C12D0Ev)();
extern void ABISELECT(_ZThn8_N9S21142C12D0Ev,_ZThn4_N9S21142C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C12D1Ev,_ZTv0_n12_N9S21142C12D1Ev)();
extern void ABISELECT(_ZThn16_N9S21142C12D1Ev,_ZThn8_N9S21142C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C12D0Ev,_ZTv0_n12_N9S21142C12D0Ev)();
extern void ABISELECT(_ZThn16_N9S21142C12D0Ev,_ZThn8_N9S21142C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C12D1Ev,_ZTv0_n12_N9S21142C12D1Ev)();
extern void ABISELECT(_ZThn48_N9S21142C12D1Ev,_ZThn36_N9S21142C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C12D0Ev,_ZTv0_n12_N9S21142C12D0Ev)();
extern void ABISELECT(_ZThn48_N9S21142C12D0Ev,_ZThn36_N9S21142C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S21142C12D1Ev,_ZTv0_n36_N9S21142C12D1Ev)();
extern void ABISELECT(_ZThn64_N9S21142C12D1Ev,_ZThn48_N9S21142C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S21142C12D0Ev,_ZTv0_n36_N9S21142C12D0Ev)();
extern void ABISELECT(_ZThn64_N9S21142C12D0Ev,_ZThn48_N9S21142C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C12D1Ev,_ZTv0_n16_N9S21142C12D1Ev)();
extern void ABISELECT(_ZThn104_N9S21142C12D1Ev,_ZThn80_N9S21142C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C12D0Ev,_ZTv0_n16_N9S21142C12D0Ev)();
extern void ABISELECT(_ZThn104_N9S21142C12D0Ev,_ZThn80_N9S21142C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C12D1Ev,_ZTv0_n12_N9S21142C12D1Ev)();
extern void ABISELECT(_ZThn128_N9S21142C12D1Ev,_ZThn92_N9S21142C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C12D0Ev,_ZTv0_n12_N9S21142C12D0Ev)();
extern void ABISELECT(_ZThn128_N9S21142C12D0Ev,_ZThn92_N9S21142C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C12D1Ev,_ZTv0_n16_N9S21142C12D1Ev)();
extern void ABISELECT(_ZThn152_N9S21142C12D1Ev,_ZThn108_N9S21142C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C12D0Ev,_ZTv0_n16_N9S21142C12D0Ev)();
extern void ABISELECT(_ZThn152_N9S21142C12D0Ev,_ZThn108_N9S21142C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21142C12[] = {
  ABISELECT(152,108),
  ABISELECT(128,92),
  ABISELECT(104,80),
  ABISELECT(64,48),
  ABISELECT(16,8),
  ABISELECT(8,4),
  ABISELECT(48,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&_ZN9S21142C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C12D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C12D1Ev,_ZTv0_n20_N9S21142C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C12D0Ev,_ZTv0_n20_N9S21142C12D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C12D1Ev,_ZTv0_n12_N9S21142C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C12D0Ev,_ZTv0_n12_N9S21142C12D0Ev),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C12D1Ev,_ZTv0_n12_N9S21142C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C12D0Ev,_ZTv0_n12_N9S21142C12D0Ev),
  ABISELECT(-64,-48),
  ABISELECT(88,60),
  ABISELECT(-16,-12),
  ABISELECT(-48,-40),
  ABISELECT(-56,-44),
  ABISELECT(64,44),
  ABISELECT(40,32),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S21142C12D1Ev,_ZTv0_n36_N9S21142C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S21142C12D0Ev,_ZTv0_n36_N9S21142C12D0Ev),
  ABISELECT(-104,-80),
  ABISELECT(24,12),
  ABISELECT(-104,-80),
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C12D1Ev,_ZTv0_n16_N9S21142C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C12D0Ev,_ZTv0_n16_N9S21142C12D0Ev),
  ABISELECT(-128,-92),
  ABISELECT(-128,-92),
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C12D1Ev,_ZTv0_n12_N9S21142C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C12D0Ev,_ZTv0_n12_N9S21142C12D0Ev),
  ABISELECT(-152,-108),
  ABISELECT(-104,-72),
  ABISELECT(-152,-108),
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C12D1Ev,_ZTv0_n16_N9S21142C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C12D0Ev,_ZTv0_n16_N9S21142C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S21142C12[];
extern void _ZN8S21142C3D1Ev();
extern void _ZN8S21142C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C3__A__9S21142C12[] = {
  ABISELECT(48,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C3[0]),
  (VTBL_ENTRY)&_ZN8S21142C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21142C3D1Ev,_ZTv0_n12_N8S21142C3D1Ev)();
extern void ABISELECT(_ZThn48_N8S21142C3D1Ev,_ZThn36_N8S21142C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C3D0Ev,_ZTv0_n12_N8S21142C3D0Ev)();
extern void ABISELECT(_ZThn48_N8S21142C3D0Ev,_ZThn36_N8S21142C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S21142C3__A__9S21142C12[] = {
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S21142C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C3D1Ev,_ZTv0_n12_N8S21142C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C3D0Ev,_ZTv0_n12_N8S21142C3D0Ev),
};
extern void _ZN8S21142C9D1Ev();
extern void _ZN8S21142C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C9__9S21142C12[] = {
  ABISELECT(40,32),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&_ZN8S21142C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZThn8_N8S21142C9D1Ev,_ZThn4_N8S21142C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
extern void ABISELECT(_ZThn8_N8S21142C9D0Ev,_ZThn4_N8S21142C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__8S21142C9__9S21142C12[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZThn40_N8S21142C9D1Ev,_ZThn32_N8S21142C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
extern void ABISELECT(_ZThn40_N8S21142C9D0Ev,_ZThn32_N8S21142C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S21142C9__9S21142C12[] = {
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void _ZN9S21142C13D1Ev();
extern void _ZN9S21142C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21142C13__9S21142C12[] = {
  ABISELECT(88,60),
  ABISELECT(-16,-12),
  ABISELECT(-48,-40),
  ABISELECT(-56,-44),
  ABISELECT(64,44),
  ABISELECT(40,32),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&_ZN9S21142C13D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C13D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn40_N9S21142C13D1Ev,_ZThn32_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn40_N9S21142C13D0Ev,_ZThn32_N9S21142C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C15__9S21142C13__9S21142C12[] = {
  ABISELECT(-40,-32),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn64_N9S21142C13D1Ev,_ZThn44_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn64_N9S21142C13D0Ev,_ZThn44_N9S21142C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__9S21142C13__9S21142C12[] = {
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21142C13D1Ev,_ZTv0_n20_N9S21142C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S21142C13D0Ev,_ZTv0_n20_N9S21142C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21142C9__9S21142C13__9S21142C12[] = {
  ABISELECT(56,44),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C13D1Ev,_ZTv0_n20_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C13D0Ev,_ZTv0_n20_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S21142C10__9S21142C13__9S21142C12[] = {
  ABISELECT(48,40),
  ABISELECT(48,40),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__9S21142C13__9S21142C12[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn88_N9S21142C13D1Ev,_ZThn60_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn88_N9S21142C13D0Ev,_ZThn60_N9S21142C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21142C3__9S21142C13__9S21142C12[] = {
  ABISELECT(-88,-60),
  ABISELECT(-104,-72),
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev),
};
extern void _ZN9S21142C15D1Ev();
extern void _ZN9S21142C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21142C15__9S21142C12[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C15[0]),
  (VTBL_ENTRY)&_ZN9S21142C15D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C15D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21142C15D1Ev,_ZTv0_n12_N9S21142C15D1Ev)();
extern void ABISELECT(_ZThn24_N9S21142C15D1Ev,_ZThn12_N9S21142C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C15D0Ev,_ZTv0_n12_N9S21142C15D0Ev)();
extern void ABISELECT(_ZThn24_N9S21142C15D0Ev,_ZThn12_N9S21142C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__9S21142C15__9S21142C12[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S21142C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C15D1Ev,_ZTv0_n12_N9S21142C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C15D0Ev,_ZTv0_n12_N9S21142C15D0Ev),
};
extern void _ZN8S21142C3D1Ev();
extern void _ZN8S21142C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C3__A1__9S21142C12[] = {
  ABISELECT(-104,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C3[0]),
  (VTBL_ENTRY)&_ZN8S21142C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21142C3D1Ev,_ZTv0_n12_N8S21142C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21142C3D0Ev,_ZTv0_n12_N8S21142C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S21142C3__A1__9S21142C12[] = {
  ABISELECT(104,72),
  ABISELECT(104,72),
  (VTBL_ENTRY)&(_ZTI8S21142C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C3D1Ev,_ZTv0_n12_N8S21142C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C3D0Ev,_ZTv0_n12_N8S21142C3D0Ev),
};
static  VTT_ENTRY vtt_S21142C12[] = {
  {&(_ZTV9S21142C12[9]),  9,56},
  {&(_tg__ZTV8S21142C3__A__9S21142C12[3]),  3,5},
  {&(_tg__ZTV7S3589C3__8S21142C3__A__9S21142C12[3]),  3,5},
  {&(_ZTV9S21142C12[16]),  16,56},
  {&(_ZTV9S21142C12[21]),  21,56},
  {&(_ZTV9S21142C12[26]),  26,56},
  {&(_ZTV9S21142C12[37]),  37,56},
  {&(_ZTV9S21142C12[43]),  43,56},
  {&(_ZTV9S21142C12[48]),  48,56},
  {&(_ZTV9S21142C12[54]),  54,56},
  {&(_tg__ZTV8S21142C9__9S21142C12[4]),  4,6},
  {&(_tg__ZTV9S21142C10__8S21142C9__9S21142C12[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S21142C9__9S21142C12[3]),  3,5},
  {&(_tg__ZTV9S21142C13__9S21142C12[8]),  8,10},
  {&(_tg__ZTV9S21142C15__9S21142C13__9S21142C12[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__9S21142C13__9S21142C12[3]),  3,5},
  {&(_tg__ZTV8S21142C9__9S21142C13__9S21142C12[5]),  5,7},
  {&(_tg__ZTV9S21142C10__9S21142C13__9S21142C12[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__9S21142C13__9S21142C12[3]),  3,5},
  {&(_tg__ZTV8S21142C3__9S21142C13__9S21142C12[4]),  4,6},
  {&(_tg__ZTV9S21142C15__9S21142C12[3]),  3,5},
  {&(_tg__ZTV10S3589C9_nt__9S21142C15__9S21142C12[3]),  3,5},
  {&(_tg__ZTV8S21142C3__A1__9S21142C12[3]),  3,5},
  {&(_tg__ZTV7S3589C3__8S21142C3__A1__9S21142C12[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S21142C12[];
extern  VTBL_ENTRY _ZTV9S21142C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C12[];
static VTBL_ENTRY alt_thunk_names60[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C15D0Ev,_ZTv0_n12_N9S21142C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S21142C15D0Ev,_ZThn12_N9S21142C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C15D1Ev,_ZTv0_n12_N9S21142C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S21142C15D1Ev,_ZThn12_N9S21142C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S21142C13D0Ev,_ZThn44_N9S21142C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S21142C13D1Ev,_ZThn44_N9S21142C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S21142C13D0Ev,_ZThn60_N9S21142C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S21142C13D0Ev,_ZThn32_N9S21142C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S21142C13D1Ev,_ZThn60_N9S21142C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S21142C13D1Ev,_ZThn32_N9S21142C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21142C9D0Ev,_ZThn32_N8S21142C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21142C9D0Ev,_ZThn4_N8S21142C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21142C9D1Ev,_ZThn32_N8S21142C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21142C9D1Ev,_ZThn4_N8S21142C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C3D0Ev,_ZTv0_n12_N8S21142C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21142C3D0Ev,_ZThn36_N8S21142C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C3D1Ev,_ZTv0_n12_N8S21142C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21142C3D1Ev,_ZThn36_N8S21142C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C12D0Ev,_ZTv0_n16_N9S21142C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S21142C12D0Ev,_ZThn108_N9S21142C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S21142C12D0Ev,_ZThn80_N9S21142C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C12D1Ev,_ZTv0_n16_N9S21142C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S21142C12D1Ev,_ZThn108_N9S21142C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S21142C12D1Ev,_ZThn80_N9S21142C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S21142C12D0Ev,_ZTv0_n36_N9S21142C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S21142C12D0Ev,_ZThn48_N9S21142C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S21142C12D1Ev,_ZTv0_n36_N9S21142C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S21142C12D1Ev,_ZThn48_N9S21142C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C12D0Ev,_ZTv0_n12_N9S21142C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S21142C12D0Ev,_ZThn92_N9S21142C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S21142C12D0Ev,_ZThn36_N9S21142C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21142C12D0Ev,_ZThn8_N9S21142C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C12D1Ev,_ZTv0_n12_N9S21142C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S21142C12D1Ev,_ZThn92_N9S21142C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S21142C12D1Ev,_ZThn36_N9S21142C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21142C12D1Ev,_ZThn8_N9S21142C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21142C12D0Ev,_ZTv0_n20_N9S21142C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S21142C12D0Ev,_ZThn4_N9S21142C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21142C12D1Ev,_ZTv0_n20_N9S21142C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S21142C12D1Ev,_ZThn4_N9S21142C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21142C12 = {  "S21142C12", // class name
  bases_S21142C12, 11,
  &(vtc_S21142C12[0]), // expected_vtbl_contents
  &(vtt_S21142C12[0]), // expected_vtt_contents
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI9S21142C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S21142C12),56, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21142C12),24, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names60,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21142C17  : virtual S3589C3 {
  int s21142c17f0;
  ::S19905C17_nt s21142c17f1;
  ~S21142C17(); // tgen
  S21142C17(); // tgen
};
//SIG(-1 S21142C17) C1{ VBC2{ vd m Fc FU3{ m Fc[6]}} Fi FC4{}}


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

static void Test_S21142C17()
{
  extern Class_Descriptor cd_S21142C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S21142C17, buf);
    S21142C17 *dp, &lv = *(dp=new (buf) S21142C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S21142C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21142C17)");
    check_base_class_offset(lv, (S3589C3*), ABISELECT(16,12), "S21142C17");
    check_field_offset(lv, s21142c17f0, ABISELECT(8,4), "S21142C17.s21142c17f0");
    check_field_offset(lv, s21142c17f1, ABISELECT(12,8), "S21142C17.s21142c17f1");
    test_class_info(&lv, &cd_S21142C17);
    dp->~S21142C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21142C17(Test_S21142C17, "S21142C17", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN9S21142C17C1Ev();
extern void _ZN9S21142C17D1Ev();
Name_Map name_map_S21142C17[] = {
  NSPAIR(_ZN9S21142C17C1Ev),
  NSPAIR(_ZN9S21142C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
static Base_Class bases_S21142C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    ABISELECT(16,12), //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},
  {0}};
extern VTBL_ENTRY _ZTI9S21142C17[];
extern void _ZN9S21142C17D1Ev();
extern void _ZN9S21142C17D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S21142C17D1Ev,_ZTv0_n12_N9S21142C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S21142C17D1Ev,_ZThn12_N9S21142C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C17D0Ev,_ZTv0_n12_N9S21142C17D0Ev)();
extern void ABISELECT(_ZThn16_N9S21142C17D0Ev,_ZThn12_N9S21142C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21142C17[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C17[0]),
  (VTBL_ENTRY)&_ZN9S21142C17D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C17D0Ev,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S21142C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C17D1Ev,_ZTv0_n12_N9S21142C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C17D0Ev,_ZTv0_n12_N9S21142C17D0Ev),
};
extern VTBL_ENTRY _ZTV9S21142C17[];
static  VTT_ENTRY vtt_S21142C17[] = {
  {&(_ZTV9S21142C17[3]),  3,10},
  {&(_ZTV9S21142C17[8]),  8,10},
};
extern VTBL_ENTRY _ZTI9S21142C17[];
extern  VTBL_ENTRY _ZTV9S21142C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C17[];
static VTBL_ENTRY alt_thunk_names61[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C17D0Ev,_ZTv0_n12_N9S21142C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21142C17D0Ev,_ZThn12_N9S21142C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C17D1Ev,_ZTv0_n12_N9S21142C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21142C17D1Ev,_ZThn12_N9S21142C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21142C17 = {  "S21142C17", // class name
  bases_S21142C17, 1,
  &(vtc_S21142C17[0]), // expected_vtbl_contents
  &(vtt_S21142C17[0]), // expected_vtt_contents
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI9S21142C17),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S21142C17),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21142C17),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names61,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21142C16  : S21142C9 , virtual S21142C17 {
  long double s21142c16f0;
  virtual  ~S21142C16(); // _ZN9S21142C16D2Ev
  S21142C16(); // tgen
};
//SIG(-1 S21142C16) C1{ BC2{ VBC3{ BC4{ vd m Fc FU5{ m Fc[6]}} vd FL FU5} VBC4 vd} VBC6{ VBC4 Fi FC7{}} vd FD}


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

static void Test_S21142C16()
{
  extern Class_Descriptor cd_S21142C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,18)];
    init_test(&cd_S21142C16, buf);
    S21142C16 *dp, &lv = *(dp=new (buf) S21142C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,68), "sizeof(S21142C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21142C16)");
    check_base_class_offset(lv, (S3589C3*)(S21142C10*), ABISELECT(32,16), "S21142C16");
    check_base_class_offset(lv, (S21142C10*)(S21142C9*), ABISELECT(32,16), "S21142C16");
    /*is_ambiguous_... S21142C9::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C9*), ABISELECT(64,44), "S21142C16");
    check_base_class_offset(lv, (S3589C3*)(S21142C17*), ABISELECT(64,44), "S21142C16");
    check_base_class_offset(lv, (S21142C9*), 0, "S21142C16");
    check_base_class_offset(lv, (S21142C17*), ABISELECT(80,56), "S21142C16");
    check_field_offset(lv, s21142c16f0, ABISELECT(16,4), "S21142C16.s21142c16f0");
    test_class_info(&lv, &cd_S21142C16);
    dp->~S21142C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21142C16(Test_S21142C16, "S21142C16", ABISELECT(96,68));

#else // __cplusplus

extern void _ZN9S21142C16C1Ev();
extern void _ZN9S21142C16D2Ev();
Name_Map name_map_S21142C16[] = {
  NSPAIR(_ZN9S21142C16C1Ev),
  NSPAIR(_ZN9S21142C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C10;
extern VTBL_ENTRY _ZTI9S21142C10[];
extern  VTBL_ENTRY _ZTV9S21142C10[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C9;
extern VTBL_ENTRY _ZTI8S21142C9[];
extern  VTBL_ENTRY _ZTV8S21142C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C9[];
extern Class_Descriptor cd_S21142C17;
extern VTBL_ENTRY _ZTI9S21142C17[];
extern  VTBL_ENTRY _ZTV9S21142C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C17[];
static Base_Class bases_S21142C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    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
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S21142C10,    ABISELECT(32,16), //bcp->offset
    7, //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
    3, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(64,44), //bcp->offset
    12, //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
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21142C9,    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_S21142C17,    ABISELECT(80,56), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //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 _ZTI9S21142C16[];
extern void _ZN9S21142C16D1Ev();
extern void _ZN9S21142C16D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S21142C16D1Ev,_ZTv0_n12_N9S21142C16D1Ev)();
extern void ABISELECT(_ZThn32_N9S21142C16D1Ev,_ZThn16_N9S21142C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C16D0Ev,_ZTv0_n12_N9S21142C16D0Ev)();
extern void ABISELECT(_ZThn32_N9S21142C16D0Ev,_ZThn16_N9S21142C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C16D1Ev,_ZTv0_n12_N9S21142C16D1Ev)();
extern void ABISELECT(_ZThn64_N9S21142C16D1Ev,_ZThn44_N9S21142C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C16D0Ev,_ZTv0_n12_N9S21142C16D0Ev)();
extern void ABISELECT(_ZThn64_N9S21142C16D0Ev,_ZThn44_N9S21142C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C16D1Ev,_ZTv0_n16_N9S21142C16D1Ev)();
extern void ABISELECT(_ZThn80_N9S21142C16D1Ev,_ZThn56_N9S21142C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C16D0Ev,_ZTv0_n16_N9S21142C16D0Ev)();
extern void ABISELECT(_ZThn80_N9S21142C16D0Ev,_ZThn56_N9S21142C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21142C16[] = {
  ABISELECT(80,56),
  ABISELECT(64,44),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C16[0]),
  (VTBL_ENTRY)&_ZN9S21142C16D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C16D0Ev,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S21142C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C16D1Ev,_ZTv0_n12_N9S21142C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C16D0Ev,_ZTv0_n12_N9S21142C16D0Ev),
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI9S21142C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C16D1Ev,_ZTv0_n12_N9S21142C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C16D0Ev,_ZTv0_n12_N9S21142C16D0Ev),
  ABISELECT(-80,-56),
  ABISELECT(-16,-12),
  ABISELECT(-80,-56),
  (VTBL_ENTRY)&(_ZTI9S21142C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C16D1Ev,_ZTv0_n16_N9S21142C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C16D0Ev,_ZTv0_n16_N9S21142C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S21142C16[];
extern void _ZN8S21142C9D1Ev();
extern void _ZN8S21142C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C9__9S21142C16[] = {
  ABISELECT(64,44),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&_ZN8S21142C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZThn32_N8S21142C9D1Ev,_ZThn16_N8S21142C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
extern void ABISELECT(_ZThn32_N8S21142C9D0Ev,_ZThn16_N8S21142C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__8S21142C9__9S21142C16[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZThn64_N8S21142C9D1Ev,_ZThn44_N8S21142C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
extern void ABISELECT(_ZThn64_N8S21142C9D0Ev,_ZThn44_N8S21142C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S21142C9__9S21142C16[] = {
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void _ZN9S21142C17D1Ev();
extern void _ZN9S21142C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21142C17__9S21142C16[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C17[0]),
  (VTBL_ENTRY)&_ZN9S21142C17D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21142C17D1Ev,_ZTv0_n12_N9S21142C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C17D0Ev,_ZTv0_n12_N9S21142C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__9S21142C17__9S21142C16[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S21142C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C17D1Ev,_ZTv0_n12_N9S21142C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C17D0Ev,_ZTv0_n12_N9S21142C17D0Ev),
};
static  VTT_ENTRY vtt_S21142C16[] = {
  {&(_ZTV9S21142C16[5]),  5,23},
  {&(_tg__ZTV8S21142C9__9S21142C16[4]),  4,6},
  {&(_tg__ZTV9S21142C10__8S21142C9__9S21142C16[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S21142C9__9S21142C16[3]),  3,5},
  {&(_ZTV9S21142C16[10]),  10,23},
  {&(_ZTV9S21142C16[15]),  15,23},
  {&(_ZTV9S21142C16[21]),  21,23},
  {&(_tg__ZTV9S21142C17__9S21142C16[3]),  3,5},
  {&(_tg__ZTV7S3589C3__9S21142C17__9S21142C16[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S21142C16[];
extern  VTBL_ENTRY _ZTV9S21142C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C16[];
static VTBL_ENTRY alt_thunk_names62[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21142C9D0Ev,_ZThn44_N8S21142C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21142C9D0Ev,_ZThn16_N8S21142C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21142C9D1Ev,_ZThn44_N8S21142C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21142C9D1Ev,_ZThn16_N8S21142C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C16D0Ev,_ZTv0_n16_N9S21142C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S21142C16D0Ev,_ZThn56_N9S21142C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C16D1Ev,_ZTv0_n16_N9S21142C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S21142C16D1Ev,_ZThn56_N9S21142C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C16D0Ev,_ZTv0_n12_N9S21142C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S21142C16D0Ev,_ZThn44_N9S21142C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S21142C16D0Ev,_ZThn16_N9S21142C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C16D1Ev,_ZTv0_n12_N9S21142C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S21142C16D1Ev,_ZThn44_N9S21142C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S21142C16D1Ev,_ZThn16_N9S21142C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21142C16 = {  "S21142C16", // class name
  bases_S21142C16, 5,
  &(vtc_S21142C16[0]), // expected_vtbl_contents
  &(vtt_S21142C16[0]), // expected_vtt_contents
  ABISELECT(96,68), // object size
  NSPAIRA(_ZTI9S21142C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S21142C16),23, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21142C16),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names62,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21142C6  : virtual S21142C7 , virtual S21142C12 , S21142C16 {
  int s21142c6f0[10];
  void *s21142c6f1;
  ::S21142C16 s21142c6f2;
  virtual  ~S21142C6(); // _ZN8S21142C6D2Ev
  S21142C6(); // tgen
};
//SIG(-1 S21142C6) C1{ VBC2{ BC3{ VBC4{ VBC5{ BC6{ vd m Fc FU7{ m Fc[6]}} vd FL FU7} VBC6 vd} BC6 BC8{ vd m Fi Fc Fi} BC5 Fi Fp} BC4 VBC8} VBC9{ VBC4 BC10{ VBC6} VBC11{ BC12{ m FD} VBC13{ VBC8 Fp[2]} VBC4 BC6 VBC10 Fc Fi} vd} BC14{ BC4 VBC15{ VBC6 Fi FC16{}} vd FD} vd Fi[10] Fp FC14}


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

static void Test_S21142C6()
{
  extern Class_Descriptor cd_S21142C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,81)];
    init_test(&cd_S21142C6, buf);
    S21142C6 *dp, &lv = *(dp=new (buf) S21142C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,320), "sizeof(S21142C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21142C6)");
    /*is_ambiguous_... S21142C6::S21142C10 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C10*), ABISELECT(280,200), "S21142C6");
    /*is_ambiguous_... S21142C6::S21142C9 */ AMB_check_base_class_offset(lv, (S21142C10*)(S21142C9*), ABISELECT(280,200), "S21142C6");
    /*is_ambiguous_... S21142C7::S21142C9 */ AMB_check_base_class_offset(lv, (S21142C10*)(S21142C9*)(S21142C7*), ABISELECT(280,200), "S21142C6");
    check_base_class_offset(lv, (S21142C10*)(S21142C9*)(S21142C16*), ABISELECT(280,200), "S21142C6");
    /*is_ambiguous_... S21142C6::S21142C9 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C9*), ABISELECT(312,228), "S21142C6");
    /*is_ambiguous_... S21142C7::S21142C9 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C9*)(S21142C7*), ABISELECT(312,228), "S21142C6");
    /*is_ambiguous_... S21142C12::S21142C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C3*)(S21142C12*), ABISELECT(312,228), "S21142C6");
    /*is_ambiguous_... S21142C6::S21142C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C3*), ABISELECT(312,228), "S21142C6");
    /*is_ambiguous_... S21142C9::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C9*)(S21142C16*), ABISELECT(312,228), "S21142C6");
    check_base_class_offset(lv, (S3589C3*)(S21142C17*), ABISELECT(312,228), "S21142C6");
    check_base_class_offset(lv, (S21142C9*)(S21142C8*)(S21142C7*), ABISELECT(272,196), "S21142C6");
    check_base_class_offset(lv, (S21142C9*)(S21142C12*), ABISELECT(272,196), "S21142C6");
    check_base_class_offset(lv, (S21142C9*)(S21142C13*), ABISELECT(272,196), "S21142C6");
    /*is_ambiguous_... S21142C8::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C8*)(S21142C7*), ABISELECT(176,128), "S21142C6");
    check_base_class_offset(lv, (S3589C9_nt*)(S21142C8*)(S21142C7*), ABISELECT(192,140), "S21142C6");
    /*is_ambiguous_... S21142C8::S21142C10 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C10*)(S21142C8*)(S21142C7*), ABISELECT(216,156), "S21142C6");
    /*is_ambiguous_... S21142C8::S21142C10 */ AMB_check_base_class_offset(lv, (S21142C10*)(S21142C8*)(S21142C7*), ABISELECT(216,156), "S21142C6");
    check_base_class_offset(lv, (S21142C8*)(S21142C7*), ABISELECT(176,128), "S21142C6");
    /*is_ambiguous_... S21142C7::S21142C9 */ AMB_check_base_class_offset(lv, (S21142C9*)(S21142C7*), ABISELECT(264,192), "S21142C6");
    /*is_ambiguous_... S21142C7::S3589C9_nt */ AMB_check_base_class_offset(lv, (S3589C9_nt*)(S21142C7*), ABISELECT(328,240), "S21142C6");
    check_base_class_offset(lv, (S3589C9_nt*)(S21142C15*), ABISELECT(328,240), "S21142C6");
    check_base_class_offset(lv, (S21142C7*), ABISELECT(176,128), "S21142C6");
    /*is_ambiguous_... S21142C12::S21142C3 */ AMB_check_base_class_offset(lv, (S21142C3*)(S21142C12*), ABISELECT(352,256), "S21142C6");
    check_base_class_offset(lv, (S3589C13_nt*)(S21142C13*), ABISELECT(384,272), "S21142C6");
    check_base_class_offset(lv, (S21142C15*)(S21142C13*), ABISELECT(408,292), "S21142C6");
    /*is_ambiguous_... S21142C13::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C13*), ABISELECT(368,260), "S21142C6");
    check_base_class_offset(lv, (S21142C3*)(S21142C13*), ABISELECT(432,304), "S21142C6");
    check_base_class_offset(lv, (S21142C13*)(S21142C12*), ABISELECT(368,260), "S21142C6");
    check_base_class_offset(lv, (S21142C12*), ABISELECT(352,256), "S21142C6");
    check_base_class_offset(lv, (S21142C9*)(S21142C16*), 0, "S21142C6");
    check_base_class_offset(lv, (S21142C17*)(S21142C16*), ABISELECT(440,308), "S21142C6");
    check_base_class_offset(lv, (S21142C16*), 0, "S21142C6");
    check_field_offset(lv, s21142c6f0, ABISELECT(32,16), "S21142C6.s21142c6f0");
    check_field_offset(lv, s21142c6f1, ABISELECT(72,56), "S21142C6.s21142c6f1");
    check_field_offset(lv, s21142c6f2, ABISELECT(80,60), "S21142C6.s21142c6f2");
    test_class_info(&lv, &cd_S21142C6);
    dp->~S21142C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21142C6(Test_S21142C6, "S21142C6", ABISELECT(464,320));

#else // __cplusplus

extern void _ZN8S21142C6C1Ev();
extern void _ZN8S21142C6D2Ev();
Name_Map name_map_S21142C6[] = {
  NSPAIR(_ZN8S21142C6C1Ev),
  NSPAIR(_ZN8S21142C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C10;
extern VTBL_ENTRY _ZTI9S21142C10[];
extern  VTBL_ENTRY _ZTV9S21142C10[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C9;
extern VTBL_ENTRY _ZTI8S21142C9[];
extern  VTBL_ENTRY _ZTV8S21142C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C9[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C10;
extern VTBL_ENTRY _ZTI9S21142C10[];
extern  VTBL_ENTRY _ZTV9S21142C10[];
extern Class_Descriptor cd_S21142C8;
extern VTBL_ENTRY _ZTI8S21142C8[];
extern  VTBL_ENTRY _ZTV8S21142C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C8[];
extern Class_Descriptor cd_S21142C9;
extern VTBL_ENTRY _ZTI8S21142C9[];
extern  VTBL_ENTRY _ZTV8S21142C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C9[];
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
extern Class_Descriptor cd_S21142C7;
extern VTBL_ENTRY _ZTI8S21142C7[];
extern  VTBL_ENTRY _ZTV8S21142C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C7[];
extern Class_Descriptor cd_S21142C3;
extern VTBL_ENTRY _ZTI8S21142C3[];
extern  VTBL_ENTRY _ZTV8S21142C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C3[];
extern Class_Descriptor cd_S3589C13_nt;
extern VTBL_ENTRY _ZTI11S3589C13_nt[];
extern Class_Descriptor cd_S21142C15;
extern VTBL_ENTRY _ZTI9S21142C15[];
extern  VTBL_ENTRY _ZTV9S21142C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C15[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C3;
extern VTBL_ENTRY _ZTI8S21142C3[];
extern  VTBL_ENTRY _ZTV8S21142C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C3[];
extern Class_Descriptor cd_S21142C13;
extern VTBL_ENTRY _ZTI9S21142C13[];
extern  VTBL_ENTRY _ZTV9S21142C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C13[];
extern Class_Descriptor cd_S21142C12;
extern VTBL_ENTRY _ZTI9S21142C12[];
extern  VTBL_ENTRY _ZTV9S21142C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C12[];
extern Class_Descriptor cd_S21142C9;
extern VTBL_ENTRY _ZTI8S21142C9[];
extern  VTBL_ENTRY _ZTV8S21142C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C9[];
extern Class_Descriptor cd_S21142C17;
extern VTBL_ENTRY _ZTI9S21142C17[];
extern  VTBL_ENTRY _ZTV9S21142C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C17[];
extern Class_Descriptor cd_S21142C16;
extern VTBL_ENTRY _ZTI9S21142C16[];
extern  VTBL_ENTRY _ZTV9S21142C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C16[];
static Base_Class bases_S21142C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    ABISELECT(280,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
  0, 0},
  {&cd_S21142C10,    ABISELECT(280,200), //bcp->offset
    44, //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
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(312,228), //bcp->offset
    49, //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
    3, //immediately_derived
  0, 1},
  {&cd_S21142C9,    ABISELECT(272,196), //bcp->offset
    37, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3589C9_nt,    ABISELECT(192,140), //bcp->offset
    23, //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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3589C3,    ABISELECT(216,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
    8, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S21142C10,    ABISELECT(216,156), //bcp->offset
    27, //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
    9, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S21142C8,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S21142C9,    ABISELECT(264,192), //bcp->offset
    31, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3589C9_nt,    ABISELECT(328,240), //bcp->offset
    54, //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
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S21142C7,    ABISELECT(176,128), //bcp->offset
    14, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21142C3,    ABISELECT(352,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3589C13_nt,    ABISELECT(384,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
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S21142C15,    ABISELECT(408,292), //bcp->offset
    82, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(368,260), //bcp->offset
    -1, //bcp->virtual_function_table_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
    17, //immediately_derived
  0, 0},
  {&cd_S21142C3,    ABISELECT(432,304), //bcp->offset
    88, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S21142C13,    ABISELECT(368,260), //bcp->offset
    71, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S21142C12,    ABISELECT(352,256), //bcp->offset
    59, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21142C9,    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
    20, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S21142C17,    ABISELECT(440,308), //bcp->offset
    94, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S21142C16,    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
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21142C6[];
extern void _ZN8S21142C6D1Ev();
extern void _ZN8S21142C6D0Ev();
extern void ABISELECT(_ZTv0_n56_N8S21142C6D1Ev,_ZTv0_n28_N8S21142C6D1Ev)();
extern void ABISELECT(_ZThn176_N8S21142C6D1Ev,_ZThn128_N8S21142C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S21142C6D0Ev,_ZTv0_n28_N8S21142C6D0Ev)();
extern void ABISELECT(_ZThn176_N8S21142C6D0Ev,_ZThn128_N8S21142C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n56_N8S21142C6D1Ev,_ZTvn12_n28_N8S21142C6D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S21142C6D0Ev,_ZTvn12_n28_N8S21142C6D0Ev)();
extern void ABISELECT(_ZTvn40_n56_N8S21142C6D1Ev,_ZTvn28_n28_N8S21142C6D1Ev)();
extern void ABISELECT(_ZTvn40_n56_N8S21142C6D0Ev,_ZTvn28_n28_N8S21142C6D0Ev)();
extern void ABISELECT(_ZTvn88_n56_N8S21142C6D1Ev,_ZTvn64_n28_N8S21142C6D1Ev)();
extern void ABISELECT(_ZTvn88_n56_N8S21142C6D0Ev,_ZTvn64_n28_N8S21142C6D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S21142C6D1Ev,_ZTv0_n20_N8S21142C6D1Ev)();
extern void ABISELECT(_ZThn272_N8S21142C6D1Ev,_ZThn196_N8S21142C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21142C6D0Ev,_ZTv0_n20_N8S21142C6D0Ev)();
extern void ABISELECT(_ZThn272_N8S21142C6D0Ev,_ZThn196_N8S21142C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C6D1Ev,_ZTv0_n12_N8S21142C6D1Ev)();
extern void ABISELECT(_ZThn280_N8S21142C6D1Ev,_ZThn200_N8S21142C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C6D0Ev,_ZTv0_n12_N8S21142C6D0Ev)();
extern void ABISELECT(_ZThn280_N8S21142C6D0Ev,_ZThn200_N8S21142C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C6D1Ev,_ZTv0_n12_N8S21142C6D1Ev)();
extern void ABISELECT(_ZThn312_N8S21142C6D1Ev,_ZThn228_N8S21142C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C6D0Ev,_ZTv0_n12_N8S21142C6D0Ev)();
extern void ABISELECT(_ZThn312_N8S21142C6D0Ev,_ZThn228_N8S21142C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C6D1Ev,_ZTv0_n12_N8S21142C6D1Ev)();
extern void ABISELECT(_ZThn328_N8S21142C6D1Ev,_ZThn240_N8S21142C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C6D0Ev,_ZTv0_n12_N8S21142C6D0Ev)();
extern void ABISELECT(_ZThn328_N8S21142C6D0Ev,_ZThn240_N8S21142C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S21142C6D1Ev,_ZTv0_n40_N8S21142C6D1Ev)();
extern void ABISELECT(_ZThn352_N8S21142C6D1Ev,_ZThn256_N8S21142C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S21142C6D0Ev,_ZTv0_n40_N8S21142C6D0Ev)();
extern void ABISELECT(_ZThn352_N8S21142C6D0Ev,_ZThn256_N8S21142C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S21142C6D1Ev,_ZTv0_n36_N8S21142C6D1Ev)();
extern void ABISELECT(_ZThn368_N8S21142C6D1Ev,_ZThn260_N8S21142C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S21142C6D0Ev,_ZTv0_n36_N8S21142C6D0Ev)();
extern void ABISELECT(_ZThn368_N8S21142C6D0Ev,_ZThn260_N8S21142C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21142C6D1Ev,_ZTv0_n16_N8S21142C6D1Ev)();
extern void ABISELECT(_ZThn408_N8S21142C6D1Ev,_ZThn292_N8S21142C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21142C6D0Ev,_ZTv0_n16_N8S21142C6D0Ev)();
extern void ABISELECT(_ZThn408_N8S21142C6D0Ev,_ZThn292_N8S21142C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21142C6D1Ev,_ZTv0_n16_N8S21142C6D1Ev)();
extern void ABISELECT(_ZThn432_N8S21142C6D1Ev,_ZThn304_N8S21142C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21142C6D0Ev,_ZTv0_n16_N8S21142C6D0Ev)();
extern void ABISELECT(_ZThn432_N8S21142C6D0Ev,_ZThn304_N8S21142C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21142C6D1Ev,_ZTv0_n16_N8S21142C6D1Ev)();
extern void ABISELECT(_ZThn440_N8S21142C6D1Ev,_ZThn308_N8S21142C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21142C6D0Ev,_ZTv0_n16_N8S21142C6D0Ev)();
extern void ABISELECT(_ZThn440_N8S21142C6D0Ev,_ZThn308_N8S21142C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21142C6[] = {
  ABISELECT(432,304),
  ABISELECT(408,292),
  ABISELECT(368,260),
  ABISELECT(352,256),
  ABISELECT(328,240),
  ABISELECT(272,196),
  ABISELECT(176,128),
  ABISELECT(440,308),
  ABISELECT(312,228),
  ABISELECT(280,200),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&_ZN8S21142C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C6D0Ev,
  ABISELECT(-176,-128),
  ABISELECT(152,112),
  ABISELECT(136,100),
  ABISELECT(104,72),
  ABISELECT(96,68),
  ABISELECT(-176,-128),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21142C6D1Ev,_ZTv0_n28_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21142C6D0Ev,_ZTv0_n28_N8S21142C6D0Ev),
  ABISELECT(-192,-140),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S21142C6D1Ev,_ZTvn12_n28_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S21142C6D0Ev,_ZTvn12_n28_N8S21142C6D0Ev),
  ABISELECT(-216,-156),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n56_N8S21142C6D1Ev,_ZTvn28_n28_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n56_N8S21142C6D0Ev,_ZTvn28_n28_N8S21142C6D0Ev),
  ABISELECT(48,36),
  ABISELECT(16,8),
  ABISELECT(-264,-192),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n56_N8S21142C6D1Ev,_ZTvn64_n28_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n56_N8S21142C6D0Ev,_ZTvn64_n28_N8S21142C6D0Ev),
  ABISELECT(-272,-196),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-272,-196),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C6D1Ev,_ZTv0_n20_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C6D0Ev,_ZTv0_n20_N8S21142C6D0Ev),
  ABISELECT(-280,-200),
  ABISELECT(-280,-200),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C6D1Ev,_ZTv0_n12_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C6D0Ev,_ZTv0_n12_N8S21142C6D0Ev),
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C6D1Ev,_ZTv0_n12_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C6D0Ev,_ZTv0_n12_N8S21142C6D0Ev),
  ABISELECT(-328,-240),
  ABISELECT(-328,-240),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C6D1Ev,_ZTv0_n12_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C6D0Ev,_ZTv0_n12_N8S21142C6D0Ev),
  ABISELECT(-352,-256),
  ABISELECT(80,48),
  ABISELECT(-24,-16),
  ABISELECT(56,36),
  ABISELECT(16,4),
  ABISELECT(-72,-56),
  ABISELECT(-80,-60),
  ABISELECT(-40,-28),
  ABISELECT(-352,-256),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S21142C6D1Ev,_ZTv0_n40_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S21142C6D0Ev,_ZTv0_n40_N8S21142C6D0Ev),
  ABISELECT(-368,-260),
  ABISELECT(64,44),
  ABISELECT(-56,-32),
  ABISELECT(-88,-60),
  ABISELECT(-96,-64),
  ABISELECT(-40,-20),
  ABISELECT(40,32),
  ABISELECT(-368,-260),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S21142C6D1Ev,_ZTv0_n36_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S21142C6D0Ev,_ZTv0_n36_N8S21142C6D0Ev),
  ABISELECT(-408,-292),
  ABISELECT(-80,-52),
  ABISELECT(-408,-292),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C6D1Ev,_ZTv0_n16_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C6D0Ev,_ZTv0_n16_N8S21142C6D0Ev),
  ABISELECT(-432,-304),
  ABISELECT(-120,-76),
  ABISELECT(-432,-304),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C6D1Ev,_ZTv0_n16_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C6D0Ev,_ZTv0_n16_N8S21142C6D0Ev),
  ABISELECT(-440,-308),
  ABISELECT(-128,-80),
  ABISELECT(-440,-308),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C6D1Ev,_ZTv0_n16_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C6D0Ev,_ZTv0_n16_N8S21142C6D0Ev),
};
extern VTBL_ENTRY _ZTV8S21142C6[];
extern void _ZN9S21142C16D1Ev();
extern void _ZN9S21142C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21142C16__8S21142C6[] = {
  ABISELECT(440,308),
  ABISELECT(312,228),
  ABISELECT(280,200),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C16[0]),
  (VTBL_ENTRY)&_ZN9S21142C16D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C16D0Ev,
};
extern void _ZN8S21142C9D1Ev();
extern void _ZN8S21142C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C99S21142C16__A2__8S21142C6[] = {
  ABISELECT(312,228),
  ABISELECT(280,200),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&_ZN8S21142C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZThn280_N8S21142C9D1Ev,_ZThn200_N8S21142C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
extern void ABISELECT(_ZThn280_N8S21142C9D0Ev,_ZThn200_N8S21142C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__8S21142C99S21142C16__A2__8S21142C6[] = {
  ABISELECT(-280,-200),
  ABISELECT(-280,-200),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZThn312_N8S21142C9D1Ev,_ZThn228_N8S21142C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
extern void ABISELECT(_ZThn312_N8S21142C9D0Ev,_ZThn228_N8S21142C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S21142C99S21142C16__A2__8S21142C6[] = {
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C16D1Ev,_ZTv0_n12_N9S21142C16D1Ev)();
extern void ABISELECT(_ZThn280_N9S21142C16D1Ev,_ZThn200_N9S21142C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C16D0Ev,_ZTv0_n12_N9S21142C16D0Ev)();
extern void ABISELECT(_ZThn280_N9S21142C16D0Ev,_ZThn200_N9S21142C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__9S21142C16__8S21142C6[] = {
  ABISELECT(-280,-200),
  ABISELECT(-280,-200),
  (VTBL_ENTRY)&(_ZTI9S21142C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C16D1Ev,_ZTv0_n12_N9S21142C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C16D0Ev,_ZTv0_n12_N9S21142C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C16D1Ev,_ZTv0_n12_N9S21142C16D1Ev)();
extern void ABISELECT(_ZThn312_N9S21142C16D1Ev,_ZThn228_N9S21142C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C16D0Ev,_ZTv0_n12_N9S21142C16D0Ev)();
extern void ABISELECT(_ZThn312_N9S21142C16D0Ev,_ZThn228_N9S21142C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__9S21142C16__8S21142C6[] = {
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI9S21142C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C16D1Ev,_ZTv0_n12_N9S21142C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C16D0Ev,_ZTv0_n12_N9S21142C16D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21142C16D1Ev,_ZTv0_n16_N9S21142C16D1Ev)();
extern void ABISELECT(_ZThn440_N9S21142C16D1Ev,_ZThn308_N9S21142C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C16D0Ev,_ZTv0_n16_N9S21142C16D0Ev)();
extern void ABISELECT(_ZThn440_N9S21142C16D0Ev,_ZThn308_N9S21142C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C17__9S21142C16__8S21142C6[] = {
  ABISELECT(-440,-308),
  ABISELECT(-128,-80),
  ABISELECT(-440,-308),
  (VTBL_ENTRY)&(_ZTI9S21142C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C16D1Ev,_ZTv0_n16_N9S21142C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C16D0Ev,_ZTv0_n16_N9S21142C16D0Ev),
};
extern void _ZN8S21142C7D1Ev();
extern void _ZN8S21142C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C7__8S21142C6[] = {
  ABISELECT(152,112),
  ABISELECT(136,100),
  ABISELECT(104,72),
  ABISELECT(96,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C7[0]),
  (VTBL_ENTRY)&_ZN8S21142C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C7D0Ev,
};
extern void _ZN8S21142C8D1Ev();
extern void _ZN8S21142C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C88S21142C7__8S21142C6[] = {
  ABISELECT(136,100),
  ABISELECT(104,72),
  ABISELECT(96,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&_ZN8S21142C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S21142C8D1Ev,_ZTv0_n20_N8S21142C8D1Ev)();
extern void ABISELECT(_ZThn96_N8S21142C8D1Ev,_ZThn68_N8S21142C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21142C8D0Ev,_ZTv0_n20_N8S21142C8D0Ev)();
extern void ABISELECT(_ZThn96_N8S21142C8D0Ev,_ZThn68_N8S21142C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21142C9__8S21142C88S21142C7__8S21142C6[] = {
  ABISELECT(-96,-68),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C8D1Ev,_ZTv0_n20_N8S21142C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C8D0Ev,_ZTv0_n20_N8S21142C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev)();
extern void ABISELECT(_ZThn104_N8S21142C8D1Ev,_ZThn72_N8S21142C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev)();
extern void ABISELECT(_ZThn104_N8S21142C8D0Ev,_ZThn72_N8S21142C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__8S21142C88S21142C7__8S21142C6[] = {
  ABISELECT(-104,-72),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev)();
extern void ABISELECT(_ZThn136_N8S21142C8D1Ev,_ZThn100_N8S21142C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev)();
extern void ABISELECT(_ZThn136_N8S21142C8D0Ev,_ZThn100_N8S21142C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S21142C88S21142C7__8S21142C6[] = {
  ABISELECT(-136,-100),
  ABISELECT(-136,-100),
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev),
};
extern void _ZN8S21142C9D1Ev();
extern void _ZN8S21142C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C98S21142C7__A1__8S21142C6[] = {
  ABISELECT(48,36),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&_ZN8S21142C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S21142C9D1Ev,_ZThn8_N8S21142C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S21142C9D0Ev,_ZThn8_N8S21142C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__8S21142C98S21142C7__A1__8S21142C6[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZThn48_N8S21142C9D1Ev,_ZThn36_N8S21142C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
extern void ABISELECT(_ZThn48_N8S21142C9D0Ev,_ZThn36_N8S21142C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S21142C98S21142C7__A1__8S21142C6[] = {
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21142C7D1Ev,_ZTv0_n20_N8S21142C7D1Ev)();
extern void ABISELECT(_ZThn96_N8S21142C7D1Ev,_ZThn68_N8S21142C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21142C7D0Ev,_ZTv0_n20_N8S21142C7D0Ev)();
extern void ABISELECT(_ZThn96_N8S21142C7D0Ev,_ZThn68_N8S21142C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21142C9__8S21142C7__8S21142C6[] = {
  ABISELECT(-96,-68),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI8S21142C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C7D1Ev,_ZTv0_n20_N8S21142C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C7D0Ev,_ZTv0_n20_N8S21142C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C7D1Ev,_ZTv0_n12_N8S21142C7D1Ev)();
extern void ABISELECT(_ZThn104_N8S21142C7D1Ev,_ZThn72_N8S21142C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C7D0Ev,_ZTv0_n12_N8S21142C7D0Ev)();
extern void ABISELECT(_ZThn104_N8S21142C7D0Ev,_ZThn72_N8S21142C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__8S21142C7__8S21142C6[] = {
  ABISELECT(-104,-72),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI8S21142C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C7D1Ev,_ZTv0_n12_N8S21142C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C7D0Ev,_ZTv0_n12_N8S21142C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C7D1Ev,_ZTv0_n12_N8S21142C7D1Ev)();
extern void ABISELECT(_ZThn136_N8S21142C7D1Ev,_ZThn100_N8S21142C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C7D0Ev,_ZTv0_n12_N8S21142C7D0Ev)();
extern void ABISELECT(_ZThn136_N8S21142C7D0Ev,_ZThn100_N8S21142C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S21142C7__8S21142C6[] = {
  ABISELECT(-136,-100),
  ABISELECT(-136,-100),
  (VTBL_ENTRY)&(_ZTI8S21142C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C7D1Ev,_ZTv0_n12_N8S21142C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C7D0Ev,_ZTv0_n12_N8S21142C7D0Ev),
};
extern void ABISELECT(_ZThn88_N8S21142C7D1Ev,_ZThn64_N8S21142C7D1Ev)();
extern void ABISELECT(_ZThn88_N8S21142C7D0Ev,_ZThn64_N8S21142C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21142C9__A__8S21142C7__8S21142C6[] = {
  ABISELECT(48,36),
  ABISELECT(16,8),
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI8S21142C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N8S21142C7D1Ev,_ZThn64_N8S21142C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N8S21142C7D0Ev,_ZThn64_N8S21142C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C7D1Ev,_ZTv0_n12_N8S21142C7D1Ev)();
extern void ABISELECT(_ZThn152_N8S21142C7D1Ev,_ZThn112_N8S21142C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C7D0Ev,_ZTv0_n12_N8S21142C7D0Ev)();
extern void ABISELECT(_ZThn152_N8S21142C7D0Ev,_ZThn112_N8S21142C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__A1__8S21142C7__8S21142C6[] = {
  ABISELECT(-152,-112),
  ABISELECT(-152,-112),
  (VTBL_ENTRY)&(_ZTI8S21142C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C7D1Ev,_ZTv0_n12_N8S21142C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C7D0Ev,_ZTv0_n12_N8S21142C7D0Ev),
};
extern void _ZN8S21142C9D1Ev();
extern void _ZN8S21142C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C9__8S21142C6[] = {
  ABISELECT(40,32),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&_ZN8S21142C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZThn8_N8S21142C9D1Ev,_ZThn4_N8S21142C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
extern void ABISELECT(_ZThn8_N8S21142C9D0Ev,_ZThn4_N8S21142C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__8S21142C9__8S21142C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZThn40_N8S21142C9D1Ev,_ZThn32_N8S21142C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
extern void ABISELECT(_ZThn40_N8S21142C9D0Ev,_ZThn32_N8S21142C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S21142C9__8S21142C6[] = {
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void _ZN9S21142C12D1Ev();
extern void _ZN9S21142C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21142C12__8S21142C6[] = {
  ABISELECT(80,48),
  ABISELECT(-24,-16),
  ABISELECT(56,36),
  ABISELECT(16,4),
  ABISELECT(-72,-56),
  ABISELECT(-80,-60),
  ABISELECT(-40,-28),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&_ZN9S21142C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C12D0Ev,
};
extern void _ZN8S21142C3D1Ev();
extern void _ZN8S21142C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C39S21142C12__8S21142C6[] = {
  ABISELECT(-40,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C3[0]),
  (VTBL_ENTRY)&_ZN8S21142C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21142C3D1Ev,_ZTv0_n12_N8S21142C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21142C3D0Ev,_ZTv0_n12_N8S21142C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S21142C39S21142C12__8S21142C6[] = {
  ABISELECT(40,28),
  ABISELECT(40,28),
  (VTBL_ENTRY)&(_ZTI8S21142C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C3D1Ev,_ZTv0_n12_N8S21142C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C3D0Ev,_ZTv0_n12_N8S21142C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21142C12D1Ev,_ZTv0_n20_N9S21142C12D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S21142C12D0Ev,_ZTv0_n20_N9S21142C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21142C9__9S21142C12__8S21142C6[] = {
  ABISELECT(80,60),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(80,60),
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C12D1Ev,_ZTv0_n20_N9S21142C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C12D0Ev,_ZTv0_n20_N9S21142C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C12D1Ev,_ZTv0_n12_N9S21142C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C12D0Ev,_ZTv0_n12_N9S21142C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S21142C10__9S21142C12__8S21142C6[] = {
  ABISELECT(72,56),
  ABISELECT(72,56),
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C12D1Ev,_ZTv0_n12_N9S21142C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C12D0Ev,_ZTv0_n12_N9S21142C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C12D1Ev,_ZTv0_n12_N9S21142C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C12D0Ev,_ZTv0_n12_N9S21142C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__9S21142C12__8S21142C6[] = {
  ABISELECT(40,28),
  ABISELECT(40,28),
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C12D1Ev,_ZTv0_n12_N9S21142C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C12D0Ev,_ZTv0_n12_N9S21142C12D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N9S21142C12D1Ev,_ZTv0_n36_N9S21142C12D1Ev)();
extern void ABISELECT(_ZThn16_N9S21142C12D1Ev,_ZThn4_N9S21142C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S21142C12D0Ev,_ZTv0_n36_N9S21142C12D0Ev)();
extern void ABISELECT(_ZThn16_N9S21142C12D0Ev,_ZThn4_N9S21142C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C13__9S21142C12__8S21142C6[] = {
  ABISELECT(-16,-4),
  ABISELECT(64,44),
  ABISELECT(-56,-32),
  ABISELECT(-88,-60),
  ABISELECT(-96,-64),
  ABISELECT(-40,-20),
  ABISELECT(40,32),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S21142C12D1Ev,_ZTv0_n36_N9S21142C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S21142C12D0Ev,_ZTv0_n36_N9S21142C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21142C12D1Ev,_ZTv0_n16_N9S21142C12D1Ev)();
extern void ABISELECT(_ZThn56_N9S21142C12D1Ev,_ZThn36_N9S21142C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C12D0Ev,_ZTv0_n16_N9S21142C12D0Ev)();
extern void ABISELECT(_ZThn56_N9S21142C12D0Ev,_ZThn36_N9S21142C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C15__9S21142C12__8S21142C6[] = {
  ABISELECT(-56,-36),
  ABISELECT(-80,-52),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C12D1Ev,_ZTv0_n16_N9S21142C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C12D0Ev,_ZTv0_n16_N9S21142C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C12D1Ev,_ZTv0_n12_N9S21142C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C12D0Ev,_ZTv0_n12_N9S21142C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__9S21142C12__8S21142C6[] = {
  ABISELECT(24,16),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C12D1Ev,_ZTv0_n12_N9S21142C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C12D0Ev,_ZTv0_n12_N9S21142C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21142C12D1Ev,_ZTv0_n16_N9S21142C12D1Ev)();
extern void ABISELECT(_ZThn80_N9S21142C12D1Ev,_ZThn48_N9S21142C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C12D0Ev,_ZTv0_n16_N9S21142C12D0Ev)();
extern void ABISELECT(_ZThn80_N9S21142C12D0Ev,_ZThn48_N9S21142C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21142C3__A1__9S21142C12__8S21142C6[] = {
  ABISELECT(-80,-48),
  ABISELECT(-120,-76),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C12D1Ev,_ZTv0_n16_N9S21142C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C12D0Ev,_ZTv0_n16_N9S21142C12D0Ev),
};
extern void _ZN9S21142C13D1Ev();
extern void _ZN9S21142C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21142C13__8S21142C6[] = {
  ABISELECT(64,44),
  ABISELECT(-56,-32),
  ABISELECT(-88,-60),
  ABISELECT(-96,-64),
  ABISELECT(-40,-20),
  ABISELECT(40,32),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&_ZN9S21142C13D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C13D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn40_N9S21142C13D1Ev,_ZThn32_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn40_N9S21142C13D0Ev,_ZThn32_N9S21142C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C15__9S21142C13__8S21142C6[] = {
  ABISELECT(-40,-32),
  ABISELECT(-80,-52),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__9S21142C13__8S21142C6[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21142C13D1Ev,_ZTv0_n20_N9S21142C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S21142C13D0Ev,_ZTv0_n20_N9S21142C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21142C9__9S21142C13__8S21142C6[] = {
  ABISELECT(96,64),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(96,64),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C13D1Ev,_ZTv0_n20_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C13D0Ev,_ZTv0_n20_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S21142C10__9S21142C13__8S21142C6[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__9S21142C13__8S21142C6[] = {
  ABISELECT(56,32),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn64_N9S21142C13D1Ev,_ZThn44_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn64_N9S21142C13D0Ev,_ZThn44_N9S21142C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21142C3__9S21142C13__8S21142C6[] = {
  ABISELECT(-64,-44),
  ABISELECT(-120,-76),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev),
};
extern void _ZN9S21142C15D1Ev();
extern void _ZN9S21142C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21142C15__8S21142C6[] = {
  ABISELECT(-80,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C15[0]),
  (VTBL_ENTRY)&_ZN9S21142C15D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C15D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21142C15D1Ev,_ZTv0_n12_N9S21142C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C15D0Ev,_ZTv0_n12_N9S21142C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__9S21142C15__8S21142C6[] = {
  ABISELECT(80,52),
  ABISELECT(80,52),
  (VTBL_ENTRY)&(_ZTI9S21142C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C15D1Ev,_ZTv0_n12_N9S21142C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C15D0Ev,_ZTv0_n12_N9S21142C15D0Ev),
};
extern void _ZN8S21142C3D1Ev();
extern void _ZN8S21142C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C3__A1__8S21142C6[] = {
  ABISELECT(-120,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C3[0]),
  (VTBL_ENTRY)&_ZN8S21142C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21142C3D1Ev,_ZTv0_n12_N8S21142C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21142C3D0Ev,_ZTv0_n12_N8S21142C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S21142C3__A1__8S21142C6[] = {
  ABISELECT(120,76),
  ABISELECT(120,76),
  (VTBL_ENTRY)&(_ZTI8S21142C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C3D1Ev,_ZTv0_n12_N8S21142C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C3D0Ev,_ZTv0_n12_N8S21142C3D0Ev),
};
extern void _ZN9S21142C17D1Ev();
extern void _ZN9S21142C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21142C17__8S21142C6[] = {
  ABISELECT(-128,-80),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C17[0]),
  (VTBL_ENTRY)&_ZN9S21142C17D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21142C17D1Ev,_ZTv0_n12_N9S21142C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C17D0Ev,_ZTv0_n12_N9S21142C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__9S21142C17__8S21142C6[] = {
  ABISELECT(128,80),
  ABISELECT(128,80),
  (VTBL_ENTRY)&(_ZTI9S21142C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C17D1Ev,_ZTv0_n12_N9S21142C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C17D0Ev,_ZTv0_n12_N9S21142C17D0Ev),
};
static  VTT_ENTRY vtt_S21142C6[] = {
  {&(_ZTV8S21142C6[12]),  12,100},
  {&(_tg__ZTV9S21142C16__8S21142C6[5]),  5,7},
  {&(_tg__ZTV8S21142C99S21142C16__A2__8S21142C6[4]),  4,6},
  {&(_tg__ZTV9S21142C10__8S21142C99S21142C16__A2__8S21142C6[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S21142C99S21142C16__A2__8S21142C6[3]),  3,5},
  {&(_tg__ZTV9S21142C10__9S21142C16__8S21142C6[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__9S21142C16__8S21142C6[3]),  3,5},
  {&(_tg__ZTV9S21142C17__9S21142C16__8S21142C6[4]),  4,6},
  {&(_ZTV8S21142C6[21]),  21,100},
  {&(_ZTV8S21142C6[42]),  42,100},
  {&(_ZTV8S21142C6[47]),  47,100},
  {&(_ZTV8S21142C6[52]),  52,100},
  {&(_ZTV8S21142C6[25]),  25,100},
  {&(_ZTV8S21142C6[29]),  29,100},
  {&(_ZTV8S21142C6[35]),  35,100},
  {&(_ZTV8S21142C6[57]),  57,100},
  {&(_ZTV8S21142C6[69]),  69,100},
  {&(_ZTV8S21142C6[80]),  80,100},
  {&(_ZTV8S21142C6[86]),  86,100},
  {&(_ZTV8S21142C6[92]),  92,100},
  {&(_ZTV8S21142C6[98]),  98,100},
  {&(_tg__ZTV8S21142C7__8S21142C6[6]),  6,8},
  {&(_tg__ZTV8S21142C88S21142C7__8S21142C6[5]),  5,7},
  {&(_tg__ZTV8S21142C9__8S21142C88S21142C7__8S21142C6[5]),  5,7},
  {&(_tg__ZTV9S21142C10__8S21142C88S21142C7__8S21142C6[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S21142C88S21142C7__8S21142C6[3]),  3,5},
  {&(_tg__ZTV8S21142C98S21142C7__A1__8S21142C6[4]),  4,6},
  {&(_tg__ZTV9S21142C10__8S21142C98S21142C7__A1__8S21142C6[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S21142C98S21142C7__A1__8S21142C6[3]),  3,5},
  {&(_tg__ZTV8S21142C9__8S21142C7__8S21142C6[5]),  5,7},
  {&(_tg__ZTV9S21142C10__8S21142C7__8S21142C6[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S21142C7__8S21142C6[3]),  3,5},
  {&(_tg__ZTV8S21142C9__A__8S21142C7__8S21142C6[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__A1__8S21142C7__8S21142C6[3]),  3,5},
  {&(_tg__ZTV8S21142C9__8S21142C6[4]),  4,6},
  {&(_tg__ZTV9S21142C10__8S21142C9__8S21142C6[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S21142C9__8S21142C6[3]),  3,5},
  {&(_tg__ZTV9S21142C12__8S21142C6[9]),  9,11},
  {&(_tg__ZTV8S21142C39S21142C12__8S21142C6[3]),  3,5},
  {&(_tg__ZTV7S3589C3__8S21142C39S21142C12__8S21142C6[3]),  3,5},
  {&(_tg__ZTV8S21142C9__9S21142C12__8S21142C6[5]),  5,7},
  {&(_tg__ZTV9S21142C10__9S21142C12__8S21142C6[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__9S21142C12__8S21142C6[3]),  3,5},
  {&(_tg__ZTV9S21142C13__9S21142C12__8S21142C6[9]),  9,11},
  {&(_tg__ZTV9S21142C15__9S21142C12__8S21142C6[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__9S21142C12__8S21142C6[3]),  3,5},
  {&(_tg__ZTV8S21142C3__A1__9S21142C12__8S21142C6[4]),  4,6},
  {&(_tg__ZTV9S21142C13__8S21142C6[8]),  8,10},
  {&(_tg__ZTV9S21142C15__9S21142C13__8S21142C6[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__9S21142C13__8S21142C6[3]),  3,5},
  {&(_tg__ZTV8S21142C9__9S21142C13__8S21142C6[5]),  5,7},
  {&(_tg__ZTV9S21142C10__9S21142C13__8S21142C6[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__9S21142C13__8S21142C6[3]),  3,5},
  {&(_tg__ZTV8S21142C3__9S21142C13__8S21142C6[4]),  4,6},
  {&(_tg__ZTV9S21142C15__8S21142C6[3]),  3,5},
  {&(_tg__ZTV10S3589C9_nt__9S21142C15__8S21142C6[3]),  3,5},
  {&(_tg__ZTV8S21142C3__A1__8S21142C6[3]),  3,5},
  {&(_tg__ZTV7S3589C3__8S21142C3__A1__8S21142C6[3]),  3,5},
  {&(_tg__ZTV9S21142C17__8S21142C6[3]),  3,5},
  {&(_tg__ZTV7S3589C3__9S21142C17__8S21142C6[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21142C6[];
extern  VTBL_ENTRY _ZTV8S21142C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C6[];
static VTBL_ENTRY alt_thunk_names63[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S21142C13D0Ev,_ZThn44_N9S21142C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S21142C13D0Ev,_ZThn32_N9S21142C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S21142C13D1Ev,_ZThn44_N9S21142C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S21142C13D1Ev,_ZThn32_N9S21142C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C12D0Ev,_ZTv0_n16_N9S21142C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S21142C12D0Ev,_ZThn48_N9S21142C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S21142C12D0Ev,_ZThn36_N9S21142C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C12D1Ev,_ZTv0_n16_N9S21142C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S21142C12D1Ev,_ZThn48_N9S21142C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S21142C12D1Ev,_ZThn36_N9S21142C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S21142C12D0Ev,_ZTv0_n36_N9S21142C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21142C12D0Ev,_ZThn4_N9S21142C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S21142C12D1Ev,_ZTv0_n36_N9S21142C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21142C12D1Ev,_ZThn4_N9S21142C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C7D0Ev,_ZTv0_n12_N8S21142C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S21142C7D0Ev,_ZThn112_N8S21142C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S21142C7D0Ev,_ZThn100_N8S21142C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21142C7D0Ev,_ZThn72_N8S21142C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C7D1Ev,_ZTv0_n12_N8S21142C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S21142C7D1Ev,_ZThn112_N8S21142C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S21142C7D1Ev,_ZThn100_N8S21142C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21142C7D1Ev,_ZThn72_N8S21142C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C7D0Ev,_ZTv0_n20_N8S21142C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S21142C7D0Ev,_ZThn68_N8S21142C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C7D1Ev,_ZTv0_n20_N8S21142C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S21142C7D1Ev,_ZThn68_N8S21142C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S21142C8D0Ev,_ZThn100_N8S21142C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21142C8D0Ev,_ZThn72_N8S21142C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S21142C8D1Ev,_ZThn100_N8S21142C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21142C8D1Ev,_ZThn72_N8S21142C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C8D0Ev,_ZTv0_n20_N8S21142C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S21142C8D0Ev,_ZThn68_N8S21142C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C8D1Ev,_ZTv0_n20_N8S21142C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S21142C8D1Ev,_ZThn68_N8S21142C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C16D0Ev,_ZTv0_n16_N9S21142C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N9S21142C16D0Ev,_ZThn308_N9S21142C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C16D1Ev,_ZTv0_n16_N9S21142C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N9S21142C16D1Ev,_ZThn308_N9S21142C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C16D0Ev,_ZTv0_n12_N9S21142C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N9S21142C16D0Ev,_ZThn228_N9S21142C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N9S21142C16D0Ev,_ZThn200_N9S21142C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C16D1Ev,_ZTv0_n12_N9S21142C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N9S21142C16D1Ev,_ZThn228_N9S21142C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N9S21142C16D1Ev,_ZThn200_N9S21142C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21142C9D0Ev,_ZThn32_N8S21142C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21142C9D0Ev,_ZThn4_N8S21142C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21142C9D0Ev,_ZThn36_N8S21142C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21142C9D0Ev,_ZThn8_N8S21142C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21142C9D0Ev,_ZThn228_N8S21142C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S21142C9D0Ev,_ZThn200_N8S21142C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21142C9D1Ev,_ZThn32_N8S21142C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21142C9D1Ev,_ZThn4_N8S21142C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21142C9D1Ev,_ZThn36_N8S21142C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21142C9D1Ev,_ZThn8_N8S21142C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21142C9D1Ev,_ZThn228_N8S21142C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S21142C9D1Ev,_ZThn200_N8S21142C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21142C6D0Ev,_ZTv0_n16_N8S21142C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N8S21142C6D0Ev,_ZThn308_N8S21142C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S21142C6D0Ev,_ZThn304_N8S21142C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn408_N8S21142C6D0Ev,_ZThn292_N8S21142C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21142C6D1Ev,_ZTv0_n16_N8S21142C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N8S21142C6D1Ev,_ZThn308_N8S21142C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S21142C6D1Ev,_ZThn304_N8S21142C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn408_N8S21142C6D1Ev,_ZThn292_N8S21142C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S21142C6D0Ev,_ZTv0_n36_N8S21142C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S21142C6D0Ev,_ZThn260_N8S21142C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S21142C6D1Ev,_ZTv0_n36_N8S21142C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S21142C6D1Ev,_ZThn260_N8S21142C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S21142C6D0Ev,_ZTv0_n40_N8S21142C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S21142C6D0Ev,_ZThn256_N8S21142C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S21142C6D1Ev,_ZTv0_n40_N8S21142C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S21142C6D1Ev,_ZThn256_N8S21142C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C6D0Ev,_ZTv0_n12_N8S21142C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S21142C6D0Ev,_ZThn240_N8S21142C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21142C6D0Ev,_ZThn228_N8S21142C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S21142C6D0Ev,_ZThn200_N8S21142C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C6D1Ev,_ZTv0_n12_N8S21142C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S21142C6D1Ev,_ZThn240_N8S21142C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21142C6D1Ev,_ZThn228_N8S21142C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S21142C6D1Ev,_ZThn200_N8S21142C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C6D0Ev,_ZTv0_n20_N8S21142C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S21142C6D0Ev,_ZThn196_N8S21142C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C6D1Ev,_ZTv0_n20_N8S21142C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S21142C6D1Ev,_ZThn196_N8S21142C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21142C6D0Ev,_ZTv0_n28_N8S21142C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S21142C6D0Ev,_ZThn128_N8S21142C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21142C6D1Ev,_ZTv0_n28_N8S21142C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S21142C6D1Ev,_ZThn128_N8S21142C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21142C6 = {  "S21142C6", // class name
  bases_S21142C6, 22,
  &(vtc_S21142C6[0]), // expected_vtbl_contents
  &(vtt_S21142C6[0]), // expected_vtt_contents
  ABISELECT(464,320), // object size
  NSPAIRA(_ZTI8S21142C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21142C6),100, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21142C6),60, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names63,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21142C19  : S21142C13 {
  short s21142c19f0;
  ::S21142C3 s21142c19f1;
  int s21142c19f2;
  ~S21142C19(); // tgen
  S21142C19(); // tgen
};
//SIG(-1 S21142C19) C1{ BC2{ BC3{ m FD} VBC4{ VBC5{ vd m Fi Fc Fi} Fp[2]} VBC6{ VBC7{ BC8{ vd m Fc FU9{ m Fc[6]}} vd FL FU9} VBC8 vd} BC8 VBC10{ VBC8} Fc Fi} Fs FC10 Fi}


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

static void Test_S21142C19()
{
  extern Class_Descriptor cd_S21142C19;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,34)];
    init_test(&cd_S21142C19, buf);
    S21142C19 *dp, &lv = *(dp=new (buf) S21142C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S21142C19)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21142C19)");
    check_base_class_offset(lv, (S3589C13_nt*)(S21142C13*), ABISELECT(16,12), "S21142C19");
    check_base_class_offset(lv, (S3589C9_nt*)(S21142C15*), ABISELECT(104,68), "S21142C19");
    check_base_class_offset(lv, (S21142C15*)(S21142C13*), ABISELECT(80,56), "S21142C19");
    check_base_class_offset(lv, (S3589C3*)(S21142C10*), ABISELECT(136,88), "S21142C19");
    check_base_class_offset(lv, (S21142C10*)(S21142C9*), ABISELECT(136,88), "S21142C19");
    /*is_ambiguous_... S21142C9::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C9*), ABISELECT(168,116), "S21142C19");
    check_base_class_offset(lv, (S3589C3*)(S21142C3*), ABISELECT(168,116), "S21142C19");
    check_base_class_offset(lv, (S21142C9*)(S21142C13*), ABISELECT(128,84), "S21142C19");
    /*is_ambiguous_... S21142C13::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C13*), 0, "S21142C19");
    check_base_class_offset(lv, (S21142C3*)(S21142C13*), ABISELECT(184,128), "S21142C19");
    check_base_class_offset(lv, (S21142C13*), 0, "S21142C19");
    check_field_offset(lv, s21142c19f0, ABISELECT(40,32), "S21142C19.s21142c19f0");
    check_field_offset(lv, s21142c19f1, ABISELECT(48,36), "S21142C19.s21142c19f1");
    check_field_offset(lv, s21142c19f2, ABISELECT(72,52), "S21142C19.s21142c19f2");
    test_class_info(&lv, &cd_S21142C19);
    dp->~S21142C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21142C19(Test_S21142C19, "S21142C19", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN9S21142C19C1Ev();
extern void _ZN9S21142C19D1Ev();
Name_Map name_map_S21142C19[] = {
  NSPAIR(_ZN9S21142C19C1Ev),
  NSPAIR(_ZN9S21142C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C13_nt;
extern VTBL_ENTRY _ZTI11S3589C13_nt[];
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
extern Class_Descriptor cd_S21142C15;
extern VTBL_ENTRY _ZTI9S21142C15[];
extern  VTBL_ENTRY _ZTV9S21142C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C15[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C10;
extern VTBL_ENTRY _ZTI9S21142C10[];
extern  VTBL_ENTRY _ZTV9S21142C10[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C9;
extern VTBL_ENTRY _ZTI8S21142C9[];
extern  VTBL_ENTRY _ZTV8S21142C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C9[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C3;
extern VTBL_ENTRY _ZTI8S21142C3[];
extern  VTBL_ENTRY _ZTV8S21142C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C3[];
extern Class_Descriptor cd_S21142C13;
extern VTBL_ENTRY _ZTI9S21142C13[];
extern  VTBL_ENTRY _ZTV9S21142C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C13[];
static Base_Class bases_S21142C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C13_nt,    ABISELECT(16,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
    9, //immediately_derived
  0, 0},
  {&cd_S3589C9_nt,    ABISELECT(104,68), //bcp->offset
    16, //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
    2, //immediately_derived
  0, 1},
  {&cd_S21142C15,    ABISELECT(80,56), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(136,88), //bcp->offset
    -1, //bcp->virtual_function_table_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_S21142C10,    ABISELECT(136,88), //bcp->offset
    28, //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
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(168,116), //bcp->offset
    33, //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
    6, //immediately_derived
  0, 1},
  {&cd_S21142C9,    ABISELECT(128,84), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3589C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S21142C3,    ABISELECT(184,128), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S21142C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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},
  {0}};
extern VTBL_ENTRY _ZTI9S21142C19[];
extern void _ZN9S21142C19D1Ev();
extern void _ZN9S21142C19D0Ev();
extern void ABISELECT(_ZTv0_n32_N9S21142C19D1Ev,_ZTv0_n16_N9S21142C19D1Ev)();
extern void ABISELECT(_ZThn80_N9S21142C19D1Ev,_ZThn56_N9S21142C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C19D0Ev,_ZTv0_n16_N9S21142C19D0Ev)();
extern void ABISELECT(_ZThn80_N9S21142C19D0Ev,_ZThn56_N9S21142C19D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C19D1Ev,_ZTv0_n12_N9S21142C19D1Ev)();
extern void ABISELECT(_ZThn104_N9S21142C19D1Ev,_ZThn68_N9S21142C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C19D0Ev,_ZTv0_n12_N9S21142C19D0Ev)();
extern void ABISELECT(_ZThn104_N9S21142C19D0Ev,_ZThn68_N9S21142C19D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21142C19D1Ev,_ZTv0_n20_N9S21142C19D1Ev)();
extern void ABISELECT(_ZThn128_N9S21142C19D1Ev,_ZThn84_N9S21142C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21142C19D0Ev,_ZTv0_n20_N9S21142C19D0Ev)();
extern void ABISELECT(_ZThn128_N9S21142C19D0Ev,_ZThn84_N9S21142C19D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C19D1Ev,_ZTv0_n12_N9S21142C19D1Ev)();
extern void ABISELECT(_ZThn136_N9S21142C19D1Ev,_ZThn88_N9S21142C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C19D0Ev,_ZTv0_n12_N9S21142C19D0Ev)();
extern void ABISELECT(_ZThn136_N9S21142C19D0Ev,_ZThn88_N9S21142C19D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C19D1Ev,_ZTv0_n12_N9S21142C19D1Ev)();
extern void ABISELECT(_ZThn168_N9S21142C19D1Ev,_ZThn116_N9S21142C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C19D0Ev,_ZTv0_n12_N9S21142C19D0Ev)();
extern void ABISELECT(_ZThn168_N9S21142C19D0Ev,_ZThn116_N9S21142C19D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C19D1Ev,_ZTv0_n16_N9S21142C19D1Ev)();
extern void ABISELECT(_ZThn184_N9S21142C19D1Ev,_ZThn128_N9S21142C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C19D0Ev,_ZTv0_n16_N9S21142C19D0Ev)();
extern void ABISELECT(_ZThn184_N9S21142C19D0Ev,_ZThn128_N9S21142C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21142C19[] = {
  ABISELECT(184,128),
  ABISELECT(168,116),
  ABISELECT(136,88),
  ABISELECT(128,84),
  ABISELECT(104,68),
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C19[0]),
  (VTBL_ENTRY)&_ZN9S21142C19D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C19D0Ev,
  ABISELECT(-80,-56),
  ABISELECT(24,12),
  ABISELECT(-80,-56),
  (VTBL_ENTRY)&(_ZTI9S21142C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C19D1Ev,_ZTv0_n16_N9S21142C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C19D0Ev,_ZTv0_n16_N9S21142C19D0Ev),
  ABISELECT(-104,-68),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI9S21142C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C19D1Ev,_ZTv0_n12_N9S21142C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C19D0Ev,_ZTv0_n12_N9S21142C19D0Ev),
  ABISELECT(-128,-84),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI9S21142C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C19D1Ev,_ZTv0_n20_N9S21142C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C19D0Ev,_ZTv0_n20_N9S21142C19D0Ev),
  ABISELECT(-136,-88),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI9S21142C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C19D1Ev,_ZTv0_n12_N9S21142C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C19D0Ev,_ZTv0_n12_N9S21142C19D0Ev),
  ABISELECT(-168,-116),
  ABISELECT(-168,-116),
  (VTBL_ENTRY)&(_ZTI9S21142C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C19D1Ev,_ZTv0_n12_N9S21142C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C19D0Ev,_ZTv0_n12_N9S21142C19D0Ev),
  ABISELECT(-184,-128),
  ABISELECT(-16,-12),
  ABISELECT(-184,-128),
  (VTBL_ENTRY)&(_ZTI9S21142C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C19D1Ev,_ZTv0_n16_N9S21142C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C19D0Ev,_ZTv0_n16_N9S21142C19D0Ev),
};
extern VTBL_ENTRY _ZTV9S21142C19[];
extern void _ZN9S21142C13D1Ev();
extern void _ZN9S21142C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21142C13__9S21142C19[] = {
  ABISELECT(184,128),
  ABISELECT(168,116),
  ABISELECT(136,88),
  ABISELECT(128,84),
  ABISELECT(104,68),
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&_ZN9S21142C13D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C13D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn80_N9S21142C13D1Ev,_ZThn56_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn80_N9S21142C13D0Ev,_ZThn56_N9S21142C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C15__9S21142C13__9S21142C19[] = {
  ABISELECT(-80,-56),
  ABISELECT(24,12),
  ABISELECT(-80,-56),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn104_N9S21142C13D1Ev,_ZThn68_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn104_N9S21142C13D0Ev,_ZThn68_N9S21142C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__9S21142C13__9S21142C19[] = {
  ABISELECT(-104,-68),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21142C13D1Ev,_ZTv0_n20_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn128_N9S21142C13D1Ev,_ZThn84_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21142C13D0Ev,_ZTv0_n20_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn128_N9S21142C13D0Ev,_ZThn84_N9S21142C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21142C9__9S21142C13__9S21142C19[] = {
  ABISELECT(-128,-84),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C13D1Ev,_ZTv0_n20_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C13D0Ev,_ZTv0_n20_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn136_N9S21142C13D1Ev,_ZThn88_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn136_N9S21142C13D0Ev,_ZThn88_N9S21142C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__9S21142C13__9S21142C19[] = {
  ABISELECT(-136,-88),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn168_N9S21142C13D1Ev,_ZThn116_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn168_N9S21142C13D0Ev,_ZThn116_N9S21142C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__9S21142C13__9S21142C19[] = {
  ABISELECT(-168,-116),
  ABISELECT(-168,-116),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn184_N9S21142C13D1Ev,_ZThn128_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn184_N9S21142C13D0Ev,_ZThn128_N9S21142C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21142C3__9S21142C13__9S21142C19[] = {
  ABISELECT(-184,-128),
  ABISELECT(-16,-12),
  ABISELECT(-184,-128),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev),
};
extern void _ZN9S21142C15D1Ev();
extern void _ZN9S21142C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21142C15__9S21142C19[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C15[0]),
  (VTBL_ENTRY)&_ZN9S21142C15D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C15D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21142C15D1Ev,_ZTv0_n12_N9S21142C15D1Ev)();
extern void ABISELECT(_ZThn24_N9S21142C15D1Ev,_ZThn12_N9S21142C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C15D0Ev,_ZTv0_n12_N9S21142C15D0Ev)();
extern void ABISELECT(_ZThn24_N9S21142C15D0Ev,_ZThn12_N9S21142C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__9S21142C15__9S21142C19[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S21142C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C15D1Ev,_ZTv0_n12_N9S21142C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C15D0Ev,_ZTv0_n12_N9S21142C15D0Ev),
};
extern void _ZN8S21142C9D1Ev();
extern void _ZN8S21142C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C9__9S21142C19[] = {
  ABISELECT(40,32),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&_ZN8S21142C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZThn8_N8S21142C9D1Ev,_ZThn4_N8S21142C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
extern void ABISELECT(_ZThn8_N8S21142C9D0Ev,_ZThn4_N8S21142C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__8S21142C9__9S21142C19[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZThn40_N8S21142C9D1Ev,_ZThn32_N8S21142C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
extern void ABISELECT(_ZThn40_N8S21142C9D0Ev,_ZThn32_N8S21142C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S21142C9__9S21142C19[] = {
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void _ZN8S21142C3D1Ev();
extern void _ZN8S21142C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C3__9S21142C19[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C3[0]),
  (VTBL_ENTRY)&_ZN8S21142C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21142C3D1Ev,_ZTv0_n12_N8S21142C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21142C3D0Ev,_ZTv0_n12_N8S21142C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S21142C3__9S21142C19[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S21142C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C3D1Ev,_ZTv0_n12_N8S21142C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C3D0Ev,_ZTv0_n12_N8S21142C3D0Ev),
};
static  VTT_ENTRY vtt_S21142C19[] = {
  {&(_ZTV9S21142C19[8]),  8,44},
  {&(_tg__ZTV9S21142C13__9S21142C19[8]),  8,10},
  {&(_tg__ZTV9S21142C15__9S21142C13__9S21142C19[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__9S21142C13__9S21142C19[3]),  3,5},
  {&(_tg__ZTV8S21142C9__9S21142C13__9S21142C19[5]),  5,7},
  {&(_tg__ZTV9S21142C10__9S21142C13__9S21142C19[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__9S21142C13__9S21142C19[3]),  3,5},
  {&(_tg__ZTV8S21142C3__9S21142C13__9S21142C19[4]),  4,6},
  {&(_ZTV9S21142C19[14]),  14,44},
  {&(_ZTV9S21142C19[19]),  19,44},
  {&(_ZTV9S21142C19[26]),  26,44},
  {&(_ZTV9S21142C19[31]),  31,44},
  {&(_ZTV9S21142C19[36]),  36,44},
  {&(_ZTV9S21142C19[42]),  42,44},
  {&(_tg__ZTV9S21142C15__9S21142C19[3]),  3,5},
  {&(_tg__ZTV10S3589C9_nt__9S21142C15__9S21142C19[3]),  3,5},
  {&(_tg__ZTV8S21142C9__9S21142C19[4]),  4,6},
  {&(_tg__ZTV9S21142C10__8S21142C9__9S21142C19[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S21142C9__9S21142C19[3]),  3,5},
  {&(_tg__ZTV8S21142C3__9S21142C19[3]),  3,5},
  {&(_tg__ZTV7S3589C3__8S21142C3__9S21142C19[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S21142C19[];
extern  VTBL_ENTRY _ZTV9S21142C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C19[];
static VTBL_ENTRY alt_thunk_names64[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21142C9D0Ev,_ZThn32_N8S21142C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21142C9D0Ev,_ZThn4_N8S21142C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21142C9D1Ev,_ZThn32_N8S21142C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21142C9D1Ev,_ZThn4_N8S21142C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C15D0Ev,_ZTv0_n12_N9S21142C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S21142C15D0Ev,_ZThn12_N9S21142C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C15D1Ev,_ZTv0_n12_N9S21142C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S21142C15D1Ev,_ZThn12_N9S21142C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21142C13D0Ev,_ZTv0_n20_N9S21142C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S21142C13D0Ev,_ZThn84_N9S21142C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21142C13D1Ev,_ZTv0_n20_N9S21142C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S21142C13D1Ev,_ZThn84_N9S21142C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N9S21142C13D0Ev,_ZThn116_N9S21142C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S21142C13D0Ev,_ZThn88_N9S21142C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S21142C13D0Ev,_ZThn68_N9S21142C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N9S21142C13D1Ev,_ZThn116_N9S21142C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S21142C13D1Ev,_ZThn88_N9S21142C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S21142C13D1Ev,_ZThn68_N9S21142C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S21142C13D0Ev,_ZThn128_N9S21142C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S21142C13D0Ev,_ZThn56_N9S21142C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S21142C13D1Ev,_ZThn128_N9S21142C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S21142C13D1Ev,_ZThn56_N9S21142C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21142C19D0Ev,_ZTv0_n20_N9S21142C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S21142C19D0Ev,_ZThn84_N9S21142C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21142C19D1Ev,_ZTv0_n20_N9S21142C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S21142C19D1Ev,_ZThn84_N9S21142C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C19D0Ev,_ZTv0_n12_N9S21142C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N9S21142C19D0Ev,_ZThn116_N9S21142C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S21142C19D0Ev,_ZThn88_N9S21142C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S21142C19D0Ev,_ZThn68_N9S21142C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C19D1Ev,_ZTv0_n12_N9S21142C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N9S21142C19D1Ev,_ZThn116_N9S21142C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S21142C19D1Ev,_ZThn88_N9S21142C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S21142C19D1Ev,_ZThn68_N9S21142C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C19D0Ev,_ZTv0_n16_N9S21142C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S21142C19D0Ev,_ZThn128_N9S21142C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S21142C19D0Ev,_ZThn56_N9S21142C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C19D1Ev,_ZTv0_n16_N9S21142C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S21142C19D1Ev,_ZThn128_N9S21142C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S21142C19D1Ev,_ZThn56_N9S21142C19D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21142C19 = {  "S21142C19", // class name
  bases_S21142C19, 10,
  &(vtc_S21142C19[0]), // expected_vtbl_contents
  &(vtt_S21142C19[0]), // expected_vtt_contents
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI9S21142C19),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S21142C19),44, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21142C19),21, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names64,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21142C2  : virtual S21142C3 , virtual S21142C6 , S3589C13_nt , S21142C19 , virtual S21142C8 {
  int s21142c2f0;
  virtual  ~S21142C2(); // _ZN8S21142C2D2Ev
  S21142C2(); // tgen
};
//SIG(-1 S21142C2) C1{ VBC2{ VBC3{ vd m Fc FU4{ m Fc[6]}}} VBC5{ VBC6{ BC7{ VBC8{ VBC9{ BC3 vd FL FU4} VBC3 vd} BC3 BC10{ vd m Fi Fc Fi} BC9 Fi Fp} BC8 VBC10} VBC11{ VBC8 BC2 VBC12{ BC13{ m FD} VBC14{ VBC10 Fp[2]} VBC8 BC3 VBC2 Fc Fi} vd} BC15{ BC8 VBC16{ VBC3 Fi FC17{}} vd FD} vd Fi[10] Fp FC15} BC13 BC18{ BC12 Fs FC2 Fi} VBC7 vd Fi}


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

static void Test_S21142C2()
{
  extern Class_Descriptor cd_S21142C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(42,115)];
    init_test(&cd_S21142C2, buf);
    S21142C2 *dp, &lv = *(dp=new (buf) S21142C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(656,456), "sizeof(S21142C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21142C2)");
    /*is_ambiguous_... S21142C2::S21142C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C3*), ABISELECT(112,76), "S21142C2");
    /*is_ambiguous_... S21142C2::S21142C9 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C9*), ABISELECT(112,76), "S21142C2");
    /*is_ambiguous_... S21142C7::S21142C9 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C9*)(S21142C7*), ABISELECT(112,76), "S21142C2");
    /*is_ambiguous_... S21142C12::S21142C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C3*)(S21142C12*), ABISELECT(112,76), "S21142C2");
    /*is_ambiguous_... S21142C9::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C9*)(S21142C16*)(S21142C6*), ABISELECT(112,76), "S21142C2");
    check_base_class_offset(lv, (S3589C3*)(S21142C17*), ABISELECT(112,76), "S21142C2");
    /*is_ambiguous_... S21142C2::S21142C3 */ AMB_check_base_class_offset(lv, (S21142C3*), ABISELECT(104,72), "S21142C2");
    /*is_ambiguous_... S21142C2::S21142C13 */ AMB_check_base_class_offset(lv, (S21142C3*)(S21142C13*), ABISELECT(104,72), "S21142C2");
    check_base_class_offset(lv, (S21142C3*)(S21142C13*)(S21142C19*), ABISELECT(104,72), "S21142C2");
    /*is_ambiguous_... S21142C2::S21142C10 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C10*), ABISELECT(408,288), "S21142C2");
    /*is_ambiguous_... S21142C2::S21142C9 */ AMB_check_base_class_offset(lv, (S21142C10*)(S21142C9*), ABISELECT(408,288), "S21142C2");
    /*is_ambiguous_... S21142C7::S21142C9 */ AMB_check_base_class_offset(lv, (S21142C10*)(S21142C9*)(S21142C7*), ABISELECT(408,288), "S21142C2");
    check_base_class_offset(lv, (S21142C10*)(S21142C9*)(S21142C16*)(S21142C6*), ABISELECT(408,288), "S21142C2");
    check_base_class_offset(lv, (S21142C9*)(S21142C8*)(S21142C7*), ABISELECT(400,284), "S21142C2");
    check_base_class_offset(lv, (S21142C9*)(S21142C12*), ABISELECT(400,284), "S21142C2");
    /*is_ambiguous_... S21142C2::S21142C13 */ AMB_check_base_class_offset(lv, (S21142C9*)(S21142C13*), ABISELECT(400,284), "S21142C2");
    check_base_class_offset(lv, (S21142C9*)(S21142C13*)(S21142C19*), ABISELECT(400,284), "S21142C2");
    /*is_ambiguous_... S21142C2::S21142C8 */ AMB_check_base_class_offset(lv, (S21142C9*)(S21142C8*), ABISELECT(400,284), "S21142C2");
    /*is_ambiguous_... S21142C8::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C8*)(S21142C7*), ABISELECT(304,216), "S21142C2");
    check_base_class_offset(lv, (S3589C9_nt*)(S21142C8*)(S21142C7*), ABISELECT(320,228), "S21142C2");
    /*is_ambiguous_... S21142C8::S21142C10 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C10*)(S21142C8*)(S21142C7*), ABISELECT(344,244), "S21142C2");
    /*is_ambiguous_... S21142C8::S21142C10 */ AMB_check_base_class_offset(lv, (S21142C10*)(S21142C8*)(S21142C7*), ABISELECT(344,244), "S21142C2");
    check_base_class_offset(lv, (S21142C8*)(S21142C7*), ABISELECT(304,216), "S21142C2");
    /*is_ambiguous_... S21142C7::S21142C9 */ AMB_check_base_class_offset(lv, (S21142C9*)(S21142C7*), ABISELECT(392,280), "S21142C2");
    /*is_ambiguous_... S21142C7::S3589C9_nt */ AMB_check_base_class_offset(lv, (S3589C9_nt*)(S21142C7*), ABISELECT(440,316), "S21142C2");
    check_base_class_offset(lv, (S3589C9_nt*)(S21142C15*), ABISELECT(440,316), "S21142C2");
    check_base_class_offset(lv, (S21142C7*)(S21142C6*), ABISELECT(304,216), "S21142C2");
    /*is_ambiguous_... S21142C12::S21142C3 */ AMB_check_base_class_offset(lv, (S21142C3*)(S21142C12*), ABISELECT(464,332), "S21142C2");
    /*is_ambiguous_... S21142C2::S21142C13 */ AMB_check_base_class_offset(lv, (S3589C13_nt*)(S21142C13*), ABISELECT(496,348), "S21142C2");
    /*is_ambiguous_... S21142C2::S21142C13 */ AMB_check_base_class_offset(lv, (S21142C15*)(S21142C13*), ABISELECT(520,368), "S21142C2");
    check_base_class_offset(lv, (S21142C15*)(S21142C13*)(S21142C19*), ABISELECT(520,368), "S21142C2");
    /*is_ambiguous_... S21142C2::S21142C13 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C13*), ABISELECT(480,336), "S21142C2");
    check_base_class_offset(lv, (S21142C13*)(S21142C12*), ABISELECT(480,336), "S21142C2");
    check_base_class_offset(lv, (S21142C12*)(S21142C6*), ABISELECT(464,332), "S21142C2");
    check_base_class_offset(lv, (S21142C9*)(S21142C16*)(S21142C6*), ABISELECT(128,88), "S21142C2");
    check_base_class_offset(lv, (S21142C17*)(S21142C16*)(S21142C6*), ABISELECT(544,380), "S21142C2");
    check_base_class_offset(lv, (S21142C16*)(S21142C6*), ABISELECT(128,88), "S21142C2");
    check_base_class_offset(lv, (S21142C6*), ABISELECT(128,88), "S21142C2");
    /*is_ambiguous_... S21142C2::S3589C13_nt */ AMB_check_base_class_offset(lv, (S3589C13_nt*), ABISELECT(80,56), "S21142C2");
    check_base_class_offset(lv, (S3589C13_nt*)(S21142C13*)(S21142C19*), ABISELECT(16,12), "S21142C2");
    /*is_ambiguous_... S21142C13::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C13*)(S21142C19*), 0, "S21142C2");
    check_base_class_offset(lv, (S21142C13*)(S21142C19*), 0, "S21142C2");
    check_base_class_offset(lv, (S21142C19*), 0, "S21142C2");
    /*is_ambiguous_... S21142C2::S21142C8 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C8*), ABISELECT(560,392), "S21142C2");
    /*is_ambiguous_... S21142C2::S21142C8 */ AMB_check_base_class_offset(lv, (S3589C9_nt*)(S21142C8*), ABISELECT(576,404), "S21142C2");
    /*is_ambiguous_... S21142C2::S21142C8 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C10*)(S21142C8*), ABISELECT(600,420), "S21142C2");
    /*is_ambiguous_... S21142C2::S21142C8 */ AMB_check_base_class_offset(lv, (S21142C10*)(S21142C8*), ABISELECT(600,420), "S21142C2");
    /*is_ambiguous_... S21142C2::S21142C8 */ AMB_check_base_class_offset(lv, (S21142C8*), ABISELECT(560,392), "S21142C2");
    check_field_offset(lv, s21142c2f0, ABISELECT(96,68), "S21142C2.s21142c2f0");
    test_class_info(&lv, &cd_S21142C2);
    dp->~S21142C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21142C2(Test_S21142C2, "S21142C2", ABISELECT(656,456));

#else // __cplusplus

extern void _ZN8S21142C2C1Ev();
extern void _ZN8S21142C2D2Ev();
Name_Map name_map_S21142C2[] = {
  NSPAIR(_ZN8S21142C2C1Ev),
  NSPAIR(_ZN8S21142C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C3;
extern VTBL_ENTRY _ZTI8S21142C3[];
extern  VTBL_ENTRY _ZTV8S21142C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C3[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C10;
extern VTBL_ENTRY _ZTI9S21142C10[];
extern  VTBL_ENTRY _ZTV9S21142C10[];
extern Class_Descriptor cd_S21142C9;
extern VTBL_ENTRY _ZTI8S21142C9[];
extern  VTBL_ENTRY _ZTV8S21142C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C9[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C10;
extern VTBL_ENTRY _ZTI9S21142C10[];
extern  VTBL_ENTRY _ZTV9S21142C10[];
extern Class_Descriptor cd_S21142C8;
extern VTBL_ENTRY _ZTI8S21142C8[];
extern  VTBL_ENTRY _ZTV8S21142C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C8[];
extern Class_Descriptor cd_S21142C9;
extern VTBL_ENTRY _ZTI8S21142C9[];
extern  VTBL_ENTRY _ZTV8S21142C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C9[];
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
extern Class_Descriptor cd_S21142C7;
extern VTBL_ENTRY _ZTI8S21142C7[];
extern  VTBL_ENTRY _ZTV8S21142C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C7[];
extern Class_Descriptor cd_S21142C3;
extern VTBL_ENTRY _ZTI8S21142C3[];
extern  VTBL_ENTRY _ZTV8S21142C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C3[];
extern Class_Descriptor cd_S3589C13_nt;
extern VTBL_ENTRY _ZTI11S3589C13_nt[];
extern Class_Descriptor cd_S21142C15;
extern VTBL_ENTRY _ZTI9S21142C15[];
extern  VTBL_ENTRY _ZTV9S21142C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C15[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C13;
extern VTBL_ENTRY _ZTI9S21142C13[];
extern  VTBL_ENTRY _ZTV9S21142C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C13[];
extern Class_Descriptor cd_S21142C12;
extern VTBL_ENTRY _ZTI9S21142C12[];
extern  VTBL_ENTRY _ZTV9S21142C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C12[];
extern Class_Descriptor cd_S21142C9;
extern VTBL_ENTRY _ZTI8S21142C9[];
extern  VTBL_ENTRY _ZTV8S21142C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C9[];
extern Class_Descriptor cd_S21142C17;
extern VTBL_ENTRY _ZTI9S21142C17[];
extern  VTBL_ENTRY _ZTV9S21142C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C17[];
extern Class_Descriptor cd_S21142C16;
extern VTBL_ENTRY _ZTI9S21142C16[];
extern  VTBL_ENTRY _ZTV9S21142C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C16[];
extern Class_Descriptor cd_S21142C6;
extern VTBL_ENTRY _ZTI8S21142C6[];
extern  VTBL_ENTRY _ZTV8S21142C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C6[];
extern Class_Descriptor cd_S3589C13_nt;
extern VTBL_ENTRY _ZTI11S3589C13_nt[];
extern Class_Descriptor cd_S3589C13_nt;
extern VTBL_ENTRY _ZTI11S3589C13_nt[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C13;
extern VTBL_ENTRY _ZTI9S21142C13[];
extern  VTBL_ENTRY _ZTV9S21142C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C13[];
extern Class_Descriptor cd_S21142C19;
extern VTBL_ENTRY _ZTI9S21142C19[];
extern  VTBL_ENTRY _ZTV9S21142C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C19[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C10;
extern VTBL_ENTRY _ZTI9S21142C10[];
extern  VTBL_ENTRY _ZTV9S21142C10[];
extern Class_Descriptor cd_S21142C8;
extern VTBL_ENTRY _ZTI8S21142C8[];
extern  VTBL_ENTRY _ZTV8S21142C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C8[];
static Base_Class bases_S21142C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    ABISELECT(112,76), //bcp->offset
    22, //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
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S21142C3,    ABISELECT(104,72), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3589C3,    ABISELECT(408,288), //bcp->offset
    -1, //bcp->virtual_function_table_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_S21142C10,    ABISELECT(408,288), //bcp->offset
    72, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S21142C9,    ABISELECT(400,284), //bcp->offset
    65, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(304,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
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3589C9_nt,    ABISELECT(320,228), //bcp->offset
    51, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3589C3,    ABISELECT(344,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
    9, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S21142C10,    ABISELECT(344,244), //bcp->offset
    55, //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
    10, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21142C8,    ABISELECT(304,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21142C9,    ABISELECT(392,280), //bcp->offset
    59, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3589C9_nt,    ABISELECT(440,316), //bcp->offset
    77, //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
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S21142C7,    ABISELECT(304,216), //bcp->offset
    42, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S21142C3,    ABISELECT(464,332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3589C13_nt,    ABISELECT(496,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
    17, //immediately_derived
  0, 0},
  {&cd_S21142C15,    ABISELECT(520,368), //bcp->offset
    105, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    89, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(480,336), //bcp->offset
    -1, //bcp->virtual_function_table_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
    17, //immediately_derived
  0, 0},
  {&cd_S21142C13,    ABISELECT(480,336), //bcp->offset
    94, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    82, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S21142C12,    ABISELECT(464,332), //bcp->offset
    82, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    72, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S21142C9,    ABISELECT(128,88), //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
    20, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S21142C17,    ABISELECT(544,380), //bcp->offset
    111, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    91, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S21142C16,    ABISELECT(128,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S21142C6,    ABISELECT(128,88), //bcp->offset
    27, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3589C13_nt,    ABISELECT(80,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
    -1, //immediately_derived
  1, 0},
  {&cd_S3589C13_nt,    ABISELECT(16,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
    26, //immediately_derived
  0, 0},
  {&cd_S3589C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S21142C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S21142C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3589C3,    ABISELECT(560,392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S3589C9_nt,    ABISELECT(576,404), //bcp->offset
    125, //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
    24, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S3589C3,    ABISELECT(600,420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S21142C10,    ABISELECT(600,420), //bcp->offset
    129, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S21142C8,    ABISELECT(560,392), //bcp->offset
    117, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    93, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21142C2[];
extern void _ZN8S21142C2D1Ev();
extern void _ZN8S21142C2D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S21142C2D1Ev,_ZTv0_n16_N8S21142C2D1Ev)();
extern void ABISELECT(_ZThn104_N8S21142C2D1Ev,_ZThn72_N8S21142C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21142C2D0Ev,_ZTv0_n16_N8S21142C2D0Ev)();
extern void ABISELECT(_ZThn104_N8S21142C2D0Ev,_ZThn72_N8S21142C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C2D1Ev,_ZTv0_n12_N8S21142C2D1Ev)();
extern void ABISELECT(_ZThn112_N8S21142C2D1Ev,_ZThn76_N8S21142C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C2D0Ev,_ZTv0_n12_N8S21142C2D0Ev)();
extern void ABISELECT(_ZThn112_N8S21142C2D0Ev,_ZThn76_N8S21142C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S21142C2D1Ev,_ZTv0_n52_N8S21142C2D1Ev)();
extern void ABISELECT(_ZThn128_N8S21142C2D1Ev,_ZThn88_N8S21142C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S21142C2D0Ev,_ZTv0_n52_N8S21142C2D0Ev)();
extern void ABISELECT(_ZThn128_N8S21142C2D0Ev,_ZThn88_N8S21142C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S21142C2D1Ev,_ZTv0_n28_N8S21142C2D1Ev)();
extern void ABISELECT(_ZThn304_N8S21142C2D1Ev,_ZThn216_N8S21142C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S21142C2D0Ev,_ZTv0_n28_N8S21142C2D0Ev)();
extern void ABISELECT(_ZThn304_N8S21142C2D0Ev,_ZThn216_N8S21142C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n56_N8S21142C2D1Ev,_ZTvn12_n28_N8S21142C2D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S21142C2D0Ev,_ZTvn12_n28_N8S21142C2D0Ev)();
extern void ABISELECT(_ZTvn40_n56_N8S21142C2D1Ev,_ZTvn28_n28_N8S21142C2D1Ev)();
extern void ABISELECT(_ZTvn40_n56_N8S21142C2D0Ev,_ZTvn28_n28_N8S21142C2D0Ev)();
extern void ABISELECT(_ZTvn88_n56_N8S21142C2D1Ev,_ZTvn64_n28_N8S21142C2D1Ev)();
extern void ABISELECT(_ZTvn88_n56_N8S21142C2D0Ev,_ZTvn64_n28_N8S21142C2D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S21142C2D1Ev,_ZTv0_n20_N8S21142C2D1Ev)();
extern void ABISELECT(_ZThn400_N8S21142C2D1Ev,_ZThn284_N8S21142C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21142C2D0Ev,_ZTv0_n20_N8S21142C2D0Ev)();
extern void ABISELECT(_ZThn400_N8S21142C2D0Ev,_ZThn284_N8S21142C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C2D1Ev,_ZTv0_n12_N8S21142C2D1Ev)();
extern void ABISELECT(_ZThn408_N8S21142C2D1Ev,_ZThn288_N8S21142C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C2D0Ev,_ZTv0_n12_N8S21142C2D0Ev)();
extern void ABISELECT(_ZThn408_N8S21142C2D0Ev,_ZThn288_N8S21142C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C2D1Ev,_ZTv0_n12_N8S21142C2D1Ev)();
extern void ABISELECT(_ZThn440_N8S21142C2D1Ev,_ZThn316_N8S21142C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C2D0Ev,_ZTv0_n12_N8S21142C2D0Ev)();
extern void ABISELECT(_ZThn440_N8S21142C2D0Ev,_ZThn316_N8S21142C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S21142C2D1Ev,_ZTv0_n40_N8S21142C2D1Ev)();
extern void ABISELECT(_ZThn464_N8S21142C2D1Ev,_ZThn332_N8S21142C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S21142C2D0Ev,_ZTv0_n40_N8S21142C2D0Ev)();
extern void ABISELECT(_ZThn464_N8S21142C2D0Ev,_ZThn332_N8S21142C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S21142C2D1Ev,_ZTv0_n36_N8S21142C2D1Ev)();
extern void ABISELECT(_ZThn480_N8S21142C2D1Ev,_ZThn336_N8S21142C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S21142C2D0Ev,_ZTv0_n36_N8S21142C2D0Ev)();
extern void ABISELECT(_ZThn480_N8S21142C2D0Ev,_ZThn336_N8S21142C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21142C2D1Ev,_ZTv0_n16_N8S21142C2D1Ev)();
extern void ABISELECT(_ZThn520_N8S21142C2D1Ev,_ZThn368_N8S21142C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21142C2D0Ev,_ZTv0_n16_N8S21142C2D0Ev)();
extern void ABISELECT(_ZThn520_N8S21142C2D0Ev,_ZThn368_N8S21142C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21142C2D1Ev,_ZTv0_n16_N8S21142C2D1Ev)();
extern void ABISELECT(_ZThn544_N8S21142C2D1Ev,_ZThn380_N8S21142C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21142C2D0Ev,_ZTv0_n16_N8S21142C2D0Ev)();
extern void ABISELECT(_ZThn544_N8S21142C2D0Ev,_ZThn380_N8S21142C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21142C2D1Ev,_ZTv0_n24_N8S21142C2D1Ev)();
extern void ABISELECT(_ZThn560_N8S21142C2D1Ev,_ZThn392_N8S21142C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21142C2D0Ev,_ZTv0_n24_N8S21142C2D0Ev)();
extern void ABISELECT(_ZThn560_N8S21142C2D0Ev,_ZThn392_N8S21142C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n48_N8S21142C2D1Ev,_ZTvn12_n24_N8S21142C2D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N8S21142C2D0Ev,_ZTvn12_n24_N8S21142C2D0Ev)();
extern void ABISELECT(_ZTvn40_n48_N8S21142C2D1Ev,_ZTvn28_n24_N8S21142C2D1Ev)();
extern void ABISELECT(_ZTvn40_n48_N8S21142C2D0Ev,_ZTvn28_n24_N8S21142C2D0Ev)();
static  VTBL_ENTRY vtc_S21142C2[] = {
  ABISELECT(560,392),
  ABISELECT(544,380),
  ABISELECT(480,336),
  ABISELECT(464,332),
  ABISELECT(304,216),
  ABISELECT(128,88),
  ABISELECT(104,72),
  ABISELECT(112,76),
  ABISELECT(408,288),
  ABISELECT(400,284),
  ABISELECT(440,316),
  ABISELECT(520,368),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&_ZN8S21142C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C2D0Ev,
  ABISELECT(-104,-72),
  ABISELECT(8,4),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C2D1Ev,_ZTv0_n16_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C2D0Ev,_ZTv0_n16_N8S21142C2D0Ev),
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C2D1Ev,_ZTv0_n12_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C2D0Ev,_ZTv0_n12_N8S21142C2D0Ev),
  ABISELECT(-128,-88),
  ABISELECT(-24,-16),
  ABISELECT(392,280),
  ABISELECT(352,248),
  ABISELECT(336,244),
  ABISELECT(312,228),
  ABISELECT(272,196),
  ABISELECT(176,128),
  ABISELECT(416,292),
  ABISELECT(-16,-12),
  ABISELECT(280,200),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S21142C2D1Ev,_ZTv0_n52_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S21142C2D0Ev,_ZTv0_n52_N8S21142C2D0Ev),
  ABISELECT(-304,-216),
  ABISELECT(136,100),
  ABISELECT(-192,-140),
  ABISELECT(104,72),
  ABISELECT(96,68),
  ABISELECT(-304,-216),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21142C2D1Ev,_ZTv0_n28_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21142C2D0Ev,_ZTv0_n28_N8S21142C2D0Ev),
  ABISELECT(-320,-228),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S21142C2D1Ev,_ZTvn12_n28_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S21142C2D0Ev,_ZTvn12_n28_N8S21142C2D0Ev),
  ABISELECT(-344,-244),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n56_N8S21142C2D1Ev,_ZTvn28_n28_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n56_N8S21142C2D0Ev,_ZTvn28_n28_N8S21142C2D0Ev),
  ABISELECT(-280,-204),
  ABISELECT(16,8),
  ABISELECT(-392,-280),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n56_N8S21142C2D1Ev,_ZTvn64_n28_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n56_N8S21142C2D0Ev,_ZTvn64_n28_N8S21142C2D0Ev),
  ABISELECT(-400,-284),
  ABISELECT(-288,-208),
  ABISELECT(8,4),
  ABISELECT(-400,-284),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C2D1Ev,_ZTv0_n20_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C2D0Ev,_ZTv0_n20_N8S21142C2D0Ev),
  ABISELECT(-408,-288),
  ABISELECT(-408,-288),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C2D1Ev,_ZTv0_n12_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C2D0Ev,_ZTv0_n12_N8S21142C2D0Ev),
  ABISELECT(-440,-316),
  ABISELECT(-440,-316),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C2D1Ev,_ZTv0_n12_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C2D0Ev,_ZTv0_n12_N8S21142C2D0Ev),
  ABISELECT(-464,-332),
  ABISELECT(-360,-260),
  ABISELECT(-24,-16),
  ABISELECT(56,36),
  ABISELECT(16,4),
  ABISELECT(-56,-44),
  ABISELECT(-64,-48),
  ABISELECT(-352,-256),
  ABISELECT(-464,-332),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S21142C2D1Ev,_ZTv0_n40_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S21142C2D0Ev,_ZTv0_n40_N8S21142C2D0Ev),
  ABISELECT(-480,-336),
  ABISELECT(-376,-264),
  ABISELECT(-368,-260),
  ABISELECT(-72,-48),
  ABISELECT(-80,-52),
  ABISELECT(-40,-20),
  ABISELECT(40,32),
  ABISELECT(-480,-336),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S21142C2D1Ev,_ZTv0_n36_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S21142C2D0Ev,_ZTv0_n36_N8S21142C2D0Ev),
  ABISELECT(-520,-368),
  ABISELECT(-80,-52),
  ABISELECT(-520,-368),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C2D1Ev,_ZTv0_n16_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C2D0Ev,_ZTv0_n16_N8S21142C2D0Ev),
  ABISELECT(-544,-380),
  ABISELECT(-432,-304),
  ABISELECT(-544,-380),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C2D1Ev,_ZTv0_n16_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C2D0Ev,_ZTv0_n16_N8S21142C2D0Ev),
  ABISELECT(-560,-392),
  ABISELECT(-448,-316),
  ABISELECT(-152,-104),
  ABISELECT(-160,-108),
  ABISELECT(-560,-392),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21142C2D1Ev,_ZTv0_n24_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21142C2D0Ev,_ZTv0_n24_N8S21142C2D0Ev),
  ABISELECT(-576,-404),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S21142C2D1Ev,_ZTvn12_n24_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S21142C2D0Ev,_ZTvn12_n24_N8S21142C2D0Ev),
  ABISELECT(-600,-420),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n48_N8S21142C2D1Ev,_ZTvn28_n24_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n48_N8S21142C2D0Ev,_ZTvn28_n24_N8S21142C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S21142C2[];
extern void _ZN9S21142C19D1Ev();
extern void _ZN9S21142C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21142C19__8S21142C2[] = {
  ABISELECT(104,72),
  ABISELECT(112,76),
  ABISELECT(408,288),
  ABISELECT(400,284),
  ABISELECT(440,316),
  ABISELECT(520,368),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C19[0]),
  (VTBL_ENTRY)&_ZN9S21142C19D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C19D0Ev,
};
extern void _ZN9S21142C13D1Ev();
extern void _ZN9S21142C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21142C139S21142C19__A1__8S21142C2[] = {
  ABISELECT(104,72),
  ABISELECT(112,76),
  ABISELECT(408,288),
  ABISELECT(400,284),
  ABISELECT(440,316),
  ABISELECT(520,368),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&_ZN9S21142C13D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C13D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn520_N9S21142C13D1Ev,_ZThn368_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn520_N9S21142C13D0Ev,_ZThn368_N9S21142C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C15__9S21142C139S21142C19__A1__8S21142C2[] = {
  ABISELECT(-520,-368),
  ABISELECT(-80,-52),
  ABISELECT(-520,-368),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn440_N9S21142C13D1Ev,_ZThn316_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn440_N9S21142C13D0Ev,_ZThn316_N9S21142C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__9S21142C139S21142C19__A1__8S21142C2[] = {
  ABISELECT(-440,-316),
  ABISELECT(-440,-316),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21142C13D1Ev,_ZTv0_n20_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn400_N9S21142C13D1Ev,_ZThn284_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21142C13D0Ev,_ZTv0_n20_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn400_N9S21142C13D0Ev,_ZThn284_N9S21142C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21142C9__9S21142C139S21142C19__A1__8S21142C2[] = {
  ABISELECT(-400,-284),
  ABISELECT(-288,-208),
  ABISELECT(8,4),
  ABISELECT(-400,-284),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C13D1Ev,_ZTv0_n20_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C13D0Ev,_ZTv0_n20_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn408_N9S21142C13D1Ev,_ZThn288_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn408_N9S21142C13D0Ev,_ZThn288_N9S21142C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__9S21142C139S21142C19__A1__8S21142C2[] = {
  ABISELECT(-408,-288),
  ABISELECT(-408,-288),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn112_N9S21142C13D1Ev,_ZThn76_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn112_N9S21142C13D0Ev,_ZThn76_N9S21142C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__9S21142C139S21142C19__A1__8S21142C2[] = {
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn104_N9S21142C13D1Ev,_ZThn72_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn104_N9S21142C13D0Ev,_ZThn72_N9S21142C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21142C3__9S21142C139S21142C19__A1__8S21142C2[] = {
  ABISELECT(-104,-72),
  ABISELECT(8,4),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21142C19D1Ev,_ZTv0_n16_N9S21142C19D1Ev)();
extern void ABISELECT(_ZThn520_N9S21142C19D1Ev,_ZThn368_N9S21142C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C19D0Ev,_ZTv0_n16_N9S21142C19D0Ev)();
extern void ABISELECT(_ZThn520_N9S21142C19D0Ev,_ZThn368_N9S21142C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C15__9S21142C19__8S21142C2[] = {
  ABISELECT(-520,-368),
  ABISELECT(-80,-52),
  ABISELECT(-520,-368),
  (VTBL_ENTRY)&(_ZTI9S21142C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C19D1Ev,_ZTv0_n16_N9S21142C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C19D0Ev,_ZTv0_n16_N9S21142C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C19D1Ev,_ZTv0_n12_N9S21142C19D1Ev)();
extern void ABISELECT(_ZThn440_N9S21142C19D1Ev,_ZThn316_N9S21142C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C19D0Ev,_ZTv0_n12_N9S21142C19D0Ev)();
extern void ABISELECT(_ZThn440_N9S21142C19D0Ev,_ZThn316_N9S21142C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__9S21142C19__8S21142C2[] = {
  ABISELECT(-440,-316),
  ABISELECT(-440,-316),
  (VTBL_ENTRY)&(_ZTI9S21142C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C19D1Ev,_ZTv0_n12_N9S21142C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C19D0Ev,_ZTv0_n12_N9S21142C19D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21142C19D1Ev,_ZTv0_n20_N9S21142C19D1Ev)();
extern void ABISELECT(_ZThn400_N9S21142C19D1Ev,_ZThn284_N9S21142C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21142C19D0Ev,_ZTv0_n20_N9S21142C19D0Ev)();
extern void ABISELECT(_ZThn400_N9S21142C19D0Ev,_ZThn284_N9S21142C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21142C9__9S21142C19__8S21142C2[] = {
  ABISELECT(-400,-284),
  ABISELECT(-288,-208),
  ABISELECT(8,4),
  ABISELECT(-400,-284),
  (VTBL_ENTRY)&(_ZTI9S21142C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C19D1Ev,_ZTv0_n20_N9S21142C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C19D0Ev,_ZTv0_n20_N9S21142C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C19D1Ev,_ZTv0_n12_N9S21142C19D1Ev)();
extern void ABISELECT(_ZThn408_N9S21142C19D1Ev,_ZThn288_N9S21142C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C19D0Ev,_ZTv0_n12_N9S21142C19D0Ev)();
extern void ABISELECT(_ZThn408_N9S21142C19D0Ev,_ZThn288_N9S21142C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__9S21142C19__8S21142C2[] = {
  ABISELECT(-408,-288),
  ABISELECT(-408,-288),
  (VTBL_ENTRY)&(_ZTI9S21142C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C19D1Ev,_ZTv0_n12_N9S21142C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C19D0Ev,_ZTv0_n12_N9S21142C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C19D1Ev,_ZTv0_n12_N9S21142C19D1Ev)();
extern void ABISELECT(_ZThn112_N9S21142C19D1Ev,_ZThn76_N9S21142C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C19D0Ev,_ZTv0_n12_N9S21142C19D0Ev)();
extern void ABISELECT(_ZThn112_N9S21142C19D0Ev,_ZThn76_N9S21142C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__9S21142C19__8S21142C2[] = {
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI9S21142C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C19D1Ev,_ZTv0_n12_N9S21142C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C19D0Ev,_ZTv0_n12_N9S21142C19D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21142C19D1Ev,_ZTv0_n16_N9S21142C19D1Ev)();
extern void ABISELECT(_ZThn104_N9S21142C19D1Ev,_ZThn72_N9S21142C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C19D0Ev,_ZTv0_n16_N9S21142C19D0Ev)();
extern void ABISELECT(_ZThn104_N9S21142C19D0Ev,_ZThn72_N9S21142C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21142C3__9S21142C19__8S21142C2[] = {
  ABISELECT(-104,-72),
  ABISELECT(8,4),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI9S21142C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C19D1Ev,_ZTv0_n16_N9S21142C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C19D0Ev,_ZTv0_n16_N9S21142C19D0Ev),
};
extern void _ZN8S21142C3D1Ev();
extern void _ZN8S21142C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C3__8S21142C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C3[0]),
  (VTBL_ENTRY)&_ZN8S21142C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21142C3D1Ev,_ZTv0_n12_N8S21142C3D1Ev)();
extern void ABISELECT(_ZThn8_N8S21142C3D1Ev,_ZThn4_N8S21142C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C3D0Ev,_ZTv0_n12_N8S21142C3D0Ev)();
extern void ABISELECT(_ZThn8_N8S21142C3D0Ev,_ZThn4_N8S21142C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S21142C3__8S21142C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21142C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C3D1Ev,_ZTv0_n12_N8S21142C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C3D0Ev,_ZTv0_n12_N8S21142C3D0Ev),
};
extern void _ZN8S21142C6D1Ev();
extern void _ZN8S21142C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C6__8S21142C2[] = {
  ABISELECT(-24,-16),
  ABISELECT(392,280),
  ABISELECT(352,248),
  ABISELECT(336,244),
  ABISELECT(312,228),
  ABISELECT(272,196),
  ABISELECT(176,128),
  ABISELECT(416,292),
  ABISELECT(-16,-12),
  ABISELECT(280,200),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&_ZN8S21142C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C6D0Ev,
};
extern void _ZN9S21142C16D1Ev();
extern void _ZN9S21142C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21142C168S21142C6__8S21142C2[] = {
  ABISELECT(416,292),
  ABISELECT(-16,-12),
  ABISELECT(280,200),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C16[0]),
  (VTBL_ENTRY)&_ZN9S21142C16D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C16D0Ev,
};
extern void _ZN8S21142C9D1Ev();
extern void _ZN8S21142C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C99S21142C168S21142C6__A2__8S21142C2[] = {
  ABISELECT(-16,-12),
  ABISELECT(280,200),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&_ZN8S21142C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZThn280_N8S21142C9D1Ev,_ZThn200_N8S21142C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
extern void ABISELECT(_ZThn280_N8S21142C9D0Ev,_ZThn200_N8S21142C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__8S21142C99S21142C168S21142C6__A2__8S21142C2[] = {
  ABISELECT(-280,-200),
  ABISELECT(-280,-200),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S21142C99S21142C168S21142C6__A2__8S21142C2[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C16D1Ev,_ZTv0_n12_N9S21142C16D1Ev)();
extern void ABISELECT(_ZThn280_N9S21142C16D1Ev,_ZThn200_N9S21142C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C16D0Ev,_ZTv0_n12_N9S21142C16D0Ev)();
extern void ABISELECT(_ZThn280_N9S21142C16D0Ev,_ZThn200_N9S21142C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__9S21142C168S21142C6__8S21142C2[] = {
  ABISELECT(-280,-200),
  ABISELECT(-280,-200),
  (VTBL_ENTRY)&(_ZTI9S21142C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C16D1Ev,_ZTv0_n12_N9S21142C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C16D0Ev,_ZTv0_n12_N9S21142C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C16D1Ev,_ZTv0_n12_N9S21142C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C16D0Ev,_ZTv0_n12_N9S21142C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__9S21142C168S21142C6__8S21142C2[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S21142C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C16D1Ev,_ZTv0_n12_N9S21142C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C16D0Ev,_ZTv0_n12_N9S21142C16D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21142C16D1Ev,_ZTv0_n16_N9S21142C16D1Ev)();
extern void ABISELECT(_ZThn416_N9S21142C16D1Ev,_ZThn292_N9S21142C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C16D0Ev,_ZTv0_n16_N9S21142C16D0Ev)();
extern void ABISELECT(_ZThn416_N9S21142C16D0Ev,_ZThn292_N9S21142C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C17__9S21142C168S21142C6__8S21142C2[] = {
  ABISELECT(-416,-292),
  ABISELECT(-432,-304),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI9S21142C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C16D1Ev,_ZTv0_n16_N9S21142C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C16D0Ev,_ZTv0_n16_N9S21142C16D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S21142C6D1Ev,_ZTv0_n28_N8S21142C6D1Ev)();
extern void ABISELECT(_ZThn176_N8S21142C6D1Ev,_ZThn128_N8S21142C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S21142C6D0Ev,_ZTv0_n28_N8S21142C6D0Ev)();
extern void ABISELECT(_ZThn176_N8S21142C6D0Ev,_ZThn128_N8S21142C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21142C7__8S21142C6__8S21142C2[] = {
  ABISELECT(-176,-128),
  ABISELECT(136,100),
  ABISELECT(-192,-140),
  ABISELECT(104,72),
  ABISELECT(96,68),
  ABISELECT(-176,-128),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21142C6D1Ev,_ZTv0_n28_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21142C6D0Ev,_ZTv0_n28_N8S21142C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21142C6D1Ev,_ZTv0_n20_N8S21142C6D1Ev)();
extern void ABISELECT(_ZThn272_N8S21142C6D1Ev,_ZThn196_N8S21142C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21142C6D0Ev,_ZTv0_n20_N8S21142C6D0Ev)();
extern void ABISELECT(_ZThn272_N8S21142C6D0Ev,_ZThn196_N8S21142C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21142C9__8S21142C6__8S21142C2[] = {
  ABISELECT(-272,-196),
  ABISELECT(-288,-208),
  ABISELECT(8,4),
  ABISELECT(-272,-196),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C6D1Ev,_ZTv0_n20_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C6D0Ev,_ZTv0_n20_N8S21142C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C6D1Ev,_ZTv0_n12_N8S21142C6D1Ev)();
extern void ABISELECT(_ZThn280_N8S21142C6D1Ev,_ZThn200_N8S21142C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C6D0Ev,_ZTv0_n12_N8S21142C6D0Ev)();
extern void ABISELECT(_ZThn280_N8S21142C6D0Ev,_ZThn200_N8S21142C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__8S21142C6__8S21142C2[] = {
  ABISELECT(-280,-200),
  ABISELECT(-280,-200),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C6D1Ev,_ZTv0_n12_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C6D0Ev,_ZTv0_n12_N8S21142C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C6D1Ev,_ZTv0_n12_N8S21142C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21142C6D0Ev,_ZTv0_n12_N8S21142C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S21142C6__8S21142C2[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C6D1Ev,_ZTv0_n12_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C6D0Ev,_ZTv0_n12_N8S21142C6D0Ev),
};
extern void ABISELECT(_ZTvn16_n56_N8S21142C6D1Ev,_ZTvn12_n28_N8S21142C6D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S21142C6D0Ev,_ZTvn12_n28_N8S21142C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt8S21142C88S21142C7__8S21142C6__8S21142C2[] = {
  ABISELECT(-192,-140),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S21142C6D1Ev,_ZTvn12_n28_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S21142C6D0Ev,_ZTvn12_n28_N8S21142C6D0Ev),
};
extern void ABISELECT(_ZTvn40_n56_N8S21142C6D1Ev,_ZTvn28_n28_N8S21142C6D1Ev)();
extern void ABISELECT(_ZTvn40_n56_N8S21142C6D0Ev,_ZTvn28_n28_N8S21142C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S21142C108S21142C88S21142C7__A1__8S21142C6__8S21142C2[] = {
  ABISELECT(-216,-156),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n56_N8S21142C6D1Ev,_ZTvn28_n28_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n56_N8S21142C6D0Ev,_ZTvn28_n28_N8S21142C6D0Ev),
};
extern void ABISELECT(_ZTvn88_n56_N8S21142C6D1Ev,_ZTvn64_n28_N8S21142C6D1Ev)();
extern void ABISELECT(_ZTvn88_n56_N8S21142C6D0Ev,_ZTvn64_n28_N8S21142C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21142C98S21142C7__A1__8S21142C6__8S21142C2[] = {
  ABISELECT(-280,-204),
  ABISELECT(16,8),
  ABISELECT(-264,-192),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n56_N8S21142C6D1Ev,_ZTvn64_n28_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n56_N8S21142C6D0Ev,_ZTvn64_n28_N8S21142C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C6D1Ev,_ZTv0_n12_N8S21142C6D1Ev)();
extern void ABISELECT(_ZThn312_N8S21142C6D1Ev,_ZThn228_N8S21142C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C6D0Ev,_ZTv0_n12_N8S21142C6D0Ev)();
extern void ABISELECT(_ZThn312_N8S21142C6D0Ev,_ZThn228_N8S21142C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__A1__8S21142C6__8S21142C2[] = {
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C6D1Ev,_ZTv0_n12_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C6D0Ev,_ZTv0_n12_N8S21142C6D0Ev),
};
extern void ABISELECT(_ZTv0_n80_N8S21142C6D1Ev,_ZTv0_n40_N8S21142C6D1Ev)();
extern void ABISELECT(_ZThn336_N8S21142C6D1Ev,_ZThn244_N8S21142C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S21142C6D0Ev,_ZTv0_n40_N8S21142C6D0Ev)();
extern void ABISELECT(_ZThn336_N8S21142C6D0Ev,_ZThn244_N8S21142C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C12__8S21142C6__8S21142C2[] = {
  ABISELECT(-336,-244),
  ABISELECT(-360,-260),
  ABISELECT(-24,-16),
  ABISELECT(56,36),
  ABISELECT(16,4),
  ABISELECT(-56,-44),
  ABISELECT(-64,-48),
  ABISELECT(-352,-256),
  ABISELECT(-336,-244),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S21142C6D1Ev,_ZTv0_n40_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S21142C6D0Ev,_ZTv0_n40_N8S21142C6D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N8S21142C6D1Ev,_ZTv0_n36_N8S21142C6D1Ev)();
extern void ABISELECT(_ZThn352_N8S21142C6D1Ev,_ZThn248_N8S21142C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S21142C6D0Ev,_ZTv0_n36_N8S21142C6D0Ev)();
extern void ABISELECT(_ZThn352_N8S21142C6D0Ev,_ZThn248_N8S21142C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C13__8S21142C6__8S21142C2[] = {
  ABISELECT(-352,-248),
  ABISELECT(-376,-264),
  ABISELECT(-368,-260),
  ABISELECT(-72,-48),
  ABISELECT(-80,-52),
  ABISELECT(-40,-20),
  ABISELECT(40,32),
  ABISELECT(-352,-248),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S21142C6D1Ev,_ZTv0_n36_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S21142C6D0Ev,_ZTv0_n36_N8S21142C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21142C6D1Ev,_ZTv0_n16_N8S21142C6D1Ev)();
extern void ABISELECT(_ZThn392_N8S21142C6D1Ev,_ZThn280_N8S21142C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21142C6D0Ev,_ZTv0_n16_N8S21142C6D0Ev)();
extern void ABISELECT(_ZThn392_N8S21142C6D0Ev,_ZThn280_N8S21142C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C15__8S21142C6__8S21142C2[] = {
  ABISELECT(-392,-280),
  ABISELECT(-80,-52),
  ABISELECT(-392,-280),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C6D1Ev,_ZTv0_n16_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C6D0Ev,_ZTv0_n16_N8S21142C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21142C6D1Ev,_ZTv0_n16_N8S21142C6D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S21142C6D0Ev,_ZTv0_n16_N8S21142C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21142C3__A1__8S21142C6__8S21142C2[] = {
  ABISELECT(24,16),
  ABISELECT(8,4),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C6D1Ev,_ZTv0_n16_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C6D0Ev,_ZTv0_n16_N8S21142C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21142C6D1Ev,_ZTv0_n16_N8S21142C6D1Ev)();
extern void ABISELECT(_ZThn416_N8S21142C6D1Ev,_ZThn292_N8S21142C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21142C6D0Ev,_ZTv0_n16_N8S21142C6D0Ev)();
extern void ABISELECT(_ZThn416_N8S21142C6D0Ev,_ZThn292_N8S21142C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C17__8S21142C6__8S21142C2[] = {
  ABISELECT(-416,-292),
  ABISELECT(-432,-304),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C6D1Ev,_ZTv0_n16_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C6D0Ev,_ZTv0_n16_N8S21142C6D0Ev),
};
extern void _ZN8S21142C7D1Ev();
extern void _ZN8S21142C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C7__8S21142C2[] = {
  ABISELECT(136,100),
  ABISELECT(-192,-140),
  ABISELECT(104,72),
  ABISELECT(96,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C7[0]),
  (VTBL_ENTRY)&_ZN8S21142C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C7D0Ev,
};
extern void _ZN8S21142C8D1Ev();
extern void _ZN8S21142C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C88S21142C7__8S21142C2[] = {
  ABISELECT(-192,-140),
  ABISELECT(104,72),
  ABISELECT(96,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&_ZN8S21142C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S21142C8D1Ev,_ZTv0_n20_N8S21142C8D1Ev)();
extern void ABISELECT(_ZThn96_N8S21142C8D1Ev,_ZThn68_N8S21142C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21142C8D0Ev,_ZTv0_n20_N8S21142C8D0Ev)();
extern void ABISELECT(_ZThn96_N8S21142C8D0Ev,_ZThn68_N8S21142C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21142C9__8S21142C88S21142C7__8S21142C2[] = {
  ABISELECT(-96,-68),
  ABISELECT(-288,-208),
  ABISELECT(8,4),
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C8D1Ev,_ZTv0_n20_N8S21142C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C8D0Ev,_ZTv0_n20_N8S21142C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev)();
extern void ABISELECT(_ZThn104_N8S21142C8D1Ev,_ZThn72_N8S21142C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev)();
extern void ABISELECT(_ZThn104_N8S21142C8D0Ev,_ZThn72_N8S21142C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__8S21142C88S21142C7__8S21142C2[] = {
  ABISELECT(-104,-72),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S21142C88S21142C7__8S21142C2[] = {
  ABISELECT(192,140),
  ABISELECT(192,140),
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev),
};
extern void _ZN8S21142C9D1Ev();
extern void _ZN8S21142C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C98S21142C7__A1__8S21142C2[] = {
  ABISELECT(-280,-204),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&_ZN8S21142C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S21142C9D1Ev,_ZThn8_N8S21142C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S21142C9D0Ev,_ZThn8_N8S21142C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__8S21142C98S21142C7__A1__8S21142C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S21142C98S21142C7__A1__8S21142C2[] = {
  ABISELECT(280,204),
  ABISELECT(280,204),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21142C7D1Ev,_ZTv0_n20_N8S21142C7D1Ev)();
extern void ABISELECT(_ZThn96_N8S21142C7D1Ev,_ZThn68_N8S21142C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21142C7D0Ev,_ZTv0_n20_N8S21142C7D0Ev)();
extern void ABISELECT(_ZThn96_N8S21142C7D0Ev,_ZThn68_N8S21142C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21142C9__8S21142C7__8S21142C2[] = {
  ABISELECT(-96,-68),
  ABISELECT(-288,-208),
  ABISELECT(8,4),
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI8S21142C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C7D1Ev,_ZTv0_n20_N8S21142C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C7D0Ev,_ZTv0_n20_N8S21142C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C7D1Ev,_ZTv0_n12_N8S21142C7D1Ev)();
extern void ABISELECT(_ZThn104_N8S21142C7D1Ev,_ZThn72_N8S21142C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C7D0Ev,_ZTv0_n12_N8S21142C7D0Ev)();
extern void ABISELECT(_ZThn104_N8S21142C7D0Ev,_ZThn72_N8S21142C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__8S21142C7__8S21142C2[] = {
  ABISELECT(-104,-72),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI8S21142C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C7D1Ev,_ZTv0_n12_N8S21142C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C7D0Ev,_ZTv0_n12_N8S21142C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C7D1Ev,_ZTv0_n12_N8S21142C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21142C7D0Ev,_ZTv0_n12_N8S21142C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S21142C7__8S21142C2[] = {
  ABISELECT(192,140),
  ABISELECT(192,140),
  (VTBL_ENTRY)&(_ZTI8S21142C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C7D1Ev,_ZTv0_n12_N8S21142C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C7D0Ev,_ZTv0_n12_N8S21142C7D0Ev),
};
extern void ABISELECT(_ZThn88_N8S21142C7D1Ev,_ZThn64_N8S21142C7D1Ev)();
extern void ABISELECT(_ZThn88_N8S21142C7D0Ev,_ZThn64_N8S21142C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21142C9__A__8S21142C7__8S21142C2[] = {
  ABISELECT(-280,-204),
  ABISELECT(16,8),
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI8S21142C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N8S21142C7D1Ev,_ZThn64_N8S21142C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N8S21142C7D0Ev,_ZThn64_N8S21142C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C7D1Ev,_ZTv0_n12_N8S21142C7D1Ev)();
extern void ABISELECT(_ZThn136_N8S21142C7D1Ev,_ZThn100_N8S21142C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C7D0Ev,_ZTv0_n12_N8S21142C7D0Ev)();
extern void ABISELECT(_ZThn136_N8S21142C7D0Ev,_ZThn100_N8S21142C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__A1__8S21142C7__8S21142C2[] = {
  ABISELECT(-136,-100),
  ABISELECT(-136,-100),
  (VTBL_ENTRY)&(_ZTI8S21142C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C7D1Ev,_ZTv0_n12_N8S21142C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C7D0Ev,_ZTv0_n12_N8S21142C7D0Ev),
};
extern void _ZN8S21142C9D1Ev();
extern void _ZN8S21142C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C9__8S21142C2[] = {
  ABISELECT(-288,-208),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&_ZN8S21142C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZThn8_N8S21142C9D1Ev,_ZThn4_N8S21142C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
extern void ABISELECT(_ZThn8_N8S21142C9D0Ev,_ZThn4_N8S21142C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__8S21142C9__8S21142C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S21142C9__8S21142C2[] = {
  ABISELECT(288,208),
  ABISELECT(288,208),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void _ZN9S21142C12D1Ev();
extern void _ZN9S21142C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21142C12__8S21142C2[] = {
  ABISELECT(-360,-260),
  ABISELECT(-24,-16),
  ABISELECT(56,36),
  ABISELECT(16,4),
  ABISELECT(-56,-44),
  ABISELECT(-64,-48),
  ABISELECT(-352,-256),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&_ZN9S21142C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C12D0Ev,
};
extern void _ZN8S21142C3D1Ev();
extern void _ZN8S21142C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C39S21142C12__A1__8S21142C2[] = {
  ABISELECT(-352,-256),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C3[0]),
  (VTBL_ENTRY)&_ZN8S21142C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21142C3D1Ev,_ZTv0_n12_N8S21142C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21142C3D0Ev,_ZTv0_n12_N8S21142C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S21142C39S21142C12__A1__8S21142C2[] = {
  ABISELECT(352,256),
  ABISELECT(352,256),
  (VTBL_ENTRY)&(_ZTI8S21142C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C3D1Ev,_ZTv0_n12_N8S21142C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C3D0Ev,_ZTv0_n12_N8S21142C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21142C12D1Ev,_ZTv0_n20_N9S21142C12D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S21142C12D0Ev,_ZTv0_n20_N9S21142C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21142C9__9S21142C12__8S21142C2[] = {
  ABISELECT(64,48),
  ABISELECT(-288,-208),
  ABISELECT(8,4),
  ABISELECT(64,48),
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C12D1Ev,_ZTv0_n20_N9S21142C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C12D0Ev,_ZTv0_n20_N9S21142C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C12D1Ev,_ZTv0_n12_N9S21142C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C12D0Ev,_ZTv0_n12_N9S21142C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S21142C10__9S21142C12__8S21142C2[] = {
  ABISELECT(56,44),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C12D1Ev,_ZTv0_n12_N9S21142C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C12D0Ev,_ZTv0_n12_N9S21142C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C12D1Ev,_ZTv0_n12_N9S21142C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C12D0Ev,_ZTv0_n12_N9S21142C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__9S21142C12__8S21142C2[] = {
  ABISELECT(352,256),
  ABISELECT(352,256),
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C12D1Ev,_ZTv0_n12_N9S21142C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C12D0Ev,_ZTv0_n12_N9S21142C12D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N9S21142C12D1Ev,_ZTv0_n36_N9S21142C12D1Ev)();
extern void ABISELECT(_ZThn16_N9S21142C12D1Ev,_ZThn4_N9S21142C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S21142C12D0Ev,_ZTv0_n36_N9S21142C12D0Ev)();
extern void ABISELECT(_ZThn16_N9S21142C12D0Ev,_ZThn4_N9S21142C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C13__9S21142C12__8S21142C2[] = {
  ABISELECT(-16,-4),
  ABISELECT(-376,-264),
  ABISELECT(-368,-260),
  ABISELECT(-72,-48),
  ABISELECT(-80,-52),
  ABISELECT(-40,-20),
  ABISELECT(40,32),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S21142C12D1Ev,_ZTv0_n36_N9S21142C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S21142C12D0Ev,_ZTv0_n36_N9S21142C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21142C12D1Ev,_ZTv0_n16_N9S21142C12D1Ev)();
extern void ABISELECT(_ZThn56_N9S21142C12D1Ev,_ZThn36_N9S21142C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C12D0Ev,_ZTv0_n16_N9S21142C12D0Ev)();
extern void ABISELECT(_ZThn56_N9S21142C12D0Ev,_ZThn36_N9S21142C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C15__9S21142C12__8S21142C2[] = {
  ABISELECT(-56,-36),
  ABISELECT(-80,-52),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C12D1Ev,_ZTv0_n16_N9S21142C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C12D0Ev,_ZTv0_n16_N9S21142C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C12D1Ev,_ZTv0_n12_N9S21142C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C12D0Ev,_ZTv0_n12_N9S21142C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__9S21142C12__8S21142C2[] = {
  ABISELECT(24,16),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C12D1Ev,_ZTv0_n12_N9S21142C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C12D0Ev,_ZTv0_n12_N9S21142C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21142C12D1Ev,_ZTv0_n16_N9S21142C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S21142C12D0Ev,_ZTv0_n16_N9S21142C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21142C3__A1__9S21142C12__8S21142C2[] = {
  ABISELECT(360,260),
  ABISELECT(8,4),
  ABISELECT(360,260),
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C12D1Ev,_ZTv0_n16_N9S21142C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C12D0Ev,_ZTv0_n16_N9S21142C12D0Ev),
};
extern void _ZN9S21142C13D1Ev();
extern void _ZN9S21142C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21142C13__8S21142C2[] = {
  ABISELECT(-376,-264),
  ABISELECT(-368,-260),
  ABISELECT(-72,-48),
  ABISELECT(-80,-52),
  ABISELECT(-40,-20),
  ABISELECT(40,32),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&_ZN9S21142C13D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C13D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn40_N9S21142C13D1Ev,_ZThn32_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn40_N9S21142C13D0Ev,_ZThn32_N9S21142C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C15__9S21142C13__8S21142C2[] = {
  ABISELECT(-40,-32),
  ABISELECT(-80,-52),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__9S21142C13__8S21142C2[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21142C13D1Ev,_ZTv0_n20_N9S21142C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S21142C13D0Ev,_ZTv0_n20_N9S21142C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21142C9__9S21142C13__8S21142C2[] = {
  ABISELECT(80,52),
  ABISELECT(-288,-208),
  ABISELECT(8,4),
  ABISELECT(80,52),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C13D1Ev,_ZTv0_n20_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C13D0Ev,_ZTv0_n20_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S21142C10__9S21142C13__8S21142C2[] = {
  ABISELECT(72,48),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__9S21142C13__8S21142C2[] = {
  ABISELECT(368,260),
  ABISELECT(368,260),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21142C3__9S21142C13__8S21142C2[] = {
  ABISELECT(376,264),
  ABISELECT(8,4),
  ABISELECT(376,264),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev),
};
extern void _ZN9S21142C15D1Ev();
extern void _ZN9S21142C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21142C15__8S21142C2[] = {
  ABISELECT(-80,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C15[0]),
  (VTBL_ENTRY)&_ZN9S21142C15D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C15D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21142C15D1Ev,_ZTv0_n12_N9S21142C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C15D0Ev,_ZTv0_n12_N9S21142C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__9S21142C15__8S21142C2[] = {
  ABISELECT(80,52),
  ABISELECT(80,52),
  (VTBL_ENTRY)&(_ZTI9S21142C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C15D1Ev,_ZTv0_n12_N9S21142C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C15D0Ev,_ZTv0_n12_N9S21142C15D0Ev),
};
extern void _ZN9S21142C17D1Ev();
extern void _ZN9S21142C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21142C17__8S21142C2[] = {
  ABISELECT(-432,-304),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C17[0]),
  (VTBL_ENTRY)&_ZN9S21142C17D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21142C17D1Ev,_ZTv0_n12_N9S21142C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C17D0Ev,_ZTv0_n12_N9S21142C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__9S21142C17__8S21142C2[] = {
  ABISELECT(432,304),
  ABISELECT(432,304),
  (VTBL_ENTRY)&(_ZTI9S21142C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C17D1Ev,_ZTv0_n12_N9S21142C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C17D0Ev,_ZTv0_n12_N9S21142C17D0Ev),
};
extern void _ZN8S21142C8D1Ev();
extern void _ZN8S21142C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C8__A1__8S21142C2[] = {
  ABISELECT(-448,-316),
  ABISELECT(-152,-104),
  ABISELECT(-160,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&_ZN8S21142C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S21142C8D1Ev,_ZTv0_n20_N8S21142C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S21142C8D0Ev,_ZTv0_n20_N8S21142C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21142C9__8S21142C8__A1__8S21142C2[] = {
  ABISELECT(160,108),
  ABISELECT(-288,-208),
  ABISELECT(8,4),
  ABISELECT(160,108),
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C8D1Ev,_ZTv0_n20_N8S21142C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C8D0Ev,_ZTv0_n20_N8S21142C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S21142C10__8S21142C8__A1__8S21142C2[] = {
  ABISELECT(152,104),
  ABISELECT(152,104),
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S21142C8__A1__8S21142C2[] = {
  ABISELECT(448,316),
  ABISELECT(448,316),
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev),
};
static  VTT_ENTRY vtt_S21142C2[] = {
  {&(_ZTV8S21142C2[14]),  14,133},
  {&(_tg__ZTV9S21142C19__8S21142C2[8]),  8,10},
  {&(_tg__ZTV9S21142C139S21142C19__A1__8S21142C2[8]),  8,10},
  {&(_tg__ZTV9S21142C15__9S21142C139S21142C19__A1__8S21142C2[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__9S21142C139S21142C19__A1__8S21142C2[3]),  3,5},
  {&(_tg__ZTV8S21142C9__9S21142C139S21142C19__A1__8S21142C2[5]),  5,7},
  {&(_tg__ZTV9S21142C10__9S21142C139S21142C19__A1__8S21142C2[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__9S21142C139S21142C19__A1__8S21142C2[3]),  3,5},
  {&(_tg__ZTV8S21142C3__9S21142C139S21142C19__A1__8S21142C2[4]),  4,6},
  {&(_tg__ZTV9S21142C15__9S21142C19__8S21142C2[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__9S21142C19__8S21142C2[3]),  3,5},
  {&(_tg__ZTV8S21142C9__9S21142C19__8S21142C2[5]),  5,7},
  {&(_tg__ZTV9S21142C10__9S21142C19__8S21142C2[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__9S21142C19__8S21142C2[3]),  3,5},
  {&(_tg__ZTV8S21142C3__9S21142C19__8S21142C2[4]),  4,6},
  {&(_ZTV8S21142C2[20]),  20,133},
  {&(_ZTV8S21142C2[25]),  25,133},
  {&(_ZTV8S21142C2[40]),  40,133},
  {&(_ZTV8S21142C2[49]),  49,133},
  {&(_ZTV8S21142C2[70]),  70,133},
  {&(_ZTV8S21142C2[75]),  75,133},
  {&(_ZTV8S21142C2[53]),  53,133},
  {&(_ZTV8S21142C2[57]),  57,133},
  {&(_ZTV8S21142C2[63]),  63,133},
  {&(_ZTV8S21142C2[80]),  80,133},
  {&(_ZTV8S21142C2[92]),  92,133},
  {&(_ZTV8S21142C2[103]),  103,133},
  {&(_ZTV8S21142C2[109]),  109,133},
  {&(_ZTV8S21142C2[115]),  115,133},
  {&(_ZTV8S21142C2[123]),  123,133},
  {&(_ZTV8S21142C2[127]),  127,133},
  {&(_ZTV8S21142C2[131]),  131,133},
  {&(_tg__ZTV8S21142C3__8S21142C2[3]),  3,5},
  {&(_tg__ZTV7S3589C3__8S21142C3__8S21142C2[3]),  3,5},
  {&(_tg__ZTV8S21142C6__8S21142C2[12]),  12,14},
  {&(_tg__ZTV9S21142C168S21142C6__8S21142C2[5]),  5,7},
  {&(_tg__ZTV8S21142C99S21142C168S21142C6__A2__8S21142C2[4]),  4,6},
  {&(_tg__ZTV9S21142C10__8S21142C99S21142C168S21142C6__A2__8S21142C2[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S21142C99S21142C168S21142C6__A2__8S21142C2[3]),  3,5},
  {&(_tg__ZTV9S21142C10__9S21142C168S21142C6__8S21142C2[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__9S21142C168S21142C6__8S21142C2[3]),  3,5},
  {&(_tg__ZTV9S21142C17__9S21142C168S21142C6__8S21142C2[4]),  4,6},
  {&(_tg__ZTV8S21142C7__8S21142C6__8S21142C2[7]),  7,9},
  {&(_tg__ZTV8S21142C9__8S21142C6__8S21142C2[5]),  5,7},
  {&(_tg__ZTV9S21142C10__8S21142C6__8S21142C2[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S21142C6__8S21142C2[3]),  3,5},
  {&(_tg__ZTV10S3589C9_nt8S21142C88S21142C7__8S21142C6__8S21142C2[2]),  2,4},
  {&(_tg__ZTV9S21142C108S21142C88S21142C7__A1__8S21142C6__8S21142C2[2]),  2,4},
  {&(_tg__ZTV8S21142C98S21142C7__A1__8S21142C6__8S21142C2[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__A1__8S21142C6__8S21142C2[3]),  3,5},
  {&(_tg__ZTV9S21142C12__8S21142C6__8S21142C2[10]),  10,12},
  {&(_tg__ZTV9S21142C13__8S21142C6__8S21142C2[9]),  9,11},
  {&(_tg__ZTV9S21142C15__8S21142C6__8S21142C2[4]),  4,6},
  {&(_tg__ZTV8S21142C3__A1__8S21142C6__8S21142C2[4]),  4,6},
  {&(_tg__ZTV9S21142C17__8S21142C6__8S21142C2[4]),  4,6},
  {&(_tg__ZTV8S21142C7__8S21142C2[6]),  6,8},
  {&(_tg__ZTV8S21142C88S21142C7__8S21142C2[5]),  5,7},
  {&(_tg__ZTV8S21142C9__8S21142C88S21142C7__8S21142C2[5]),  5,7},
  {&(_tg__ZTV9S21142C10__8S21142C88S21142C7__8S21142C2[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S21142C88S21142C7__8S21142C2[3]),  3,5},
  {&(_tg__ZTV8S21142C98S21142C7__A1__8S21142C2[4]),  4,6},
  {&(_tg__ZTV9S21142C10__8S21142C98S21142C7__A1__8S21142C2[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S21142C98S21142C7__A1__8S21142C2[3]),  3,5},
  {&(_tg__ZTV8S21142C9__8S21142C7__8S21142C2[5]),  5,7},
  {&(_tg__ZTV9S21142C10__8S21142C7__8S21142C2[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S21142C7__8S21142C2[3]),  3,5},
  {&(_tg__ZTV8S21142C9__A__8S21142C7__8S21142C2[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__A1__8S21142C7__8S21142C2[3]),  3,5},
  {&(_tg__ZTV8S21142C9__8S21142C2[4]),  4,6},
  {&(_tg__ZTV9S21142C10__8S21142C9__8S21142C2[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S21142C9__8S21142C2[3]),  3,5},
  {&(_tg__ZTV9S21142C12__8S21142C2[9]),  9,11},
  {&(_tg__ZTV8S21142C39S21142C12__A1__8S21142C2[3]),  3,5},
  {&(_tg__ZTV7S3589C3__8S21142C39S21142C12__A1__8S21142C2[3]),  3,5},
  {&(_tg__ZTV8S21142C9__9S21142C12__8S21142C2[5]),  5,7},
  {&(_tg__ZTV9S21142C10__9S21142C12__8S21142C2[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__9S21142C12__8S21142C2[3]),  3,5},
  {&(_tg__ZTV9S21142C13__9S21142C12__8S21142C2[9]),  9,11},
  {&(_tg__ZTV9S21142C15__9S21142C12__8S21142C2[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__9S21142C12__8S21142C2[3]),  3,5},
  {&(_tg__ZTV8S21142C3__A1__9S21142C12__8S21142C2[4]),  4,6},
  {&(_tg__ZTV9S21142C13__8S21142C2[8]),  8,10},
  {&(_tg__ZTV9S21142C15__9S21142C13__8S21142C2[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__9S21142C13__8S21142C2[3]),  3,5},
  {&(_tg__ZTV8S21142C9__9S21142C13__8S21142C2[5]),  5,7},
  {&(_tg__ZTV9S21142C10__9S21142C13__8S21142C2[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__9S21142C13__8S21142C2[3]),  3,5},
  {&(_tg__ZTV8S21142C3__9S21142C13__8S21142C2[4]),  4,6},
  {&(_tg__ZTV9S21142C15__8S21142C2[3]),  3,5},
  {&(_tg__ZTV10S3589C9_nt__9S21142C15__8S21142C2[3]),  3,5},
  {&(_tg__ZTV9S21142C17__8S21142C2[3]),  3,5},
  {&(_tg__ZTV7S3589C3__9S21142C17__8S21142C2[3]),  3,5},
  {&(_tg__ZTV8S21142C8__A1__8S21142C2[5]),  5,7},
  {&(_tg__ZTV8S21142C9__8S21142C8__A1__8S21142C2[5]),  5,7},
  {&(_tg__ZTV9S21142C10__8S21142C8__A1__8S21142C2[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S21142C8__A1__8S21142C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21142C2[];
extern  VTBL_ENTRY _ZTV8S21142C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C2[];
static VTBL_ENTRY alt_thunk_names65[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C12D0Ev,_ZTv0_n16_N9S21142C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S21142C12D0Ev,_ZThn36_N9S21142C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C12D1Ev,_ZTv0_n16_N9S21142C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S21142C12D1Ev,_ZThn36_N9S21142C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S21142C12D0Ev,_ZTv0_n36_N9S21142C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21142C12D0Ev,_ZThn4_N9S21142C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S21142C12D1Ev,_ZTv0_n36_N9S21142C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21142C12D1Ev,_ZThn4_N9S21142C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C7D0Ev,_ZTv0_n12_N8S21142C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S21142C7D0Ev,_ZThn100_N8S21142C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21142C7D0Ev,_ZThn72_N8S21142C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C7D1Ev,_ZTv0_n12_N8S21142C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S21142C7D1Ev,_ZThn100_N8S21142C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21142C7D1Ev,_ZThn72_N8S21142C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C7D0Ev,_ZTv0_n20_N8S21142C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S21142C7D0Ev,_ZThn68_N8S21142C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C7D1Ev,_ZTv0_n20_N8S21142C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S21142C7D1Ev,_ZThn68_N8S21142C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21142C8D0Ev,_ZThn72_N8S21142C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21142C8D1Ev,_ZThn72_N8S21142C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C8D0Ev,_ZTv0_n20_N8S21142C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S21142C8D0Ev,_ZThn68_N8S21142C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C8D1Ev,_ZTv0_n20_N8S21142C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S21142C8D1Ev,_ZThn68_N8S21142C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21142C6D0Ev,_ZTv0_n16_N8S21142C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N8S21142C6D0Ev,_ZThn292_N8S21142C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn392_N8S21142C6D0Ev,_ZThn280_N8S21142C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21142C6D1Ev,_ZTv0_n16_N8S21142C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N8S21142C6D1Ev,_ZThn292_N8S21142C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn392_N8S21142C6D1Ev,_ZThn280_N8S21142C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S21142C6D0Ev,_ZTv0_n36_N8S21142C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S21142C6D0Ev,_ZThn248_N8S21142C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S21142C6D1Ev,_ZTv0_n36_N8S21142C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S21142C6D1Ev,_ZThn248_N8S21142C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S21142C6D0Ev,_ZTv0_n40_N8S21142C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S21142C6D0Ev,_ZThn244_N8S21142C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S21142C6D1Ev,_ZTv0_n40_N8S21142C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S21142C6D1Ev,_ZThn244_N8S21142C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C6D0Ev,_ZTv0_n12_N8S21142C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21142C6D0Ev,_ZThn228_N8S21142C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S21142C6D0Ev,_ZThn200_N8S21142C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C6D1Ev,_ZTv0_n12_N8S21142C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21142C6D1Ev,_ZThn228_N8S21142C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S21142C6D1Ev,_ZThn200_N8S21142C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C6D0Ev,_ZTv0_n20_N8S21142C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S21142C6D0Ev,_ZThn196_N8S21142C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C6D1Ev,_ZTv0_n20_N8S21142C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S21142C6D1Ev,_ZThn196_N8S21142C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21142C6D0Ev,_ZTv0_n28_N8S21142C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S21142C6D0Ev,_ZThn128_N8S21142C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21142C6D1Ev,_ZTv0_n28_N8S21142C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S21142C6D1Ev,_ZThn128_N8S21142C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C16D0Ev,_ZTv0_n16_N9S21142C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N9S21142C16D0Ev,_ZThn292_N9S21142C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C16D1Ev,_ZTv0_n16_N9S21142C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N9S21142C16D1Ev,_ZThn292_N9S21142C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C16D0Ev,_ZTv0_n12_N9S21142C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N9S21142C16D0Ev,_ZThn200_N9S21142C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C16D1Ev,_ZTv0_n12_N9S21142C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N9S21142C16D1Ev,_ZThn200_N9S21142C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21142C9D0Ev,_ZThn4_N8S21142C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21142C9D0Ev,_ZThn8_N8S21142C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S21142C9D0Ev,_ZThn200_N8S21142C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21142C9D1Ev,_ZThn4_N8S21142C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21142C9D1Ev,_ZThn8_N8S21142C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S21142C9D1Ev,_ZThn200_N8S21142C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C3D0Ev,_ZTv0_n12_N8S21142C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21142C3D0Ev,_ZThn4_N8S21142C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C3D1Ev,_ZTv0_n12_N8S21142C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21142C3D1Ev,_ZThn4_N8S21142C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21142C19D0Ev,_ZTv0_n20_N9S21142C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N9S21142C19D0Ev,_ZThn284_N9S21142C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21142C19D1Ev,_ZTv0_n20_N9S21142C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N9S21142C19D1Ev,_ZThn284_N9S21142C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C19D0Ev,_ZTv0_n12_N9S21142C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S21142C19D0Ev,_ZThn76_N9S21142C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn408_N9S21142C19D0Ev,_ZThn288_N9S21142C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N9S21142C19D0Ev,_ZThn316_N9S21142C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C19D1Ev,_ZTv0_n12_N9S21142C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S21142C19D1Ev,_ZThn76_N9S21142C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn408_N9S21142C19D1Ev,_ZThn288_N9S21142C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N9S21142C19D1Ev,_ZThn316_N9S21142C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C19D0Ev,_ZTv0_n16_N9S21142C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S21142C19D0Ev,_ZThn72_N9S21142C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn520_N9S21142C19D0Ev,_ZThn368_N9S21142C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C19D1Ev,_ZTv0_n16_N9S21142C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S21142C19D1Ev,_ZThn72_N9S21142C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn520_N9S21142C19D1Ev,_ZThn368_N9S21142C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21142C13D0Ev,_ZTv0_n20_N9S21142C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N9S21142C13D0Ev,_ZThn284_N9S21142C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21142C13D1Ev,_ZTv0_n20_N9S21142C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N9S21142C13D1Ev,_ZThn284_N9S21142C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S21142C13D0Ev,_ZThn76_N9S21142C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn408_N9S21142C13D0Ev,_ZThn288_N9S21142C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N9S21142C13D0Ev,_ZThn316_N9S21142C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S21142C13D1Ev,_ZThn76_N9S21142C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn408_N9S21142C13D1Ev,_ZThn288_N9S21142C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N9S21142C13D1Ev,_ZThn316_N9S21142C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S21142C13D0Ev,_ZThn32_N9S21142C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S21142C13D0Ev,_ZThn72_N9S21142C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn520_N9S21142C13D0Ev,_ZThn368_N9S21142C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S21142C13D1Ev,_ZThn32_N9S21142C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S21142C13D1Ev,_ZThn72_N9S21142C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn520_N9S21142C13D1Ev,_ZThn368_N9S21142C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21142C2D0Ev,_ZTv0_n24_N8S21142C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N8S21142C2D0Ev,_ZThn392_N8S21142C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21142C2D1Ev,_ZTv0_n24_N8S21142C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N8S21142C2D1Ev,_ZThn392_N8S21142C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S21142C2D0Ev,_ZTv0_n36_N8S21142C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S21142C2D0Ev,_ZThn336_N8S21142C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S21142C2D1Ev,_ZTv0_n36_N8S21142C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S21142C2D1Ev,_ZThn336_N8S21142C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S21142C2D0Ev,_ZTv0_n40_N8S21142C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N8S21142C2D0Ev,_ZThn332_N8S21142C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S21142C2D1Ev,_ZTv0_n40_N8S21142C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N8S21142C2D1Ev,_ZThn332_N8S21142C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C2D0Ev,_ZTv0_n20_N8S21142C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N8S21142C2D0Ev,_ZThn284_N8S21142C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C2D1Ev,_ZTv0_n20_N8S21142C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N8S21142C2D1Ev,_ZThn284_N8S21142C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21142C2D0Ev,_ZTv0_n28_N8S21142C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S21142C2D0Ev,_ZThn216_N8S21142C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21142C2D1Ev,_ZTv0_n28_N8S21142C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S21142C2D1Ev,_ZThn216_N8S21142C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S21142C2D0Ev,_ZTv0_n52_N8S21142C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S21142C2D0Ev,_ZThn88_N8S21142C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S21142C2D1Ev,_ZTv0_n52_N8S21142C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S21142C2D1Ev,_ZThn88_N8S21142C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C2D0Ev,_ZTv0_n12_N8S21142C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N8S21142C2D0Ev,_ZThn316_N8S21142C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn408_N8S21142C2D0Ev,_ZThn288_N8S21142C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21142C2D0Ev,_ZThn76_N8S21142C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C2D1Ev,_ZTv0_n12_N8S21142C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N8S21142C2D1Ev,_ZThn316_N8S21142C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn408_N8S21142C2D1Ev,_ZThn288_N8S21142C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21142C2D1Ev,_ZThn76_N8S21142C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21142C2D0Ev,_ZTv0_n16_N8S21142C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N8S21142C2D0Ev,_ZThn380_N8S21142C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn520_N8S21142C2D0Ev,_ZThn368_N8S21142C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21142C2D0Ev,_ZThn72_N8S21142C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21142C2D1Ev,_ZTv0_n16_N8S21142C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N8S21142C2D1Ev,_ZThn380_N8S21142C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn520_N8S21142C2D1Ev,_ZThn368_N8S21142C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21142C2D1Ev,_ZThn72_N8S21142C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21142C2 = {  "S21142C2", // class name
  bases_S21142C2, 33,
  &(vtc_S21142C2[0]), // expected_vtbl_contents
  &(vtt_S21142C2[0]), // expected_vtt_contents
  ABISELECT(656,456), // object size
  NSPAIRA(_ZTI8S21142C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S21142C2),133, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21142C2),96, //virtual table table var
  30, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names65,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21142C1  : virtual S21142C2 {
  virtual  ~S21142C1(); // _ZN8S21142C1D2Ev
  S21142C1(); // tgen
};
//SIG(1 S21142C1) C1{ VBC2{ VBC3{ VBC4{ vd m Fc FU5{ m Fc[6]}}} VBC6{ VBC7{ BC8{ VBC9{ VBC10{ BC4 vd FL FU5} VBC4 vd} BC4 BC11{ vd m Fi Fc Fi} BC10 Fi Fp} BC9 VBC11} VBC12{ VBC9 BC3 VBC13{ BC14{ m FD} VBC15{ VBC11 Fp[2]} VBC9 BC4 VBC3 Fc Fi} vd} BC16{ BC9 VBC17{ VBC4 Fi FC18{}} vd FD} vd Fi[10] Fp FC16} BC14 BC19{ BC13 Fs FC3 Fi} VBC8 vd Fi} vd}


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

static void Test_S21142C1()
{
  extern Class_Descriptor cd_S21142C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(43,115)];
    init_test(&cd_S21142C1, buf);
    S21142C1 *dp, &lv = *(dp=new (buf) S21142C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(672,456), "sizeof(S21142C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21142C1)");
    /*is_ambiguous_... S21142C1::S21142C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C3*), ABISELECT(120,76), "S21142C1");
    /*is_ambiguous_... S21142C1::S21142C9 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C9*), ABISELECT(120,76), "S21142C1");
    /*is_ambiguous_... S21142C7::S21142C9 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C9*)(S21142C7*), ABISELECT(120,76), "S21142C1");
    /*is_ambiguous_... S21142C12::S21142C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C3*)(S21142C12*), ABISELECT(120,76), "S21142C1");
    /*is_ambiguous_... S21142C9::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C9*)(S21142C16*)(S21142C6*), ABISELECT(120,76), "S21142C1");
    check_base_class_offset(lv, (S3589C3*)(S21142C17*), ABISELECT(120,76), "S21142C1");
    /*is_ambiguous_... S21142C2::S21142C3 */ AMB_check_base_class_offset(lv, (S21142C3*)(S21142C2*), 0, "S21142C1");
    /*is_ambiguous_... S21142C1::S21142C13 */ AMB_check_base_class_offset(lv, (S21142C3*)(S21142C13*), 0, "S21142C1");
    check_base_class_offset(lv, (S21142C3*)(S21142C13*)(S21142C19*)(S21142C2*), 0, "S21142C1");
    /*is_ambiguous_... S21142C1::S21142C10 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C10*), ABISELECT(424,288), "S21142C1");
    /*is_ambiguous_... S21142C1::S21142C9 */ AMB_check_base_class_offset(lv, (S21142C10*)(S21142C9*), ABISELECT(424,288), "S21142C1");
    /*is_ambiguous_... S21142C7::S21142C9 */ AMB_check_base_class_offset(lv, (S21142C10*)(S21142C9*)(S21142C7*), ABISELECT(424,288), "S21142C1");
    check_base_class_offset(lv, (S21142C10*)(S21142C9*)(S21142C16*)(S21142C6*), ABISELECT(424,288), "S21142C1");
    check_base_class_offset(lv, (S21142C9*)(S21142C8*)(S21142C7*), ABISELECT(416,284), "S21142C1");
    check_base_class_offset(lv, (S21142C9*)(S21142C12*), ABISELECT(416,284), "S21142C1");
    /*is_ambiguous_... S21142C1::S21142C13 */ AMB_check_base_class_offset(lv, (S21142C9*)(S21142C13*), ABISELECT(416,284), "S21142C1");
    check_base_class_offset(lv, (S21142C9*)(S21142C13*)(S21142C19*)(S21142C2*), ABISELECT(416,284), "S21142C1");
    /*is_ambiguous_... S21142C1::S21142C8 */ AMB_check_base_class_offset(lv, (S21142C9*)(S21142C8*), ABISELECT(416,284), "S21142C1");
    /*is_ambiguous_... S21142C8::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C8*)(S21142C7*), ABISELECT(320,216), "S21142C1");
    check_base_class_offset(lv, (S3589C9_nt*)(S21142C8*)(S21142C7*), ABISELECT(336,228), "S21142C1");
    /*is_ambiguous_... S21142C8::S21142C10 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C10*)(S21142C8*)(S21142C7*), ABISELECT(360,244), "S21142C1");
    /*is_ambiguous_... S21142C8::S21142C10 */ AMB_check_base_class_offset(lv, (S21142C10*)(S21142C8*)(S21142C7*), ABISELECT(360,244), "S21142C1");
    check_base_class_offset(lv, (S21142C8*)(S21142C7*), ABISELECT(320,216), "S21142C1");
    /*is_ambiguous_... S21142C7::S21142C9 */ AMB_check_base_class_offset(lv, (S21142C9*)(S21142C7*), ABISELECT(408,280), "S21142C1");
    /*is_ambiguous_... S21142C7::S3589C9_nt */ AMB_check_base_class_offset(lv, (S3589C9_nt*)(S21142C7*), ABISELECT(456,316), "S21142C1");
    check_base_class_offset(lv, (S3589C9_nt*)(S21142C15*), ABISELECT(456,316), "S21142C1");
    check_base_class_offset(lv, (S21142C7*)(S21142C6*), ABISELECT(320,216), "S21142C1");
    /*is_ambiguous_... S21142C12::S21142C3 */ AMB_check_base_class_offset(lv, (S21142C3*)(S21142C12*), ABISELECT(480,332), "S21142C1");
    /*is_ambiguous_... S21142C1::S21142C13 */ AMB_check_base_class_offset(lv, (S3589C13_nt*)(S21142C13*), ABISELECT(512,348), "S21142C1");
    /*is_ambiguous_... S21142C1::S21142C13 */ AMB_check_base_class_offset(lv, (S21142C15*)(S21142C13*), ABISELECT(536,368), "S21142C1");
    check_base_class_offset(lv, (S21142C15*)(S21142C13*)(S21142C19*)(S21142C2*), ABISELECT(536,368), "S21142C1");
    /*is_ambiguous_... S21142C1::S21142C13 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C13*), ABISELECT(496,336), "S21142C1");
    check_base_class_offset(lv, (S21142C13*)(S21142C12*), ABISELECT(496,336), "S21142C1");
    check_base_class_offset(lv, (S21142C12*)(S21142C6*), ABISELECT(480,332), "S21142C1");
    check_base_class_offset(lv, (S21142C9*)(S21142C16*)(S21142C6*), ABISELECT(144,88), "S21142C1");
    check_base_class_offset(lv, (S21142C17*)(S21142C16*)(S21142C6*), ABISELECT(560,380), "S21142C1");
    check_base_class_offset(lv, (S21142C16*)(S21142C6*), ABISELECT(144,88), "S21142C1");
    check_base_class_offset(lv, (S21142C6*)(S21142C2*), ABISELECT(144,88), "S21142C1");
    /*is_ambiguous_... S21142C2::S3589C13_nt */ AMB_check_base_class_offset(lv, (S3589C13_nt*)(S21142C2*), ABISELECT(96,60), "S21142C1");
    check_base_class_offset(lv, (S3589C13_nt*)(S21142C13*)(S21142C19*)(S21142C2*), ABISELECT(32,16), "S21142C1");
    /*is_ambiguous_... S21142C13::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C13*)(S21142C19*)(S21142C2*), ABISELECT(16,4), "S21142C1");
    check_base_class_offset(lv, (S21142C13*)(S21142C19*)(S21142C2*), ABISELECT(16,4), "S21142C1");
    check_base_class_offset(lv, (S21142C19*)(S21142C2*), ABISELECT(16,4), "S21142C1");
    /*is_ambiguous_... S21142C1::S21142C8 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C8*), ABISELECT(576,392), "S21142C1");
    /*is_ambiguous_... S21142C1::S21142C8 */ AMB_check_base_class_offset(lv, (S3589C9_nt*)(S21142C8*), ABISELECT(592,404), "S21142C1");
    /*is_ambiguous_... S21142C1::S21142C8 */ AMB_check_base_class_offset(lv, (S3589C3*)(S21142C10*)(S21142C8*), ABISELECT(616,420), "S21142C1");
    /*is_ambiguous_... S21142C1::S21142C8 */ AMB_check_base_class_offset(lv, (S21142C10*)(S21142C8*), ABISELECT(616,420), "S21142C1");
    /*is_ambiguous_... S21142C2::S21142C8 */ AMB_check_base_class_offset(lv, (S21142C8*)(S21142C2*), ABISELECT(576,392), "S21142C1");
    check_base_class_offset(lv, (S21142C2*), ABISELECT(16,4), "S21142C1");
    test_class_info(&lv, &cd_S21142C1);
    dp->~S21142C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21142C1(Test_S21142C1, "S21142C1", ABISELECT(672,456));

#else // __cplusplus

extern void _ZN8S21142C1C1Ev();
extern void _ZN8S21142C1D2Ev();
Name_Map name_map_S21142C1[] = {
  NSPAIR(_ZN8S21142C1C1Ev),
  NSPAIR(_ZN8S21142C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C3;
extern VTBL_ENTRY _ZTI8S21142C3[];
extern  VTBL_ENTRY _ZTV8S21142C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C3[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C10;
extern VTBL_ENTRY _ZTI9S21142C10[];
extern  VTBL_ENTRY _ZTV9S21142C10[];
extern Class_Descriptor cd_S21142C9;
extern VTBL_ENTRY _ZTI8S21142C9[];
extern  VTBL_ENTRY _ZTV8S21142C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C9[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C10;
extern VTBL_ENTRY _ZTI9S21142C10[];
extern  VTBL_ENTRY _ZTV9S21142C10[];
extern Class_Descriptor cd_S21142C8;
extern VTBL_ENTRY _ZTI8S21142C8[];
extern  VTBL_ENTRY _ZTV8S21142C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C8[];
extern Class_Descriptor cd_S21142C9;
extern VTBL_ENTRY _ZTI8S21142C9[];
extern  VTBL_ENTRY _ZTV8S21142C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C9[];
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
extern Class_Descriptor cd_S21142C7;
extern VTBL_ENTRY _ZTI8S21142C7[];
extern  VTBL_ENTRY _ZTV8S21142C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C7[];
extern Class_Descriptor cd_S21142C3;
extern VTBL_ENTRY _ZTI8S21142C3[];
extern  VTBL_ENTRY _ZTV8S21142C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C3[];
extern Class_Descriptor cd_S3589C13_nt;
extern VTBL_ENTRY _ZTI11S3589C13_nt[];
extern Class_Descriptor cd_S21142C15;
extern VTBL_ENTRY _ZTI9S21142C15[];
extern  VTBL_ENTRY _ZTV9S21142C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C15[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C13;
extern VTBL_ENTRY _ZTI9S21142C13[];
extern  VTBL_ENTRY _ZTV9S21142C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C13[];
extern Class_Descriptor cd_S21142C12;
extern VTBL_ENTRY _ZTI9S21142C12[];
extern  VTBL_ENTRY _ZTV9S21142C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C12[];
extern Class_Descriptor cd_S21142C9;
extern VTBL_ENTRY _ZTI8S21142C9[];
extern  VTBL_ENTRY _ZTV8S21142C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C9[];
extern Class_Descriptor cd_S21142C17;
extern VTBL_ENTRY _ZTI9S21142C17[];
extern  VTBL_ENTRY _ZTV9S21142C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C17[];
extern Class_Descriptor cd_S21142C16;
extern VTBL_ENTRY _ZTI9S21142C16[];
extern  VTBL_ENTRY _ZTV9S21142C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C16[];
extern Class_Descriptor cd_S21142C6;
extern VTBL_ENTRY _ZTI8S21142C6[];
extern  VTBL_ENTRY _ZTV8S21142C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C6[];
extern Class_Descriptor cd_S3589C13_nt;
extern VTBL_ENTRY _ZTI11S3589C13_nt[];
extern Class_Descriptor cd_S3589C13_nt;
extern VTBL_ENTRY _ZTI11S3589C13_nt[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C13;
extern VTBL_ENTRY _ZTI9S21142C13[];
extern  VTBL_ENTRY _ZTV9S21142C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C13[];
extern Class_Descriptor cd_S21142C19;
extern VTBL_ENTRY _ZTI9S21142C19[];
extern  VTBL_ENTRY _ZTV9S21142C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21142C19[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S21142C10;
extern VTBL_ENTRY _ZTI9S21142C10[];
extern  VTBL_ENTRY _ZTV9S21142C10[];
extern Class_Descriptor cd_S21142C8;
extern VTBL_ENTRY _ZTI8S21142C8[];
extern  VTBL_ENTRY _ZTV8S21142C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C8[];
extern Class_Descriptor cd_S21142C2;
extern VTBL_ENTRY _ZTI8S21142C2[];
extern  VTBL_ENTRY _ZTV8S21142C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C2[];
static Base_Class bases_S21142C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    ABISELECT(120,76), //bcp->offset
    35, //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_S21142C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(424,288), //bcp->offset
    -1, //bcp->virtual_function_table_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_S21142C10,    ABISELECT(424,288), //bcp->offset
    85, //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
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S21142C9,    ABISELECT(416,284), //bcp->offset
    78, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    88, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(320,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
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3589C9_nt,    ABISELECT(336,228), //bcp->offset
    64, //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
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3589C3,    ABISELECT(360,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
    9, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S21142C10,    ABISELECT(360,244), //bcp->offset
    68, //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
    9, //immediately_derived
  0, 0},
  {&cd_S21142C8,    ABISELECT(320,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21142C9,    ABISELECT(408,280), //bcp->offset
    72, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    80, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3589C9_nt,    ABISELECT(456,316), //bcp->offset
    90, //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
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S21142C7,    ABISELECT(320,216), //bcp->offset
    55, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    75, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S21142C3,    ABISELECT(480,332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    92, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3589C13_nt,    ABISELECT(512,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
    17, //immediately_derived
  0, 0},
  {&cd_S21142C15,    ABISELECT(536,368), //bcp->offset
    118, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    108, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(496,336), //bcp->offset
    -1, //bcp->virtual_function_table_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
    17, //immediately_derived
  0, 0},
  {&cd_S21142C13,    ABISELECT(496,336), //bcp->offset
    107, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    101, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S21142C12,    ABISELECT(480,332), //bcp->offset
    95, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    91, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S21142C9,    ABISELECT(144,88), //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
    20, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S21142C17,    ABISELECT(560,380), //bcp->offset
    124, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    110, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S21142C16,    ABISELECT(144,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S21142C6,    ABISELECT(144,88), //bcp->offset
    40, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    33, //immediately_derived
  0, 1},
  {&cd_S3589C13_nt,    ABISELECT(96,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
    -1, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S3589C13_nt,    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
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3589C3,    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
    28, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S21142C13,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S21142C19,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S3589C3,    ABISELECT(576,392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S3589C9_nt,    ABISELECT(592,404), //bcp->offset
    138, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S3589C3,    ABISELECT(616,420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S21142C10,    ABISELECT(616,420), //bcp->offset
    142, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S21142C8,    ABISELECT(576,392), //bcp->offset
    130, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    112, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    33, //immediately_derived
  0, 1},
  {&cd_S21142C2,    ABISELECT(16,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21142C1[];
extern void ABISELECT(_ZTv0_n32_N8S21142C1D1Ev,_ZTv0_n16_N8S21142C1D1Ev)();
extern void _ZN8S21142C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21142C1D0Ev,_ZTv0_n16_N8S21142C1D0Ev)();
extern void _ZN8S21142C1D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S21142C1D1Ev,_ZTv0_n60_N8S21142C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S21142C1D1Ev,_ZThn4_N8S21142C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S21142C1D0Ev,_ZTv0_n60_N8S21142C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S21142C1D0Ev,_ZThn4_N8S21142C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C1D1Ev,_ZTv0_n12_N8S21142C1D1Ev)();
extern void ABISELECT(_ZThn120_N8S21142C1D1Ev,_ZThn76_N8S21142C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C1D0Ev,_ZTv0_n12_N8S21142C1D0Ev)();
extern void ABISELECT(_ZThn120_N8S21142C1D0Ev,_ZThn76_N8S21142C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S21142C1D1Ev,_ZTv0_n52_N8S21142C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S21142C1D1Ev,_ZThn88_N8S21142C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S21142C1D0Ev,_ZTv0_n52_N8S21142C1D0Ev)();
extern void ABISELECT(_ZThn144_N8S21142C1D0Ev,_ZThn88_N8S21142C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S21142C1D1Ev,_ZTv0_n28_N8S21142C1D1Ev)();
extern void ABISELECT(_ZThn320_N8S21142C1D1Ev,_ZThn216_N8S21142C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S21142C1D0Ev,_ZTv0_n28_N8S21142C1D0Ev)();
extern void ABISELECT(_ZThn320_N8S21142C1D0Ev,_ZThn216_N8S21142C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n56_N8S21142C1D1Ev,_ZTvn12_n28_N8S21142C1D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S21142C1D0Ev,_ZTvn12_n28_N8S21142C1D0Ev)();
extern void ABISELECT(_ZTvn40_n56_N8S21142C1D1Ev,_ZTvn28_n28_N8S21142C1D1Ev)();
extern void ABISELECT(_ZTvn40_n56_N8S21142C1D0Ev,_ZTvn28_n28_N8S21142C1D0Ev)();
extern void ABISELECT(_ZTvn88_n56_N8S21142C1D1Ev,_ZTvn64_n28_N8S21142C1D1Ev)();
extern void ABISELECT(_ZTvn88_n56_N8S21142C1D0Ev,_ZTvn64_n28_N8S21142C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S21142C1D1Ev,_ZTv0_n20_N8S21142C1D1Ev)();
extern void ABISELECT(_ZThn416_N8S21142C1D1Ev,_ZThn284_N8S21142C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21142C1D0Ev,_ZTv0_n20_N8S21142C1D0Ev)();
extern void ABISELECT(_ZThn416_N8S21142C1D0Ev,_ZThn284_N8S21142C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C1D1Ev,_ZTv0_n12_N8S21142C1D1Ev)();
extern void ABISELECT(_ZThn424_N8S21142C1D1Ev,_ZThn288_N8S21142C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C1D0Ev,_ZTv0_n12_N8S21142C1D0Ev)();
extern void ABISELECT(_ZThn424_N8S21142C1D0Ev,_ZThn288_N8S21142C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C1D1Ev,_ZTv0_n12_N8S21142C1D1Ev)();
extern void ABISELECT(_ZThn456_N8S21142C1D1Ev,_ZThn316_N8S21142C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C1D0Ev,_ZTv0_n12_N8S21142C1D0Ev)();
extern void ABISELECT(_ZThn456_N8S21142C1D0Ev,_ZThn316_N8S21142C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S21142C1D1Ev,_ZTv0_n40_N8S21142C1D1Ev)();
extern void ABISELECT(_ZThn480_N8S21142C1D1Ev,_ZThn332_N8S21142C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S21142C1D0Ev,_ZTv0_n40_N8S21142C1D0Ev)();
extern void ABISELECT(_ZThn480_N8S21142C1D0Ev,_ZThn332_N8S21142C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S21142C1D1Ev,_ZTv0_n36_N8S21142C1D1Ev)();
extern void ABISELECT(_ZThn496_N8S21142C1D1Ev,_ZThn336_N8S21142C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S21142C1D0Ev,_ZTv0_n36_N8S21142C1D0Ev)();
extern void ABISELECT(_ZThn496_N8S21142C1D0Ev,_ZThn336_N8S21142C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21142C1D1Ev,_ZTv0_n16_N8S21142C1D1Ev)();
extern void ABISELECT(_ZThn536_N8S21142C1D1Ev,_ZThn368_N8S21142C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21142C1D0Ev,_ZTv0_n16_N8S21142C1D0Ev)();
extern void ABISELECT(_ZThn536_N8S21142C1D0Ev,_ZThn368_N8S21142C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21142C1D1Ev,_ZTv0_n16_N8S21142C1D1Ev)();
extern void ABISELECT(_ZThn560_N8S21142C1D1Ev,_ZThn380_N8S21142C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21142C1D0Ev,_ZTv0_n16_N8S21142C1D0Ev)();
extern void ABISELECT(_ZThn560_N8S21142C1D0Ev,_ZThn380_N8S21142C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21142C1D1Ev,_ZTv0_n24_N8S21142C1D1Ev)();
extern void ABISELECT(_ZThn576_N8S21142C1D1Ev,_ZThn392_N8S21142C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21142C1D0Ev,_ZTv0_n24_N8S21142C1D0Ev)();
extern void ABISELECT(_ZThn576_N8S21142C1D0Ev,_ZThn392_N8S21142C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n48_N8S21142C1D1Ev,_ZTvn12_n24_N8S21142C1D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N8S21142C1D0Ev,_ZTvn12_n24_N8S21142C1D0Ev)();
extern void ABISELECT(_ZTvn40_n48_N8S21142C1D1Ev,_ZTvn28_n24_N8S21142C1D1Ev)();
extern void ABISELECT(_ZTvn40_n48_N8S21142C1D0Ev,_ZTvn28_n24_N8S21142C1D0Ev)();
static  VTBL_ENTRY vtc_S21142C1[] = {
  ABISELECT(576,392),
  ABISELECT(560,380),
  ABISELECT(536,368),
  ABISELECT(496,336),
  ABISELECT(480,332),
  ABISELECT(456,316),
  ABISELECT(424,288),
  ABISELECT(416,284),
  ABISELECT(320,216),
  ABISELECT(144,88),
  0,
  ABISELECT(16,4),
  0,
  ABISELECT(120,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C1D1Ev,_ZTv0_n16_N8S21142C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C1D0Ev,_ZTv0_n16_N8S21142C1D0Ev),
  ABISELECT(-16,-4),
  ABISELECT(560,388),
  ABISELECT(544,376),
  ABISELECT(480,332),
  ABISELECT(464,328),
  ABISELECT(304,212),
  ABISELECT(128,84),
  ABISELECT(-16,-4),
  ABISELECT(104,72),
  ABISELECT(408,284),
  ABISELECT(400,280),
  ABISELECT(440,312),
  ABISELECT(520,364),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S21142C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S21142C1D1Ev,_ZTv0_n60_N8S21142C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S21142C1D0Ev,_ZTv0_n60_N8S21142C1D0Ev),
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S21142C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C1D1Ev,_ZTv0_n12_N8S21142C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C1D0Ev,_ZTv0_n12_N8S21142C1D0Ev),
  ABISELECT(-144,-88),
  ABISELECT(-144,-88),
  ABISELECT(392,280),
  ABISELECT(352,248),
  ABISELECT(336,244),
  ABISELECT(312,228),
  ABISELECT(272,196),
  ABISELECT(176,128),
  ABISELECT(416,292),
  ABISELECT(-24,-12),
  ABISELECT(280,200),
  ABISELECT(-144,-88),
  (VTBL_ENTRY)&(_ZTI8S21142C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S21142C1D1Ev,_ZTv0_n52_N8S21142C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S21142C1D0Ev,_ZTv0_n52_N8S21142C1D0Ev),
  ABISELECT(-320,-216),
  ABISELECT(136,100),
  ABISELECT(-200,-140),
  ABISELECT(104,72),
  ABISELECT(96,68),
  ABISELECT(-320,-216),
  (VTBL_ENTRY)&(_ZTI8S21142C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21142C1D1Ev,_ZTv0_n28_N8S21142C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21142C1D0Ev,_ZTv0_n28_N8S21142C1D0Ev),
  ABISELECT(-336,-228),
  (VTBL_ENTRY)&(_ZTI8S21142C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S21142C1D1Ev,_ZTvn12_n28_N8S21142C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S21142C1D0Ev,_ZTvn12_n28_N8S21142C1D0Ev),
  ABISELECT(-360,-244),
  (VTBL_ENTRY)&(_ZTI8S21142C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n56_N8S21142C1D1Ev,_ZTvn28_n28_N8S21142C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n56_N8S21142C1D0Ev,_ZTvn28_n28_N8S21142C1D0Ev),
  ABISELECT(-288,-204),
  ABISELECT(16,8),
  ABISELECT(-408,-280),
  (VTBL_ENTRY)&(_ZTI8S21142C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n56_N8S21142C1D1Ev,_ZTvn64_n28_N8S21142C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n56_N8S21142C1D0Ev,_ZTvn64_n28_N8S21142C1D0Ev),
  ABISELECT(-416,-284),
  ABISELECT(-296,-208),
  ABISELECT(8,4),
  ABISELECT(-416,-284),
  (VTBL_ENTRY)&(_ZTI8S21142C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C1D1Ev,_ZTv0_n20_N8S21142C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C1D0Ev,_ZTv0_n20_N8S21142C1D0Ev),
  ABISELECT(-424,-288),
  ABISELECT(-424,-288),
  (VTBL_ENTRY)&(_ZTI8S21142C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C1D1Ev,_ZTv0_n12_N8S21142C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C1D0Ev,_ZTv0_n12_N8S21142C1D0Ev),
  ABISELECT(-456,-316),
  ABISELECT(-456,-316),
  (VTBL_ENTRY)&(_ZTI8S21142C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C1D1Ev,_ZTv0_n12_N8S21142C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C1D0Ev,_ZTv0_n12_N8S21142C1D0Ev),
  ABISELECT(-480,-332),
  ABISELECT(-480,-332),
  ABISELECT(-24,-16),
  ABISELECT(56,36),
  ABISELECT(16,4),
  ABISELECT(-56,-44),
  ABISELECT(-64,-48),
  ABISELECT(-360,-256),
  ABISELECT(-480,-332),
  (VTBL_ENTRY)&(_ZTI8S21142C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S21142C1D1Ev,_ZTv0_n40_N8S21142C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S21142C1D0Ev,_ZTv0_n40_N8S21142C1D0Ev),
  ABISELECT(-496,-336),
  ABISELECT(-496,-336),
  ABISELECT(-376,-260),
  ABISELECT(-72,-48),
  ABISELECT(-80,-52),
  ABISELECT(-40,-20),
  ABISELECT(40,32),
  ABISELECT(-496,-336),
  (VTBL_ENTRY)&(_ZTI8S21142C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S21142C1D1Ev,_ZTv0_n36_N8S21142C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S21142C1D0Ev,_ZTv0_n36_N8S21142C1D0Ev),
  ABISELECT(-536,-368),
  ABISELECT(-80,-52),
  ABISELECT(-536,-368),
  (VTBL_ENTRY)&(_ZTI8S21142C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C1D1Ev,_ZTv0_n16_N8S21142C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C1D0Ev,_ZTv0_n16_N8S21142C1D0Ev),
  ABISELECT(-560,-380),
  ABISELECT(-440,-304),
  ABISELECT(-560,-380),
  (VTBL_ENTRY)&(_ZTI8S21142C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C1D1Ev,_ZTv0_n16_N8S21142C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C1D0Ev,_ZTv0_n16_N8S21142C1D0Ev),
  ABISELECT(-576,-392),
  ABISELECT(-456,-316),
  ABISELECT(-152,-104),
  ABISELECT(-160,-108),
  ABISELECT(-576,-392),
  (VTBL_ENTRY)&(_ZTI8S21142C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21142C1D1Ev,_ZTv0_n24_N8S21142C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21142C1D0Ev,_ZTv0_n24_N8S21142C1D0Ev),
  ABISELECT(-592,-404),
  (VTBL_ENTRY)&(_ZTI8S21142C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S21142C1D1Ev,_ZTvn12_n24_N8S21142C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S21142C1D0Ev,_ZTvn12_n24_N8S21142C1D0Ev),
  ABISELECT(-616,-420),
  (VTBL_ENTRY)&(_ZTI8S21142C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n48_N8S21142C1D1Ev,_ZTvn28_n24_N8S21142C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n48_N8S21142C1D0Ev,_ZTvn28_n24_N8S21142C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S21142C1[];
extern void _ZN8S21142C2D1Ev();
extern void _ZN8S21142C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C2__8S21142C1[] = {
  ABISELECT(560,388),
  ABISELECT(544,376),
  ABISELECT(480,332),
  ABISELECT(464,328),
  ABISELECT(304,212),
  ABISELECT(128,84),
  ABISELECT(-16,-4),
  ABISELECT(104,72),
  ABISELECT(408,284),
  ABISELECT(400,280),
  ABISELECT(440,312),
  ABISELECT(520,364),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&_ZN8S21142C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C2D0Ev,
};
extern void _ZN9S21142C19D1Ev();
extern void _ZN9S21142C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21142C198S21142C2__8S21142C1[] = {
  ABISELECT(-16,-4),
  ABISELECT(104,72),
  ABISELECT(408,284),
  ABISELECT(400,280),
  ABISELECT(440,312),
  ABISELECT(520,364),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C19[0]),
  (VTBL_ENTRY)&_ZN9S21142C19D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C19D0Ev,
};
extern void _ZN9S21142C13D1Ev();
extern void _ZN9S21142C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21142C139S21142C198S21142C2__A1__8S21142C1[] = {
  ABISELECT(-16,-4),
  ABISELECT(104,72),
  ABISELECT(408,284),
  ABISELECT(400,280),
  ABISELECT(440,312),
  ABISELECT(520,364),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&_ZN9S21142C13D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C13D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn520_N9S21142C13D1Ev,_ZThn364_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn520_N9S21142C13D0Ev,_ZThn364_N9S21142C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C15__9S21142C139S21142C198S21142C2__A1__8S21142C1[] = {
  ABISELECT(-520,-364),
  ABISELECT(-80,-52),
  ABISELECT(-520,-364),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn440_N9S21142C13D1Ev,_ZThn312_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn440_N9S21142C13D0Ev,_ZThn312_N9S21142C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__9S21142C139S21142C198S21142C2__A1__8S21142C1[] = {
  ABISELECT(-440,-312),
  ABISELECT(-440,-312),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21142C13D1Ev,_ZTv0_n20_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn400_N9S21142C13D1Ev,_ZThn280_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21142C13D0Ev,_ZTv0_n20_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn400_N9S21142C13D0Ev,_ZThn280_N9S21142C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21142C9__9S21142C139S21142C198S21142C2__A1__8S21142C1[] = {
  ABISELECT(-400,-280),
  ABISELECT(-296,-208),
  ABISELECT(8,4),
  ABISELECT(-400,-280),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C13D1Ev,_ZTv0_n20_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C13D0Ev,_ZTv0_n20_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn408_N9S21142C13D1Ev,_ZThn284_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn408_N9S21142C13D0Ev,_ZThn284_N9S21142C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__9S21142C139S21142C198S21142C2__A1__8S21142C1[] = {
  ABISELECT(-408,-284),
  ABISELECT(-408,-284),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn104_N9S21142C13D1Ev,_ZThn72_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn104_N9S21142C13D0Ev,_ZThn72_N9S21142C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__9S21142C139S21142C198S21142C2__A1__8S21142C1[] = {
  ABISELECT(-104,-72),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21142C3__9S21142C139S21142C198S21142C2__A1__8S21142C1[] = {
  ABISELECT(16,4),
  ABISELECT(120,76),
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21142C19D1Ev,_ZTv0_n16_N9S21142C19D1Ev)();
extern void ABISELECT(_ZThn520_N9S21142C19D1Ev,_ZThn364_N9S21142C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C19D0Ev,_ZTv0_n16_N9S21142C19D0Ev)();
extern void ABISELECT(_ZThn520_N9S21142C19D0Ev,_ZThn364_N9S21142C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C15__9S21142C198S21142C2__8S21142C1[] = {
  ABISELECT(-520,-364),
  ABISELECT(-80,-52),
  ABISELECT(-520,-364),
  (VTBL_ENTRY)&(_ZTI9S21142C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C19D1Ev,_ZTv0_n16_N9S21142C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C19D0Ev,_ZTv0_n16_N9S21142C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C19D1Ev,_ZTv0_n12_N9S21142C19D1Ev)();
extern void ABISELECT(_ZThn440_N9S21142C19D1Ev,_ZThn312_N9S21142C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C19D0Ev,_ZTv0_n12_N9S21142C19D0Ev)();
extern void ABISELECT(_ZThn440_N9S21142C19D0Ev,_ZThn312_N9S21142C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__9S21142C198S21142C2__8S21142C1[] = {
  ABISELECT(-440,-312),
  ABISELECT(-440,-312),
  (VTBL_ENTRY)&(_ZTI9S21142C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C19D1Ev,_ZTv0_n12_N9S21142C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C19D0Ev,_ZTv0_n12_N9S21142C19D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21142C19D1Ev,_ZTv0_n20_N9S21142C19D1Ev)();
extern void ABISELECT(_ZThn400_N9S21142C19D1Ev,_ZThn280_N9S21142C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21142C19D0Ev,_ZTv0_n20_N9S21142C19D0Ev)();
extern void ABISELECT(_ZThn400_N9S21142C19D0Ev,_ZThn280_N9S21142C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21142C9__9S21142C198S21142C2__8S21142C1[] = {
  ABISELECT(-400,-280),
  ABISELECT(-296,-208),
  ABISELECT(8,4),
  ABISELECT(-400,-280),
  (VTBL_ENTRY)&(_ZTI9S21142C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C19D1Ev,_ZTv0_n20_N9S21142C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C19D0Ev,_ZTv0_n20_N9S21142C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C19D1Ev,_ZTv0_n12_N9S21142C19D1Ev)();
extern void ABISELECT(_ZThn408_N9S21142C19D1Ev,_ZThn284_N9S21142C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C19D0Ev,_ZTv0_n12_N9S21142C19D0Ev)();
extern void ABISELECT(_ZThn408_N9S21142C19D0Ev,_ZThn284_N9S21142C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__9S21142C198S21142C2__8S21142C1[] = {
  ABISELECT(-408,-284),
  ABISELECT(-408,-284),
  (VTBL_ENTRY)&(_ZTI9S21142C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C19D1Ev,_ZTv0_n12_N9S21142C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C19D0Ev,_ZTv0_n12_N9S21142C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C19D1Ev,_ZTv0_n12_N9S21142C19D1Ev)();
extern void ABISELECT(_ZThn104_N9S21142C19D1Ev,_ZThn72_N9S21142C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C19D0Ev,_ZTv0_n12_N9S21142C19D0Ev)();
extern void ABISELECT(_ZThn104_N9S21142C19D0Ev,_ZThn72_N9S21142C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__9S21142C198S21142C2__8S21142C1[] = {
  ABISELECT(-104,-72),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI9S21142C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C19D1Ev,_ZTv0_n12_N9S21142C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C19D0Ev,_ZTv0_n12_N9S21142C19D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21142C19D1Ev,_ZTv0_n16_N9S21142C19D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S21142C19D0Ev,_ZTv0_n16_N9S21142C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21142C3__9S21142C198S21142C2__8S21142C1[] = {
  ABISELECT(16,4),
  ABISELECT(120,76),
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI9S21142C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C19D1Ev,_ZTv0_n16_N9S21142C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C19D0Ev,_ZTv0_n16_N9S21142C19D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21142C2D1Ev,_ZTv0_n16_N8S21142C2D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S21142C2D0Ev,_ZTv0_n16_N8S21142C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21142C3__8S21142C2__8S21142C1[] = {
  ABISELECT(16,4),
  ABISELECT(120,76),
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C2D1Ev,_ZTv0_n16_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C2D0Ev,_ZTv0_n16_N8S21142C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C2D1Ev,_ZTv0_n12_N8S21142C2D1Ev)();
extern void ABISELECT(_ZThn104_N8S21142C2D1Ev,_ZThn72_N8S21142C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C2D0Ev,_ZTv0_n12_N8S21142C2D0Ev)();
extern void ABISELECT(_ZThn104_N8S21142C2D0Ev,_ZThn72_N8S21142C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S21142C2__8S21142C1[] = {
  ABISELECT(-104,-72),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C2D1Ev,_ZTv0_n12_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C2D0Ev,_ZTv0_n12_N8S21142C2D0Ev),
};
extern void ABISELECT(_ZTv0_n104_N8S21142C2D1Ev,_ZTv0_n52_N8S21142C2D1Ev)();
extern void ABISELECT(_ZThn128_N8S21142C2D1Ev,_ZThn84_N8S21142C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S21142C2D0Ev,_ZTv0_n52_N8S21142C2D0Ev)();
extern void ABISELECT(_ZThn128_N8S21142C2D0Ev,_ZThn84_N8S21142C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21142C6__8S21142C2__8S21142C1[] = {
  ABISELECT(-128,-84),
  ABISELECT(-144,-88),
  ABISELECT(392,280),
  ABISELECT(352,248),
  ABISELECT(336,244),
  ABISELECT(312,228),
  ABISELECT(272,196),
  ABISELECT(176,128),
  ABISELECT(416,292),
  ABISELECT(-24,-12),
  ABISELECT(280,200),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S21142C2D1Ev,_ZTv0_n52_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S21142C2D0Ev,_ZTv0_n52_N8S21142C2D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S21142C2D1Ev,_ZTv0_n28_N8S21142C2D1Ev)();
extern void ABISELECT(_ZThn304_N8S21142C2D1Ev,_ZThn212_N8S21142C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S21142C2D0Ev,_ZTv0_n28_N8S21142C2D0Ev)();
extern void ABISELECT(_ZThn304_N8S21142C2D0Ev,_ZThn212_N8S21142C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21142C7__8S21142C2__8S21142C1[] = {
  ABISELECT(-304,-212),
  ABISELECT(136,100),
  ABISELECT(-200,-140),
  ABISELECT(104,72),
  ABISELECT(96,68),
  ABISELECT(-304,-212),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21142C2D1Ev,_ZTv0_n28_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21142C2D0Ev,_ZTv0_n28_N8S21142C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21142C2D1Ev,_ZTv0_n20_N8S21142C2D1Ev)();
extern void ABISELECT(_ZThn400_N8S21142C2D1Ev,_ZThn280_N8S21142C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21142C2D0Ev,_ZTv0_n20_N8S21142C2D0Ev)();
extern void ABISELECT(_ZThn400_N8S21142C2D0Ev,_ZThn280_N8S21142C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21142C9__8S21142C2__8S21142C1[] = {
  ABISELECT(-400,-280),
  ABISELECT(-296,-208),
  ABISELECT(8,4),
  ABISELECT(-400,-280),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C2D1Ev,_ZTv0_n20_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C2D0Ev,_ZTv0_n20_N8S21142C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C2D1Ev,_ZTv0_n12_N8S21142C2D1Ev)();
extern void ABISELECT(_ZThn408_N8S21142C2D1Ev,_ZThn284_N8S21142C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C2D0Ev,_ZTv0_n12_N8S21142C2D0Ev)();
extern void ABISELECT(_ZThn408_N8S21142C2D0Ev,_ZThn284_N8S21142C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__8S21142C2__8S21142C1[] = {
  ABISELECT(-408,-284),
  ABISELECT(-408,-284),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C2D1Ev,_ZTv0_n12_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C2D0Ev,_ZTv0_n12_N8S21142C2D0Ev),
};
extern void ABISELECT(_ZTvn16_n56_N8S21142C2D1Ev,_ZTvn12_n28_N8S21142C2D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S21142C2D0Ev,_ZTvn12_n28_N8S21142C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt8S21142C88S21142C7__8S21142C2__8S21142C1[] = {
  ABISELECT(-320,-224),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S21142C2D1Ev,_ZTvn12_n28_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S21142C2D0Ev,_ZTvn12_n28_N8S21142C2D0Ev),
};
extern void ABISELECT(_ZTvn40_n56_N8S21142C2D1Ev,_ZTvn28_n28_N8S21142C2D1Ev)();
extern void ABISELECT(_ZTvn40_n56_N8S21142C2D0Ev,_ZTvn28_n28_N8S21142C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S21142C108S21142C88S21142C7__A1__8S21142C2__8S21142C1[] = {
  ABISELECT(-344,-240),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n56_N8S21142C2D1Ev,_ZTvn28_n28_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n56_N8S21142C2D0Ev,_ZTvn28_n28_N8S21142C2D0Ev),
};
extern void ABISELECT(_ZTvn88_n56_N8S21142C2D1Ev,_ZTvn64_n28_N8S21142C2D1Ev)();
extern void ABISELECT(_ZTvn88_n56_N8S21142C2D0Ev,_ZTvn64_n28_N8S21142C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21142C98S21142C7__A1__8S21142C2__8S21142C1[] = {
  ABISELECT(-288,-204),
  ABISELECT(16,8),
  ABISELECT(-392,-276),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n56_N8S21142C2D1Ev,_ZTvn64_n28_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n56_N8S21142C2D0Ev,_ZTvn64_n28_N8S21142C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C2D1Ev,_ZTv0_n12_N8S21142C2D1Ev)();
extern void ABISELECT(_ZThn440_N8S21142C2D1Ev,_ZThn312_N8S21142C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C2D0Ev,_ZTv0_n12_N8S21142C2D0Ev)();
extern void ABISELECT(_ZThn440_N8S21142C2D0Ev,_ZThn312_N8S21142C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__A1__8S21142C2__8S21142C1[] = {
  ABISELECT(-440,-312),
  ABISELECT(-440,-312),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C2D1Ev,_ZTv0_n12_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C2D0Ev,_ZTv0_n12_N8S21142C2D0Ev),
};
extern void ABISELECT(_ZTv0_n80_N8S21142C2D1Ev,_ZTv0_n40_N8S21142C2D1Ev)();
extern void ABISELECT(_ZThn464_N8S21142C2D1Ev,_ZThn328_N8S21142C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S21142C2D0Ev,_ZTv0_n40_N8S21142C2D0Ev)();
extern void ABISELECT(_ZThn464_N8S21142C2D0Ev,_ZThn328_N8S21142C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C12__8S21142C2__8S21142C1[] = {
  ABISELECT(-464,-328),
  ABISELECT(-480,-332),
  ABISELECT(-24,-16),
  ABISELECT(56,36),
  ABISELECT(16,4),
  ABISELECT(-56,-44),
  ABISELECT(-64,-48),
  ABISELECT(-360,-256),
  ABISELECT(-464,-328),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S21142C2D1Ev,_ZTv0_n40_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S21142C2D0Ev,_ZTv0_n40_N8S21142C2D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N8S21142C2D1Ev,_ZTv0_n36_N8S21142C2D1Ev)();
extern void ABISELECT(_ZThn480_N8S21142C2D1Ev,_ZThn332_N8S21142C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S21142C2D0Ev,_ZTv0_n36_N8S21142C2D0Ev)();
extern void ABISELECT(_ZThn480_N8S21142C2D0Ev,_ZThn332_N8S21142C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C13__8S21142C2__8S21142C1[] = {
  ABISELECT(-480,-332),
  ABISELECT(-496,-336),
  ABISELECT(-376,-260),
  ABISELECT(-72,-48),
  ABISELECT(-80,-52),
  ABISELECT(-40,-20),
  ABISELECT(40,32),
  ABISELECT(-480,-332),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S21142C2D1Ev,_ZTv0_n36_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S21142C2D0Ev,_ZTv0_n36_N8S21142C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21142C2D1Ev,_ZTv0_n16_N8S21142C2D1Ev)();
extern void ABISELECT(_ZThn520_N8S21142C2D1Ev,_ZThn364_N8S21142C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21142C2D0Ev,_ZTv0_n16_N8S21142C2D0Ev)();
extern void ABISELECT(_ZThn520_N8S21142C2D0Ev,_ZThn364_N8S21142C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C15__8S21142C2__8S21142C1[] = {
  ABISELECT(-520,-364),
  ABISELECT(-80,-52),
  ABISELECT(-520,-364),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C2D1Ev,_ZTv0_n16_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C2D0Ev,_ZTv0_n16_N8S21142C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21142C2D1Ev,_ZTv0_n16_N8S21142C2D1Ev)();
extern void ABISELECT(_ZThn544_N8S21142C2D1Ev,_ZThn376_N8S21142C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21142C2D0Ev,_ZTv0_n16_N8S21142C2D0Ev)();
extern void ABISELECT(_ZThn544_N8S21142C2D0Ev,_ZThn376_N8S21142C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C17__8S21142C2__8S21142C1[] = {
  ABISELECT(-544,-376),
  ABISELECT(-440,-304),
  ABISELECT(-544,-376),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C2D1Ev,_ZTv0_n16_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C2D0Ev,_ZTv0_n16_N8S21142C2D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S21142C2D1Ev,_ZTv0_n24_N8S21142C2D1Ev)();
extern void ABISELECT(_ZThn560_N8S21142C2D1Ev,_ZThn388_N8S21142C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21142C2D0Ev,_ZTv0_n24_N8S21142C2D0Ev)();
extern void ABISELECT(_ZThn560_N8S21142C2D0Ev,_ZThn388_N8S21142C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21142C8__A1__8S21142C2__8S21142C1[] = {
  ABISELECT(-560,-388),
  ABISELECT(-456,-316),
  ABISELECT(-152,-104),
  ABISELECT(-160,-108),
  ABISELECT(-560,-388),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21142C2D1Ev,_ZTv0_n24_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21142C2D0Ev,_ZTv0_n24_N8S21142C2D0Ev),
};
extern void ABISELECT(_ZTvn16_n48_N8S21142C2D1Ev,_ZTvn12_n24_N8S21142C2D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N8S21142C2D0Ev,_ZTvn12_n24_N8S21142C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt8S21142C8__A2__8S21142C2__8S21142C1[] = {
  ABISELECT(-576,-400),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S21142C2D1Ev,_ZTvn12_n24_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S21142C2D0Ev,_ZTvn12_n24_N8S21142C2D0Ev),
};
extern void ABISELECT(_ZTvn40_n48_N8S21142C2D1Ev,_ZTvn28_n24_N8S21142C2D1Ev)();
extern void ABISELECT(_ZTvn40_n48_N8S21142C2D0Ev,_ZTvn28_n24_N8S21142C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S21142C108S21142C8__A2__8S21142C2__8S21142C1[] = {
  ABISELECT(-600,-416),
  (VTBL_ENTRY)&(_ZTI8S21142C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n48_N8S21142C2D1Ev,_ZTvn28_n24_N8S21142C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n48_N8S21142C2D0Ev,_ZTvn28_n24_N8S21142C2D0Ev),
};
extern void _ZN8S21142C3D1Ev();
extern void _ZN8S21142C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C3__8S21142C1[] = {
  ABISELECT(120,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C3[0]),
  (VTBL_ENTRY)&_ZN8S21142C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21142C3D1Ev,_ZTv0_n12_N8S21142C3D1Ev)();
extern void ABISELECT(_ZThn120_N8S21142C3D1Ev,_ZThn76_N8S21142C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C3D0Ev,_ZTv0_n12_N8S21142C3D0Ev)();
extern void ABISELECT(_ZThn120_N8S21142C3D0Ev,_ZThn76_N8S21142C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S21142C3__8S21142C1[] = {
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S21142C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C3D1Ev,_ZTv0_n12_N8S21142C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C3D0Ev,_ZTv0_n12_N8S21142C3D0Ev),
};
extern void _ZN8S21142C6D1Ev();
extern void _ZN8S21142C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C6__8S21142C1[] = {
  ABISELECT(-144,-88),
  ABISELECT(392,280),
  ABISELECT(352,248),
  ABISELECT(336,244),
  ABISELECT(312,228),
  ABISELECT(272,196),
  ABISELECT(176,128),
  ABISELECT(416,292),
  ABISELECT(-24,-12),
  ABISELECT(280,200),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&_ZN8S21142C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C6D0Ev,
};
extern void _ZN9S21142C16D1Ev();
extern void _ZN9S21142C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21142C168S21142C6__8S21142C1[] = {
  ABISELECT(416,292),
  ABISELECT(-24,-12),
  ABISELECT(280,200),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C16[0]),
  (VTBL_ENTRY)&_ZN9S21142C16D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C16D0Ev,
};
extern void _ZN8S21142C9D1Ev();
extern void _ZN8S21142C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C99S21142C168S21142C6__A2__8S21142C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(280,200),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&_ZN8S21142C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZThn280_N8S21142C9D1Ev,_ZThn200_N8S21142C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
extern void ABISELECT(_ZThn280_N8S21142C9D0Ev,_ZThn200_N8S21142C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__8S21142C99S21142C168S21142C6__A2__8S21142C1[] = {
  ABISELECT(-280,-200),
  ABISELECT(-280,-200),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S21142C99S21142C168S21142C6__A2__8S21142C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C16D1Ev,_ZTv0_n12_N9S21142C16D1Ev)();
extern void ABISELECT(_ZThn280_N9S21142C16D1Ev,_ZThn200_N9S21142C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21142C16D0Ev,_ZTv0_n12_N9S21142C16D0Ev)();
extern void ABISELECT(_ZThn280_N9S21142C16D0Ev,_ZThn200_N9S21142C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__9S21142C168S21142C6__8S21142C1[] = {
  ABISELECT(-280,-200),
  ABISELECT(-280,-200),
  (VTBL_ENTRY)&(_ZTI9S21142C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C16D1Ev,_ZTv0_n12_N9S21142C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C16D0Ev,_ZTv0_n12_N9S21142C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C16D1Ev,_ZTv0_n12_N9S21142C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C16D0Ev,_ZTv0_n12_N9S21142C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__9S21142C168S21142C6__8S21142C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI9S21142C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C16D1Ev,_ZTv0_n12_N9S21142C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C16D0Ev,_ZTv0_n12_N9S21142C16D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21142C16D1Ev,_ZTv0_n16_N9S21142C16D1Ev)();
extern void ABISELECT(_ZThn416_N9S21142C16D1Ev,_ZThn292_N9S21142C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C16D0Ev,_ZTv0_n16_N9S21142C16D0Ev)();
extern void ABISELECT(_ZThn416_N9S21142C16D0Ev,_ZThn292_N9S21142C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C17__9S21142C168S21142C6__8S21142C1[] = {
  ABISELECT(-416,-292),
  ABISELECT(-440,-304),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI9S21142C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C16D1Ev,_ZTv0_n16_N9S21142C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C16D0Ev,_ZTv0_n16_N9S21142C16D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S21142C6D1Ev,_ZTv0_n28_N8S21142C6D1Ev)();
extern void ABISELECT(_ZThn176_N8S21142C6D1Ev,_ZThn128_N8S21142C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S21142C6D0Ev,_ZTv0_n28_N8S21142C6D0Ev)();
extern void ABISELECT(_ZThn176_N8S21142C6D0Ev,_ZThn128_N8S21142C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21142C7__8S21142C6__8S21142C1[] = {
  ABISELECT(-176,-128),
  ABISELECT(136,100),
  ABISELECT(-200,-140),
  ABISELECT(104,72),
  ABISELECT(96,68),
  ABISELECT(-176,-128),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21142C6D1Ev,_ZTv0_n28_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21142C6D0Ev,_ZTv0_n28_N8S21142C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21142C6D1Ev,_ZTv0_n20_N8S21142C6D1Ev)();
extern void ABISELECT(_ZThn272_N8S21142C6D1Ev,_ZThn196_N8S21142C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21142C6D0Ev,_ZTv0_n20_N8S21142C6D0Ev)();
extern void ABISELECT(_ZThn272_N8S21142C6D0Ev,_ZThn196_N8S21142C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21142C9__8S21142C6__8S21142C1[] = {
  ABISELECT(-272,-196),
  ABISELECT(-296,-208),
  ABISELECT(8,4),
  ABISELECT(-272,-196),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C6D1Ev,_ZTv0_n20_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C6D0Ev,_ZTv0_n20_N8S21142C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C6D1Ev,_ZTv0_n12_N8S21142C6D1Ev)();
extern void ABISELECT(_ZThn280_N8S21142C6D1Ev,_ZThn200_N8S21142C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C6D0Ev,_ZTv0_n12_N8S21142C6D0Ev)();
extern void ABISELECT(_ZThn280_N8S21142C6D0Ev,_ZThn200_N8S21142C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__8S21142C6__8S21142C1[] = {
  ABISELECT(-280,-200),
  ABISELECT(-280,-200),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C6D1Ev,_ZTv0_n12_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C6D0Ev,_ZTv0_n12_N8S21142C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C6D1Ev,_ZTv0_n12_N8S21142C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21142C6D0Ev,_ZTv0_n12_N8S21142C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S21142C6__8S21142C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C6D1Ev,_ZTv0_n12_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C6D0Ev,_ZTv0_n12_N8S21142C6D0Ev),
};
extern void ABISELECT(_ZTvn16_n56_N8S21142C6D1Ev,_ZTvn12_n28_N8S21142C6D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S21142C6D0Ev,_ZTvn12_n28_N8S21142C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt8S21142C88S21142C7__8S21142C6__8S21142C1[] = {
  ABISELECT(-192,-140),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S21142C6D1Ev,_ZTvn12_n28_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S21142C6D0Ev,_ZTvn12_n28_N8S21142C6D0Ev),
};
extern void ABISELECT(_ZTvn40_n56_N8S21142C6D1Ev,_ZTvn28_n28_N8S21142C6D1Ev)();
extern void ABISELECT(_ZTvn40_n56_N8S21142C6D0Ev,_ZTvn28_n28_N8S21142C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S21142C108S21142C88S21142C7__A1__8S21142C6__8S21142C1[] = {
  ABISELECT(-216,-156),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n56_N8S21142C6D1Ev,_ZTvn28_n28_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n56_N8S21142C6D0Ev,_ZTvn28_n28_N8S21142C6D0Ev),
};
extern void ABISELECT(_ZTvn88_n56_N8S21142C6D1Ev,_ZTvn64_n28_N8S21142C6D1Ev)();
extern void ABISELECT(_ZTvn88_n56_N8S21142C6D0Ev,_ZTvn64_n28_N8S21142C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21142C98S21142C7__A1__8S21142C6__8S21142C1[] = {
  ABISELECT(-288,-204),
  ABISELECT(16,8),
  ABISELECT(-264,-192),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n56_N8S21142C6D1Ev,_ZTvn64_n28_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n56_N8S21142C6D0Ev,_ZTvn64_n28_N8S21142C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C6D1Ev,_ZTv0_n12_N8S21142C6D1Ev)();
extern void ABISELECT(_ZThn312_N8S21142C6D1Ev,_ZThn228_N8S21142C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C6D0Ev,_ZTv0_n12_N8S21142C6D0Ev)();
extern void ABISELECT(_ZThn312_N8S21142C6D0Ev,_ZThn228_N8S21142C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__A1__8S21142C6__8S21142C1[] = {
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C6D1Ev,_ZTv0_n12_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C6D0Ev,_ZTv0_n12_N8S21142C6D0Ev),
};
extern void ABISELECT(_ZTv0_n80_N8S21142C6D1Ev,_ZTv0_n40_N8S21142C6D1Ev)();
extern void ABISELECT(_ZThn336_N8S21142C6D1Ev,_ZThn244_N8S21142C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S21142C6D0Ev,_ZTv0_n40_N8S21142C6D0Ev)();
extern void ABISELECT(_ZThn336_N8S21142C6D0Ev,_ZThn244_N8S21142C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C12__8S21142C6__8S21142C1[] = {
  ABISELECT(-336,-244),
  ABISELECT(-480,-332),
  ABISELECT(-24,-16),
  ABISELECT(56,36),
  ABISELECT(16,4),
  ABISELECT(-56,-44),
  ABISELECT(-64,-48),
  ABISELECT(-360,-256),
  ABISELECT(-336,-244),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S21142C6D1Ev,_ZTv0_n40_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S21142C6D0Ev,_ZTv0_n40_N8S21142C6D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N8S21142C6D1Ev,_ZTv0_n36_N8S21142C6D1Ev)();
extern void ABISELECT(_ZThn352_N8S21142C6D1Ev,_ZThn248_N8S21142C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S21142C6D0Ev,_ZTv0_n36_N8S21142C6D0Ev)();
extern void ABISELECT(_ZThn352_N8S21142C6D0Ev,_ZThn248_N8S21142C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C13__8S21142C6__8S21142C1[] = {
  ABISELECT(-352,-248),
  ABISELECT(-496,-336),
  ABISELECT(-376,-260),
  ABISELECT(-72,-48),
  ABISELECT(-80,-52),
  ABISELECT(-40,-20),
  ABISELECT(40,32),
  ABISELECT(-352,-248),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S21142C6D1Ev,_ZTv0_n36_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S21142C6D0Ev,_ZTv0_n36_N8S21142C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21142C6D1Ev,_ZTv0_n16_N8S21142C6D1Ev)();
extern void ABISELECT(_ZThn392_N8S21142C6D1Ev,_ZThn280_N8S21142C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21142C6D0Ev,_ZTv0_n16_N8S21142C6D0Ev)();
extern void ABISELECT(_ZThn392_N8S21142C6D0Ev,_ZThn280_N8S21142C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C15__8S21142C6__8S21142C1[] = {
  ABISELECT(-392,-280),
  ABISELECT(-80,-52),
  ABISELECT(-392,-280),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C6D1Ev,_ZTv0_n16_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C6D0Ev,_ZTv0_n16_N8S21142C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21142C6D1Ev,_ZTv0_n16_N8S21142C6D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S21142C6D0Ev,_ZTv0_n16_N8S21142C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21142C3__A1__8S21142C6__8S21142C1[] = {
  ABISELECT(144,88),
  ABISELECT(120,76),
  ABISELECT(144,88),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C6D1Ev,_ZTv0_n16_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C6D0Ev,_ZTv0_n16_N8S21142C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21142C6D1Ev,_ZTv0_n16_N8S21142C6D1Ev)();
extern void ABISELECT(_ZThn416_N8S21142C6D1Ev,_ZThn292_N8S21142C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21142C6D0Ev,_ZTv0_n16_N8S21142C6D0Ev)();
extern void ABISELECT(_ZThn416_N8S21142C6D0Ev,_ZThn292_N8S21142C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C17__8S21142C6__8S21142C1[] = {
  ABISELECT(-416,-292),
  ABISELECT(-440,-304),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI8S21142C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C6D1Ev,_ZTv0_n16_N8S21142C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21142C6D0Ev,_ZTv0_n16_N8S21142C6D0Ev),
};
extern void _ZN8S21142C7D1Ev();
extern void _ZN8S21142C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C7__8S21142C1[] = {
  ABISELECT(136,100),
  ABISELECT(-200,-140),
  ABISELECT(104,72),
  ABISELECT(96,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C7[0]),
  (VTBL_ENTRY)&_ZN8S21142C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C7D0Ev,
};
extern void _ZN8S21142C8D1Ev();
extern void _ZN8S21142C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C88S21142C7__8S21142C1[] = {
  ABISELECT(-200,-140),
  ABISELECT(104,72),
  ABISELECT(96,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&_ZN8S21142C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S21142C8D1Ev,_ZTv0_n20_N8S21142C8D1Ev)();
extern void ABISELECT(_ZThn96_N8S21142C8D1Ev,_ZThn68_N8S21142C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21142C8D0Ev,_ZTv0_n20_N8S21142C8D0Ev)();
extern void ABISELECT(_ZThn96_N8S21142C8D0Ev,_ZThn68_N8S21142C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21142C9__8S21142C88S21142C7__8S21142C1[] = {
  ABISELECT(-96,-68),
  ABISELECT(-296,-208),
  ABISELECT(8,4),
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C8D1Ev,_ZTv0_n20_N8S21142C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C8D0Ev,_ZTv0_n20_N8S21142C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev)();
extern void ABISELECT(_ZThn104_N8S21142C8D1Ev,_ZThn72_N8S21142C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev)();
extern void ABISELECT(_ZThn104_N8S21142C8D0Ev,_ZThn72_N8S21142C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__8S21142C88S21142C7__8S21142C1[] = {
  ABISELECT(-104,-72),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S21142C88S21142C7__8S21142C1[] = {
  ABISELECT(200,140),
  ABISELECT(200,140),
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev),
};
extern void _ZN8S21142C9D1Ev();
extern void _ZN8S21142C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C98S21142C7__A1__8S21142C1[] = {
  ABISELECT(-288,-204),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&_ZN8S21142C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S21142C9D1Ev,_ZThn8_N8S21142C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S21142C9D0Ev,_ZThn8_N8S21142C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__8S21142C98S21142C7__A1__8S21142C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S21142C98S21142C7__A1__8S21142C1[] = {
  ABISELECT(288,204),
  ABISELECT(288,204),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21142C7D1Ev,_ZTv0_n20_N8S21142C7D1Ev)();
extern void ABISELECT(_ZThn96_N8S21142C7D1Ev,_ZThn68_N8S21142C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21142C7D0Ev,_ZTv0_n20_N8S21142C7D0Ev)();
extern void ABISELECT(_ZThn96_N8S21142C7D0Ev,_ZThn68_N8S21142C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21142C9__8S21142C7__8S21142C1[] = {
  ABISELECT(-96,-68),
  ABISELECT(-296,-208),
  ABISELECT(8,4),
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI8S21142C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C7D1Ev,_ZTv0_n20_N8S21142C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C7D0Ev,_ZTv0_n20_N8S21142C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C7D1Ev,_ZTv0_n12_N8S21142C7D1Ev)();
extern void ABISELECT(_ZThn104_N8S21142C7D1Ev,_ZThn72_N8S21142C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C7D0Ev,_ZTv0_n12_N8S21142C7D0Ev)();
extern void ABISELECT(_ZThn104_N8S21142C7D0Ev,_ZThn72_N8S21142C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__8S21142C7__8S21142C1[] = {
  ABISELECT(-104,-72),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI8S21142C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C7D1Ev,_ZTv0_n12_N8S21142C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C7D0Ev,_ZTv0_n12_N8S21142C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C7D1Ev,_ZTv0_n12_N8S21142C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21142C7D0Ev,_ZTv0_n12_N8S21142C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S21142C7__8S21142C1[] = {
  ABISELECT(200,140),
  ABISELECT(200,140),
  (VTBL_ENTRY)&(_ZTI8S21142C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C7D1Ev,_ZTv0_n12_N8S21142C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C7D0Ev,_ZTv0_n12_N8S21142C7D0Ev),
};
extern void ABISELECT(_ZThn88_N8S21142C7D1Ev,_ZThn64_N8S21142C7D1Ev)();
extern void ABISELECT(_ZThn88_N8S21142C7D0Ev,_ZThn64_N8S21142C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21142C9__A__8S21142C7__8S21142C1[] = {
  ABISELECT(-288,-204),
  ABISELECT(16,8),
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI8S21142C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N8S21142C7D1Ev,_ZThn64_N8S21142C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N8S21142C7D0Ev,_ZThn64_N8S21142C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C7D1Ev,_ZTv0_n12_N8S21142C7D1Ev)();
extern void ABISELECT(_ZThn136_N8S21142C7D1Ev,_ZThn100_N8S21142C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C7D0Ev,_ZTv0_n12_N8S21142C7D0Ev)();
extern void ABISELECT(_ZThn136_N8S21142C7D0Ev,_ZThn100_N8S21142C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__A1__8S21142C7__8S21142C1[] = {
  ABISELECT(-136,-100),
  ABISELECT(-136,-100),
  (VTBL_ENTRY)&(_ZTI8S21142C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C7D1Ev,_ZTv0_n12_N8S21142C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C7D0Ev,_ZTv0_n12_N8S21142C7D0Ev),
};
extern void _ZN8S21142C9D1Ev();
extern void _ZN8S21142C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C9__8S21142C1[] = {
  ABISELECT(-296,-208),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&_ZN8S21142C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZThn8_N8S21142C9D1Ev,_ZThn4_N8S21142C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
extern void ABISELECT(_ZThn8_N8S21142C9D0Ev,_ZThn4_N8S21142C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C10__8S21142C9__8S21142C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S21142C9__8S21142C1[] = {
  ABISELECT(296,208),
  ABISELECT(296,208),
  (VTBL_ENTRY)&(_ZTI8S21142C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev),
};
extern void _ZN9S21142C12D1Ev();
extern void _ZN9S21142C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21142C12__8S21142C1[] = {
  ABISELECT(-480,-332),
  ABISELECT(-24,-16),
  ABISELECT(56,36),
  ABISELECT(16,4),
  ABISELECT(-56,-44),
  ABISELECT(-64,-48),
  ABISELECT(-360,-256),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&_ZN9S21142C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C12D0Ev,
};
extern void _ZN8S21142C3D1Ev();
extern void _ZN8S21142C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C39S21142C12__A1__8S21142C1[] = {
  ABISELECT(-360,-256),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C3[0]),
  (VTBL_ENTRY)&_ZN8S21142C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21142C3D1Ev,_ZTv0_n12_N8S21142C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21142C3D0Ev,_ZTv0_n12_N8S21142C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S21142C39S21142C12__A1__8S21142C1[] = {
  ABISELECT(360,256),
  ABISELECT(360,256),
  (VTBL_ENTRY)&(_ZTI8S21142C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C3D1Ev,_ZTv0_n12_N8S21142C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C3D0Ev,_ZTv0_n12_N8S21142C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21142C12D1Ev,_ZTv0_n20_N9S21142C12D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S21142C12D0Ev,_ZTv0_n20_N9S21142C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21142C9__9S21142C12__8S21142C1[] = {
  ABISELECT(64,48),
  ABISELECT(-296,-208),
  ABISELECT(8,4),
  ABISELECT(64,48),
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C12D1Ev,_ZTv0_n20_N9S21142C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C12D0Ev,_ZTv0_n20_N9S21142C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C12D1Ev,_ZTv0_n12_N9S21142C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C12D0Ev,_ZTv0_n12_N9S21142C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S21142C10__9S21142C12__8S21142C1[] = {
  ABISELECT(56,44),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C12D1Ev,_ZTv0_n12_N9S21142C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C12D0Ev,_ZTv0_n12_N9S21142C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C12D1Ev,_ZTv0_n12_N9S21142C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C12D0Ev,_ZTv0_n12_N9S21142C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__9S21142C12__8S21142C1[] = {
  ABISELECT(360,256),
  ABISELECT(360,256),
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C12D1Ev,_ZTv0_n12_N9S21142C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C12D0Ev,_ZTv0_n12_N9S21142C12D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N9S21142C12D1Ev,_ZTv0_n36_N9S21142C12D1Ev)();
extern void ABISELECT(_ZThn16_N9S21142C12D1Ev,_ZThn4_N9S21142C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S21142C12D0Ev,_ZTv0_n36_N9S21142C12D0Ev)();
extern void ABISELECT(_ZThn16_N9S21142C12D0Ev,_ZThn4_N9S21142C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C13__9S21142C12__8S21142C1[] = {
  ABISELECT(-16,-4),
  ABISELECT(-496,-336),
  ABISELECT(-376,-260),
  ABISELECT(-72,-48),
  ABISELECT(-80,-52),
  ABISELECT(-40,-20),
  ABISELECT(40,32),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S21142C12D1Ev,_ZTv0_n36_N9S21142C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S21142C12D0Ev,_ZTv0_n36_N9S21142C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21142C12D1Ev,_ZTv0_n16_N9S21142C12D1Ev)();
extern void ABISELECT(_ZThn56_N9S21142C12D1Ev,_ZThn36_N9S21142C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C12D0Ev,_ZTv0_n16_N9S21142C12D0Ev)();
extern void ABISELECT(_ZThn56_N9S21142C12D0Ev,_ZThn36_N9S21142C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C15__9S21142C12__8S21142C1[] = {
  ABISELECT(-56,-36),
  ABISELECT(-80,-52),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C12D1Ev,_ZTv0_n16_N9S21142C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C12D0Ev,_ZTv0_n16_N9S21142C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C12D1Ev,_ZTv0_n12_N9S21142C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C12D0Ev,_ZTv0_n12_N9S21142C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__9S21142C12__8S21142C1[] = {
  ABISELECT(24,16),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C12D1Ev,_ZTv0_n12_N9S21142C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C12D0Ev,_ZTv0_n12_N9S21142C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21142C12D1Ev,_ZTv0_n16_N9S21142C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S21142C12D0Ev,_ZTv0_n16_N9S21142C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21142C3__A1__9S21142C12__8S21142C1[] = {
  ABISELECT(480,332),
  ABISELECT(120,76),
  ABISELECT(480,332),
  (VTBL_ENTRY)&(_ZTI9S21142C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C12D1Ev,_ZTv0_n16_N9S21142C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C12D0Ev,_ZTv0_n16_N9S21142C12D0Ev),
};
extern void _ZN9S21142C13D1Ev();
extern void _ZN9S21142C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21142C13__8S21142C1[] = {
  ABISELECT(-496,-336),
  ABISELECT(-376,-260),
  ABISELECT(-72,-48),
  ABISELECT(-80,-52),
  ABISELECT(-40,-20),
  ABISELECT(40,32),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&_ZN9S21142C13D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C13D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev)();
extern void ABISELECT(_ZThn40_N9S21142C13D1Ev,_ZThn32_N9S21142C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev)();
extern void ABISELECT(_ZThn40_N9S21142C13D0Ev,_ZThn32_N9S21142C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21142C15__9S21142C13__8S21142C1[] = {
  ABISELECT(-40,-32),
  ABISELECT(-80,-52),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__9S21142C13__8S21142C1[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21142C13D1Ev,_ZTv0_n20_N9S21142C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S21142C13D0Ev,_ZTv0_n20_N9S21142C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21142C9__9S21142C13__8S21142C1[] = {
  ABISELECT(80,52),
  ABISELECT(-296,-208),
  ABISELECT(8,4),
  ABISELECT(80,52),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C13D1Ev,_ZTv0_n20_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21142C13D0Ev,_ZTv0_n20_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S21142C10__9S21142C13__8S21142C1[] = {
  ABISELECT(72,48),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__9S21142C13__8S21142C1[] = {
  ABISELECT(376,260),
  ABISELECT(376,260),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21142C3__9S21142C13__8S21142C1[] = {
  ABISELECT(496,336),
  ABISELECT(120,76),
  ABISELECT(496,336),
  (VTBL_ENTRY)&(_ZTI9S21142C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev),
};
extern void _ZN9S21142C15D1Ev();
extern void _ZN9S21142C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21142C15__8S21142C1[] = {
  ABISELECT(-80,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C15[0]),
  (VTBL_ENTRY)&_ZN9S21142C15D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C15D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21142C15D1Ev,_ZTv0_n12_N9S21142C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C15D0Ev,_ZTv0_n12_N9S21142C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__9S21142C15__8S21142C1[] = {
  ABISELECT(80,52),
  ABISELECT(80,52),
  (VTBL_ENTRY)&(_ZTI9S21142C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C15D1Ev,_ZTv0_n12_N9S21142C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C15D0Ev,_ZTv0_n12_N9S21142C15D0Ev),
};
extern void _ZN9S21142C17D1Ev();
extern void _ZN9S21142C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21142C17__8S21142C1[] = {
  ABISELECT(-440,-304),
  0,
  (VTBL_ENTRY)&(_ZTI9S21142C17[0]),
  (VTBL_ENTRY)&_ZN9S21142C17D1Ev,
  (VTBL_ENTRY)&_ZN9S21142C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21142C17D1Ev,_ZTv0_n12_N9S21142C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21142C17D0Ev,_ZTv0_n12_N9S21142C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__9S21142C17__8S21142C1[] = {
  ABISELECT(440,304),
  ABISELECT(440,304),
  (VTBL_ENTRY)&(_ZTI9S21142C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C17D1Ev,_ZTv0_n12_N9S21142C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21142C17D0Ev,_ZTv0_n12_N9S21142C17D0Ev),
};
extern void _ZN8S21142C8D1Ev();
extern void _ZN8S21142C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21142C8__A1__8S21142C1[] = {
  ABISELECT(-456,-316),
  ABISELECT(-152,-104),
  ABISELECT(-160,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&_ZN8S21142C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21142C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S21142C8D1Ev,_ZTv0_n20_N8S21142C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S21142C8D0Ev,_ZTv0_n20_N8S21142C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21142C9__8S21142C8__A1__8S21142C1[] = {
  ABISELECT(160,108),
  ABISELECT(-296,-208),
  ABISELECT(8,4),
  ABISELECT(160,108),
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C8D1Ev,_ZTv0_n20_N8S21142C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21142C8D0Ev,_ZTv0_n20_N8S21142C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S21142C10__8S21142C8__A1__8S21142C1[] = {
  ABISELECT(152,104),
  ABISELECT(152,104),
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__8S21142C8__A1__8S21142C1[] = {
  ABISELECT(456,316),
  ABISELECT(456,316),
  (VTBL_ENTRY)&(_ZTI8S21142C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev),
};
static  VTT_ENTRY vtt_S21142C1[] = {
  {&(_ZTV8S21142C1[16]),  16,146},
  {&(_ZTV8S21142C1[33]),  33,146},
  {&(_ZTV8S21142C1[16]),  16,146},
  {&(_ZTV8S21142C1[38]),  38,146},
  {&(_ZTV8S21142C1[53]),  53,146},
  {&(_ZTV8S21142C1[62]),  62,146},
  {&(_ZTV8S21142C1[83]),  83,146},
  {&(_ZTV8S21142C1[88]),  88,146},
  {&(_ZTV8S21142C1[66]),  66,146},
  {&(_ZTV8S21142C1[70]),  70,146},
  {&(_ZTV8S21142C1[76]),  76,146},
  {&(_ZTV8S21142C1[93]),  93,146},
  {&(_ZTV8S21142C1[105]),  105,146},
  {&(_ZTV8S21142C1[116]),  116,146},
  {&(_ZTV8S21142C1[122]),  122,146},
  {&(_ZTV8S21142C1[128]),  128,146},
  {&(_ZTV8S21142C1[136]),  136,146},
  {&(_ZTV8S21142C1[140]),  140,146},
  {&(_ZTV8S21142C1[144]),  144,146},
  {&(_tg__ZTV8S21142C2__8S21142C1[14]),  14,16},
  {&(_tg__ZTV9S21142C198S21142C2__8S21142C1[8]),  8,10},
  {&(_tg__ZTV9S21142C139S21142C198S21142C2__A1__8S21142C1[8]),  8,10},
  {&(_tg__ZTV9S21142C15__9S21142C139S21142C198S21142C2__A1__8S21142C1[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__9S21142C139S21142C198S21142C2__A1__8S21142C1[3]),  3,5},
  {&(_tg__ZTV8S21142C9__9S21142C139S21142C198S21142C2__A1__8S21142C1[5]),  5,7},
  {&(_tg__ZTV9S21142C10__9S21142C139S21142C198S21142C2__A1__8S21142C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__9S21142C139S21142C198S21142C2__A1__8S21142C1[3]),  3,5},
  {&(_tg__ZTV8S21142C3__9S21142C139S21142C198S21142C2__A1__8S21142C1[4]),  4,6},
  {&(_tg__ZTV9S21142C15__9S21142C198S21142C2__8S21142C1[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__9S21142C198S21142C2__8S21142C1[3]),  3,5},
  {&(_tg__ZTV8S21142C9__9S21142C198S21142C2__8S21142C1[5]),  5,7},
  {&(_tg__ZTV9S21142C10__9S21142C198S21142C2__8S21142C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__9S21142C198S21142C2__8S21142C1[3]),  3,5},
  {&(_tg__ZTV8S21142C3__9S21142C198S21142C2__8S21142C1[4]),  4,6},
  {&(_tg__ZTV8S21142C3__8S21142C2__8S21142C1[4]),  4,6},
  {&(_tg__ZTV7S3589C3__8S21142C2__8S21142C1[3]),  3,5},
  {&(_tg__ZTV8S21142C6__8S21142C2__8S21142C1[13]),  13,15},
  {&(_tg__ZTV8S21142C7__8S21142C2__8S21142C1[7]),  7,9},
  {&(_tg__ZTV8S21142C9__8S21142C2__8S21142C1[5]),  5,7},
  {&(_tg__ZTV9S21142C10__8S21142C2__8S21142C1[3]),  3,5},
  {&(_tg__ZTV10S3589C9_nt8S21142C88S21142C7__8S21142C2__8S21142C1[2]),  2,4},
  {&(_tg__ZTV9S21142C108S21142C88S21142C7__A1__8S21142C2__8S21142C1[2]),  2,4},
  {&(_tg__ZTV8S21142C98S21142C7__A1__8S21142C2__8S21142C1[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__A1__8S21142C2__8S21142C1[3]),  3,5},
  {&(_tg__ZTV9S21142C12__8S21142C2__8S21142C1[10]),  10,12},
  {&(_tg__ZTV9S21142C13__8S21142C2__8S21142C1[9]),  9,11},
  {&(_tg__ZTV9S21142C15__8S21142C2__8S21142C1[4]),  4,6},
  {&(_tg__ZTV9S21142C17__8S21142C2__8S21142C1[4]),  4,6},
  {&(_tg__ZTV8S21142C8__A1__8S21142C2__8S21142C1[6]),  6,8},
  {&(_tg__ZTV10S3589C9_nt8S21142C8__A2__8S21142C2__8S21142C1[2]),  2,4},
  {&(_tg__ZTV9S21142C108S21142C8__A2__8S21142C2__8S21142C1[2]),  2,4},
  {&(_tg__ZTV8S21142C3__8S21142C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__8S21142C3__8S21142C1[3]),  3,5},
  {&(_tg__ZTV8S21142C6__8S21142C1[12]),  12,14},
  {&(_tg__ZTV9S21142C168S21142C6__8S21142C1[5]),  5,7},
  {&(_tg__ZTV8S21142C99S21142C168S21142C6__A2__8S21142C1[4]),  4,6},
  {&(_tg__ZTV9S21142C10__8S21142C99S21142C168S21142C6__A2__8S21142C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S21142C99S21142C168S21142C6__A2__8S21142C1[3]),  3,5},
  {&(_tg__ZTV9S21142C10__9S21142C168S21142C6__8S21142C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__9S21142C168S21142C6__8S21142C1[3]),  3,5},
  {&(_tg__ZTV9S21142C17__9S21142C168S21142C6__8S21142C1[4]),  4,6},
  {&(_tg__ZTV8S21142C7__8S21142C6__8S21142C1[7]),  7,9},
  {&(_tg__ZTV8S21142C9__8S21142C6__8S21142C1[5]),  5,7},
  {&(_tg__ZTV9S21142C10__8S21142C6__8S21142C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S21142C6__8S21142C1[3]),  3,5},
  {&(_tg__ZTV10S3589C9_nt8S21142C88S21142C7__8S21142C6__8S21142C1[2]),  2,4},
  {&(_tg__ZTV9S21142C108S21142C88S21142C7__A1__8S21142C6__8S21142C1[2]),  2,4},
  {&(_tg__ZTV8S21142C98S21142C7__A1__8S21142C6__8S21142C1[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__A1__8S21142C6__8S21142C1[3]),  3,5},
  {&(_tg__ZTV9S21142C12__8S21142C6__8S21142C1[10]),  10,12},
  {&(_tg__ZTV9S21142C13__8S21142C6__8S21142C1[9]),  9,11},
  {&(_tg__ZTV9S21142C15__8S21142C6__8S21142C1[4]),  4,6},
  {&(_tg__ZTV8S21142C3__A1__8S21142C6__8S21142C1[4]),  4,6},
  {&(_tg__ZTV9S21142C17__8S21142C6__8S21142C1[4]),  4,6},
  {&(_tg__ZTV8S21142C7__8S21142C1[6]),  6,8},
  {&(_tg__ZTV8S21142C88S21142C7__8S21142C1[5]),  5,7},
  {&(_tg__ZTV8S21142C9__8S21142C88S21142C7__8S21142C1[5]),  5,7},
  {&(_tg__ZTV9S21142C10__8S21142C88S21142C7__8S21142C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S21142C88S21142C7__8S21142C1[3]),  3,5},
  {&(_tg__ZTV8S21142C98S21142C7__A1__8S21142C1[4]),  4,6},
  {&(_tg__ZTV9S21142C10__8S21142C98S21142C7__A1__8S21142C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S21142C98S21142C7__A1__8S21142C1[3]),  3,5},
  {&(_tg__ZTV8S21142C9__8S21142C7__8S21142C1[5]),  5,7},
  {&(_tg__ZTV9S21142C10__8S21142C7__8S21142C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S21142C7__8S21142C1[3]),  3,5},
  {&(_tg__ZTV8S21142C9__A__8S21142C7__8S21142C1[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__A1__8S21142C7__8S21142C1[3]),  3,5},
  {&(_tg__ZTV8S21142C9__8S21142C1[4]),  4,6},
  {&(_tg__ZTV9S21142C10__8S21142C9__8S21142C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S21142C9__8S21142C1[3]),  3,5},
  {&(_tg__ZTV9S21142C12__8S21142C1[9]),  9,11},
  {&(_tg__ZTV8S21142C39S21142C12__A1__8S21142C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__8S21142C39S21142C12__A1__8S21142C1[3]),  3,5},
  {&(_tg__ZTV8S21142C9__9S21142C12__8S21142C1[5]),  5,7},
  {&(_tg__ZTV9S21142C10__9S21142C12__8S21142C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__9S21142C12__8S21142C1[3]),  3,5},
  {&(_tg__ZTV9S21142C13__9S21142C12__8S21142C1[9]),  9,11},
  {&(_tg__ZTV9S21142C15__9S21142C12__8S21142C1[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__9S21142C12__8S21142C1[3]),  3,5},
  {&(_tg__ZTV8S21142C3__A1__9S21142C12__8S21142C1[4]),  4,6},
  {&(_tg__ZTV9S21142C13__8S21142C1[8]),  8,10},
  {&(_tg__ZTV9S21142C15__9S21142C13__8S21142C1[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__9S21142C13__8S21142C1[3]),  3,5},
  {&(_tg__ZTV8S21142C9__9S21142C13__8S21142C1[5]),  5,7},
  {&(_tg__ZTV9S21142C10__9S21142C13__8S21142C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__9S21142C13__8S21142C1[3]),  3,5},
  {&(_tg__ZTV8S21142C3__9S21142C13__8S21142C1[4]),  4,6},
  {&(_tg__ZTV9S21142C15__8S21142C1[3]),  3,5},
  {&(_tg__ZTV10S3589C9_nt__9S21142C15__8S21142C1[3]),  3,5},
  {&(_tg__ZTV9S21142C17__8S21142C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__9S21142C17__8S21142C1[3]),  3,5},
  {&(_tg__ZTV8S21142C8__A1__8S21142C1[5]),  5,7},
  {&(_tg__ZTV8S21142C9__8S21142C8__A1__8S21142C1[5]),  5,7},
  {&(_tg__ZTV9S21142C10__8S21142C8__A1__8S21142C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__8S21142C8__A1__8S21142C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21142C1[];
extern  VTBL_ENTRY _ZTV8S21142C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21142C1[];
static VTBL_ENTRY alt_thunk_names66[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C12D0Ev,_ZTv0_n16_N9S21142C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S21142C12D0Ev,_ZThn36_N9S21142C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C12D1Ev,_ZTv0_n16_N9S21142C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S21142C12D1Ev,_ZThn36_N9S21142C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S21142C12D0Ev,_ZTv0_n36_N9S21142C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21142C12D0Ev,_ZThn4_N9S21142C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S21142C12D1Ev,_ZTv0_n36_N9S21142C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21142C12D1Ev,_ZThn4_N9S21142C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C7D0Ev,_ZTv0_n12_N8S21142C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S21142C7D0Ev,_ZThn100_N8S21142C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21142C7D0Ev,_ZThn72_N8S21142C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C7D1Ev,_ZTv0_n12_N8S21142C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S21142C7D1Ev,_ZThn100_N8S21142C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21142C7D1Ev,_ZThn72_N8S21142C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C7D0Ev,_ZTv0_n20_N8S21142C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S21142C7D0Ev,_ZThn68_N8S21142C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C7D1Ev,_ZTv0_n20_N8S21142C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S21142C7D1Ev,_ZThn68_N8S21142C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C8D0Ev,_ZTv0_n12_N8S21142C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21142C8D0Ev,_ZThn72_N8S21142C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C8D1Ev,_ZTv0_n12_N8S21142C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21142C8D1Ev,_ZThn72_N8S21142C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C8D0Ev,_ZTv0_n20_N8S21142C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S21142C8D0Ev,_ZThn68_N8S21142C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C8D1Ev,_ZTv0_n20_N8S21142C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S21142C8D1Ev,_ZThn68_N8S21142C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21142C6D0Ev,_ZTv0_n16_N8S21142C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N8S21142C6D0Ev,_ZThn292_N8S21142C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn392_N8S21142C6D0Ev,_ZThn280_N8S21142C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21142C6D1Ev,_ZTv0_n16_N8S21142C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N8S21142C6D1Ev,_ZThn292_N8S21142C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn392_N8S21142C6D1Ev,_ZThn280_N8S21142C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S21142C6D0Ev,_ZTv0_n36_N8S21142C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S21142C6D0Ev,_ZThn248_N8S21142C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S21142C6D1Ev,_ZTv0_n36_N8S21142C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S21142C6D1Ev,_ZThn248_N8S21142C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S21142C6D0Ev,_ZTv0_n40_N8S21142C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S21142C6D0Ev,_ZThn244_N8S21142C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S21142C6D1Ev,_ZTv0_n40_N8S21142C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S21142C6D1Ev,_ZThn244_N8S21142C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C6D0Ev,_ZTv0_n12_N8S21142C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21142C6D0Ev,_ZThn228_N8S21142C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S21142C6D0Ev,_ZThn200_N8S21142C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C6D1Ev,_ZTv0_n12_N8S21142C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21142C6D1Ev,_ZThn228_N8S21142C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S21142C6D1Ev,_ZThn200_N8S21142C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C6D0Ev,_ZTv0_n20_N8S21142C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S21142C6D0Ev,_ZThn196_N8S21142C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C6D1Ev,_ZTv0_n20_N8S21142C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S21142C6D1Ev,_ZThn196_N8S21142C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21142C6D0Ev,_ZTv0_n28_N8S21142C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S21142C6D0Ev,_ZThn128_N8S21142C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21142C6D1Ev,_ZTv0_n28_N8S21142C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S21142C6D1Ev,_ZThn128_N8S21142C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C16D0Ev,_ZTv0_n16_N9S21142C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N9S21142C16D0Ev,_ZThn292_N9S21142C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C16D1Ev,_ZTv0_n16_N9S21142C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N9S21142C16D1Ev,_ZThn292_N9S21142C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C16D0Ev,_ZTv0_n12_N9S21142C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N9S21142C16D0Ev,_ZThn200_N9S21142C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C16D1Ev,_ZTv0_n12_N9S21142C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N9S21142C16D1Ev,_ZThn200_N9S21142C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C9D0Ev,_ZTv0_n12_N8S21142C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21142C9D0Ev,_ZThn4_N8S21142C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21142C9D0Ev,_ZThn8_N8S21142C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S21142C9D0Ev,_ZThn200_N8S21142C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C9D1Ev,_ZTv0_n12_N8S21142C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21142C9D1Ev,_ZThn4_N8S21142C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21142C9D1Ev,_ZThn8_N8S21142C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S21142C9D1Ev,_ZThn200_N8S21142C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C3D0Ev,_ZTv0_n12_N8S21142C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S21142C3D0Ev,_ZThn76_N8S21142C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C3D1Ev,_ZTv0_n12_N8S21142C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S21142C3D1Ev,_ZThn76_N8S21142C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21142C2D0Ev,_ZTv0_n24_N8S21142C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N8S21142C2D0Ev,_ZThn388_N8S21142C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21142C2D1Ev,_ZTv0_n24_N8S21142C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N8S21142C2D1Ev,_ZThn388_N8S21142C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21142C2D0Ev,_ZTv0_n16_N8S21142C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N8S21142C2D0Ev,_ZThn376_N8S21142C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn520_N8S21142C2D0Ev,_ZThn364_N8S21142C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21142C2D1Ev,_ZTv0_n16_N8S21142C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N8S21142C2D1Ev,_ZThn376_N8S21142C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn520_N8S21142C2D1Ev,_ZThn364_N8S21142C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S21142C2D0Ev,_ZTv0_n36_N8S21142C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S21142C2D0Ev,_ZThn332_N8S21142C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S21142C2D1Ev,_ZTv0_n36_N8S21142C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S21142C2D1Ev,_ZThn332_N8S21142C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S21142C2D0Ev,_ZTv0_n40_N8S21142C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N8S21142C2D0Ev,_ZThn328_N8S21142C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S21142C2D1Ev,_ZTv0_n40_N8S21142C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N8S21142C2D1Ev,_ZThn328_N8S21142C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C2D0Ev,_ZTv0_n20_N8S21142C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N8S21142C2D0Ev,_ZThn280_N8S21142C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C2D1Ev,_ZTv0_n20_N8S21142C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N8S21142C2D1Ev,_ZThn280_N8S21142C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21142C2D0Ev,_ZTv0_n28_N8S21142C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S21142C2D0Ev,_ZThn212_N8S21142C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21142C2D1Ev,_ZTv0_n28_N8S21142C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S21142C2D1Ev,_ZThn212_N8S21142C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S21142C2D0Ev,_ZTv0_n52_N8S21142C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S21142C2D0Ev,_ZThn84_N8S21142C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S21142C2D1Ev,_ZTv0_n52_N8S21142C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S21142C2D1Ev,_ZThn84_N8S21142C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C2D0Ev,_ZTv0_n12_N8S21142C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N8S21142C2D0Ev,_ZThn312_N8S21142C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn408_N8S21142C2D0Ev,_ZThn284_N8S21142C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21142C2D0Ev,_ZThn72_N8S21142C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C2D1Ev,_ZTv0_n12_N8S21142C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N8S21142C2D1Ev,_ZThn312_N8S21142C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn408_N8S21142C2D1Ev,_ZThn284_N8S21142C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21142C2D1Ev,_ZThn72_N8S21142C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21142C19D0Ev,_ZTv0_n20_N9S21142C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N9S21142C19D0Ev,_ZThn280_N9S21142C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21142C19D1Ev,_ZTv0_n20_N9S21142C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N9S21142C19D1Ev,_ZThn280_N9S21142C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C19D0Ev,_ZTv0_n12_N9S21142C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S21142C19D0Ev,_ZThn72_N9S21142C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn408_N9S21142C19D0Ev,_ZThn284_N9S21142C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N9S21142C19D0Ev,_ZThn312_N9S21142C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C19D1Ev,_ZTv0_n12_N9S21142C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S21142C19D1Ev,_ZThn72_N9S21142C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn408_N9S21142C19D1Ev,_ZThn284_N9S21142C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N9S21142C19D1Ev,_ZThn312_N9S21142C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C19D0Ev,_ZTv0_n16_N9S21142C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N9S21142C19D0Ev,_ZThn364_N9S21142C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C19D1Ev,_ZTv0_n16_N9S21142C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N9S21142C19D1Ev,_ZThn364_N9S21142C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21142C13D0Ev,_ZTv0_n20_N9S21142C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N9S21142C13D0Ev,_ZThn280_N9S21142C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21142C13D1Ev,_ZTv0_n20_N9S21142C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N9S21142C13D1Ev,_ZThn280_N9S21142C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C13D0Ev,_ZTv0_n12_N9S21142C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S21142C13D0Ev,_ZThn72_N9S21142C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn408_N9S21142C13D0Ev,_ZThn284_N9S21142C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N9S21142C13D0Ev,_ZThn312_N9S21142C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21142C13D1Ev,_ZTv0_n12_N9S21142C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S21142C13D1Ev,_ZThn72_N9S21142C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn408_N9S21142C13D1Ev,_ZThn284_N9S21142C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N9S21142C13D1Ev,_ZThn312_N9S21142C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C13D0Ev,_ZTv0_n16_N9S21142C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S21142C13D0Ev,_ZThn32_N9S21142C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn520_N9S21142C13D0Ev,_ZThn364_N9S21142C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21142C13D1Ev,_ZTv0_n16_N9S21142C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S21142C13D1Ev,_ZThn32_N9S21142C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn520_N9S21142C13D1Ev,_ZThn364_N9S21142C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21142C1D0Ev,_ZTv0_n24_N8S21142C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S21142C1D0Ev,_ZThn392_N8S21142C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21142C1D1Ev,_ZTv0_n24_N8S21142C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S21142C1D1Ev,_ZThn392_N8S21142C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S21142C1D0Ev,_ZTv0_n36_N8S21142C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S21142C1D0Ev,_ZThn336_N8S21142C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S21142C1D1Ev,_ZTv0_n36_N8S21142C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S21142C1D1Ev,_ZThn336_N8S21142C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S21142C1D0Ev,_ZTv0_n40_N8S21142C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S21142C1D0Ev,_ZThn332_N8S21142C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S21142C1D1Ev,_ZTv0_n40_N8S21142C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S21142C1D1Ev,_ZThn332_N8S21142C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C1D0Ev,_ZTv0_n20_N8S21142C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N8S21142C1D0Ev,_ZThn284_N8S21142C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21142C1D1Ev,_ZTv0_n20_N8S21142C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N8S21142C1D1Ev,_ZThn284_N8S21142C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21142C1D0Ev,_ZTv0_n28_N8S21142C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S21142C1D0Ev,_ZThn216_N8S21142C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21142C1D1Ev,_ZTv0_n28_N8S21142C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S21142C1D1Ev,_ZThn216_N8S21142C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S21142C1D0Ev,_ZTv0_n52_N8S21142C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S21142C1D0Ev,_ZThn88_N8S21142C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S21142C1D1Ev,_ZTv0_n52_N8S21142C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S21142C1D1Ev,_ZThn88_N8S21142C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C1D0Ev,_ZTv0_n12_N8S21142C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn456_N8S21142C1D0Ev,_ZThn316_N8S21142C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn424_N8S21142C1D0Ev,_ZThn288_N8S21142C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S21142C1D0Ev,_ZThn76_N8S21142C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21142C1D1Ev,_ZTv0_n12_N8S21142C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn456_N8S21142C1D1Ev,_ZThn316_N8S21142C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn424_N8S21142C1D1Ev,_ZThn288_N8S21142C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S21142C1D1Ev,_ZThn76_N8S21142C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S21142C1D0Ev,_ZTv0_n60_N8S21142C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21142C1D0Ev,_ZThn4_N8S21142C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S21142C1D1Ev,_ZTv0_n60_N8S21142C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21142C1D1Ev,_ZThn4_N8S21142C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21142C1D0Ev,_ZTv0_n16_N8S21142C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N8S21142C1D0Ev,_ZThn380_N8S21142C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn536_N8S21142C1D0Ev,_ZThn368_N8S21142C1D0Ev),
  (VTBL_ENTRY)_ZN8S21142C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21142C1D1Ev,_ZTv0_n16_N8S21142C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N8S21142C1D1Ev,_ZThn380_N8S21142C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn536_N8S21142C1D1Ev,_ZThn368_N8S21142C1D1Ev),
  (VTBL_ENTRY)_ZN8S21142C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21142C1 = {  "S21142C1", // class name
  bases_S21142C1, 34,
  &(vtc_S21142C1[0]), // expected_vtbl_contents
  &(vtt_S21142C1[0]), // expected_vtt_contents
  ABISELECT(672,456), // object size
  NSPAIRA(_ZTI8S21142C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21142C1),146, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21142C1),115, //virtual table table var
  31, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names66,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7549C3  {
  void *s7549c3f0[2];
  int s7549c3f1;
  short s7549c3f2;
  int s7549c3f3;
  virtual void  v2(); // _ZN7S7549C32v2Ev
  ~S7549C3(); // tgen
  S7549C3(); // tgen
};
//SIG(-1 S7549C3) C1{ v1 Fp[2] Fi Fs Fi}


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

static void Test_S7549C3()
{
  extern Class_Descriptor cd_S7549C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S7549C3, buf);
    S7549C3 *dp, &lv = *(dp=new (buf) S7549C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S7549C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7549C3)");
    check_field_offset(lv, s7549c3f0, ABISELECT(8,4), "S7549C3.s7549c3f0");
    check_field_offset(lv, s7549c3f1, ABISELECT(24,12), "S7549C3.s7549c3f1");
    check_field_offset(lv, s7549c3f2, ABISELECT(28,16), "S7549C3.s7549c3f2");
    check_field_offset(lv, s7549c3f3, ABISELECT(32,20), "S7549C3.s7549c3f3");
    test_class_info(&lv, &cd_S7549C3);
    dp->~S7549C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7549C3(Test_S7549C3, "S7549C3", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S7549C3C1Ev();
extern void _ZN7S7549C3D1Ev();
Name_Map name_map_S7549C3[] = {
  NSPAIR(_ZN7S7549C3C1Ev),
  NSPAIR(_ZN7S7549C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7549C3[];
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY vtc_S7549C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C3[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
Class_Descriptor cd_S7549C3 = {  "S7549C3", // class name
  0,0,//no base classes
  &(vtc_S7549C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S7549C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7549C3),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  S7549C2  : virtual S7549C3 {
  ::S7549C3 s7549c2f0;
  int s7549c2f1[9];
  virtual void  v3(); // _ZN7S7549C22v3Ev
  ~S7549C2(); // tgen
  S7549C2(); // tgen
};
//SIG(-1 S7549C2) C1{ VBC2{ v2 Fp[2] Fi Fs Fi} v1 FC2 Fi[9]}


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

static void Test_S7549C2()
{
  extern Class_Descriptor cd_S7549C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,23)];
    init_test(&cd_S7549C2, buf);
    S7549C2 *dp, &lv = *(dp=new (buf) S7549C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,88), "sizeof(S7549C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7549C2)");
    check_base_class_offset(lv, (S7549C3*), ABISELECT(88,64), "S7549C2");
    check_field_offset(lv, s7549c2f0, ABISELECT(8,4), "S7549C2.s7549c2f0");
    check_field_offset(lv, s7549c2f1, ABISELECT(48,28), "S7549C2.s7549c2f1");
    test_class_info(&lv, &cd_S7549C2);
    dp->~S7549C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7549C2(Test_S7549C2, "S7549C2", ABISELECT(128,88));

#else // __cplusplus

extern void _ZN7S7549C2C1Ev();
extern void _ZN7S7549C2D1Ev();
Name_Map name_map_S7549C2[] = {
  NSPAIR(_ZN7S7549C2C1Ev),
  NSPAIR(_ZN7S7549C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
static Base_Class bases_S7549C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7549C3,    ABISELECT(88,64), //bcp->offset
    4, //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 _ZTI7S7549C2[];
extern void _ZN7S7549C22v3Ev();
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY vtc_S7549C2[] = {
  ABISELECT(88,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  0,
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S7549C2[];
static  VTT_ENTRY vtt_S7549C2[] = {
  {&(_ZTV7S7549C2[3]),  3,8},
  {&(_ZTV7S7549C2[7]),  7,8},
};
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
Class_Descriptor cd_S7549C2 = {  "S7549C2", // class name
  bases_S7549C2, 1,
  &(vtc_S7549C2[0]), // expected_vtbl_contents
  &(vtt_S7549C2[0]), // expected_vtt_contents
  ABISELECT(128,88), // object size
  NSPAIRA(_ZTI7S7549C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7549C2),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7549C2),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  S7549C6  : S7549C2 , S7549C3 {
  ~S7549C6(); // tgen
  S7549C6(); // tgen
};
//SIG(-1 S7549C6) C1{ BC2{ VBC3{ v1 Fp[2] Fi Fs Fi} v2 FC3 Fi[9]} BC3}


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

static void Test_S7549C6()
{
  extern Class_Descriptor cd_S7549C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,29)];
    init_test(&cd_S7549C6, buf);
    S7549C6 *dp, &lv = *(dp=new (buf) S7549C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,112), "sizeof(S7549C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7549C6)");
    check_base_class_offset(lv, (S7549C3*)(S7549C2*), ABISELECT(128,88), "S7549C6");
    check_base_class_offset(lv, (S7549C2*), 0, "S7549C6");
    /*is_ambiguous_... S7549C6::S7549C3 */ AMB_check_base_class_offset(lv, (S7549C3*), ABISELECT(88,64), "S7549C6");
    test_class_info(&lv, &cd_S7549C6);
    dp->~S7549C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7549C6(Test_S7549C6, "S7549C6", ABISELECT(168,112));

#else // __cplusplus

extern void _ZN7S7549C6C1Ev();
extern void _ZN7S7549C6D1Ev();
Name_Map name_map_S7549C6[] = {
  NSPAIR(_ZN7S7549C6C1Ev),
  NSPAIR(_ZN7S7549C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C2;
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
static Base_Class bases_S7549C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7549C3,    ABISELECT(128,88), //bcp->offset
    7, //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_S7549C2,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7549C3,    ABISELECT(88,64), //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 _ZTI7S7549C6[];
extern void _ZN7S7549C22v3Ev();
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY vtc_S7549C6[] = {
  ABISELECT(128,88),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C6[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI7S7549C6[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  0,
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI7S7549C6[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S7549C6[];
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C2__7S7549C6[] = {
  ABISELECT(128,88),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C2__7S7549C6[] = {
  0,
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
static  VTT_ENTRY vtt_S7549C6[] = {
  {&(_ZTV7S7549C6[3]),  3,11},
  {&(_tg__ZTV7S7549C2__7S7549C6[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C2__7S7549C6[3]),  3,4},
  {&(_ZTV7S7549C6[10]),  10,11},
};
extern VTBL_ENTRY _ZTI7S7549C6[];
extern  VTBL_ENTRY _ZTV7S7549C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C6[];
Class_Descriptor cd_S7549C6 = {  "S7549C6", // class name
  bases_S7549C6, 3,
  &(vtc_S7549C6[0]), // expected_vtbl_contents
  &(vtt_S7549C6[0]), // expected_vtt_contents
  ABISELECT(168,112), // object size
  NSPAIRA(_ZTI7S7549C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7549C6),11, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7549C6),4, //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  S7549C8  : S7549C3 , S7549C2 , virtual S7549C6 {
  virtual void  v4(); // _ZN7S7549C82v4Ev
  virtual void  v5(); // _ZN7S7549C82v5Ev
  ~S7549C8(); // tgen
  S7549C8(); // tgen
};
//SIG(-1 S7549C8) C1{ BC2{ v3 Fp[2] Fi Fs Fi} BC3{ VBC2 v4 FC2 Fi[9]} VBC4{ BC3 BC2} v1 v2}


void  S7549C8 ::v4(){vfunc_called(this, "_ZN7S7549C82v4Ev");}
void  S7549C8 ::v5(){vfunc_called(this, "_ZN7S7549C82v5Ev");}
S7549C8 ::~S7549C8(){ note_dtor("S7549C8", this);} // tgen
S7549C8 ::S7549C8(){ note_ctor("S7549C8", this);} // tgen

static void Test_S7549C8()
{
  extern Class_Descriptor cd_S7549C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,51)];
    init_test(&cd_S7549C8, buf);
    S7549C8 *dp, &lv = *(dp=new (buf) S7549C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,200), "sizeof(S7549C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7549C8)");
    /*is_ambiguous_... S7549C8::S7549C3 */ AMB_check_base_class_offset(lv, (S7549C3*), 0, "S7549C8");
    /*is_ambiguous_... S7549C8::S7549C2 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C2*), ABISELECT(128,88), "S7549C8");
    check_base_class_offset(lv, (S7549C3*)(S7549C2*)(S7549C6*), ABISELECT(128,88), "S7549C8");
    /*is_ambiguous_... S7549C8::S7549C2 */ AMB_check_base_class_offset(lv, (S7549C2*), ABISELECT(40,24), "S7549C8");
    check_base_class_offset(lv, (S7549C2*)(S7549C6*), ABISELECT(168,112), "S7549C8");
    /*is_ambiguous_... S7549C6::S7549C3 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C6*), ABISELECT(256,176), "S7549C8");
    check_base_class_offset(lv, (S7549C6*), ABISELECT(168,112), "S7549C8");
    test_class_info(&lv, &cd_S7549C8);
    dp->~S7549C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7549C8(Test_S7549C8, "S7549C8", ABISELECT(296,200));

#else // __cplusplus

extern void _ZN7S7549C8C1Ev();
extern void _ZN7S7549C8D1Ev();
Name_Map name_map_S7549C8[] = {
  NSPAIR(_ZN7S7549C8C1Ev),
  NSPAIR(_ZN7S7549C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C2;
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
extern Class_Descriptor cd_S7549C2;
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C6;
extern VTBL_ENTRY _ZTI7S7549C6[];
extern  VTBL_ENTRY _ZTV7S7549C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C6[];
static Base_Class bases_S7549C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7549C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7549C3,    ABISELECT(128,88), //bcp->offset
    11, //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
    2, //immediately_derived
  0, 1},
  {&cd_S7549C2,    ABISELECT(40,24), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7549C2,    ABISELECT(168,112), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7549C3,    ABISELECT(256,176), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //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
    5, //immediately_derived
  0, 0},
  {&cd_S7549C6,    ABISELECT(168,112), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //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 _ZTI7S7549C8[];
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
extern void _ZN7S7549C22v3Ev();
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C22v3Ev();
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY vtc_S7549C8[] = {
  ABISELECT(168,112),
  ABISELECT(128,88),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
  ABISELECT(88,64),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  0,
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  ABISELECT(88,64),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-168,-112),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S7549C8[];
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C2__7S7549C8[] = {
  ABISELECT(88,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C2__7S7549C8[] = {
  0,
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__7S7549C8[] = {
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C6[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C6__A1__7S7549C8[] = {
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C27S7549C6__A1__7S7549C8[] = {
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C6__7S7549C8[] = {
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S7549C6[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
static  VTT_ENTRY vtt_S7549C8[] = {
  {&(_ZTV7S7549C8[4]),  4,24},
  {&(_tg__ZTV7S7549C2__7S7549C8[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C2__7S7549C8[3]),  3,4},
  {&(_ZTV7S7549C8[10]),  10,24},
  {&(_ZTV7S7549C8[14]),  14,24},
  {&(_ZTV7S7549C8[20]),  20,24},
  {&(_ZTV7S7549C8[23]),  23,24},
  {&(_tg__ZTV7S7549C6__7S7549C8[3]),  3,4},
  {&(_tg__ZTV7S7549C27S7549C6__A1__7S7549C8[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C27S7549C6__A1__7S7549C8[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C6__7S7549C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7549C8[];
extern  VTBL_ENTRY _ZTV7S7549C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C8[];
Class_Descriptor cd_S7549C8 = {  "S7549C8", // class name
  bases_S7549C8, 6,
  &(vtc_S7549C8[0]), // expected_vtbl_contents
  &(vtt_S7549C8[0]), // expected_vtt_contents
  ABISELECT(296,200), // object size
  NSPAIRA(_ZTI7S7549C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7549C8),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7549C8),11, //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  S7549C7  : virtual S7549C8 {
  int s7549c7f0;
  int s7549c7f1:25;
  long double s7549c7f2;
  int s7549c7f3[2];
  ~S7549C7(); // tgen
  S7549C7(); // tgen
};
//SIG(-1 S7549C7) C1{ VBC2{ BC3{ v1 Fp[2] Fi Fs Fi} BC4{ VBC3 v2 FC3 Fi[9]} VBC5{ BC4 BC3} v3 v4} Fi Fi:25 FD Fi[2]}


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

static void Test_S7549C7()
{
  extern Class_Descriptor cd_S7549C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,59)];
    init_test(&cd_S7549C7, buf);
    S7549C7 *dp, &lv = *(dp=new (buf) S7549C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,232), "sizeof(S7549C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7549C7)");
    /*is_ambiguous_... S7549C8::S7549C3 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C8*), ABISELECT(40,32), "S7549C7");
    /*is_ambiguous_... S7549C8::S7549C2 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C2*)(S7549C8*), ABISELECT(168,120), "S7549C7");
    check_base_class_offset(lv, (S7549C3*)(S7549C2*)(S7549C6*), ABISELECT(168,120), "S7549C7");
    /*is_ambiguous_... S7549C8::S7549C2 */ AMB_check_base_class_offset(lv, (S7549C2*)(S7549C8*), ABISELECT(80,56), "S7549C7");
    check_base_class_offset(lv, (S7549C2*)(S7549C6*), ABISELECT(208,144), "S7549C7");
    /*is_ambiguous_... S7549C6::S7549C3 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C6*), ABISELECT(296,208), "S7549C7");
    check_base_class_offset(lv, (S7549C6*)(S7549C8*), ABISELECT(208,144), "S7549C7");
    check_base_class_offset(lv, (S7549C8*), ABISELECT(40,32), "S7549C7");
    check_field_offset(lv, s7549c7f0, ABISELECT(8,4), "S7549C7.s7549c7f0");
    set_bf_and_test(lv, s7549c7f1, ABISELECT(12,8), 0, 25, 1, "S7549C7");
    set_bf_and_test(lv, s7549c7f1, ABISELECT(12,8), 0, 25, hide_sll(1LL<<24), "S7549C7");
    check_field_offset(lv, s7549c7f2, ABISELECT(16,12), "S7549C7.s7549c7f2");
    check_field_offset(lv, s7549c7f3, ABISELECT(32,24), "S7549C7.s7549c7f3");
    test_class_info(&lv, &cd_S7549C7);
    dp->~S7549C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7549C7(Test_S7549C7, "S7549C7", ABISELECT(336,232));

#else // __cplusplus

extern void _ZN7S7549C7C1Ev();
extern void _ZN7S7549C7D1Ev();
Name_Map name_map_S7549C7[] = {
  NSPAIR(_ZN7S7549C7C1Ev),
  NSPAIR(_ZN7S7549C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C2;
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
extern Class_Descriptor cd_S7549C2;
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C6;
extern VTBL_ENTRY _ZTI7S7549C6[];
extern  VTBL_ENTRY _ZTV7S7549C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C6[];
extern Class_Descriptor cd_S7549C8;
extern VTBL_ENTRY _ZTI7S7549C8[];
extern  VTBL_ENTRY _ZTV7S7549C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C8[];
static Base_Class bases_S7549C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7549C3,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S7549C3,    ABISELECT(168,120), //bcp->offset
    20, //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
    2, //immediately_derived
  0, 1},
  {&cd_S7549C2,    ABISELECT(80,56), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7549C2,    ABISELECT(208,144), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7549C3,    ABISELECT(296,208), //bcp->offset
    30, //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
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7549C6,    ABISELECT(208,144), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7549C8,    ABISELECT(40,32), //bcp->offset
    5, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7549C7[];
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
extern void _ZN7S7549C22v3Ev();
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C22v3Ev();
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY vtc_S7549C7[] = {
  ABISELECT(208,144),
  ABISELECT(168,120),
  ABISELECT(40,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  ABISELECT(40,24),
  0,
  0,
  0,
  ABISELECT(168,112),
  ABISELECT(128,88),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
  ABISELECT(88,64),
  ABISELECT(-80,-56),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  0,
  ABISELECT(-168,-120),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  ABISELECT(88,64),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-208,-144),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  ABISELECT(-296,-208),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S7549C7[];
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C8__7S7549C7[] = {
  ABISELECT(168,112),
  ABISELECT(128,88),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C8__7S7549C7[] = {
  ABISELECT(88,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C27S7549C8__7S7549C7[] = {
  0,
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C2__7S7549C8__7S7549C7[] = {
  ABISELECT(88,64),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__A1__7S7549C8__7S7549C7[] = {
  0,
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__7S7549C8__7S7549C7[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-168,-112),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C37S7549C6__A2__7S7549C8__7S7549C7[] = {
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__7S7549C7[] = {
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C6[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C6__A1__7S7549C7[] = {
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C27S7549C6__A1__7S7549C7[] = {
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C6__7S7549C7[] = {
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S7549C6[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
static  VTT_ENTRY vtt_S7549C7[] = {
  {&(_ZTV7S7549C7[5]),  5,33},
  {&(_ZTV7S7549C7[13]),  13,33},
  {&(_ZTV7S7549C7[19]),  19,33},
  {&(_ZTV7S7549C7[23]),  23,33},
  {&(_ZTV7S7549C7[29]),  29,33},
  {&(_ZTV7S7549C7[32]),  32,33},
  {&(_tg__ZTV7S7549C8__7S7549C7[4]),  4,7},
  {&(_tg__ZTV7S7549C27S7549C8__7S7549C7[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C27S7549C8__7S7549C7[3]),  3,4},
  {&(_tg__ZTV7S7549C2__7S7549C8__7S7549C7[3]),  3,4},
  {&(_tg__ZTV7S7549C3__A1__7S7549C8__7S7549C7[3]),  3,4},
  {&(_tg__ZTV7S7549C6__7S7549C8__7S7549C7[5]),  5,6},
  {&(_tg__ZTV7S7549C37S7549C6__A2__7S7549C8__7S7549C7[2]),  2,3},
  {&(_tg__ZTV7S7549C6__7S7549C7[3]),  3,4},
  {&(_tg__ZTV7S7549C27S7549C6__A1__7S7549C7[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C27S7549C6__A1__7S7549C7[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C6__7S7549C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7549C7[];
extern  VTBL_ENTRY _ZTV7S7549C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C7[];
Class_Descriptor cd_S7549C7 = {  "S7549C7", // class name
  bases_S7549C7, 7,
  &(vtc_S7549C7[0]), // expected_vtbl_contents
  &(vtt_S7549C7[0]), // expected_vtt_contents
  ABISELECT(336,232), // object size
  NSPAIRA(_ZTI7S7549C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7549C7),33, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7549C7),17, //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  S7549C5  {
  ::S7549C6 s7549c5f0;
  void *s7549c5f1;
  ::S7549C3 s7549c5f2;
  ::S7549C7 s7549c5f3;
  void  mf7549c5(); // _ZN7S7549C58mf7549c5Ev
  virtual  ~S7549C5(); // _ZN7S7549C5D1Ev
  S7549C5(); // tgen
};
//SIG(-1 S7549C5) C1{ vd m FC2{ BC3{ VBC4{ v1 Fp[2] Fi Fs Fi} v2 FC4 Fi[9]} BC4} Fp FC4 FC5{ VBC6{ BC4 BC3 VBC2 v3 v4} Fi Fi:25 FD Fi[2]}}


void  S7549C5 ::mf7549c5(){}
 S7549C5 ::~S7549C5(){ note_dtor("S7549C5", this);}
S7549C5 ::S7549C5(){ note_ctor("S7549C5", this);} // tgen

static void Test_S7549C5()
{
  extern Class_Descriptor cd_S7549C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(36,95)];
    init_test(&cd_S7549C5, buf);
    S7549C5 *dp, &lv = *(dp=new (buf) S7549C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,376), "sizeof(S7549C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7549C5)");
    check_field_offset(lv, s7549c5f0, ABISELECT(8,4), "S7549C5.s7549c5f0");
    check_field_offset(lv, s7549c5f1, ABISELECT(176,116), "S7549C5.s7549c5f1");
    check_field_offset(lv, s7549c5f2, ABISELECT(184,120), "S7549C5.s7549c5f2");
    check_field_offset(lv, s7549c5f3, ABISELECT(224,144), "S7549C5.s7549c5f3");
    test_class_info(&lv, &cd_S7549C5);
    dp->~S7549C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7549C5(Test_S7549C5, "S7549C5", ABISELECT(560,376));

#else // __cplusplus

extern void _ZN7S7549C5C1Ev();
extern void _ZN7S7549C5D1Ev();
Name_Map name_map_S7549C5[] = {
  NSPAIR(_ZN7S7549C5C1Ev),
  NSPAIR(_ZN7S7549C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7549C5[];
extern void _ZN7S7549C5D1Ev();
extern void _ZN7S7549C5D0Ev();
static  VTBL_ENTRY vtc_S7549C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C5[0]),
  (VTBL_ENTRY)&_ZN7S7549C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7549C5D0Ev,
};
extern VTBL_ENTRY _ZTI7S7549C5[];
extern  VTBL_ENTRY _ZTV7S7549C5[];
Class_Descriptor cd_S7549C5 = {  "S7549C5", // class name
  0,0,//no base classes
  &(vtc_S7549C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(560,376), // object size
  NSPAIRA(_ZTI7S7549C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7549C5),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  S7549C10  {
  virtual  ~S7549C10(); // _ZN8S7549C10D1Ev
  virtual void  v6(); // _ZN8S7549C102v6Ev
  virtual void  v7(); // _ZN8S7549C102v7Ev
  S7549C10(); // tgen
};
//SIG(-1 S7549C10) C1{ vd v1 v2}


 S7549C10 ::~S7549C10(){ note_dtor("S7549C10", this);}
void  S7549C10 ::v6(){vfunc_called(this, "_ZN8S7549C102v6Ev");}
void  S7549C10 ::v7(){vfunc_called(this, "_ZN8S7549C102v7Ev");}
S7549C10 ::S7549C10(){ note_ctor("S7549C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S7549C10C1Ev();
extern void _ZN8S7549C10D1Ev();
Name_Map name_map_S7549C10[] = {
  NSPAIR(_ZN8S7549C10C1Ev),
  NSPAIR(_ZN8S7549C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7549C10[];
extern void _ZN8S7549C10D1Ev();
extern void _ZN8S7549C10D0Ev();
extern void _ZN8S7549C102v6Ev();
extern void _ZN8S7549C102v7Ev();
static  VTBL_ENTRY vtc_S7549C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7549C10[0]),
  (VTBL_ENTRY)&_ZN8S7549C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7549C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7549C102v6Ev,
  (VTBL_ENTRY)&_ZN8S7549C102v7Ev,
};
extern VTBL_ENTRY _ZTI8S7549C10[];
extern  VTBL_ENTRY _ZTV8S7549C10[];
Class_Descriptor cd_S7549C10 = {  "S7549C10", // class name
  0,0,//no base classes
  &(vtc_S7549C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S7549C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7549C10),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  S7549C11  : S7549C3 , virtual S7549C8 , virtual S7549C7 , S7549C6 , virtual S7549C5 {
  int s7549c11f0:13;
  void *s7549c11f1[5];
  int s7549c11f2;
  char s7549c11f3;
  int s7549c11f4[2];
  virtual  ~S7549C11(); // _ZN8S7549C11D2Ev
  S7549C11(); // tgen
};
//SIG(-1 S7549C11) C1{ BC2{ v1 Fp[2] Fi Fs Fi} VBC3{ BC2 BC4{ VBC2 v2 FC2 Fi[9]} VBC5{ BC4 BC2} v3 v4} VBC6{ VBC3 Fi Fi:25 FD Fi[2]} BC5 VBC7{ vd m FC5 Fp FC2 FC6} vd Fi:13 Fp[5] Fi Fc Fi[2]}


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

static void Test_S7549C11()
{
  extern Class_Descriptor cd_S7549C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(72,191)];
    init_test(&cd_S7549C11, buf);
    S7549C11 *dp, &lv = *(dp=new (buf) S7549C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1136,760), "sizeof(S7549C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7549C11)");
    /*is_ambiguous_... S7549C11::S7549C3 */ AMB_check_base_class_offset(lv, (S7549C3*), 0, "S7549C11");
    /*is_ambiguous_... S7549C8::S7549C3 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C8*), ABISELECT(224,152), "S7549C11");
    /*is_ambiguous_... S7549C8::S7549C2 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C2*)(S7549C8*), ABISELECT(352,240), "S7549C11");
    /*is_ambiguous_... S7549C11::S7549C6 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C2*)(S7549C6*), ABISELECT(352,240), "S7549C11");
    /*is_ambiguous_... S7549C11::S7549C6 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C2*)(S7549C6*), ABISELECT(352,240), "S7549C11");
    /*is_ambiguous_... S7549C8::S7549C2 */ AMB_check_base_class_offset(lv, (S7549C2*)(S7549C8*), ABISELECT(264,176), "S7549C11");
    /*is_ambiguous_... S7549C11::S7549C6 */ AMB_check_base_class_offset(lv, (S7549C2*)(S7549C6*), ABISELECT(392,264), "S7549C11");
    /*is_ambiguous_... S7549C11::S7549C6 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C6*), ABISELECT(480,328), "S7549C11");
    check_base_class_offset(lv, (S7549C6*)(S7549C8*), ABISELECT(392,264), "S7549C11");
    check_base_class_offset(lv, (S7549C8*), ABISELECT(224,152), "S7549C11");
    check_base_class_offset(lv, (S7549C8*)(S7549C7*), ABISELECT(224,152), "S7549C11");
    check_base_class_offset(lv, (S7549C7*), ABISELECT(528,352), "S7549C11");
    /*is_ambiguous_... S7549C11::S7549C6 */ AMB_check_base_class_offset(lv, (S7549C2*)(S7549C6*), ABISELECT(40,24), "S7549C11");
    /*is_ambiguous_... S7549C11::S7549C6 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C6*), ABISELECT(128,88), "S7549C11");
    /*is_ambiguous_... S7549C11::S7549C6 */ AMB_check_base_class_offset(lv, (S7549C6*), ABISELECT(40,24), "S7549C11");
    check_base_class_offset(lv, (S7549C5*), ABISELECT(576,384), "S7549C11");
    set_bf_and_test(lv, s7549c11f0, ABISELECT(164,112), 0, 13, 1, "S7549C11");
    set_bf_and_test(lv, s7549c11f0, ABISELECT(164,112), 0, 13, hide_sll(1LL<<12), "S7549C11");
    check_field_offset(lv, s7549c11f1, ABISELECT(168,116), "S7549C11.s7549c11f1");
    check_field_offset(lv, s7549c11f2, ABISELECT(208,136), "S7549C11.s7549c11f2");
    check_field_offset(lv, s7549c11f3, ABISELECT(212,140), "S7549C11.s7549c11f3");
    check_field_offset(lv, s7549c11f4, ABISELECT(216,144), "S7549C11.s7549c11f4");
    test_class_info(&lv, &cd_S7549C11);
    dp->~S7549C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7549C11(Test_S7549C11, "S7549C11", ABISELECT(1136,760));

#else // __cplusplus

extern void _ZN8S7549C11C1Ev();
extern void _ZN8S7549C11D2Ev();
Name_Map name_map_S7549C11[] = {
  NSPAIR(_ZN8S7549C11C1Ev),
  NSPAIR(_ZN8S7549C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C2;
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
extern Class_Descriptor cd_S7549C2;
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C6;
extern VTBL_ENTRY _ZTI7S7549C6[];
extern  VTBL_ENTRY _ZTV7S7549C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C6[];
extern Class_Descriptor cd_S7549C8;
extern VTBL_ENTRY _ZTI7S7549C8[];
extern  VTBL_ENTRY _ZTV7S7549C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C8[];
extern Class_Descriptor cd_S7549C7;
extern VTBL_ENTRY _ZTI7S7549C7[];
extern  VTBL_ENTRY _ZTV7S7549C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C7[];
extern Class_Descriptor cd_S7549C2;
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C6;
extern VTBL_ENTRY _ZTI7S7549C6[];
extern  VTBL_ENTRY _ZTV7S7549C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C6[];
extern Class_Descriptor cd_S7549C5;
extern VTBL_ENTRY _ZTI7S7549C5[];
extern  VTBL_ENTRY _ZTV7S7549C5[];
static Base_Class bases_S7549C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7549C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7549C3,    ABISELECT(224,152), //bcp->offset
    -1, //bcp->virtual_function_table_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_S7549C3,    ABISELECT(352,240), //bcp->offset
    32, //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
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7549C2,    ABISELECT(264,176), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7549C2,    ABISELECT(392,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7549C3,    ABISELECT(480,328), //bcp->offset
    42, //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
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7549C6,    ABISELECT(392,264), //bcp->offset
    36, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7549C8,    ABISELECT(224,152), //bcp->offset
    17, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7549C7,    ABISELECT(528,352), //bcp->offset
    45, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7549C2,    ABISELECT(40,24), //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
    11, //immediately_derived
  0, 0},
  {&cd_S7549C3,    ABISELECT(128,88), //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
    12, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7549C6,    ABISELECT(40,24), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7549C5,    ABISELECT(576,384), //bcp->offset
    50, //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
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7549C11[];
extern void _ZN7S7549C32v2Ev();
extern void _ZN8S7549C11D1Ev();
extern void _ZN8S7549C11D0Ev();
extern void _ZN7S7549C22v3Ev();
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
extern void _ZN7S7549C22v3Ev();
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C22v3Ev();
extern void _ZN7S7549C32v2Ev();
extern void ABISELECT(_ZTv0_n24_N8S7549C11D1Ev,_ZTv0_n12_N8S7549C11D1Ev)();
extern void ABISELECT(_ZThn576_N8S7549C11D1Ev,_ZThn384_N8S7549C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7549C11D0Ev,_ZTv0_n12_N8S7549C11D0Ev)();
extern void ABISELECT(_ZThn576_N8S7549C11D0Ev,_ZThn384_N8S7549C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7549C11[] = {
  ABISELECT(576,384),
  ABISELECT(528,352),
  ABISELECT(392,264),
  ABISELECT(352,240),
  ABISELECT(224,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN8S7549C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7549C11D0Ev,
  ABISELECT(312,216),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  ABISELECT(40,24),
  0,
  0,
  0,
  ABISELECT(168,112),
  ABISELECT(128,88),
  ABISELECT(-224,-152),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
  ABISELECT(88,64),
  ABISELECT(-264,-176),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  0,
  ABISELECT(-352,-240),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  ABISELECT(88,64),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-392,-264),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  ABISELECT(-480,-328),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  ABISELECT(-136,-88),
  ABISELECT(-176,-112),
  ABISELECT(-304,-200),
  ABISELECT(-528,-352),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  ABISELECT(-576,-384),
  ABISELECT(-576,-384),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7549C11D1Ev,_ZTv0_n12_N8S7549C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7549C11D0Ev,_ZTv0_n12_N8S7549C11D0Ev),
};
extern VTBL_ENTRY _ZTV8S7549C11[];
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__A__8S7549C11[] = {
  ABISELECT(312,216),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C6[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C6__A2__8S7549C11[] = {
  ABISELECT(312,216),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C27S7549C6__A2__8S7549C11[] = {
  0,
  ABISELECT(-312,-216),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C6__A__8S7549C11[] = {
  0,
  ABISELECT(-312,-216),
  (VTBL_ENTRY)&(_ZTI7S7549C6[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C8__8S7549C11[] = {
  ABISELECT(168,112),
  ABISELECT(128,88),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C8__8S7549C11[] = {
  ABISELECT(88,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C27S7549C8__8S7549C11[] = {
  0,
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C2__7S7549C8__8S7549C11[] = {
  ABISELECT(88,64),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__A1__7S7549C8__8S7549C11[] = {
  0,
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__7S7549C8__8S7549C11[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-168,-112),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C37S7549C6__A2__7S7549C8__8S7549C11[] = {
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__8S7549C11[] = {
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C6[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C6__A1__8S7549C11[] = {
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C27S7549C6__A1__8S7549C11[] = {
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C6__8S7549C11[] = {
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S7549C6[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7549C7__8S7549C11[] = {
  ABISELECT(-136,-88),
  ABISELECT(-176,-112),
  ABISELECT(-304,-200),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
};
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C8__7S7549C7__8S7549C11[] = {
  ABISELECT(40,24),
  0,
  0,
  0,
  ABISELECT(168,112),
  ABISELECT(128,88),
  ABISELECT(304,200),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C8__7S7549C7__8S7549C11[] = {
  ABISELECT(88,64),
  ABISELECT(264,176),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__A1__7S7549C7__8S7549C11[] = {
  0,
  ABISELECT(176,112),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__7S7549C7__8S7549C11[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(-40,-24),
  ABISELECT(136,88),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C37S7549C6__A2__7S7549C7__8S7549C11[] = {
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
static  VTT_ENTRY vtt_S7549C11[] = {
  {&(_ZTV8S7549C11[7]),  7,55},
  {&(_tg__ZTV7S7549C6__A__8S7549C11[3]),  3,4},
  {&(_tg__ZTV7S7549C27S7549C6__A2__8S7549C11[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C27S7549C6__A2__8S7549C11[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C6__A__8S7549C11[3]),  3,4},
  {&(_ZTV8S7549C11[25]),  25,55},
  {&(_ZTV8S7549C11[31]),  31,55},
  {&(_ZTV8S7549C11[35]),  35,55},
  {&(_ZTV8S7549C11[41]),  41,55},
  {&(_ZTV8S7549C11[44]),  44,55},
  {&(_ZTV8S7549C11[50]),  50,55},
  {&(_ZTV8S7549C11[13]),  13,55},
  {&(_ZTV8S7549C11[53]),  53,55},
  {&(_tg__ZTV7S7549C8__8S7549C11[4]),  4,7},
  {&(_tg__ZTV7S7549C27S7549C8__8S7549C11[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C27S7549C8__8S7549C11[3]),  3,4},
  {&(_tg__ZTV7S7549C2__7S7549C8__8S7549C11[3]),  3,4},
  {&(_tg__ZTV7S7549C3__A1__7S7549C8__8S7549C11[3]),  3,4},
  {&(_tg__ZTV7S7549C6__7S7549C8__8S7549C11[5]),  5,6},
  {&(_tg__ZTV7S7549C37S7549C6__A2__7S7549C8__8S7549C11[2]),  2,3},
  {&(_tg__ZTV7S7549C6__8S7549C11[3]),  3,4},
  {&(_tg__ZTV7S7549C27S7549C6__A1__8S7549C11[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C27S7549C6__A1__8S7549C11[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C6__8S7549C11[3]),  3,4},
  {&(_tg__ZTV7S7549C7__8S7549C11[5]),  5,5},
  {&(_tg__ZTV7S7549C8__7S7549C7__8S7549C11[8]),  8,11},
  {&(_tg__ZTV7S7549C27S7549C8__7S7549C7__8S7549C11[3]),  3,4},
  {&(_tg__ZTV7S7549C3__A1__7S7549C7__8S7549C11[3]),  3,4},
  {&(_tg__ZTV7S7549C6__7S7549C7__8S7549C11[5]),  5,6},
  {&(_tg__ZTV7S7549C37S7549C6__A2__7S7549C7__8S7549C11[2]),  2,3},
};
extern VTBL_ENTRY _ZTI8S7549C11[];
extern  VTBL_ENTRY _ZTV8S7549C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7549C11[];
static VTBL_ENTRY alt_thunk_names67[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7549C11D0Ev,_ZTv0_n12_N8S7549C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S7549C11D0Ev,_ZThn384_N8S7549C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7549C11D1Ev,_ZTv0_n12_N8S7549C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S7549C11D1Ev,_ZThn384_N8S7549C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7549C11 = {  "S7549C11", // class name
  bases_S7549C11, 13,
  &(vtc_S7549C11[0]), // expected_vtbl_contents
  &(vtt_S7549C11[0]), // expected_vtt_contents
  ABISELECT(1136,760), // object size
  NSPAIRA(_ZTI8S7549C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7549C11),55, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7549C11),30, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names67,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7549C9  : S7549C10 , S7549C5 , S7549C2 , S7549C11 {
  ::S7549C5 s7549c9f0;
  virtual void  v8(); // _ZN7S7549C92v8Ev
  ~S7549C9(); // tgen
  S7549C9(); // tgen
};
//SIG(-1 S7549C9) C1{ BC2{ vd v2 v3} BC3{ vd m FC4{ BC5{ VBC6{ v4 Fp[2] Fi Fs Fi} v5 FC6 Fi[9]} BC6} Fp FC6 FC7{ VBC8{ BC6 BC5 VBC4 v6 v7} Fi Fi:25 FD Fi[2]}} BC5 BC9{ BC6 VBC8 VBC7 BC4 VBC3 vd Fi:13 Fp[5] Fi Fc Fi[2]} v1 FC3}


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

static void Test_S7549C9()
{
  extern Class_Descriptor cd_S7549C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(149,396)];
    init_test(&cd_S7549C9, buf);
    S7549C9 *dp, &lv = *(dp=new (buf) S7549C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2368,1580), "sizeof(S7549C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7549C9)");
    check_base_class_offset(lv, (S7549C10*), 0, "S7549C9");
    /*is_ambiguous_... S7549C9::S7549C5 */ AMB_check_base_class_offset(lv, (S7549C5*), ABISELECT(16,4), "S7549C9");
    /*is_ambiguous_... S7549C9::S7549C2 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C2*), ABISELECT(1456,972), "S7549C9");
    /*is_ambiguous_... S7549C8::S7549C2 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C2*)(S7549C8*), ABISELECT(1456,972), "S7549C9");
    /*is_ambiguous_... S7549C9::S7549C6 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C2*)(S7549C6*), ABISELECT(1456,972), "S7549C9");
    /*is_ambiguous_... S7549C11::S7549C6 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C2*)(S7549C6*)(S7549C11*), ABISELECT(1456,972), "S7549C9");
    /*is_ambiguous_... S7549C9::S7549C2 */ AMB_check_base_class_offset(lv, (S7549C2*), ABISELECT(576,380), "S7549C9");
    /*is_ambiguous_... S7549C11::S7549C3 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C11*), ABISELECT(664,444), "S7549C9");
    /*is_ambiguous_... S7549C8::S7549C3 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C8*), ABISELECT(1496,996), "S7549C9");
    /*is_ambiguous_... S7549C8::S7549C2 */ AMB_check_base_class_offset(lv, (S7549C2*)(S7549C8*), ABISELECT(1536,1020), "S7549C9");
    /*is_ambiguous_... S7549C9::S7549C6 */ AMB_check_base_class_offset(lv, (S7549C2*)(S7549C6*), ABISELECT(1624,1084), "S7549C9");
    /*is_ambiguous_... S7549C9::S7549C6 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C6*), ABISELECT(1712,1148), "S7549C9");
    check_base_class_offset(lv, (S7549C6*)(S7549C8*), ABISELECT(1624,1084), "S7549C9");
    check_base_class_offset(lv, (S7549C8*)(S7549C11*), ABISELECT(1496,996), "S7549C9");
    check_base_class_offset(lv, (S7549C8*)(S7549C7*), ABISELECT(1496,996), "S7549C9");
    check_base_class_offset(lv, (S7549C7*)(S7549C11*), ABISELECT(1760,1172), "S7549C9");
    /*is_ambiguous_... S7549C11::S7549C6 */ AMB_check_base_class_offset(lv, (S7549C2*)(S7549C6*)(S7549C11*), ABISELECT(704,468), "S7549C9");
    /*is_ambiguous_... S7549C11::S7549C6 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C6*)(S7549C11*), ABISELECT(792,532), "S7549C9");
    /*is_ambiguous_... S7549C11::S7549C6 */ AMB_check_base_class_offset(lv, (S7549C6*)(S7549C11*), ABISELECT(704,468), "S7549C9");
    check_base_class_offset(lv, (S7549C5*)(S7549C11*), ABISELECT(1808,1204), "S7549C9");
    check_base_class_offset(lv, (S7549C11*), ABISELECT(664,444), "S7549C9");
    check_field_offset(lv, s7549c9f0, ABISELECT(896,596), "S7549C9.s7549c9f0");
    test_class_info(&lv, &cd_S7549C9);
    dp->~S7549C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7549C9(Test_S7549C9, "S7549C9", ABISELECT(2368,1580));

#else // __cplusplus

extern void _ZN7S7549C9C1Ev();
extern void _ZN7S7549C9D1Ev();
Name_Map name_map_S7549C9[] = {
  NSPAIR(_ZN7S7549C9C1Ev),
  NSPAIR(_ZN7S7549C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7549C10;
extern VTBL_ENTRY _ZTI8S7549C10[];
extern  VTBL_ENTRY _ZTV8S7549C10[];
extern Class_Descriptor cd_S7549C5;
extern VTBL_ENTRY _ZTI7S7549C5[];
extern  VTBL_ENTRY _ZTV7S7549C5[];
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C2;
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C2;
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
extern Class_Descriptor cd_S7549C2;
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C6;
extern VTBL_ENTRY _ZTI7S7549C6[];
extern  VTBL_ENTRY _ZTV7S7549C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C6[];
extern Class_Descriptor cd_S7549C8;
extern VTBL_ENTRY _ZTI7S7549C8[];
extern  VTBL_ENTRY _ZTV7S7549C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C8[];
extern Class_Descriptor cd_S7549C7;
extern VTBL_ENTRY _ZTI7S7549C7[];
extern  VTBL_ENTRY _ZTV7S7549C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C7[];
extern Class_Descriptor cd_S7549C2;
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C6;
extern VTBL_ENTRY _ZTI7S7549C6[];
extern  VTBL_ENTRY _ZTV7S7549C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C6[];
extern Class_Descriptor cd_S7549C5;
extern VTBL_ENTRY _ZTI7S7549C5[];
extern  VTBL_ENTRY _ZTV7S7549C5[];
extern Class_Descriptor cd_S7549C11;
extern VTBL_ENTRY _ZTI8S7549C11[];
extern  VTBL_ENTRY _ZTV8S7549C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7549C11[];
static Base_Class bases_S7549C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7549C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7549C5,    ABISELECT(16,4), //bcp->offset
    12, //bcp->virtual_function_table_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
    -1, //immediately_derived
  1, 0},
  {&cd_S7549C3,    ABISELECT(1456,972), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7549C2,    ABISELECT(576,380), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7549C3,    ABISELECT(664,444), //bcp->offset
    -1, //bcp->virtual_function_table_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_S7549C3,    ABISELECT(1496,996), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S7549C2,    ABISELECT(1536,1020), //bcp->offset
    52, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7549C2,    ABISELECT(1624,1084), //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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7549C3,    ABISELECT(1712,1148), //bcp->offset
    62, //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
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7549C6,    ABISELECT(1624,1084), //bcp->offset
    56, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7549C8,    ABISELECT(1496,996), //bcp->offset
    41, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7549C7,    ABISELECT(1760,1172), //bcp->offset
    65, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7549C2,    ABISELECT(704,468), //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
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7549C3,    ABISELECT(792,532), //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
    15, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7549C6,    ABISELECT(704,468), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7549C5,    ABISELECT(1808,1204), //bcp->offset
    70, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7549C11,    ABISELECT(664,444), //bcp->offset
    20, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7549C9[];
extern void _ZN7S7549C9D1Ev();
extern void _ZN7S7549C9D0Ev();
extern void _ZN8S7549C102v6Ev();
extern void _ZN8S7549C102v7Ev();
extern void _ZN7S7549C92v8Ev();
extern void ABISELECT(_ZThn16_N7S7549C9D1Ev,_ZThn4_N7S7549C9D1Ev)();
extern void ABISELECT(_ZThn16_N7S7549C9D0Ev,_ZThn4_N7S7549C9D0Ev)();
extern void _ZN7S7549C22v3Ev();
extern void _ZN7S7549C32v2Ev();
extern void ABISELECT(_ZThn664_N7S7549C9D1Ev,_ZThn444_N7S7549C9D1Ev)();
extern void ABISELECT(_ZThn664_N7S7549C9D0Ev,_ZThn444_N7S7549C9D0Ev)();
extern void _ZN7S7549C22v3Ev();
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
extern void _ZN7S7549C22v3Ev();
extern void _ZN7S7549C22v3Ev();
extern void _ZN7S7549C32v2Ev();
extern void ABISELECT(_ZTv0_n24_N7S7549C9D1Ev,_ZTv0_n12_N7S7549C9D1Ev)();
extern void ABISELECT(_ZThn1808_N7S7549C9D1Ev,_ZThn1204_N7S7549C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7549C9D0Ev,_ZTv0_n12_N7S7549C9D0Ev)();
extern void ABISELECT(_ZThn1808_N7S7549C9D0Ev,_ZThn1204_N7S7549C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7549C9[] = {
  ABISELECT(1808,1204),
  ABISELECT(1760,1172),
  ABISELECT(1624,1084),
  ABISELECT(1496,996),
  ABISELECT(1456,972),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&_ZN7S7549C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7549C9D0Ev,
  (VTBL_ENTRY)&_ZN8S7549C102v6Ev,
  (VTBL_ENTRY)&_ZN8S7549C102v7Ev,
  (VTBL_ENTRY)&_ZN7S7549C92v8Ev,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7549C9D1Ev,_ZThn4_N7S7549C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7549C9D0Ev,_ZThn4_N7S7549C9D0Ev),
  ABISELECT(880,592),
  ABISELECT(-576,-380),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  ABISELECT(1144,760),
  ABISELECT(1096,728),
  ABISELECT(960,640),
  ABISELECT(792,528),
  ABISELECT(832,552),
  ABISELECT(-664,-444),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn664_N7S7549C9D1Ev,_ZThn444_N7S7549C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn664_N7S7549C9D0Ev,_ZThn444_N7S7549C9D0Ev),
  ABISELECT(752,504),
  ABISELECT(-704,-468),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  ABISELECT(-792,-532),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  0,
  ABISELECT(-1456,-972),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  ABISELECT(40,24),
  0,
  0,
  0,
  ABISELECT(128,88),
  ABISELECT(-40,-24),
  ABISELECT(-1496,-996),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
  ABISELECT(-80,-48),
  ABISELECT(-1536,-1020),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  ABISELECT(88,64),
  0,
  ABISELECT(-168,-112),
  ABISELECT(-1624,-1084),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  ABISELECT(-1712,-1148),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  ABISELECT(-136,-88),
  ABISELECT(-304,-200),
  ABISELECT(-264,-176),
  ABISELECT(-1760,-1172),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  ABISELECT(-1808,-1204),
  ABISELECT(-1808,-1204),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7549C9D1Ev,_ZTv0_n12_N7S7549C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7549C9D0Ev,_ZTv0_n12_N7S7549C9D0Ev),
};
extern VTBL_ENTRY _ZTV7S7549C9[];
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C2__7S7549C9[] = {
  ABISELECT(880,592),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C2__7S7549C9[] = {
  0,
  ABISELECT(-880,-592),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C32v2Ev();
extern void _ZN8S7549C11D1Ev();
extern void _ZN8S7549C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7549C11__7S7549C9[] = {
  ABISELECT(1144,760),
  ABISELECT(1096,728),
  ABISELECT(960,640),
  ABISELECT(792,528),
  ABISELECT(832,552),
  0,
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN8S7549C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7549C11D0Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C68S7549C11__A1__7S7549C9[] = {
  ABISELECT(752,504),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C6[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C68S7549C11__A3__7S7549C9[] = {
  ABISELECT(752,504),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C27S7549C68S7549C11__A3__7S7549C9[] = {
  0,
  ABISELECT(-752,-504),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C68S7549C11__A1__7S7549C9[] = {
  0,
  ABISELECT(-752,-504),
  (VTBL_ENTRY)&(_ZTI7S7549C6[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C8__8S7549C11__7S7549C9[] = {
  ABISELECT(40,24),
  0,
  0,
  0,
  ABISELECT(128,88),
  ABISELECT(-40,-24),
  ABISELECT(-832,-552),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C8__8S7549C11__7S7549C9[] = {
  ABISELECT(-80,-48),
  ABISELECT(-872,-576),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__A2__8S7549C11__7S7549C9[] = {
  0,
  ABISELECT(-792,-528),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__8S7549C11__7S7549C9[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(-168,-112),
  ABISELECT(-960,-640),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C37S7549C6__A3__8S7549C11__7S7549C9[] = {
  ABISELECT(-1048,-704),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7549C7__8S7549C11__7S7549C9[] = {
  ABISELECT(-136,-88),
  ABISELECT(-304,-200),
  ABISELECT(-264,-176),
  ABISELECT(-1096,-728),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__A__8S7549C11__7S7549C9[] = {
  ABISELECT(752,504),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7549C11D1Ev,_ZTv0_n12_N8S7549C11D1Ev)();
extern void ABISELECT(_ZThn1144_N8S7549C11D1Ev,_ZThn760_N8S7549C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7549C11D0Ev,_ZTv0_n12_N8S7549C11D0Ev)();
extern void ABISELECT(_ZThn1144_N8S7549C11D0Ev,_ZThn760_N8S7549C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7549C5__8S7549C11__7S7549C9[] = {
  ABISELECT(-1144,-760),
  ABISELECT(-1144,-760),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7549C11D1Ev,_ZTv0_n12_N8S7549C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7549C11D0Ev,_ZTv0_n12_N8S7549C11D0Ev),
};
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C8__7S7549C9[] = {
  ABISELECT(128,88),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C8__A1__7S7549C9[] = {
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C27S7549C8__A1__7S7549C9[] = {
  0,
  ABISELECT(80,48),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C2__7S7549C8__7S7549C9[] = {
  ABISELECT(-80,-48),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__A1__7S7549C8__7S7549C9[] = {
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__7S7549C8__7S7549C9[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(-168,-112),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C37S7549C6__A2__7S7549C8__7S7549C9[] = {
  ABISELECT(-216,-152),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__7S7549C9[] = {
  ABISELECT(-168,-112),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C6[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C6__A2__7S7549C9[] = {
  ABISELECT(-168,-112),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C27S7549C6__A2__7S7549C9[] = {
  0,
  ABISELECT(168,112),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C6__7S7549C9[] = {
  0,
  ABISELECT(168,112),
  (VTBL_ENTRY)&(_ZTI7S7549C6[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7549C7__7S7549C9[] = {
  ABISELECT(-136,-88),
  ABISELECT(-304,-200),
  ABISELECT(-264,-176),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
};
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C8__7S7549C7__7S7549C9[] = {
  ABISELECT(40,24),
  0,
  0,
  0,
  ABISELECT(128,88),
  ABISELECT(-40,-24),
  ABISELECT(264,176),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C8__7S7549C7__7S7549C9[] = {
  ABISELECT(-80,-48),
  ABISELECT(224,152),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__A1__7S7549C7__7S7549C9[] = {
  0,
  ABISELECT(304,200),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__7S7549C7__7S7549C9[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(-168,-112),
  ABISELECT(136,88),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C37S7549C6__A2__7S7549C7__7S7549C9[] = {
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
static  VTT_ENTRY vtt_S7549C9[] = {
  {&(_ZTV7S7549C9[7]),  7,75},
  {&(_tg__ZTV7S7549C2__7S7549C9[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C2__7S7549C9[3]),  3,4},
  {&(_tg__ZTV8S7549C11__7S7549C9[7]),  7,10},
  {&(_tg__ZTV7S7549C68S7549C11__A1__7S7549C9[3]),  3,4},
  {&(_tg__ZTV7S7549C27S7549C68S7549C11__A3__7S7549C9[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C27S7549C68S7549C11__A3__7S7549C9[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C68S7549C11__A1__7S7549C9[3]),  3,4},
  {&(_tg__ZTV7S7549C8__8S7549C11__7S7549C9[8]),  8,11},
  {&(_tg__ZTV7S7549C27S7549C8__8S7549C11__7S7549C9[3]),  3,4},
  {&(_tg__ZTV7S7549C3__A2__8S7549C11__7S7549C9[3]),  3,4},
  {&(_tg__ZTV7S7549C6__8S7549C11__7S7549C9[5]),  5,6},
  {&(_tg__ZTV7S7549C37S7549C6__A3__8S7549C11__7S7549C9[2]),  2,3},
  {&(_tg__ZTV7S7549C7__8S7549C11__7S7549C9[5]),  5,5},
  {&(_tg__ZTV7S7549C6__A__8S7549C11__7S7549C9[3]),  3,4},
  {&(_tg__ZTV7S7549C5__8S7549C11__7S7549C9[3]),  3,5},
  {&(_ZTV7S7549C9[19]),  19,75},
  {&(_ZTV7S7549C9[40]),  40,75},
  {&(_ZTV7S7549C9[27]),  27,75},
  {&(_ZTV7S7549C9[49]),  49,75},
  {&(_ZTV7S7549C9[55]),  55,75},
  {&(_ZTV7S7549C9[61]),  61,75},
  {&(_ZTV7S7549C9[64]),  64,75},
  {&(_ZTV7S7549C9[70]),  70,75},
  {&(_ZTV7S7549C9[33]),  33,75},
  {&(_ZTV7S7549C9[73]),  73,75},
  {&(_tg__ZTV7S7549C8__7S7549C9[4]),  4,7},
  {&(_tg__ZTV7S7549C27S7549C8__A1__7S7549C9[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C27S7549C8__A1__7S7549C9[3]),  3,4},
  {&(_tg__ZTV7S7549C2__7S7549C8__7S7549C9[3]),  3,4},
  {&(_tg__ZTV7S7549C3__A1__7S7549C8__7S7549C9[3]),  3,4},
  {&(_tg__ZTV7S7549C6__7S7549C8__7S7549C9[5]),  5,6},
  {&(_tg__ZTV7S7549C37S7549C6__A2__7S7549C8__7S7549C9[2]),  2,3},
  {&(_tg__ZTV7S7549C6__7S7549C9[3]),  3,4},
  {&(_tg__ZTV7S7549C27S7549C6__A2__7S7549C9[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C27S7549C6__A2__7S7549C9[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C6__7S7549C9[3]),  3,4},
  {&(_tg__ZTV7S7549C7__7S7549C9[5]),  5,5},
  {&(_tg__ZTV7S7549C8__7S7549C7__7S7549C9[8]),  8,11},
  {&(_tg__ZTV7S7549C27S7549C8__7S7549C7__7S7549C9[3]),  3,4},
  {&(_tg__ZTV7S7549C3__A1__7S7549C7__7S7549C9[3]),  3,4},
  {&(_tg__ZTV7S7549C6__7S7549C7__7S7549C9[5]),  5,6},
  {&(_tg__ZTV7S7549C37S7549C6__A2__7S7549C7__7S7549C9[2]),  2,3},
};
extern VTBL_ENTRY _ZTI7S7549C9[];
extern  VTBL_ENTRY _ZTV7S7549C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C9[];
static VTBL_ENTRY alt_thunk_names68[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7549C11D0Ev,_ZTv0_n12_N8S7549C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1144_N8S7549C11D0Ev,_ZThn760_N8S7549C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7549C11D1Ev,_ZTv0_n12_N8S7549C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1144_N8S7549C11D1Ev,_ZThn760_N8S7549C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7549C9D0Ev,_ZTv0_n12_N7S7549C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1808_N7S7549C9D0Ev,_ZThn1204_N7S7549C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7549C9D1Ev,_ZTv0_n12_N7S7549C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1808_N7S7549C9D1Ev,_ZThn1204_N7S7549C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7549C9 = {  "S7549C9", // class name
  bases_S7549C9, 17,
  &(vtc_S7549C9[0]), // expected_vtbl_contents
  &(vtt_S7549C9[0]), // expected_vtt_contents
  ABISELECT(2368,1580), // object size
  NSPAIRA(_ZTI7S7549C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7549C9),75, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7549C9),43, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names68,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7549C4  : virtual S7549C5 , S7549C8 , S7549C2 , virtual S7549C9 {
  char s7549c4f0[5];
  int s7549c4f1[2];
  __tsi64 s7549c4f2;
  ~S7549C4(); // tgen
  S7549C4(); // tgen
};
//SIG(-1 S7549C4) C1{ VBC2{ vd m FC3{ BC4{ VBC5{ v1 Fp[2] Fi Fs Fi} v2 FC5 Fi[9]} BC5} Fp FC5 FC6{ VBC7{ BC5 BC4 VBC3 v3 v4} Fi Fi:25 FD Fi[2]}} BC7 BC4 VBC8{ BC9{ vd v5 v6} BC2 BC4 BC10{ BC5 VBC7 VBC6 BC3 VBC2 vd Fi:13 Fp[5] Fi Fc Fi[2]} v7 FC2} Fc[5] Fi[2] FL}


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

static void Test_S7549C4()
{
  extern Class_Descriptor cd_S7549C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(164,440)];
    init_test(&cd_S7549C4, buf);
    S7549C4 *dp, &lv = *(dp=new (buf) S7549C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2608,1756), "sizeof(S7549C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7549C4)");
    /*is_ambiguous_... S7549C4::S7549C5 */ AMB_check_base_class_offset(lv, (S7549C5*), ABISELECT(240,176), "S7549C4");
    check_base_class_offset(lv, (S7549C5*)(S7549C11*)(S7549C9*), ABISELECT(240,176), "S7549C4");
    /*is_ambiguous_... S7549C4::S7549C8 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C8*), 0, "S7549C4");
    /*is_ambiguous_... S7549C4::S7549C8 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C2*)(S7549C8*), ABISELECT(800,552), "S7549C4");
    /*is_ambiguous_... S7549C4::S7549C6 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C2*)(S7549C6*), ABISELECT(800,552), "S7549C4");
    /*is_ambiguous_... S7549C4::S7549C2 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C2*), ABISELECT(800,552), "S7549C4");
    /*is_ambiguous_... S7549C9::S7549C2 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C2*)(S7549C9*), ABISELECT(800,552), "S7549C4");
    /*is_ambiguous_... S7549C4::S7549C8 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C2*)(S7549C8*), ABISELECT(800,552), "S7549C4");
    /*is_ambiguous_... S7549C11::S7549C6 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C2*)(S7549C6*)(S7549C11*)(S7549C9*), ABISELECT(800,552), "S7549C4");
    /*is_ambiguous_... S7549C4::S7549C8 */ AMB_check_base_class_offset(lv, (S7549C2*)(S7549C8*), ABISELECT(40,24), "S7549C4");
    /*is_ambiguous_... S7549C4::S7549C6 */ AMB_check_base_class_offset(lv, (S7549C2*)(S7549C6*), ABISELECT(840,576), "S7549C4");
    /*is_ambiguous_... S7549C4::S7549C6 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C6*), ABISELECT(928,640), "S7549C4");
    /*is_ambiguous_... S7549C4::S7549C8 */ AMB_check_base_class_offset(lv, (S7549C6*)(S7549C8*), ABISELECT(840,576), "S7549C4");
    /*is_ambiguous_... S7549C4::S7549C8 */ AMB_check_base_class_offset(lv, (S7549C6*)(S7549C8*), ABISELECT(840,576), "S7549C4");
    /*is_ambiguous_... S7549C4::S7549C8 */ AMB_check_base_class_offset(lv, (S7549C8*), 0, "S7549C4");
    /*is_ambiguous_... S7549C4::S7549C2 */ AMB_check_base_class_offset(lv, (S7549C2*), ABISELECT(128,88), "S7549C4");
    check_base_class_offset(lv, (S7549C10*)(S7549C9*), ABISELECT(976,664), "S7549C4");
    /*is_ambiguous_... S7549C9::S7549C5 */ AMB_check_base_class_offset(lv, (S7549C5*)(S7549C9*), ABISELECT(992,668), "S7549C4");
    /*is_ambiguous_... S7549C9::S7549C2 */ AMB_check_base_class_offset(lv, (S7549C2*)(S7549C9*), ABISELECT(1552,1044), "S7549C4");
    /*is_ambiguous_... S7549C11::S7549C3 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C11*)(S7549C9*), ABISELECT(1640,1108), "S7549C4");
    /*is_ambiguous_... S7549C4::S7549C8 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C8*), ABISELECT(2432,1636), "S7549C4");
    /*is_ambiguous_... S7549C4::S7549C8 */ AMB_check_base_class_offset(lv, (S7549C2*)(S7549C8*), ABISELECT(2472,1660), "S7549C4");
    check_base_class_offset(lv, (S7549C8*)(S7549C11*)(S7549C9*), ABISELECT(2432,1636), "S7549C4");
    check_base_class_offset(lv, (S7549C8*)(S7549C7*), ABISELECT(2432,1636), "S7549C4");
    check_base_class_offset(lv, (S7549C7*)(S7549C11*)(S7549C9*), ABISELECT(2560,1724), "S7549C4");
    /*is_ambiguous_... S7549C11::S7549C6 */ AMB_check_base_class_offset(lv, (S7549C2*)(S7549C6*)(S7549C11*)(S7549C9*), ABISELECT(1680,1132), "S7549C4");
    /*is_ambiguous_... S7549C11::S7549C6 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C6*)(S7549C11*)(S7549C9*), ABISELECT(1768,1196), "S7549C4");
    /*is_ambiguous_... S7549C11::S7549C6 */ AMB_check_base_class_offset(lv, (S7549C6*)(S7549C11*)(S7549C9*), ABISELECT(1680,1132), "S7549C4");
    check_base_class_offset(lv, (S7549C11*)(S7549C9*), ABISELECT(1640,1108), "S7549C4");
    check_base_class_offset(lv, (S7549C9*), ABISELECT(976,664), "S7549C4");
    check_field_offset(lv, s7549c4f0, ABISELECT(212,152), "S7549C4.s7549c4f0");
    check_field_offset(lv, s7549c4f1, ABISELECT(220,160), "S7549C4.s7549c4f1");
    check_field_offset(lv, s7549c4f2, ABISELECT(232,168), "S7549C4.s7549c4f2");
    test_class_info(&lv, &cd_S7549C4);
    dp->~S7549C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7549C4(Test_S7549C4, "S7549C4", ABISELECT(2608,1756));

#else // __cplusplus

extern void _ZN7S7549C4C1Ev();
extern void _ZN7S7549C4D1Ev();
Name_Map name_map_S7549C4[] = {
  NSPAIR(_ZN7S7549C4C1Ev),
  NSPAIR(_ZN7S7549C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7549C5;
extern VTBL_ENTRY _ZTI7S7549C5[];
extern  VTBL_ENTRY _ZTV7S7549C5[];
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C2;
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
extern Class_Descriptor cd_S7549C2;
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C6;
extern VTBL_ENTRY _ZTI7S7549C6[];
extern  VTBL_ENTRY _ZTV7S7549C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C6[];
extern Class_Descriptor cd_S7549C8;
extern VTBL_ENTRY _ZTI7S7549C8[];
extern  VTBL_ENTRY _ZTV7S7549C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C8[];
extern Class_Descriptor cd_S7549C2;
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
extern Class_Descriptor cd_S7549C10;
extern VTBL_ENTRY _ZTI8S7549C10[];
extern  VTBL_ENTRY _ZTV8S7549C10[];
extern Class_Descriptor cd_S7549C5;
extern VTBL_ENTRY _ZTI7S7549C5[];
extern  VTBL_ENTRY _ZTV7S7549C5[];
extern Class_Descriptor cd_S7549C2;
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C2;
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
extern Class_Descriptor cd_S7549C8;
extern VTBL_ENTRY _ZTI7S7549C8[];
extern  VTBL_ENTRY _ZTV7S7549C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C8[];
extern Class_Descriptor cd_S7549C7;
extern VTBL_ENTRY _ZTI7S7549C7[];
extern  VTBL_ENTRY _ZTV7S7549C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C7[];
extern Class_Descriptor cd_S7549C2;
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C6;
extern VTBL_ENTRY _ZTI7S7549C6[];
extern  VTBL_ENTRY _ZTV7S7549C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C6[];
extern Class_Descriptor cd_S7549C11;
extern VTBL_ENTRY _ZTI8S7549C11[];
extern  VTBL_ENTRY _ZTV8S7549C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7549C11[];
extern Class_Descriptor cd_S7549C9;
extern VTBL_ENTRY _ZTI7S7549C9[];
extern  VTBL_ENTRY _ZTV7S7549C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C9[];
static Base_Class bases_S7549C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7549C5,    ABISELECT(240,176), //bcp->offset
    21, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7549C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S7549C3,    ABISELECT(800,552), //bcp->offset
    26, //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
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7549C2,    ABISELECT(40,24), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7549C2,    ABISELECT(840,576), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7549C3,    ABISELECT(928,640), //bcp->offset
    36, //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
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7549C6,    ABISELECT(840,576), //bcp->offset
    30, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7549C8,    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
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7549C2,    ABISELECT(128,88), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7549C10,    ABISELECT(976,664), //bcp->offset
    -1, //bcp->virtual_function_table_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
    21, //immediately_derived
  0, 0},
  {&cd_S7549C5,    ABISELECT(992,668), //bcp->offset
    57, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7549C2,    ABISELECT(1552,1044), //bcp->offset
    61, //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
    12, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7549C3,    ABISELECT(1640,1108), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S7549C3,    ABISELECT(2432,1636), //bcp->offset
    -1, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S7549C2,    ABISELECT(2472,1660), //bcp->offset
    93, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7549C8,    ABISELECT(2432,1636), //bcp->offset
    82, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7549C7,    ABISELECT(2560,1724), //bcp->offset
    97, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S7549C2,    ABISELECT(1680,1132), //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
    14, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7549C3,    ABISELECT(1768,1196), //bcp->offset
    79, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7549C6,    ABISELECT(1680,1132), //bcp->offset
    75, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7549C11,    ABISELECT(1640,1108), //bcp->offset
    65, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7549C9,    ABISELECT(976,664), //bcp->offset
    39, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7549C4[];
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
extern void _ZN7S7549C4D1Ev();
extern void _ZN7S7549C4D0Ev();
extern void _ZN7S7549C22v3Ev();
extern void _ZN7S7549C22v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S7549C4D1Ev,_ZTv0_n12_N7S7549C4D1Ev)();
extern void ABISELECT(_ZThn240_N7S7549C4D1Ev,_ZThn176_N7S7549C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7549C4D0Ev,_ZTv0_n12_N7S7549C4D0Ev)();
extern void ABISELECT(_ZThn240_N7S7549C4D0Ev,_ZThn176_N7S7549C4D0Ev)() __attribute__((weak));
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C22v3Ev();
extern void _ZN7S7549C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N7S7549C4D1Ev,_ZTv0_n32_N7S7549C4D1Ev)();
extern void ABISELECT(_ZThn976_N7S7549C4D1Ev,_ZThn664_N7S7549C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7549C4D0Ev,_ZTv0_n32_N7S7549C4D0Ev)();
extern void ABISELECT(_ZThn976_N7S7549C4D0Ev,_ZThn664_N7S7549C4D0Ev)() __attribute__((weak));
extern void _ZN8S7549C102v6Ev();
extern void _ZN8S7549C102v7Ev();
extern void _ZN7S7549C92v8Ev();
extern void ABISELECT(_ZTvn16_n64_N7S7549C4D1Ev,_ZTvn4_n32_N7S7549C4D1Ev)();
extern void ABISELECT(_ZTvn16_n64_N7S7549C4D0Ev,_ZTvn4_n32_N7S7549C4D0Ev)();
extern void _ZN7S7549C22v3Ev();
extern void _ZN7S7549C32v2Ev();
extern void ABISELECT(_ZTvn664_n64_N7S7549C4D1Ev,_ZTvn444_n32_N7S7549C4D1Ev)();
extern void ABISELECT(_ZTvn664_n64_N7S7549C4D0Ev,_ZTvn444_n32_N7S7549C4D0Ev)();
extern void _ZN7S7549C22v3Ev();
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY vtc_S7549C4[] = {
  ABISELECT(2560,1724),
  ABISELECT(2432,1636),
  ABISELECT(976,664),
  ABISELECT(240,176),
  ABISELECT(840,576),
  ABISELECT(800,552),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
  (VTBL_ENTRY)&_ZN7S7549C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7549C4D0Ev,
  ABISELECT(760,528),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  ABISELECT(672,464),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  ABISELECT(-240,-176),
  ABISELECT(-240,-176),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7549C4D1Ev,_ZTv0_n12_N7S7549C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7549C4D0Ev,_ZTv0_n12_N7S7549C4D0Ev),
  0,
  ABISELECT(-800,-552),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  ABISELECT(88,64),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-840,-576),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  ABISELECT(-928,-640),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  ABISELECT(664,444),
  ABISELECT(576,380),
  0,
  0,
  0,
  ABISELECT(-976,-664),
  ABISELECT(-736,-488),
  ABISELECT(1584,1060),
  ABISELECT(-136,-88),
  ABISELECT(1456,972),
  ABISELECT(-176,-112),
  ABISELECT(-976,-664),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7549C4D1Ev,_ZTv0_n32_N7S7549C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7549C4D0Ev,_ZTv0_n32_N7S7549C4D0Ev),
  (VTBL_ENTRY)&_ZN8S7549C102v6Ev,
  (VTBL_ENTRY)&_ZN8S7549C102v7Ev,
  (VTBL_ENTRY)&_ZN7S7549C92v8Ev,
  ABISELECT(-992,-668),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N7S7549C4D1Ev,_ZTvn4_n32_N7S7549C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N7S7549C4D0Ev,_ZTvn4_n32_N7S7549C4D0Ev),
  ABISELECT(-752,-492),
  ABISELECT(-1552,-1044),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  ABISELECT(-1400,-932),
  ABISELECT(920,616),
  ABISELECT(-800,-532),
  ABISELECT(-840,-556),
  ABISELECT(792,528),
  ABISELECT(-1640,-1108),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn664_n64_N7S7549C4D1Ev,_ZTvn444_n32_N7S7549C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn664_n64_N7S7549C4D0Ev,_ZTvn444_n32_N7S7549C4D0Ev),
  ABISELECT(-880,-580),
  ABISELECT(-1680,-1132),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  ABISELECT(-1768,-1196),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  ABISELECT(40,24),
  0,
  0,
  0,
  ABISELECT(-1592,-1060),
  ABISELECT(-1632,-1084),
  ABISELECT(-2432,-1636),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
  ABISELECT(-1672,-1108),
  ABISELECT(-2472,-1660),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  ABISELECT(-1720,-1148),
  ABISELECT(-1760,-1172),
  ABISELECT(-128,-88),
  ABISELECT(-2560,-1724),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
};
extern VTBL_ENTRY _ZTV7S7549C4[];
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C8__A__7S7549C4[] = {
  ABISELECT(840,576),
  ABISELECT(800,552),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C8__7S7549C4[] = {
  ABISELECT(760,528),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C27S7549C8__7S7549C4[] = {
  0,
  ABISELECT(-760,-528),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C2__7S7549C8__A__7S7549C4[] = {
  ABISELECT(760,528),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__A1__7S7549C8__A__7S7549C4[] = {
  0,
  ABISELECT(-800,-552),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__7S7549C8__A__7S7549C4[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-840,-576),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C37S7549C6__A2__7S7549C8__A__7S7549C4[] = {
  ABISELECT(-928,-640),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C2__A2__7S7549C4[] = {
  ABISELECT(672,464),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C2__A2__7S7549C4[] = {
  0,
  ABISELECT(-672,-464),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__7S7549C4[] = {
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C6[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C6__A1__7S7549C4[] = {
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C27S7549C6__A1__7S7549C4[] = {
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C6__7S7549C4[] = {
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S7549C6[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C9D1Ev();
extern void _ZN7S7549C9D0Ev();
extern void _ZN8S7549C102v6Ev();
extern void _ZN8S7549C102v7Ev();
extern void _ZN7S7549C92v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C9__7S7549C4[] = {
  ABISELECT(-736,-488),
  ABISELECT(1584,1060),
  ABISELECT(-136,-88),
  ABISELECT(1456,972),
  ABISELECT(-176,-112),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&_ZN7S7549C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7549C9D0Ev,
  (VTBL_ENTRY)&_ZN8S7549C102v6Ev,
  (VTBL_ENTRY)&_ZN8S7549C102v7Ev,
  (VTBL_ENTRY)&_ZN7S7549C92v8Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C9__A3__7S7549C4[] = {
  ABISELECT(-752,-492),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C27S7549C9__A3__7S7549C4[] = {
  0,
  ABISELECT(752,492),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C32v2Ev();
extern void _ZN8S7549C11D1Ev();
extern void _ZN8S7549C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7549C117S7549C9__7S7549C4[] = {
  ABISELECT(-1400,-932),
  ABISELECT(920,616),
  ABISELECT(-800,-532),
  ABISELECT(-840,-556),
  ABISELECT(792,528),
  0,
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN8S7549C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7549C11D0Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C68S7549C117S7549C9__A1__7S7549C4[] = {
  ABISELECT(-880,-580),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C6[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C68S7549C117S7549C9__A5__7S7549C4[] = {
  ABISELECT(-880,-580),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C27S7549C68S7549C117S7549C9__A5__7S7549C4[] = {
  0,
  ABISELECT(880,580),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C68S7549C117S7549C9__A1__7S7549C4[] = {
  0,
  ABISELECT(880,580),
  (VTBL_ENTRY)&(_ZTI7S7549C6[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C8__8S7549C117S7549C9__7S7549C4[] = {
  ABISELECT(40,24),
  0,
  0,
  0,
  ABISELECT(-1592,-1060),
  ABISELECT(-1632,-1084),
  ABISELECT(-792,-528),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C8__8S7549C117S7549C9__7S7549C4[] = {
  ABISELECT(-1672,-1108),
  ABISELECT(-832,-552),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__A2__8S7549C117S7549C9__7S7549C4[] = {
  0,
  ABISELECT(840,556),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__8S7549C117S7549C9__7S7549C4[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(-40,-24),
  ABISELECT(800,532),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C37S7549C6__A3__8S7549C117S7549C9__7S7549C4[] = {
  ABISELECT(712,468),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7549C7__8S7549C117S7549C9__7S7549C4[] = {
  ABISELECT(-1720,-1148),
  ABISELECT(-1760,-1172),
  ABISELECT(-128,-88),
  ABISELECT(-920,-616),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__A__8S7549C117S7549C9__7S7549C4[] = {
  ABISELECT(-880,-580),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7549C11D1Ev,_ZTv0_n12_N8S7549C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7549C11D0Ev,_ZTv0_n12_N8S7549C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7549C5__8S7549C117S7549C9__7S7549C4[] = {
  ABISELECT(1400,932),
  ABISELECT(1400,932),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7549C11D1Ev,_ZTv0_n12_N8S7549C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7549C11D0Ev,_ZTv0_n12_N8S7549C11D0Ev),
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C2__7S7549C9__7S7549C4[] = {
  ABISELECT(-752,-492),
  ABISELECT(-576,-380),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C9__7S7549C4[] = {
  0,
  ABISELECT(176,112),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C32v2Ev();
extern void ABISELECT(_ZThn664_N7S7549C9D1Ev,_ZThn444_N7S7549C9D1Ev)();
extern void ABISELECT(_ZThn664_N7S7549C9D0Ev,_ZThn444_N7S7549C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7549C11__7S7549C9__7S7549C4[] = {
  ABISELECT(-1400,-932),
  ABISELECT(920,616),
  ABISELECT(-800,-532),
  ABISELECT(-840,-556),
  ABISELECT(792,528),
  ABISELECT(-664,-444),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn664_N7S7549C9D1Ev,_ZThn444_N7S7549C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn664_N7S7549C9D0Ev,_ZThn444_N7S7549C9D0Ev),
};
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C8__7S7549C9__7S7549C4[] = {
  ABISELECT(40,24),
  0,
  0,
  0,
  ABISELECT(-1592,-1060),
  ABISELECT(-1632,-1084),
  ABISELECT(-1456,-972),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C8__A1__7S7549C9__7S7549C4[] = {
  ABISELECT(-1672,-1108),
  ABISELECT(-1496,-996),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__7S7549C9__7S7549C4[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(-40,-24),
  ABISELECT(136,88),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C37S7549C6__A3__7S7549C9__7S7549C4[] = {
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7549C7__7S7549C9__7S7549C4[] = {
  ABISELECT(-1720,-1148),
  ABISELECT(-1760,-1172),
  ABISELECT(-128,-88),
  ABISELECT(-1584,-1060),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C68S7549C11__A1__7S7549C9__7S7549C4[] = {
  ABISELECT(-880,-580),
  ABISELECT(-704,-468),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7549C9D1Ev,_ZTv0_n12_N7S7549C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7549C9D0Ev,_ZTv0_n12_N7S7549C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7549C5__A1__7S7549C9__7S7549C4[] = {
  ABISELECT(736,488),
  ABISELECT(736,488),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7549C9D1Ev,_ZTv0_n12_N7S7549C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7549C9D0Ev,_ZTv0_n12_N7S7549C9D0Ev),
};
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C8__A1__7S7549C4[] = {
  ABISELECT(-1592,-1060),
  ABISELECT(-1632,-1084),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C8__A4__7S7549C4[] = {
  ABISELECT(-1672,-1108),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C27S7549C8__A4__7S7549C4[] = {
  0,
  ABISELECT(1672,1108),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C2__7S7549C8__A1__7S7549C4[] = {
  ABISELECT(-1672,-1108),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__A1__7S7549C8__A1__7S7549C4[] = {
  0,
  ABISELECT(1632,1084),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__7S7549C8__A1__7S7549C4[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(-40,-24),
  ABISELECT(1592,1060),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C37S7549C6__A2__7S7549C8__A1__7S7549C4[] = {
  ABISELECT(1504,996),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7549C7__7S7549C4[] = {
  ABISELECT(-1720,-1148),
  ABISELECT(-1760,-1172),
  ABISELECT(-128,-88),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
};
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C8__7S7549C7__7S7549C4[] = {
  ABISELECT(40,24),
  0,
  0,
  0,
  ABISELECT(-1592,-1060),
  ABISELECT(-1632,-1084),
  ABISELECT(128,88),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C8__7S7549C7__7S7549C4[] = {
  ABISELECT(-1672,-1108),
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__A1__7S7549C7__7S7549C4[] = {
  0,
  ABISELECT(1760,1172),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__7S7549C7__7S7549C4[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(-40,-24),
  ABISELECT(1720,1148),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C37S7549C6__A2__7S7549C7__7S7549C4[] = {
  ABISELECT(1632,1084),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
static  VTT_ENTRY vtt_S7549C4[] = {
  {&(_ZTV7S7549C4[8]),  8,102},
  {&(_tg__ZTV7S7549C8__A__7S7549C4[4]),  4,7},
  {&(_tg__ZTV7S7549C27S7549C8__7S7549C4[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C27S7549C8__7S7549C4[3]),  3,4},
  {&(_tg__ZTV7S7549C2__7S7549C8__A__7S7549C4[3]),  3,4},
  {&(_tg__ZTV7S7549C3__A1__7S7549C8__A__7S7549C4[3]),  3,4},
  {&(_tg__ZTV7S7549C6__7S7549C8__A__7S7549C4[5]),  5,6},
  {&(_tg__ZTV7S7549C37S7549C6__A2__7S7549C8__A__7S7549C4[2]),  2,3},
  {&(_tg__ZTV7S7549C2__A2__7S7549C4[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C2__A2__7S7549C4[3]),  3,4},
  {&(_ZTV7S7549C4[24]),  24,102},
  {&(_ZTV7S7549C4[16]),  16,102},
  {&(_ZTV7S7549C4[29]),  29,102},
  {&(_ZTV7S7549C4[35]),  35,102},
  {&(_ZTV7S7549C4[38]),  38,102},
  {&(_ZTV7S7549C4[20]),  20,102},
  {&(_ZTV7S7549C4[52]),  52,102},
  {&(_ZTV7S7549C4[59]),  59,102},
  {&(_ZTV7S7549C4[64]),  64,102},
  {&(_ZTV7S7549C4[72]),  72,102},
  {&(_ZTV7S7549C4[90]),  90,102},
  {&(_ZTV7S7549C4[96]),  96,102},
  {&(_ZTV7S7549C4[102]),  102,102},
  {&(_ZTV7S7549C4[78]),  78,102},
  {&(_ZTV7S7549C4[81]),  81,102},
  {&(_tg__ZTV7S7549C6__7S7549C4[3]),  3,4},
  {&(_tg__ZTV7S7549C27S7549C6__A1__7S7549C4[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C27S7549C6__A1__7S7549C4[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C6__7S7549C4[3]),  3,4},
  {&(_tg__ZTV7S7549C9__7S7549C4[7]),  7,12},
  {&(_tg__ZTV7S7549C27S7549C9__A3__7S7549C4[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C27S7549C9__A3__7S7549C4[3]),  3,4},
  {&(_tg__ZTV8S7549C117S7549C9__7S7549C4[7]),  7,10},
  {&(_tg__ZTV7S7549C68S7549C117S7549C9__A1__7S7549C4[3]),  3,4},
  {&(_tg__ZTV7S7549C27S7549C68S7549C117S7549C9__A5__7S7549C4[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C27S7549C68S7549C117S7549C9__A5__7S7549C4[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C68S7549C117S7549C9__A1__7S7549C4[3]),  3,4},
  {&(_tg__ZTV7S7549C8__8S7549C117S7549C9__7S7549C4[8]),  8,11},
  {&(_tg__ZTV7S7549C27S7549C8__8S7549C117S7549C9__7S7549C4[3]),  3,4},
  {&(_tg__ZTV7S7549C3__A2__8S7549C117S7549C9__7S7549C4[3]),  3,4},
  {&(_tg__ZTV7S7549C6__8S7549C117S7549C9__7S7549C4[5]),  5,6},
  {&(_tg__ZTV7S7549C37S7549C6__A3__8S7549C117S7549C9__7S7549C4[2]),  2,3},
  {&(_tg__ZTV7S7549C7__8S7549C117S7549C9__7S7549C4[5]),  5,5},
  {&(_tg__ZTV7S7549C6__A__8S7549C117S7549C9__7S7549C4[3]),  3,4},
  {&(_tg__ZTV7S7549C5__8S7549C117S7549C9__7S7549C4[3]),  3,5},
  {&(_tg__ZTV7S7549C2__7S7549C9__7S7549C4[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C9__7S7549C4[3]),  3,4},
  {&(_tg__ZTV8S7549C11__7S7549C9__7S7549C4[7]),  7,10},
  {&(_tg__ZTV7S7549C8__7S7549C9__7S7549C4[8]),  8,11},
  {&(_tg__ZTV7S7549C27S7549C8__A1__7S7549C9__7S7549C4[3]),  3,4},
  {&(_tg__ZTV7S7549C6__7S7549C9__7S7549C4[5]),  5,6},
  {&(_tg__ZTV7S7549C37S7549C6__A3__7S7549C9__7S7549C4[2]),  2,3},
  {&(_tg__ZTV7S7549C7__7S7549C9__7S7549C4[5]),  5,5},
  {&(_tg__ZTV7S7549C68S7549C11__A1__7S7549C9__7S7549C4[3]),  3,4},
  {&(_tg__ZTV7S7549C5__A1__7S7549C9__7S7549C4[3]),  3,5},
  {&(_tg__ZTV7S7549C8__A1__7S7549C4[4]),  4,7},
  {&(_tg__ZTV7S7549C27S7549C8__A4__7S7549C4[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C27S7549C8__A4__7S7549C4[3]),  3,4},
  {&(_tg__ZTV7S7549C2__7S7549C8__A1__7S7549C4[3]),  3,4},
  {&(_tg__ZTV7S7549C3__A1__7S7549C8__A1__7S7549C4[3]),  3,4},
  {&(_tg__ZTV7S7549C6__7S7549C8__A1__7S7549C4[5]),  5,6},
  {&(_tg__ZTV7S7549C37S7549C6__A2__7S7549C8__A1__7S7549C4[2]),  2,3},
  {&(_tg__ZTV7S7549C7__7S7549C4[5]),  5,5},
  {&(_tg__ZTV7S7549C8__7S7549C7__7S7549C4[8]),  8,11},
  {&(_tg__ZTV7S7549C27S7549C8__7S7549C7__7S7549C4[3]),  3,4},
  {&(_tg__ZTV7S7549C3__A1__7S7549C7__7S7549C4[3]),  3,4},
  {&(_tg__ZTV7S7549C6__7S7549C7__7S7549C4[5]),  5,6},
  {&(_tg__ZTV7S7549C37S7549C6__A2__7S7549C7__7S7549C4[2]),  2,3},
};
extern VTBL_ENTRY _ZTI7S7549C4[];
extern  VTBL_ENTRY _ZTV7S7549C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C4[];
static VTBL_ENTRY alt_thunk_names69[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7549C4D0Ev,_ZTv0_n32_N7S7549C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn976_N7S7549C4D0Ev,_ZThn664_N7S7549C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7549C4D1Ev,_ZTv0_n32_N7S7549C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn976_N7S7549C4D1Ev,_ZThn664_N7S7549C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7549C4D0Ev,_ZTv0_n12_N7S7549C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7549C4D0Ev,_ZThn176_N7S7549C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7549C4D1Ev,_ZTv0_n12_N7S7549C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7549C4D1Ev,_ZThn176_N7S7549C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7549C4 = {  "S7549C4", // class name
  bases_S7549C4, 22,
  &(vtc_S7549C4[0]), // expected_vtbl_contents
  &(vtt_S7549C4[0]), // expected_vtt_contents
  ABISELECT(2608,1756), // object size
  NSPAIRA(_ZTI7S7549C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7549C4),102, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7549C4),68, //virtual table table var
  22, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names69,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7549C12  : virtual S7549C3 , S7549C8 {
  int s7549c12f0[2];
  virtual void  v9(); // _ZN8S7549C122v9Ev
  ~S7549C12(); // tgen
  S7549C12(); // tgen
};
//SIG(-1 S7549C12) C1{ VBC2{ v2 Fp[2] Fi Fs Fi} BC3{ BC2 BC4{ VBC2 v3 FC2 Fi[9]} VBC5{ BC4 BC2} v4 v5} v1 Fi[2]}


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

static void Test_S7549C12()
{
  extern Class_Descriptor cd_S7549C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,53)];
    init_test(&cd_S7549C12, buf);
    S7549C12 *dp, &lv = *(dp=new (buf) S7549C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,208), "sizeof(S7549C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7549C12)");
    /*is_ambiguous_... S7549C12::S7549C3 */ AMB_check_base_class_offset(lv, (S7549C3*), ABISELECT(136,96), "S7549C12");
    /*is_ambiguous_... S7549C8::S7549C2 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C2*)(S7549C8*), ABISELECT(136,96), "S7549C12");
    check_base_class_offset(lv, (S7549C3*)(S7549C2*)(S7549C6*), ABISELECT(136,96), "S7549C12");
    /*is_ambiguous_... S7549C8::S7549C3 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C8*), 0, "S7549C12");
    /*is_ambiguous_... S7549C8::S7549C2 */ AMB_check_base_class_offset(lv, (S7549C2*)(S7549C8*), ABISELECT(40,24), "S7549C12");
    check_base_class_offset(lv, (S7549C2*)(S7549C6*), ABISELECT(176,120), "S7549C12");
    /*is_ambiguous_... S7549C6::S7549C3 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C6*), ABISELECT(264,184), "S7549C12");
    check_base_class_offset(lv, (S7549C6*)(S7549C8*), ABISELECT(176,120), "S7549C12");
    check_base_class_offset(lv, (S7549C8*), 0, "S7549C12");
    check_field_offset(lv, s7549c12f0, ABISELECT(124,88), "S7549C12.s7549c12f0");
    test_class_info(&lv, &cd_S7549C12);
    dp->~S7549C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7549C12(Test_S7549C12, "S7549C12", ABISELECT(304,208));

#else // __cplusplus

extern void _ZN8S7549C12C1Ev();
extern void _ZN8S7549C12D1Ev();
Name_Map name_map_S7549C12[] = {
  NSPAIR(_ZN8S7549C12C1Ev),
  NSPAIR(_ZN8S7549C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C2;
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
extern Class_Descriptor cd_S7549C2;
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C6;
extern VTBL_ENTRY _ZTI7S7549C6[];
extern  VTBL_ENTRY _ZTV7S7549C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C6[];
extern Class_Descriptor cd_S7549C8;
extern VTBL_ENTRY _ZTI7S7549C8[];
extern  VTBL_ENTRY _ZTV7S7549C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C8[];
static Base_Class bases_S7549C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7549C3,    ABISELECT(136,96), //bcp->offset
    12, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S7549C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S7549C2,    ABISELECT(40,24), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7549C2,    ABISELECT(176,120), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7549C3,    ABISELECT(264,184), //bcp->offset
    22, //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
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7549C6,    ABISELECT(176,120), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //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_S7549C8,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7549C12[];
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
extern void _ZN8S7549C122v9Ev();
extern void _ZN7S7549C22v3Ev();
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C22v3Ev();
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY vtc_S7549C12[] = {
  ABISELECT(176,120),
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S7549C12[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
  (VTBL_ENTRY)&_ZN8S7549C122v9Ev,
  ABISELECT(96,72),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S7549C12[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  0,
  ABISELECT(-136,-96),
  (VTBL_ENTRY)&(_ZTI8S7549C12[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  ABISELECT(88,64),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-176,-120),
  (VTBL_ENTRY)&(_ZTI8S7549C12[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  ABISELECT(-264,-184),
  (VTBL_ENTRY)&(_ZTI8S7549C12[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern VTBL_ENTRY _ZTV8S7549C12[];
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C8__8S7549C12[] = {
  ABISELECT(176,120),
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C8__8S7549C12[] = {
  ABISELECT(96,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C27S7549C8__8S7549C12[] = {
  0,
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C2__7S7549C8__8S7549C12[] = {
  ABISELECT(96,72),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__A1__7S7549C8__8S7549C12[] = {
  0,
  ABISELECT(-136,-96),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__7S7549C8__8S7549C12[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-176,-120),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C37S7549C6__A2__7S7549C8__8S7549C12[] = {
  ABISELECT(-264,-184),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__8S7549C12[] = {
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C6[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C6__A1__8S7549C12[] = {
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C27S7549C6__A1__8S7549C12[] = {
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C6__8S7549C12[] = {
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S7549C6[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
static  VTT_ENTRY vtt_S7549C12[] = {
  {&(_ZTV8S7549C12[4]),  4,25},
  {&(_tg__ZTV7S7549C8__8S7549C12[4]),  4,7},
  {&(_tg__ZTV7S7549C27S7549C8__8S7549C12[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C27S7549C8__8S7549C12[3]),  3,4},
  {&(_tg__ZTV7S7549C2__7S7549C8__8S7549C12[3]),  3,4},
  {&(_tg__ZTV7S7549C3__A1__7S7549C8__8S7549C12[3]),  3,4},
  {&(_tg__ZTV7S7549C6__7S7549C8__8S7549C12[5]),  5,6},
  {&(_tg__ZTV7S7549C37S7549C6__A2__7S7549C8__8S7549C12[2]),  2,3},
  {&(_ZTV8S7549C12[15]),  15,25},
  {&(_ZTV8S7549C12[11]),  11,25},
  {&(_ZTV8S7549C12[21]),  21,25},
  {&(_ZTV8S7549C12[24]),  24,25},
  {&(_tg__ZTV7S7549C6__8S7549C12[3]),  3,4},
  {&(_tg__ZTV7S7549C27S7549C6__A1__8S7549C12[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C27S7549C6__A1__8S7549C12[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C6__8S7549C12[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S7549C12[];
extern  VTBL_ENTRY _ZTV8S7549C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7549C12[];
Class_Descriptor cd_S7549C12 = {  "S7549C12", // class name
  bases_S7549C12, 7,
  &(vtc_S7549C12[0]), // expected_vtbl_contents
  &(vtt_S7549C12[0]), // expected_vtt_contents
  ABISELECT(304,208), // object size
  NSPAIRA(_ZTI8S7549C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7549C12),25, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7549C12),16, //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  S7549C1  : S7549C2 , virtual S7549C4 , S7549C12 , S7549C7 {
  int s7549c1f0;
  void *s7549c1f1;
  int s7549c1f2[2];
  void *s7549c1f3[3];
  virtual void  v1(); // _ZN7S7549C12v1Ev
  ~S7549C1(); // tgen
  S7549C1(); // tgen
};
//SIG(1 S7549C1) C1{ BC2{ VBC3{ v2 Fp[2] Fi Fs Fi} v3 FC3 Fi[9]} VBC4{ VBC5{ vd m FC6{ BC2 BC3} Fp FC3 FC7{ VBC8{ BC3 BC2 VBC6 v4 v5} Fi Fi:25 FD Fi[2]}} BC8 BC2 VBC9{ BC10{ vd v6 v7} BC5 BC2 BC11{ BC3 VBC8 VBC7 BC6 VBC5 vd Fi:13 Fp[5] Fi Fc Fi[2]} v8 FC5} Fc[5] Fi[2] FL} BC12{ VBC3 BC8 v9 Fi[2]} BC7 v1 Fi Fp Fi[2] Fp[3]}


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

static void Test_S7549C1()
{
  extern Class_Descriptor cd_S7549C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(183,495)];
    init_test(&cd_S7549C1, buf);
    S7549C1 *dp, &lv = *(dp=new (buf) S7549C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2912,1976), "sizeof(S7549C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7549C1)");
    /*is_ambiguous_... S7549C1::S7549C2 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C2*), ABISELECT(312,220), "S7549C1");
    /*is_ambiguous_... S7549C4::S7549C8 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C2*)(S7549C8*)(S7549C4*), ABISELECT(312,220), "S7549C1");
    /*is_ambiguous_... S7549C1::S7549C6 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C2*)(S7549C6*), ABISELECT(312,220), "S7549C1");
    /*is_ambiguous_... S7549C4::S7549C2 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C2*)(S7549C4*), ABISELECT(312,220), "S7549C1");
    /*is_ambiguous_... S7549C9::S7549C2 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C2*)(S7549C9*), ABISELECT(312,220), "S7549C1");
    /*is_ambiguous_... S7549C1::S7549C8 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C2*)(S7549C8*), ABISELECT(312,220), "S7549C1");
    /*is_ambiguous_... S7549C11::S7549C6 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C2*)(S7549C6*)(S7549C11*)(S7549C9*), ABISELECT(312,220), "S7549C1");
    /*is_ambiguous_... S7549C12::S7549C3 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C12*), ABISELECT(312,220), "S7549C1");
    /*is_ambiguous_... S7549C8::S7549C2 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C2*)(S7549C8*)(S7549C12*), ABISELECT(312,220), "S7549C1");
    /*is_ambiguous_... S7549C1::S7549C2 */ AMB_check_base_class_offset(lv, (S7549C2*), 0, "S7549C1");
    /*is_ambiguous_... S7549C4::S7549C5 */ AMB_check_base_class_offset(lv, (S7549C5*)(S7549C4*), ABISELECT(592,420), "S7549C1");
    check_base_class_offset(lv, (S7549C5*)(S7549C11*)(S7549C9*), ABISELECT(592,420), "S7549C1");
    /*is_ambiguous_... S7549C4::S7549C8 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C8*)(S7549C4*), ABISELECT(352,244), "S7549C1");
    /*is_ambiguous_... S7549C4::S7549C8 */ AMB_check_base_class_offset(lv, (S7549C2*)(S7549C8*)(S7549C4*), ABISELECT(392,268), "S7549C1");
    /*is_ambiguous_... S7549C1::S7549C6 */ AMB_check_base_class_offset(lv, (S7549C2*)(S7549C6*), ABISELECT(1152,796), "S7549C1");
    /*is_ambiguous_... S7549C1::S7549C6 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C6*), ABISELECT(1240,860), "S7549C1");
    /*is_ambiguous_... S7549C4::S7549C8 */ AMB_check_base_class_offset(lv, (S7549C6*)(S7549C8*)(S7549C4*), ABISELECT(1152,796), "S7549C1");
    /*is_ambiguous_... S7549C1::S7549C8 */ AMB_check_base_class_offset(lv, (S7549C6*)(S7549C8*), ABISELECT(1152,796), "S7549C1");
    check_base_class_offset(lv, (S7549C6*)(S7549C8*)(S7549C12*), ABISELECT(1152,796), "S7549C1");
    /*is_ambiguous_... S7549C4::S7549C8 */ AMB_check_base_class_offset(lv, (S7549C8*)(S7549C4*), ABISELECT(352,244), "S7549C1");
    /*is_ambiguous_... S7549C4::S7549C2 */ AMB_check_base_class_offset(lv, (S7549C2*)(S7549C4*), ABISELECT(480,332), "S7549C1");
    check_base_class_offset(lv, (S7549C10*)(S7549C9*), ABISELECT(1280,884), "S7549C1");
    /*is_ambiguous_... S7549C9::S7549C5 */ AMB_check_base_class_offset(lv, (S7549C5*)(S7549C9*), ABISELECT(1296,888), "S7549C1");
    /*is_ambiguous_... S7549C9::S7549C2 */ AMB_check_base_class_offset(lv, (S7549C2*)(S7549C9*), ABISELECT(1856,1264), "S7549C1");
    /*is_ambiguous_... S7549C11::S7549C3 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C11*)(S7549C9*), ABISELECT(1944,1328), "S7549C1");
    /*is_ambiguous_... S7549C1::S7549C8 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C8*), ABISELECT(2736,1856), "S7549C1");
    /*is_ambiguous_... S7549C1::S7549C8 */ AMB_check_base_class_offset(lv, (S7549C2*)(S7549C8*), ABISELECT(2776,1880), "S7549C1");
    check_base_class_offset(lv, (S7549C8*)(S7549C11*)(S7549C9*), ABISELECT(2736,1856), "S7549C1");
    /*is_ambiguous_... S7549C1::S7549C7 */ AMB_check_base_class_offset(lv, (S7549C8*)(S7549C7*), ABISELECT(2736,1856), "S7549C1");
    /*is_ambiguous_... S7549C1::S7549C7 */ AMB_check_base_class_offset(lv, (S7549C8*)(S7549C7*), ABISELECT(2736,1856), "S7549C1");
    check_base_class_offset(lv, (S7549C7*)(S7549C11*)(S7549C9*), ABISELECT(2864,1944), "S7549C1");
    /*is_ambiguous_... S7549C11::S7549C6 */ AMB_check_base_class_offset(lv, (S7549C2*)(S7549C6*)(S7549C11*)(S7549C9*), ABISELECT(1984,1352), "S7549C1");
    /*is_ambiguous_... S7549C11::S7549C6 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C6*)(S7549C11*)(S7549C9*), ABISELECT(2072,1416), "S7549C1");
    /*is_ambiguous_... S7549C11::S7549C6 */ AMB_check_base_class_offset(lv, (S7549C6*)(S7549C11*)(S7549C9*), ABISELECT(1984,1352), "S7549C1");
    check_base_class_offset(lv, (S7549C11*)(S7549C9*), ABISELECT(1944,1328), "S7549C1");
    check_base_class_offset(lv, (S7549C9*)(S7549C4*), ABISELECT(1280,884), "S7549C1");
    check_base_class_offset(lv, (S7549C4*), ABISELECT(352,244), "S7549C1");
    /*is_ambiguous_... S7549C8::S7549C3 */ AMB_check_base_class_offset(lv, (S7549C3*)(S7549C8*)(S7549C12*), ABISELECT(88,64), "S7549C1");
    /*is_ambiguous_... S7549C8::S7549C2 */ AMB_check_base_class_offset(lv, (S7549C2*)(S7549C8*)(S7549C12*), ABISELECT(128,88), "S7549C1");
    check_base_class_offset(lv, (S7549C8*)(S7549C12*), ABISELECT(88,64), "S7549C1");
    check_base_class_offset(lv, (S7549C12*), ABISELECT(88,64), "S7549C1");
    /*is_ambiguous_... S7549C1::S7549C7 */ AMB_check_base_class_offset(lv, (S7549C7*), ABISELECT(224,160), "S7549C1");
    check_field_offset(lv, s7549c1f0, ABISELECT(264,192), "S7549C1.s7549c1f0");
    check_field_offset(lv, s7549c1f1, ABISELECT(272,196), "S7549C1.s7549c1f1");
    check_field_offset(lv, s7549c1f2, ABISELECT(280,200), "S7549C1.s7549c1f2");
    check_field_offset(lv, s7549c1f3, ABISELECT(288,208), "S7549C1.s7549c1f3");
    test_class_info(&lv, &cd_S7549C1);
    dp->~S7549C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7549C1(Test_S7549C1, "S7549C1", ABISELECT(2912,1976));

#else // __cplusplus

extern void _ZN7S7549C1C1Ev();
extern void _ZN7S7549C1D1Ev();
Name_Map name_map_S7549C1[] = {
  NSPAIR(_ZN7S7549C1C1Ev),
  NSPAIR(_ZN7S7549C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C2;
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
extern Class_Descriptor cd_S7549C5;
extern VTBL_ENTRY _ZTI7S7549C5[];
extern  VTBL_ENTRY _ZTV7S7549C5[];
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C2;
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
extern Class_Descriptor cd_S7549C2;
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C6;
extern VTBL_ENTRY _ZTI7S7549C6[];
extern  VTBL_ENTRY _ZTV7S7549C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C6[];
extern Class_Descriptor cd_S7549C8;
extern VTBL_ENTRY _ZTI7S7549C8[];
extern  VTBL_ENTRY _ZTV7S7549C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C8[];
extern Class_Descriptor cd_S7549C2;
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
extern Class_Descriptor cd_S7549C10;
extern VTBL_ENTRY _ZTI8S7549C10[];
extern  VTBL_ENTRY _ZTV8S7549C10[];
extern Class_Descriptor cd_S7549C5;
extern VTBL_ENTRY _ZTI7S7549C5[];
extern  VTBL_ENTRY _ZTV7S7549C5[];
extern Class_Descriptor cd_S7549C2;
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C2;
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
extern Class_Descriptor cd_S7549C8;
extern VTBL_ENTRY _ZTI7S7549C8[];
extern  VTBL_ENTRY _ZTV7S7549C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C8[];
extern Class_Descriptor cd_S7549C7;
extern VTBL_ENTRY _ZTI7S7549C7[];
extern  VTBL_ENTRY _ZTV7S7549C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C7[];
extern Class_Descriptor cd_S7549C2;
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C6;
extern VTBL_ENTRY _ZTI7S7549C6[];
extern  VTBL_ENTRY _ZTV7S7549C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C6[];
extern Class_Descriptor cd_S7549C11;
extern VTBL_ENTRY _ZTI8S7549C11[];
extern  VTBL_ENTRY _ZTV8S7549C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7549C11[];
extern Class_Descriptor cd_S7549C9;
extern VTBL_ENTRY _ZTI7S7549C9[];
extern  VTBL_ENTRY _ZTV7S7549C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C9[];
extern Class_Descriptor cd_S7549C4;
extern VTBL_ENTRY _ZTI7S7549C4[];
extern  VTBL_ENTRY _ZTV7S7549C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C4[];
extern Class_Descriptor cd_S7549C3;
extern VTBL_ENTRY _ZTI7S7549C3[];
extern  VTBL_ENTRY _ZTV7S7549C3[];
extern Class_Descriptor cd_S7549C2;
extern VTBL_ENTRY _ZTI7S7549C2[];
extern  VTBL_ENTRY _ZTV7S7549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C2[];
extern Class_Descriptor cd_S7549C8;
extern VTBL_ENTRY _ZTI7S7549C8[];
extern  VTBL_ENTRY _ZTV7S7549C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C8[];
extern Class_Descriptor cd_S7549C12;
extern VTBL_ENTRY _ZTI8S7549C12[];
extern  VTBL_ENTRY _ZTV8S7549C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7549C12[];
extern Class_Descriptor cd_S7549C7;
extern VTBL_ENTRY _ZTI7S7549C7[];
extern  VTBL_ENTRY _ZTV7S7549C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C7[];
static Base_Class bases_S7549C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7549C3,    ABISELECT(312,220), //bcp->offset
    30, //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
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7549C2,    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
    24, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7549C5,    ABISELECT(592,420), //bcp->offset
    60, //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
    2, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7549C3,    ABISELECT(352,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
    19, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7549C2,    ABISELECT(392,268), //bcp->offset
    52, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7549C2,    ABISELECT(1152,796), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7549C3,    ABISELECT(1240,860), //bcp->offset
    71, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7549C6,    ABISELECT(1152,796), //bcp->offset
    65, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7549C8,    ABISELECT(352,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S7549C2,    ABISELECT(480,332), //bcp->offset
    56, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S7549C10,    ABISELECT(1280,884), //bcp->offset
    -1, //bcp->virtual_function_table_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
    22, //immediately_derived
  0, 0},
  {&cd_S7549C5,    ABISELECT(1296,888), //bcp->offset
    92, //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
    11, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7549C2,    ABISELECT(1856,1264), //bcp->offset
    96, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7549C3,    ABISELECT(1944,1328), //bcp->offset
    -1, //bcp->virtual_function_table_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
    21, //immediately_derived
  0, 0},
  {&cd_S7549C3,    ABISELECT(2736,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
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7549C2,    ABISELECT(2776,1880), //bcp->offset
    128, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    97, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7549C8,    ABISELECT(2736,1856), //bcp->offset
    117, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    96, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7549C7,    ABISELECT(2864,1944), //bcp->offset
    132, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    103, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7549C2,    ABISELECT(1984,1352), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    75, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7549C3,    ABISELECT(2072,1416), //bcp->offset
    114, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7549C6,    ABISELECT(1984,1352), //bcp->offset
    110, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7549C11,    ABISELECT(1944,1328), //bcp->offset
    100, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7549C9,    ABISELECT(1280,884), //bcp->offset
    74, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S7549C4,    ABISELECT(352,244), //bcp->offset
    34, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7549C3,    ABISELECT(88,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
    25, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7549C2,    ABISELECT(128,88), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7549C8,    ABISELECT(88,64), //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
    27, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7549C12,    ABISELECT(88,64), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7549C7,    ABISELECT(224,160), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7549C1[];
extern void _ZN7S7549C22v3Ev();
extern void _ZN7S7549C12v1Ev();
extern void _ZN7S7549C1D1Ev();
extern void _ZN7S7549C1D0Ev();
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
extern void _ZN8S7549C122v9Ev();
extern void _ZN7S7549C22v3Ev();
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
extern void ABISELECT(_ZTv0_n104_N7S7549C1D1Ev,_ZTv0_n52_N7S7549C1D1Ev)();
extern void ABISELECT(_ZThn352_N7S7549C1D1Ev,_ZThn244_N7S7549C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S7549C1D0Ev,_ZTv0_n52_N7S7549C1D0Ev)();
extern void ABISELECT(_ZThn352_N7S7549C1D0Ev,_ZThn244_N7S7549C1D0Ev)() __attribute__((weak));
extern void _ZN7S7549C22v3Ev();
extern void _ZN7S7549C22v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S7549C1D1Ev,_ZTv0_n12_N7S7549C1D1Ev)();
extern void ABISELECT(_ZThn592_N7S7549C1D1Ev,_ZThn420_N7S7549C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7549C1D0Ev,_ZTv0_n12_N7S7549C1D0Ev)();
extern void ABISELECT(_ZThn592_N7S7549C1D0Ev,_ZThn420_N7S7549C1D0Ev)() __attribute__((weak));
extern void _ZN7S7549C22v3Ev();
extern void _ZN7S7549C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N7S7549C1D1Ev,_ZTv0_n32_N7S7549C1D1Ev)();
extern void ABISELECT(_ZThn1280_N7S7549C1D1Ev,_ZThn884_N7S7549C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7549C1D0Ev,_ZTv0_n32_N7S7549C1D0Ev)();
extern void ABISELECT(_ZThn1280_N7S7549C1D0Ev,_ZThn884_N7S7549C1D0Ev)() __attribute__((weak));
extern void _ZN8S7549C102v6Ev();
extern void _ZN8S7549C102v7Ev();
extern void _ZN7S7549C92v8Ev();
extern void ABISELECT(_ZTvn16_n64_N7S7549C1D1Ev,_ZTvn4_n32_N7S7549C1D1Ev)();
extern void ABISELECT(_ZTvn16_n64_N7S7549C1D0Ev,_ZTvn4_n32_N7S7549C1D0Ev)();
extern void _ZN7S7549C22v3Ev();
extern void _ZN7S7549C32v2Ev();
extern void ABISELECT(_ZTvn664_n64_N7S7549C1D1Ev,_ZTvn444_n32_N7S7549C1D1Ev)();
extern void ABISELECT(_ZTvn664_n64_N7S7549C1D0Ev,_ZTvn444_n32_N7S7549C1D0Ev)();
extern void _ZN7S7549C22v3Ev();
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY vtc_S7549C1[] = {
  ABISELECT(2864,1944),
  ABISELECT(2736,1856),
  ABISELECT(1280,884),
  ABISELECT(1152,796),
  ABISELECT(592,420),
  ABISELECT(352,244),
  ABISELECT(312,220),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C1[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7549C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7549C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7549C1D0Ev,
  ABISELECT(1064,732),
  ABISELECT(224,156),
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI7S7549C1[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
  (VTBL_ENTRY)&_ZN8S7549C122v9Ev,
  ABISELECT(184,132),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI7S7549C1[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  ABISELECT(928,636),
  ABISELECT(88,60),
  ABISELECT(2512,1696),
  ABISELECT(-224,-160),
  (VTBL_ENTRY)&(_ZTI7S7549C1[0]),
  0,
  ABISELECT(-312,-220),
  (VTBL_ENTRY)&(_ZTI7S7549C1[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  ABISELECT(-352,-244),
  ABISELECT(40,24),
  0,
  0,
  0,
  ABISELECT(2512,1700),
  ABISELECT(2384,1612),
  ABISELECT(928,640),
  ABISELECT(240,176),
  ABISELECT(800,552),
  ABISELECT(-40,-24),
  ABISELECT(-352,-244),
  (VTBL_ENTRY)&(_ZTI7S7549C1[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7549C1D1Ev,_ZTv0_n52_N7S7549C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7549C1D0Ev,_ZTv0_n52_N7S7549C1D0Ev),
  ABISELECT(-80,-48),
  ABISELECT(-392,-268),
  (VTBL_ENTRY)&(_ZTI7S7549C1[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  ABISELECT(-168,-112),
  ABISELECT(-480,-332),
  (VTBL_ENTRY)&(_ZTI7S7549C1[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  ABISELECT(-592,-420),
  ABISELECT(-592,-420),
  (VTBL_ENTRY)&(_ZTI7S7549C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7549C1D1Ev,_ZTv0_n12_N7S7549C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7549C1D0Ev,_ZTv0_n12_N7S7549C1D0Ev),
  ABISELECT(88,64),
  0,
  ABISELECT(-840,-576),
  ABISELECT(-1152,-796),
  (VTBL_ENTRY)&(_ZTI7S7549C1[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  ABISELECT(-1240,-860),
  (VTBL_ENTRY)&(_ZTI7S7549C1[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  ABISELECT(664,444),
  ABISELECT(576,380),
  0,
  0,
  0,
  ABISELECT(-1280,-884),
  ABISELECT(-688,-464),
  ABISELECT(1584,1060),
  ABISELECT(-128,-88),
  ABISELECT(1456,972),
  ABISELECT(-968,-664),
  ABISELECT(-1280,-884),
  (VTBL_ENTRY)&(_ZTI7S7549C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7549C1D1Ev,_ZTv0_n32_N7S7549C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7549C1D0Ev,_ZTv0_n32_N7S7549C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7549C102v6Ev,
  (VTBL_ENTRY)&_ZN8S7549C102v7Ev,
  (VTBL_ENTRY)&_ZN7S7549C92v8Ev,
  ABISELECT(-1296,-888),
  (VTBL_ENTRY)&(_ZTI7S7549C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N7S7549C1D1Ev,_ZTvn4_n32_N7S7549C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N7S7549C1D0Ev,_ZTvn4_n32_N7S7549C1D0Ev),
  ABISELECT(-1544,-1044),
  ABISELECT(-1856,-1264),
  (VTBL_ENTRY)&(_ZTI7S7549C1[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  ABISELECT(-1352,-908),
  ABISELECT(920,616),
  ABISELECT(-792,-532),
  ABISELECT(-1632,-1108),
  ABISELECT(792,528),
  ABISELECT(-1944,-1328),
  (VTBL_ENTRY)&(_ZTI7S7549C1[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn664_n64_N7S7549C1D1Ev,_ZTvn444_n32_N7S7549C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn664_n64_N7S7549C1D0Ev,_ZTvn444_n32_N7S7549C1D0Ev),
  ABISELECT(-1672,-1132),
  ABISELECT(-1984,-1352),
  (VTBL_ENTRY)&(_ZTI7S7549C1[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  ABISELECT(-2072,-1416),
  (VTBL_ENTRY)&(_ZTI7S7549C1[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  ABISELECT(40,24),
  0,
  0,
  0,
  ABISELECT(-1584,-1060),
  ABISELECT(-2424,-1636),
  ABISELECT(-2736,-1856),
  (VTBL_ENTRY)&(_ZTI7S7549C1[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
  ABISELECT(-2464,-1660),
  ABISELECT(-2776,-1880),
  (VTBL_ENTRY)&(_ZTI7S7549C1[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
  ABISELECT(-1712,-1148),
  ABISELECT(-2552,-1724),
  ABISELECT(-128,-88),
  ABISELECT(-2864,-1944),
  (VTBL_ENTRY)&(_ZTI7S7549C1[0]),
};
extern VTBL_ENTRY _ZTV7S7549C1[];
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C2__7S7549C1[] = {
  ABISELECT(312,220),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C2__7S7549C1[] = {
  0,
  ABISELECT(-312,-220),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
extern void _ZN8S7549C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7549C12__7S7549C1[] = {
  ABISELECT(1064,732),
  ABISELECT(224,156),
  0,
  (VTBL_ENTRY)&(_ZTI8S7549C12[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
  (VTBL_ENTRY)&_ZN8S7549C122v9Ev,
};
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C88S7549C12__A2__7S7549C1[] = {
  ABISELECT(1064,732),
  ABISELECT(224,156),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C88S7549C12__A7__7S7549C1[] = {
  ABISELECT(184,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C27S7549C88S7549C12__A7__7S7549C1[] = {
  0,
  ABISELECT(-184,-132),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C2__7S7549C88S7549C12__A2__7S7549C1[] = {
  ABISELECT(184,132),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__A1__7S7549C88S7549C12__A2__7S7549C1[] = {
  0,
  ABISELECT(-224,-156),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__7S7549C88S7549C12__A2__7S7549C1[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(-840,-576),
  ABISELECT(-1064,-732),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C37S7549C6__A2__7S7549C88S7549C12__A2__7S7549C1[] = {
  ABISELECT(-1152,-796),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__8S7549C12__7S7549C1[] = {
  0,
  ABISELECT(-224,-156),
  (VTBL_ENTRY)&(_ZTI8S7549C12[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C8__8S7549C12__7S7549C1[] = {
  ABISELECT(184,132),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S7549C12[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__8S7549C12__7S7549C1[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(-840,-576),
  ABISELECT(-1064,-732),
  (VTBL_ENTRY)&(_ZTI8S7549C12[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C37S7549C6__A2__8S7549C12__7S7549C1[] = {
  ABISELECT(-1152,-796),
  (VTBL_ENTRY)&(_ZTI8S7549C12[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7549C7__A__7S7549C1[] = {
  ABISELECT(928,636),
  ABISELECT(88,60),
  ABISELECT(2512,1696),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
};
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C8__7S7549C7__A__7S7549C1[] = {
  ABISELECT(40,24),
  0,
  0,
  0,
  ABISELECT(-1584,-1060),
  ABISELECT(-2424,-1636),
  ABISELECT(-2512,-1696),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C8__7S7549C7__A__7S7549C1[] = {
  ABISELECT(-2464,-1660),
  ABISELECT(-2552,-1720),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__A1__7S7549C7__A__7S7549C1[] = {
  0,
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__7S7549C7__A__7S7549C1[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(-840,-576),
  ABISELECT(-928,-636),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C37S7549C6__A2__7S7549C7__A__7S7549C1[] = {
  ABISELECT(-1016,-700),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
extern void _ZN7S7549C4D1Ev();
extern void _ZN7S7549C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C4__7S7549C1[] = {
  ABISELECT(2512,1700),
  ABISELECT(2384,1612),
  ABISELECT(928,640),
  ABISELECT(240,176),
  ABISELECT(800,552),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
  (VTBL_ENTRY)&_ZN7S7549C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7549C4D0Ev,
};
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C87S7549C4__7S7549C1[] = {
  ABISELECT(800,552),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C87S7549C4__A1__7S7549C1[] = {
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C27S7549C87S7549C4__A1__7S7549C1[] = {
  0,
  ABISELECT(80,48),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C2__7S7549C87S7549C4__7S7549C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__A1__7S7549C87S7549C4__7S7549C1[] = {
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__7S7549C87S7549C4__7S7549C1[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(-840,-576),
  ABISELECT(-800,-552),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C37S7549C6__A2__7S7549C87S7549C4__7S7549C1[] = {
  ABISELECT(-888,-616),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C4__A3__7S7549C1[] = {
  ABISELECT(-168,-112),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C27S7549C4__A3__7S7549C1[] = {
  0,
  ABISELECT(168,112),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7549C4D1Ev,_ZTv0_n12_N7S7549C4D1Ev)();
extern void ABISELECT(_ZThn240_N7S7549C4D1Ev,_ZThn176_N7S7549C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7549C4D0Ev,_ZTv0_n12_N7S7549C4D0Ev)();
extern void ABISELECT(_ZThn240_N7S7549C4D0Ev,_ZThn176_N7S7549C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7549C5__7S7549C4__7S7549C1[] = {
  ABISELECT(-240,-176),
  ABISELECT(-240,-176),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7549C4D1Ev,_ZTv0_n12_N7S7549C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7549C4D0Ev,_ZTv0_n12_N7S7549C4D0Ev),
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C8__7S7549C4__7S7549C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__A1__7S7549C4__7S7549C1[] = {
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__7S7549C4__7S7549C1[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(-840,-576),
  ABISELECT(-800,-552),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C37S7549C6__A2__7S7549C4__7S7549C1[] = {
  ABISELECT(-888,-616),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C2__A2__7S7549C4__7S7549C1[] = {
  ABISELECT(-168,-112),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void ABISELECT(_ZTv0_n64_N7S7549C4D1Ev,_ZTv0_n32_N7S7549C4D1Ev)();
extern void ABISELECT(_ZThn928_N7S7549C4D1Ev,_ZThn640_N7S7549C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7549C4D0Ev,_ZTv0_n32_N7S7549C4D0Ev)();
extern void ABISELECT(_ZThn928_N7S7549C4D0Ev,_ZThn640_N7S7549C4D0Ev)() __attribute__((weak));
extern void _ZN8S7549C102v6Ev();
extern void _ZN8S7549C102v7Ev();
extern void _ZN7S7549C92v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C9__7S7549C4__7S7549C1[] = {
  ABISELECT(664,444),
  ABISELECT(576,380),
  0,
  0,
  0,
  ABISELECT(-928,-640),
  ABISELECT(-688,-464),
  ABISELECT(1584,1060),
  ABISELECT(-128,-88),
  ABISELECT(1456,972),
  ABISELECT(-968,-664),
  ABISELECT(-928,-640),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7549C4D1Ev,_ZTv0_n32_N7S7549C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7549C4D0Ev,_ZTv0_n32_N7S7549C4D0Ev),
  (VTBL_ENTRY)&_ZN8S7549C102v6Ev,
  (VTBL_ENTRY)&_ZN8S7549C102v7Ev,
  (VTBL_ENTRY)&_ZN7S7549C92v8Ev,
};
extern void ABISELECT(_ZTvn16_n64_N7S7549C4D1Ev,_ZTvn4_n32_N7S7549C4D1Ev)();
extern void ABISELECT(_ZTvn16_n64_N7S7549C4D0Ev,_ZTvn4_n32_N7S7549C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7549C57S7549C9__A1__7S7549C4__7S7549C1[] = {
  ABISELECT(-944,-644),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N7S7549C4D1Ev,_ZTvn4_n32_N7S7549C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N7S7549C4D0Ev,_ZTvn4_n32_N7S7549C4D0Ev),
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C9__A3__7S7549C4__7S7549C1[] = {
  ABISELECT(-1544,-1044),
  ABISELECT(-1504,-1020),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
extern void ABISELECT(_ZTvn664_n64_N7S7549C4D1Ev,_ZTvn444_n32_N7S7549C4D1Ev)();
extern void ABISELECT(_ZTvn664_n64_N7S7549C4D0Ev,_ZTvn444_n32_N7S7549C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7549C117S7549C9__7S7549C4__7S7549C1[] = {
  ABISELECT(-1352,-908),
  ABISELECT(920,616),
  ABISELECT(-792,-532),
  ABISELECT(-1632,-1108),
  ABISELECT(792,528),
  ABISELECT(-1592,-1084),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn664_n64_N7S7549C4D1Ev,_ZTvn444_n32_N7S7549C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn664_n64_N7S7549C4D0Ev,_ZTvn444_n32_N7S7549C4D0Ev),
};
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C8__A1__7S7549C4__7S7549C1[] = {
  ABISELECT(40,24),
  0,
  0,
  0,
  ABISELECT(-1584,-1060),
  ABISELECT(-2424,-1636),
  ABISELECT(-2384,-1612),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C8__A4__7S7549C4__7S7549C1[] = {
  ABISELECT(-2464,-1660),
  ABISELECT(-2424,-1636),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7549C7__7S7549C4__7S7549C1[] = {
  ABISELECT(-1712,-1148),
  ABISELECT(-2552,-1724),
  ABISELECT(-128,-88),
  ABISELECT(-2512,-1700),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C68S7549C117S7549C9__A1__7S7549C4__7S7549C1[] = {
  ABISELECT(-1672,-1132),
  ABISELECT(-1632,-1108),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C37S7549C68S7549C117S7549C9__A5__7S7549C4__7S7549C1[] = {
  ABISELECT(-1720,-1172),
  (VTBL_ENTRY)&(_ZTI7S7549C4[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__7S7549C1[] = {
  ABISELECT(-840,-576),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C6[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C6__A2__7S7549C1[] = {
  ABISELECT(-840,-576),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C27S7549C6__A2__7S7549C1[] = {
  0,
  ABISELECT(840,576),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C6__7S7549C1[] = {
  0,
  ABISELECT(840,576),
  (VTBL_ENTRY)&(_ZTI7S7549C6[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C9D1Ev();
extern void _ZN7S7549C9D0Ev();
extern void _ZN8S7549C102v6Ev();
extern void _ZN8S7549C102v7Ev();
extern void _ZN7S7549C92v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C9__7S7549C1[] = {
  ABISELECT(-688,-464),
  ABISELECT(1584,1060),
  ABISELECT(-128,-88),
  ABISELECT(1456,972),
  ABISELECT(-968,-664),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&_ZN7S7549C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7549C9D0Ev,
  (VTBL_ENTRY)&_ZN8S7549C102v6Ev,
  (VTBL_ENTRY)&_ZN8S7549C102v7Ev,
  (VTBL_ENTRY)&_ZN7S7549C92v8Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C9__A4__7S7549C1[] = {
  ABISELECT(-1544,-1044),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C27S7549C9__A4__7S7549C1[] = {
  0,
  ABISELECT(1544,1044),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C32v2Ev();
extern void _ZN8S7549C11D1Ev();
extern void _ZN8S7549C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7549C117S7549C9__7S7549C1[] = {
  ABISELECT(-1352,-908),
  ABISELECT(920,616),
  ABISELECT(-792,-532),
  ABISELECT(-1632,-1108),
  ABISELECT(792,528),
  0,
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN8S7549C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7549C11D0Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C68S7549C117S7549C9__A1__7S7549C1[] = {
  ABISELECT(-1672,-1132),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C6[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C68S7549C117S7549C9__A6__7S7549C1[] = {
  ABISELECT(-1672,-1132),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C27S7549C68S7549C117S7549C9__A6__7S7549C1[] = {
  0,
  ABISELECT(1672,1132),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C68S7549C117S7549C9__A1__7S7549C1[] = {
  0,
  ABISELECT(1672,1132),
  (VTBL_ENTRY)&(_ZTI7S7549C6[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C8__8S7549C117S7549C9__7S7549C1[] = {
  ABISELECT(40,24),
  0,
  0,
  0,
  ABISELECT(-1584,-1060),
  ABISELECT(-2424,-1636),
  ABISELECT(-792,-528),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C8__8S7549C117S7549C9__7S7549C1[] = {
  ABISELECT(-2464,-1660),
  ABISELECT(-832,-552),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__A2__8S7549C117S7549C9__7S7549C1[] = {
  0,
  ABISELECT(1632,1108),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__8S7549C117S7549C9__7S7549C1[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(-840,-576),
  ABISELECT(792,532),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C37S7549C6__A3__8S7549C117S7549C9__7S7549C1[] = {
  ABISELECT(704,468),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7549C7__8S7549C117S7549C9__7S7549C1[] = {
  ABISELECT(-1712,-1148),
  ABISELECT(-2552,-1724),
  ABISELECT(-128,-88),
  ABISELECT(-920,-616),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__A__8S7549C117S7549C9__7S7549C1[] = {
  ABISELECT(-1672,-1132),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7549C11D1Ev,_ZTv0_n12_N8S7549C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7549C11D0Ev,_ZTv0_n12_N8S7549C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7549C5__8S7549C117S7549C9__7S7549C1[] = {
  ABISELECT(1352,908),
  ABISELECT(1352,908),
  (VTBL_ENTRY)&(_ZTI8S7549C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7549C11D1Ev,_ZTv0_n12_N8S7549C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7549C11D0Ev,_ZTv0_n12_N8S7549C11D0Ev),
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C2__7S7549C9__7S7549C1[] = {
  ABISELECT(-1544,-1044),
  ABISELECT(-576,-380),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C9__7S7549C1[] = {
  0,
  ABISELECT(968,664),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C32v2Ev();
extern void ABISELECT(_ZThn664_N7S7549C9D1Ev,_ZThn444_N7S7549C9D1Ev)();
extern void ABISELECT(_ZThn664_N7S7549C9D0Ev,_ZThn444_N7S7549C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7549C11__7S7549C9__7S7549C1[] = {
  ABISELECT(-1352,-908),
  ABISELECT(920,616),
  ABISELECT(-792,-532),
  ABISELECT(-1632,-1108),
  ABISELECT(792,528),
  ABISELECT(-664,-444),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn664_N7S7549C9D1Ev,_ZThn444_N7S7549C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn664_N7S7549C9D0Ev,_ZThn444_N7S7549C9D0Ev),
};
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C8__7S7549C9__7S7549C1[] = {
  ABISELECT(40,24),
  0,
  0,
  0,
  ABISELECT(-1584,-1060),
  ABISELECT(-2424,-1636),
  ABISELECT(-1456,-972),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C8__A1__7S7549C9__7S7549C1[] = {
  ABISELECT(-2464,-1660),
  ABISELECT(-1496,-996),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__7S7549C9__7S7549C1[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(-840,-576),
  ABISELECT(128,88),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C37S7549C6__A3__7S7549C9__7S7549C1[] = {
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7549C7__7S7549C9__7S7549C1[] = {
  ABISELECT(-1712,-1148),
  ABISELECT(-2552,-1724),
  ABISELECT(-128,-88),
  ABISELECT(-1584,-1060),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C68S7549C11__A1__7S7549C9__7S7549C1[] = {
  ABISELECT(-1672,-1132),
  ABISELECT(-704,-468),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7549C9D1Ev,_ZTv0_n12_N7S7549C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7549C9D0Ev,_ZTv0_n12_N7S7549C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7549C5__A1__7S7549C9__7S7549C1[] = {
  ABISELECT(688,464),
  ABISELECT(688,464),
  (VTBL_ENTRY)&(_ZTI7S7549C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7549C9D1Ev,_ZTv0_n12_N7S7549C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7549C9D0Ev,_ZTv0_n12_N7S7549C9D0Ev),
};
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C8__A1__7S7549C1[] = {
  ABISELECT(-1584,-1060),
  ABISELECT(-2424,-1636),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C8__A5__7S7549C1[] = {
  ABISELECT(-2464,-1660),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__7S7549C27S7549C8__A5__7S7549C1[] = {
  0,
  ABISELECT(2464,1660),
  (VTBL_ENTRY)&(_ZTI7S7549C2[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C2__7S7549C8__A1__7S7549C1[] = {
  ABISELECT(-2464,-1660),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__A1__7S7549C8__A1__7S7549C1[] = {
  0,
  ABISELECT(2424,1636),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__7S7549C8__A1__7S7549C1[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(-840,-576),
  ABISELECT(1584,1060),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C37S7549C6__A2__7S7549C8__A1__7S7549C1[] = {
  ABISELECT(1496,996),
  (VTBL_ENTRY)&(_ZTI7S7549C8[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7549C7__7S7549C1[] = {
  ABISELECT(-1712,-1148),
  ABISELECT(-2552,-1724),
  ABISELECT(-128,-88),
  0,
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
};
extern void _ZN7S7549C32v2Ev();
extern void _ZN7S7549C82v4Ev();
extern void _ZN7S7549C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C8__7S7549C7__7S7549C1[] = {
  ABISELECT(40,24),
  0,
  0,
  0,
  ABISELECT(-1584,-1060),
  ABISELECT(-2424,-1636),
  ABISELECT(128,88),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7549C82v5Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C27S7549C8__7S7549C7__7S7549C1[] = {
  ABISELECT(-2464,-1660),
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C3__A1__7S7549C7__7S7549C1[] = {
  0,
  ABISELECT(2552,1724),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
extern void _ZN7S7549C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C6__7S7549C7__7S7549C1[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(-840,-576),
  ABISELECT(1712,1148),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C22v3Ev,
};
extern void _ZN7S7549C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7549C37S7549C6__A2__7S7549C7__7S7549C1[] = {
  ABISELECT(1624,1084),
  (VTBL_ENTRY)&(_ZTI7S7549C7[0]),
  (VTBL_ENTRY)&_ZN7S7549C32v2Ev,
};
static  VTT_ENTRY vtt_S7549C1[] = {
  {&(_ZTV7S7549C1[9]),  9,137},
  {&(_tg__ZTV7S7549C2__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C2__7S7549C1[3]),  3,4},
  {&(_tg__ZTV8S7549C12__7S7549C1[4]),  4,8},
  {&(_tg__ZTV7S7549C88S7549C12__A2__7S7549C1[4]),  4,7},
  {&(_tg__ZTV7S7549C27S7549C88S7549C12__A7__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C27S7549C88S7549C12__A7__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C2__7S7549C88S7549C12__A2__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C3__A1__7S7549C88S7549C12__A2__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C6__7S7549C88S7549C12__A2__7S7549C1[5]),  5,6},
  {&(_tg__ZTV7S7549C37S7549C6__A2__7S7549C88S7549C12__A2__7S7549C1[2]),  2,3},
  {&(_tg__ZTV7S7549C3__8S7549C12__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C27S7549C8__8S7549C12__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C6__8S7549C12__7S7549C1[5]),  5,6},
  {&(_tg__ZTV7S7549C37S7549C6__A2__8S7549C12__7S7549C1[2]),  2,3},
  {&(_tg__ZTV7S7549C7__A__7S7549C1[5]),  5,5},
  {&(_tg__ZTV7S7549C8__7S7549C7__A__7S7549C1[8]),  8,11},
  {&(_tg__ZTV7S7549C27S7549C8__7S7549C7__A__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C3__A1__7S7549C7__A__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C6__7S7549C7__A__7S7549C1[5]),  5,6},
  {&(_tg__ZTV7S7549C37S7549C6__A2__7S7549C7__A__7S7549C1[2]),  2,3},
  {&(_ZTV7S7549C1[33]),  33,137},
  {&(_ZTV7S7549C1[47]),  47,137},
  {&(_ZTV7S7549C1[63]),  63,137},
  {&(_ZTV7S7549C1[55]),  55,137},
  {&(_ZTV7S7549C1[70]),  70,137},
  {&(_ZTV7S7549C1[73]),  73,137},
  {&(_ZTV7S7549C1[59]),  59,137},
  {&(_ZTV7S7549C1[87]),  87,137},
  {&(_ZTV7S7549C1[94]),  94,137},
  {&(_ZTV7S7549C1[99]),  99,137},
  {&(_ZTV7S7549C1[107]),  107,137},
  {&(_ZTV7S7549C1[125]),  125,137},
  {&(_ZTV7S7549C1[131]),  131,137},
  {&(_ZTV7S7549C1[137]),  137,137},
  {&(_ZTV7S7549C1[113]),  113,137},
  {&(_ZTV7S7549C1[116]),  116,137},
  {&(_ZTV7S7549C1[17]),  17,137},
  {&(_ZTV7S7549C1[24]),  24,137},
  {&(_ZTV7S7549C1[30]),  30,137},
  {&(_tg__ZTV7S7549C4__7S7549C1[8]),  8,13},
  {&(_tg__ZTV7S7549C87S7549C4__7S7549C1[4]),  4,7},
  {&(_tg__ZTV7S7549C27S7549C87S7549C4__A1__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C27S7549C87S7549C4__A1__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C2__7S7549C87S7549C4__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C3__A1__7S7549C87S7549C4__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C6__7S7549C87S7549C4__7S7549C1[5]),  5,6},
  {&(_tg__ZTV7S7549C37S7549C6__A2__7S7549C87S7549C4__7S7549C1[2]),  2,3},
  {&(_tg__ZTV7S7549C27S7549C4__A3__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C27S7549C4__A3__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C5__7S7549C4__7S7549C1[3]),  3,5},
  {&(_tg__ZTV7S7549C27S7549C8__7S7549C4__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C3__A1__7S7549C4__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C6__7S7549C4__7S7549C1[5]),  5,6},
  {&(_tg__ZTV7S7549C37S7549C6__A2__7S7549C4__7S7549C1[2]),  2,3},
  {&(_tg__ZTV7S7549C2__A2__7S7549C4__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C9__7S7549C4__7S7549C1[13]),  13,18},
  {&(_tg__ZTV7S7549C57S7549C9__A1__7S7549C4__7S7549C1[2]),  2,4},
  {&(_tg__ZTV7S7549C27S7549C9__A3__7S7549C4__7S7549C1[3]),  3,4},
  {&(_tg__ZTV8S7549C117S7549C9__7S7549C4__7S7549C1[7]),  7,10},
  {&(_tg__ZTV7S7549C8__A1__7S7549C4__7S7549C1[8]),  8,11},
  {&(_tg__ZTV7S7549C27S7549C8__A4__7S7549C4__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C7__7S7549C4__7S7549C1[5]),  5,5},
  {&(_tg__ZTV7S7549C68S7549C117S7549C9__A1__7S7549C4__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C37S7549C68S7549C117S7549C9__A5__7S7549C4__7S7549C1[2]),  2,3},
  {&(_tg__ZTV7S7549C6__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C27S7549C6__A2__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C27S7549C6__A2__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C6__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C9__7S7549C1[7]),  7,12},
  {&(_tg__ZTV7S7549C27S7549C9__A4__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C27S7549C9__A4__7S7549C1[3]),  3,4},
  {&(_tg__ZTV8S7549C117S7549C9__7S7549C1[7]),  7,10},
  {&(_tg__ZTV7S7549C68S7549C117S7549C9__A1__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C27S7549C68S7549C117S7549C9__A6__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C27S7549C68S7549C117S7549C9__A6__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C68S7549C117S7549C9__A1__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C8__8S7549C117S7549C9__7S7549C1[8]),  8,11},
  {&(_tg__ZTV7S7549C27S7549C8__8S7549C117S7549C9__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C3__A2__8S7549C117S7549C9__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C6__8S7549C117S7549C9__7S7549C1[5]),  5,6},
  {&(_tg__ZTV7S7549C37S7549C6__A3__8S7549C117S7549C9__7S7549C1[2]),  2,3},
  {&(_tg__ZTV7S7549C7__8S7549C117S7549C9__7S7549C1[5]),  5,5},
  {&(_tg__ZTV7S7549C6__A__8S7549C117S7549C9__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C5__8S7549C117S7549C9__7S7549C1[3]),  3,5},
  {&(_tg__ZTV7S7549C2__7S7549C9__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C9__7S7549C1[3]),  3,4},
  {&(_tg__ZTV8S7549C11__7S7549C9__7S7549C1[7]),  7,10},
  {&(_tg__ZTV7S7549C8__7S7549C9__7S7549C1[8]),  8,11},
  {&(_tg__ZTV7S7549C27S7549C8__A1__7S7549C9__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C6__7S7549C9__7S7549C1[5]),  5,6},
  {&(_tg__ZTV7S7549C37S7549C6__A3__7S7549C9__7S7549C1[2]),  2,3},
  {&(_tg__ZTV7S7549C7__7S7549C9__7S7549C1[5]),  5,5},
  {&(_tg__ZTV7S7549C68S7549C11__A1__7S7549C9__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C5__A1__7S7549C9__7S7549C1[3]),  3,5},
  {&(_tg__ZTV7S7549C8__A1__7S7549C1[4]),  4,7},
  {&(_tg__ZTV7S7549C27S7549C8__A5__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C3__7S7549C27S7549C8__A5__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C2__7S7549C8__A1__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C3__A1__7S7549C8__A1__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C6__7S7549C8__A1__7S7549C1[5]),  5,6},
  {&(_tg__ZTV7S7549C37S7549C6__A2__7S7549C8__A1__7S7549C1[2]),  2,3},
  {&(_tg__ZTV7S7549C7__7S7549C1[5]),  5,5},
  {&(_tg__ZTV7S7549C8__7S7549C7__7S7549C1[8]),  8,11},
  {&(_tg__ZTV7S7549C27S7549C8__7S7549C7__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C3__A1__7S7549C7__7S7549C1[3]),  3,4},
  {&(_tg__ZTV7S7549C6__7S7549C7__7S7549C1[5]),  5,6},
  {&(_tg__ZTV7S7549C37S7549C6__A2__7S7549C7__7S7549C1[2]),  2,3},
};
extern VTBL_ENTRY _ZTI7S7549C1[];
extern  VTBL_ENTRY _ZTV7S7549C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7549C1[];
static VTBL_ENTRY alt_thunk_names70[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7549C4D0Ev,_ZTv0_n32_N7S7549C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn928_N7S7549C4D0Ev,_ZThn640_N7S7549C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7549C4D1Ev,_ZTv0_n32_N7S7549C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn928_N7S7549C4D1Ev,_ZThn640_N7S7549C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7549C4D0Ev,_ZTv0_n12_N7S7549C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7549C4D0Ev,_ZThn176_N7S7549C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7549C4D1Ev,_ZTv0_n12_N7S7549C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7549C4D1Ev,_ZThn176_N7S7549C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7549C1D0Ev,_ZTv0_n32_N7S7549C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1280_N7S7549C1D0Ev,_ZThn884_N7S7549C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7549C1D1Ev,_ZTv0_n32_N7S7549C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1280_N7S7549C1D1Ev,_ZThn884_N7S7549C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7549C1D0Ev,_ZTv0_n12_N7S7549C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N7S7549C1D0Ev,_ZThn420_N7S7549C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7549C1D1Ev,_ZTv0_n12_N7S7549C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N7S7549C1D1Ev,_ZThn420_N7S7549C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7549C1D0Ev,_ZTv0_n52_N7S7549C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S7549C1D0Ev,_ZThn244_N7S7549C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7549C1D1Ev,_ZTv0_n52_N7S7549C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S7549C1D1Ev,_ZThn244_N7S7549C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7549C1 = {  "S7549C1", // class name
  bases_S7549C1, 29,
  &(vtc_S7549C1[0]), // expected_vtbl_contents
  &(vtt_S7549C1[0]), // expected_vtt_contents
  ABISELECT(2912,1976), // object size
  NSPAIRA(_ZTI7S7549C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7549C1),137, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7549C1),108, //virtual table table var
  29, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names70,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1679C4_nt  {
  int s1679c4f0;
  void  mf1679c4(); // _ZN10S1679C4_nt8mf1679c4Ev
  virtual  ~S1679C4_nt(); // _ZN10S1679C4_ntD1Ev
  S1679C4_nt(); // tgen
};
//SIG(-1 S1679C4_nt) C1{ vd m Fi}


void  S1679C4_nt ::mf1679c4(){}
 S1679C4_nt ::~S1679C4_nt(){ note_dtor("S1679C4_nt", this);}
S1679C4_nt ::S1679C4_nt(){ note_ctor("S1679C4_nt", this);} // tgen

//skip512 S1679C4_nt

#else // __cplusplus

extern void _ZN10S1679C4_ntC1Ev();
extern void _ZN10S1679C4_ntD1Ev();
Name_Map name_map_S1679C4_nt[] = {
  NSPAIR(_ZN10S1679C4_ntC1Ev),
  NSPAIR(_ZN10S1679C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern void _ZN10S1679C4_ntD1Ev();
extern void _ZN10S1679C4_ntD0Ev();
static  VTBL_ENTRY vtc_S1679C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1679C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S1679C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1679C4_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
VTBL_ENTRY *P__ZTI10S1679C4_nt = _ZTI10S1679C4_nt; 
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
Class_Descriptor cd_S1679C4_nt = {  "S1679C4_nt", // class name
  0,0,//no base classes
  &(vtc_S1679C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S1679C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1679C4_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  S1679C3  : S1679C4_nt {
  virtual void  v4(); // _ZN7S1679C32v4Ev
  virtual void  v5(); // _ZN7S1679C32v5Ev
  virtual void  v6(); // _ZN7S1679C32v6Ev
  virtual void  v7(); // _ZN7S1679C32v7Ev
  virtual void  v8(); // _ZN7S1679C32v8Ev
  virtual void  v9(); // _ZN7S1679C32v9Ev
  virtual void  v10(); // _ZN7S1679C33v10Ev
  virtual void  v11(); // _ZN7S1679C33v11Ev
  virtual void  v12(); // _ZN7S1679C33v12Ev
  virtual void  v13(); // _ZN7S1679C33v13Ev
  virtual void  v14(); // _ZN7S1679C33v14Ev
  virtual void  v15(); // _ZN7S1679C33v15Ev
  ~S1679C3(); // tgen
  S1679C3(); // tgen
};
//SIG(-1 S1679C3) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S1679C3 ::v4(){vfunc_called(this, "_ZN7S1679C32v4Ev");}
void  S1679C3 ::v5(){vfunc_called(this, "_ZN7S1679C32v5Ev");}
void  S1679C3 ::v6(){vfunc_called(this, "_ZN7S1679C32v6Ev");}
void  S1679C3 ::v7(){vfunc_called(this, "_ZN7S1679C32v7Ev");}
void  S1679C3 ::v8(){vfunc_called(this, "_ZN7S1679C32v8Ev");}
void  S1679C3 ::v9(){vfunc_called(this, "_ZN7S1679C32v9Ev");}
void  S1679C3 ::v10(){vfunc_called(this, "_ZN7S1679C33v10Ev");}
void  S1679C3 ::v11(){vfunc_called(this, "_ZN7S1679C33v11Ev");}
void  S1679C3 ::v12(){vfunc_called(this, "_ZN7S1679C33v12Ev");}
void  S1679C3 ::v13(){vfunc_called(this, "_ZN7S1679C33v13Ev");}
void  S1679C3 ::v14(){vfunc_called(this, "_ZN7S1679C33v14Ev");}
void  S1679C3 ::v15(){vfunc_called(this, "_ZN7S1679C33v15Ev");}
S1679C3 ::~S1679C3(){ note_dtor("S1679C3", this);} // tgen
S1679C3 ::S1679C3(){ note_ctor("S1679C3", this);} // tgen

static void Test_S1679C3()
{
  extern Class_Descriptor cd_S1679C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1679C3, buf);
    S1679C3 *dp, &lv = *(dp=new (buf) S1679C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1679C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1679C3)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S1679C3");
    test_class_info(&lv, &cd_S1679C3);
    dp->~S1679C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1679C3(Test_S1679C3, "S1679C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1679C3C1Ev();
extern void _ZN7S1679C3D1Ev();
Name_Map name_map_S1679C3[] = {
  NSPAIR(_ZN7S1679C3C1Ev),
  NSPAIR(_ZN7S1679C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S1679C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S1679C3[];
extern void _ZN7S1679C3D1Ev();
extern void _ZN7S1679C3D0Ev();
extern void _ZN7S1679C32v4Ev();
extern void _ZN7S1679C32v5Ev();
extern void _ZN7S1679C32v6Ev();
extern void _ZN7S1679C32v7Ev();
extern void _ZN7S1679C32v8Ev();
extern void _ZN7S1679C32v9Ev();
extern void _ZN7S1679C33v10Ev();
extern void _ZN7S1679C33v11Ev();
extern void _ZN7S1679C33v12Ev();
extern void _ZN7S1679C33v13Ev();
extern void _ZN7S1679C33v14Ev();
extern void _ZN7S1679C33v15Ev();
static  VTBL_ENTRY vtc_S1679C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1679C3[0]),
  (VTBL_ENTRY)&_ZN7S1679C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1679C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1679C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1679C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1679C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1679C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1679C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1679C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1679C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1679C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1679C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1679C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1679C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1679C33v15Ev,
};
extern VTBL_ENTRY _ZTI7S1679C3[];
extern  VTBL_ENTRY _ZTV7S1679C3[];
Class_Descriptor cd_S1679C3 = {  "S1679C3", // class name
  bases_S1679C3, 1,
  &(vtc_S1679C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1679C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1679C3),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1679C8_nt  {
  ::S5266C28_nt s1679c8f0;
  void *s1679c8f1[2];
  void  mf1679c8(); // _ZN10S1679C8_nt8mf1679c8Ev
};
//SIG(-1 S1679C8_nt) C1{ m FC2{ m Fp Fi[2] FC3{ m}} Fp[2]}


void  S1679C8_nt ::mf1679c8(){}

//skip512 S1679C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1679C2  : S1679C3 {
  ::S79C38_nt s1679c2f0;
  ::S5266C36 s1679c2f1;
  ::S1679C8_nt s1679c2f2;
  void *s1679c2f3[4];
  char s1679c2f4;
  __tsi64 s1679c2f5;
  int s1679c2f6;
  virtual  ~S1679C2(); // _ZN7S1679C2D1Ev
  virtual void  v16(); // _ZN7S1679C23v16Ev
  virtual void  v17(); // _ZN7S1679C23v17Ev
  virtual void  v18(); // _ZN7S1679C23v18Ev
  virtual void  v19(); // _ZN7S1679C23v19Ev
  virtual void  v20(); // _ZN7S1679C23v20Ev
  virtual void  v21(); // _ZN7S1679C23v21Ev
  virtual void  v22(); // _ZN7S1679C23v22Ev
  virtual void  v23(); // _ZN7S1679C23v23Ev
  virtual void  v24(); // _ZN7S1679C23v24Ev
  virtual void  v25(); // _ZN7S1679C23v25Ev
  virtual void  v26(); // _ZN7S1679C23v26Ev
  S1679C2(); // tgen
};
//SIG(-1 S1679C2) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 FC4{ m Fp[2]} FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FC8{ m Fp Fi[2] FC6} Fp[2]} Fp[4] Fc FL Fi}


 S1679C2 ::~S1679C2(){ note_dtor("S1679C2", this);}
void  S1679C2 ::v16(){vfunc_called(this, "_ZN7S1679C23v16Ev");}
void  S1679C2 ::v17(){vfunc_called(this, "_ZN7S1679C23v17Ev");}
void  S1679C2 ::v18(){vfunc_called(this, "_ZN7S1679C23v18Ev");}
void  S1679C2 ::v19(){vfunc_called(this, "_ZN7S1679C23v19Ev");}
void  S1679C2 ::v20(){vfunc_called(this, "_ZN7S1679C23v20Ev");}
void  S1679C2 ::v21(){vfunc_called(this, "_ZN7S1679C23v21Ev");}
void  S1679C2 ::v22(){vfunc_called(this, "_ZN7S1679C23v22Ev");}
void  S1679C2 ::v23(){vfunc_called(this, "_ZN7S1679C23v23Ev");}
void  S1679C2 ::v24(){vfunc_called(this, "_ZN7S1679C23v24Ev");}
void  S1679C2 ::v25(){vfunc_called(this, "_ZN7S1679C23v25Ev");}
void  S1679C2 ::v26(){vfunc_called(this, "_ZN7S1679C23v26Ev");}
S1679C2 ::S1679C2(){ note_ctor("S1679C2", this);} // tgen

static void Test_S1679C2()
{
  extern Class_Descriptor cd_S1679C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,23)];
    init_test(&cd_S1679C2, buf);
    S1679C2 *dp, &lv = *(dp=new (buf) S1679C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,88), "sizeof(S1679C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1679C2)");
    check_base_class_offset(lv, (S1679C4_nt*)(S1679C3*), 0, "S1679C2");
    check_base_class_offset(lv, (S1679C3*), 0, "S1679C2");
    check_field_offset(lv, s1679c2f0, ABISELECT(16,8), "S1679C2.s1679c2f0");
    check_field_offset(lv, s1679c2f1, ABISELECT(32,16), "S1679C2.s1679c2f1");
    check_field_offset(lv, s1679c2f2, ABISELECT(56,32), "S1679C2.s1679c2f2");
    check_field_offset(lv, s1679c2f3, ABISELECT(96,56), "S1679C2.s1679c2f3");
    check_field_offset(lv, s1679c2f4, ABISELECT(128,72), "S1679C2.s1679c2f4");
    check_field_offset(lv, s1679c2f5, ABISELECT(136,76), "S1679C2.s1679c2f5");
    check_field_offset(lv, s1679c2f6, ABISELECT(144,84), "S1679C2.s1679c2f6");
    test_class_info(&lv, &cd_S1679C2);
    dp->~S1679C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1679C2(Test_S1679C2, "S1679C2", ABISELECT(152,88));

#else // __cplusplus

extern void _ZN7S1679C2C1Ev();
extern void _ZN7S1679C2D1Ev();
Name_Map name_map_S1679C2[] = {
  NSPAIR(_ZN7S1679C2C1Ev),
  NSPAIR(_ZN7S1679C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S1679C3;
extern VTBL_ENTRY _ZTI7S1679C3[];
extern  VTBL_ENTRY _ZTV7S1679C3[];
static Base_Class bases_S1679C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S1679C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1679C2[];
extern void _ZN7S1679C2D1Ev();
extern void _ZN7S1679C2D0Ev();
extern void _ZN7S1679C32v4Ev();
extern void _ZN7S1679C32v5Ev();
extern void _ZN7S1679C32v6Ev();
extern void _ZN7S1679C32v7Ev();
extern void _ZN7S1679C32v8Ev();
extern void _ZN7S1679C32v9Ev();
extern void _ZN7S1679C33v10Ev();
extern void _ZN7S1679C33v11Ev();
extern void _ZN7S1679C33v12Ev();
extern void _ZN7S1679C33v13Ev();
extern void _ZN7S1679C33v14Ev();
extern void _ZN7S1679C33v15Ev();
extern void _ZN7S1679C23v16Ev();
extern void _ZN7S1679C23v17Ev();
extern void _ZN7S1679C23v18Ev();
extern void _ZN7S1679C23v19Ev();
extern void _ZN7S1679C23v20Ev();
extern void _ZN7S1679C23v21Ev();
extern void _ZN7S1679C23v22Ev();
extern void _ZN7S1679C23v23Ev();
extern void _ZN7S1679C23v24Ev();
extern void _ZN7S1679C23v25Ev();
extern void _ZN7S1679C23v26Ev();
static  VTBL_ENTRY vtc_S1679C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1679C2[0]),
  (VTBL_ENTRY)&_ZN7S1679C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1679C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1679C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1679C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1679C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1679C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1679C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1679C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1679C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1679C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1679C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1679C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1679C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1679C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1679C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1679C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1679C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1679C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1679C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1679C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1679C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1679C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1679C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1679C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1679C23v26Ev,
};
extern VTBL_ENTRY _ZTI7S1679C2[];
extern  VTBL_ENTRY _ZTV7S1679C2[];
Class_Descriptor cd_S1679C2 = {  "S1679C2", // class name
  bases_S1679C2, 2,
  &(vtc_S1679C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,88), // object size
  NSPAIRA(_ZTI7S1679C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1679C2),27, //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  S1679C11_nt  {
  ::S5266C25 s1679c11f0;
  ::S5266C21 s1679c11f1;
  char s1679c11f2;
  void  mf1679c11(); // _ZN11S1679C11_nt9mf1679c11Ev
  virtual  ~S1679C11_nt(); // _ZN11S1679C11_ntD1Ev
  S1679C11_nt(); // tgen
};
//SIG(-1 S1679C11_nt) C1{ vd m FC2{ m Fp Fi FC3{ m} FC3} FC4{ m Fp Fi FC5{ m} FC5} Fc}


void  S1679C11_nt ::mf1679c11(){}
 S1679C11_nt ::~S1679C11_nt(){ note_dtor("S1679C11_nt", this);}
S1679C11_nt ::S1679C11_nt(){ note_ctor("S1679C11_nt", this);} // tgen

//skip512 S1679C11_nt

#else // __cplusplus

extern void _ZN11S1679C11_ntC1Ev();
extern void _ZN11S1679C11_ntD1Ev();
Name_Map name_map_S1679C11_nt[] = {
  NSPAIR(_ZN11S1679C11_ntC1Ev),
  NSPAIR(_ZN11S1679C11_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S1679C11_nt[];
extern void _ZN11S1679C11_ntD1Ev();
extern void _ZN11S1679C11_ntD0Ev();
static  VTBL_ENTRY vtc_S1679C11_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S1679C11_nt[0]),
  (VTBL_ENTRY)&_ZN11S1679C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S1679C11_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S1679C11_nt[];
VTBL_ENTRY *P__ZTI11S1679C11_nt = _ZTI11S1679C11_nt; 
extern  VTBL_ENTRY _ZTV11S1679C11_nt[];
Class_Descriptor cd_S1679C11_nt = {  "S1679C11_nt", // class name
  0,0,//no base classes
  &(vtc_S1679C11_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI11S1679C11_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S1679C11_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  S1679C1  : S1679C2 , S1679C11_nt {
  int s1679c1f0;
  virtual  ~S1679C1(); // _ZN7S1679C1D1Ev
  virtual void  v1(); // _ZN7S1679C12v1Ev
  virtual void  v2(); // _ZN7S1679C12v2Ev
  virtual void  v3(); // _ZN7S1679C12v3Ev
  S1679C1(); // tgen
};
//SIG(1 S1679C1) C1{ BC2{ BC3{ BC4{ vd m Fi} v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15} vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 FC5{ m Fp[2]} FC6{ m Fp Fi[2] FC7{ m}} FC8{ m FC9{ m Fp Fi[2] FC7} Fp[2]} Fp[4] Fc FL Fi} BC10{ vd m FC11{ m Fp Fi FC12{ m} FC12} FC13{ m Fp Fi FC14{ m} FC14} Fc} vd v1 v2 v3 Fi}


 S1679C1 ::~S1679C1(){ note_dtor("S1679C1", this);}
void  S1679C1 ::v1(){vfunc_called(this, "_ZN7S1679C12v1Ev");}
void  S1679C1 ::v2(){vfunc_called(this, "_ZN7S1679C12v2Ev");}
void  S1679C1 ::v3(){vfunc_called(this, "_ZN7S1679C12v3Ev");}
S1679C1 ::S1679C1(){ note_ctor("S1679C1", this);} // tgen

static void Test_S1679C1()
{
  extern Class_Descriptor cd_S1679C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,32)];
    init_test(&cd_S1679C1, buf);
    S1679C1 *dp, &lv = *(dp=new (buf) S1679C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,124), "sizeof(S1679C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1679C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S1679C3*)(S1679C2*), 0, "S1679C1");
    check_base_class_offset(lv, (S1679C3*)(S1679C2*), 0, "S1679C1");
    check_base_class_offset(lv, (S1679C2*), 0, "S1679C1");
    check_base_class_offset(lv, (S1679C11_nt*), ABISELECT(152,88), "S1679C1");
    check_field_offset(lv, s1679c1f0, ABISELECT(196,120), "S1679C1.s1679c1f0");
    test_class_info(&lv, &cd_S1679C1);
    dp->~S1679C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1679C1(Test_S1679C1, "S1679C1", ABISELECT(200,124));

#else // __cplusplus

extern void _ZN7S1679C1C1Ev();
extern void _ZN7S1679C1D1Ev();
Name_Map name_map_S1679C1[] = {
  NSPAIR(_ZN7S1679C1C1Ev),
  NSPAIR(_ZN7S1679C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S1679C3;
extern VTBL_ENTRY _ZTI7S1679C3[];
extern  VTBL_ENTRY _ZTV7S1679C3[];
extern Class_Descriptor cd_S1679C2;
extern VTBL_ENTRY _ZTI7S1679C2[];
extern  VTBL_ENTRY _ZTV7S1679C2[];
extern Class_Descriptor cd_S1679C11_nt;
extern VTBL_ENTRY _ZTI11S1679C11_nt[];
extern  VTBL_ENTRY _ZTV11S1679C11_nt[];
static Base_Class bases_S1679C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S1679C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1679C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1679C11_nt,    ABISELECT(152,88), //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 _ZTI7S1679C1[];
extern void _ZN7S1679C1D1Ev();
extern void _ZN7S1679C1D0Ev();
extern void _ZN7S1679C32v4Ev();
extern void _ZN7S1679C32v5Ev();
extern void _ZN7S1679C32v6Ev();
extern void _ZN7S1679C32v7Ev();
extern void _ZN7S1679C32v8Ev();
extern void _ZN7S1679C32v9Ev();
extern void _ZN7S1679C33v10Ev();
extern void _ZN7S1679C33v11Ev();
extern void _ZN7S1679C33v12Ev();
extern void _ZN7S1679C33v13Ev();
extern void _ZN7S1679C33v14Ev();
extern void _ZN7S1679C33v15Ev();
extern void _ZN7S1679C23v16Ev();
extern void _ZN7S1679C23v17Ev();
extern void _ZN7S1679C23v18Ev();
extern void _ZN7S1679C23v19Ev();
extern void _ZN7S1679C23v20Ev();
extern void _ZN7S1679C23v21Ev();
extern void _ZN7S1679C23v22Ev();
extern void _ZN7S1679C23v23Ev();
extern void _ZN7S1679C23v24Ev();
extern void _ZN7S1679C23v25Ev();
extern void _ZN7S1679C23v26Ev();
extern void _ZN7S1679C12v1Ev();
extern void _ZN7S1679C12v2Ev();
extern void _ZN7S1679C12v3Ev();
extern void ABISELECT(_ZThn152_N7S1679C1D1Ev,_ZThn88_N7S1679C1D1Ev)();
extern void ABISELECT(_ZThn152_N7S1679C1D0Ev,_ZThn88_N7S1679C1D0Ev)();
static  VTBL_ENTRY vtc_S1679C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1679C1[0]),
  (VTBL_ENTRY)&_ZN7S1679C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1679C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1679C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1679C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1679C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1679C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1679C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1679C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1679C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1679C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1679C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1679C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1679C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1679C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1679C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1679C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1679C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1679C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1679C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1679C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1679C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1679C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1679C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1679C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1679C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1679C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1679C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1679C12v3Ev,
  ABISELECT(-152,-88),
  (VTBL_ENTRY)&(_ZTI7S1679C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N7S1679C1D1Ev,_ZThn88_N7S1679C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N7S1679C1D0Ev,_ZThn88_N7S1679C1D0Ev),
};
extern VTBL_ENTRY _ZTI7S1679C1[];
extern  VTBL_ENTRY _ZTV7S1679C1[];
Class_Descriptor cd_S1679C1 = {  "S1679C1", // class name
  bases_S1679C1, 4,
  &(vtc_S1679C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,124), // object size
  NSPAIRA(_ZTI7S1679C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1679C1),34, //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  S7719C4_nt  {
  char s7719c4f0;
  void  mf7719c4(); // _ZN10S7719C4_nt8mf7719c4Ev
};
//SIG(-1 S7719C4_nt) C1{ m Fc}


void  S7719C4_nt ::mf7719c4(){}

//skip512 S7719C4_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S7719C4_nt[];
VTBL_ENTRY *P__ZTI10S7719C4_nt = _ZTI10S7719C4_nt; 
Class_Descriptor cd_S7719C4_nt = {  "S7719C4_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI10S7719C4_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  S7719C6  : S5266C26 , S7719C4_nt {
};
//SIG(-1 S7719C6) C1{ BC2{ m} BC3{ m Fc}}



static void Test_S7719C6()
{
  extern Class_Descriptor cd_S7719C6;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S7719C6, buf);
    S7719C6 &lv = *(new (buf) S7719C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S7719C6)");
    check2(__alignof__(lv), 1, "__alignof__(S7719C6)");
    check_base_class_offset(lv, (S5266C26*), 0, "S7719C6");
    check_base_class_offset(lv, (S7719C4_nt*), 0, "S7719C6");
    test_class_info(&lv, &cd_S7719C6);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7719C6(Test_S7719C6, "S7719C6", 1);

#else // __cplusplus

extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
static Base_Class bases_S7719C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7719C4_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 _ZTI7S7719C6[];
Class_Descriptor cd_S7719C6 = {  "S7719C6", // class name
  bases_S7719C6, 2,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI7S7719C6),ABISELECT(56,32), //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  S7719C8  : S5266C26 , S5266C29 , virtual S7719C4_nt {
  ::S5266C29 s7719c8f0;
  ~S7719C8(); // tgen
  S7719C8(); // tgen
};
//SIG(-1 S7719C8) C1{ BC2{ m} BC3{ m} VBC4{ m Fc} FC3}


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

static void Test_S7719C8()
{
  extern Class_Descriptor cd_S7719C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7719C8, buf);
    S7719C8 *dp, &lv = *(dp=new (buf) S7719C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7719C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7719C8)");
    check_base_class_offset(lv, (S5266C26*), 0, "S7719C8");
    check_base_class_offset(lv, (S5266C29*), 0, "S7719C8");
    check_base_class_offset(lv, (S7719C4_nt*), ABISELECT(9,5), "S7719C8");
    check_field_offset(lv, s7719c8f0, ABISELECT(8,4), "S7719C8.s7719c8f0");
    test_class_info(&lv, &cd_S7719C8);
    dp->~S7719C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7719C8(Test_S7719C8, "S7719C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7719C8C1Ev();
extern void _ZN7S7719C8D1Ev();
Name_Map name_map_S7719C8[] = {
  NSPAIR(_ZN7S7719C8C1Ev),
  NSPAIR(_ZN7S7719C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
static Base_Class bases_S7719C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7719C4_nt,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S7719C8[];
static  VTBL_ENTRY vtc_S7719C8[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C8[0]),
};
extern VTBL_ENTRY _ZTV7S7719C8[];
static  VTT_ENTRY vtt_S7719C8[] = {
  {&(_ZTV7S7719C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7719C8[];
extern  VTBL_ENTRY _ZTV7S7719C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C8[];
Class_Descriptor cd_S7719C8 = {  "S7719C8", // class name
  bases_S7719C8, 3,
  &(vtc_S7719C8[0]), // expected_vtbl_contents
  &(vtt_S7719C8[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7719C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7719C8),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7719C8),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  S7719C3  : virtual S7719C4_nt , S5266C29 , S7719C6 , virtual S7719C8 {
  ~S7719C3(); // tgen
  S7719C3(); // tgen
};
//SIG(-1 S7719C3) C1{ VBC2{ m Fc} BC3{ m} BC4{ BC5{ m} BC2} VBC6{ BC5 BC3 VBC2 FC3}}


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

static void Test_S7719C3()
{
  extern Class_Descriptor cd_S7719C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7719C3, buf);
    S7719C3 *dp, &lv = *(dp=new (buf) S7719C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7719C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7719C3)");
    /*is_ambiguous_... S7719C3::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*), ABISELECT(9,5), "S7719C3");
    check_base_class_offset(lv, (S7719C4_nt*)(S7719C8*), ABISELECT(9,5), "S7719C3");
    /*is_ambiguous_... S7719C3::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*), 0, "S7719C3");
    check_base_class_offset(lv, (S5266C26*)(S7719C6*), ABISELECT(8,4), "S7719C3");
    check_base_class_offset(lv, (S7719C4_nt*)(S7719C6*), ABISELECT(8,4), "S7719C3");
    check_base_class_offset(lv, (S7719C6*), ABISELECT(8,4), "S7719C3");
    check_base_class_offset(lv, (S5266C26*)(S7719C8*), ABISELECT(16,8), "S7719C3");
    check_base_class_offset(lv, (S5266C29*)(S7719C8*), ABISELECT(16,8), "S7719C3");
    check_base_class_offset(lv, (S7719C8*), ABISELECT(16,8), "S7719C3");
    test_class_info(&lv, &cd_S7719C3);
    dp->~S7719C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7719C3(Test_S7719C3, "S7719C3", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7719C3C1Ev();
extern void _ZN7S7719C3D1Ev();
Name_Map name_map_S7719C3[] = {
  NSPAIR(_ZN7S7719C3C1Ev),
  NSPAIR(_ZN7S7719C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7719C6;
extern VTBL_ENTRY _ZTI7S7719C6[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C8;
extern VTBL_ENTRY _ZTI7S7719C8[];
extern  VTBL_ENTRY _ZTV7S7719C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C8[];
static Base_Class bases_S7719C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7719C4_nt,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C26,    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
    4, //immediately_derived
  0, 0},
  {&cd_S7719C4_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
    4, //immediately_derived
  0, 0},
  {&cd_S7719C6,    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},
  {&cd_S5266C26,    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
    7, //immediately_derived
  0, 0},
  {&cd_S5266C29,    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
    7, //immediately_derived
  0, 0},
  {&cd_S7719C8,    ABISELECT(16,8), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //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 _ZTI7S7719C3[];
static  VTBL_ENTRY vtc_S7719C3[] = {
  ABISELECT(16,8),
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C3[0]),
  ABISELECT(-7,-3),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7719C3[0]),
};
extern VTBL_ENTRY _ZTV7S7719C3[];
static  VTBL_ENTRY _tg__ZTV7S7719C8__7S7719C3[] = {
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C8[0]),
};
static  VTT_ENTRY vtt_S7719C3[] = {
  {&(_ZTV7S7719C3[4]),  4,7},
  {&(_ZTV7S7719C3[7]),  7,7},
  {&(_tg__ZTV7S7719C8__7S7719C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7719C3[];
extern  VTBL_ENTRY _ZTV7S7719C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C3[];
Class_Descriptor cd_S7719C3 = {  "S7719C3", // class name
  bases_S7719C3, 8,
  &(vtc_S7719C3[0]), // expected_vtbl_contents
  &(vtt_S7719C3[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7719C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7719C3),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7719C3),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  S7719C9  : S7719C4_nt , S5266C26 , virtual S5266C29 {
  ~S7719C9(); // tgen
  S7719C9(); // tgen
};
//SIG(-1 S7719C9) C1{ BC2{ m Fc} BC3{ m} VBC4{ m}}


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

static void Test_S7719C9()
{
  extern Class_Descriptor cd_S7719C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7719C9, buf);
    S7719C9 *dp, &lv = *(dp=new (buf) S7719C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7719C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7719C9)");
    check_base_class_offset(lv, (S7719C4_nt*), ABISELECT(8,4), "S7719C9");
    check_base_class_offset(lv, (S5266C26*), 0, "S7719C9");
    check_base_class_offset(lv, (S5266C29*), 0, "S7719C9");
    test_class_info(&lv, &cd_S7719C9);
    dp->~S7719C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7719C9(Test_S7719C9, "S7719C9", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7719C9C1Ev();
extern void _ZN7S7719C9D1Ev();
Name_Map name_map_S7719C9[] = {
  NSPAIR(_ZN7S7719C9C1Ev),
  NSPAIR(_ZN7S7719C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
static Base_Class bases_S7719C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7719C4_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, 0},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S7719C9[];
static  VTBL_ENTRY vtc_S7719C9[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C9[0]),
};
extern VTBL_ENTRY _ZTV7S7719C9[];
static  VTT_ENTRY vtt_S7719C9[] = {
  {&(_ZTV7S7719C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7719C9[];
extern  VTBL_ENTRY _ZTV7S7719C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C9[];
Class_Descriptor cd_S7719C9 = {  "S7719C9", // class name
  bases_S7719C9, 3,
  &(vtc_S7719C9[0]), // expected_vtbl_contents
  &(vtt_S7719C9[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7719C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7719C9),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7719C9),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  S7719C11  : S7719C6 , S5266C26 , S7719C9 {
  __tsi64 s7719c11f0;
  ~S7719C11(); // tgen
  S7719C11(); // tgen
};
//SIG(-1 S7719C11) C1{ BC2{ BC3{ m} BC4{ m Fc}} BC3 BC5{ BC4 BC3 VBC6{ m}} FL}


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

static void Test_S7719C11()
{
  extern Class_Descriptor cd_S7719C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S7719C11, buf);
    S7719C11 *dp, &lv = *(dp=new (buf) S7719C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S7719C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7719C11)");
    check_base_class_offset(lv, (S5266C26*)(S7719C6*), ABISELECT(9,5), "S7719C11");
    check_base_class_offset(lv, (S7719C4_nt*)(S7719C6*), ABISELECT(9,5), "S7719C11");
    check_base_class_offset(lv, (S7719C6*), ABISELECT(9,5), "S7719C11");
    /*is_ambiguous_... S7719C11::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*), ABISELECT(10,6), "S7719C11");
    check_base_class_offset(lv, (S7719C4_nt*)(S7719C9*), ABISELECT(8,4), "S7719C11");
    check_base_class_offset(lv, (S5266C26*)(S7719C9*), 0, "S7719C11");
    check_base_class_offset(lv, (S5266C29*)(S7719C9*), 0, "S7719C11");
    check_base_class_offset(lv, (S7719C9*), 0, "S7719C11");
    check_field_offset(lv, s7719c11f0, ABISELECT(16,8), "S7719C11.s7719c11f0");
    test_class_info(&lv, &cd_S7719C11);
    dp->~S7719C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7719C11(Test_S7719C11, "S7719C11", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S7719C11C1Ev();
extern void _ZN8S7719C11D1Ev();
Name_Map name_map_S7719C11[] = {
  NSPAIR(_ZN8S7719C11C1Ev),
  NSPAIR(_ZN8S7719C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7719C6;
extern VTBL_ENTRY _ZTI7S7719C6[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C9;
extern VTBL_ENTRY _ZTI7S7719C9[];
extern  VTBL_ENTRY _ZTV7S7719C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C9[];
static Base_Class bases_S7719C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C26,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C6,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C26,    ABISELECT(10,6), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7719C4_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
    7, //immediately_derived
  0, 0},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7719C9,    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 _ZTI8S7719C11[];
static  VTBL_ENTRY vtc_S7719C11[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7719C11[0]),
};
extern VTBL_ENTRY _ZTV8S7719C11[];
static  VTBL_ENTRY _tg__ZTV7S7719C9__8S7719C11[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C9[0]),
};
static  VTT_ENTRY vtt_S7719C11[] = {
  {&(_ZTV8S7719C11[3]),  3,3},
  {&(_tg__ZTV7S7719C9__8S7719C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7719C11[];
extern  VTBL_ENTRY _ZTV8S7719C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7719C11[];
Class_Descriptor cd_S7719C11 = {  "S7719C11", // class name
  bases_S7719C11, 8,
  &(vtc_S7719C11[0]), // expected_vtbl_contents
  &(vtt_S7719C11[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S7719C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7719C11),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7719C11),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7719C10  : virtual S5266C29 , virtual S7719C9 , virtual S7719C11 , S7719C3 , virtual S5266C26 {
  __tsi64 s7719c10f0[2];
  ~S7719C10(); // tgen
  S7719C10(); // tgen
};
//SIG(-1 S7719C10) C1{ VBC2{ m} VBC3{ BC4{ m Fc} BC5{ m} VBC2} VBC6{ BC7{ BC5 BC4} BC5 BC3 FL} BC8{ VBC4 BC2 BC7 VBC9{ BC5 BC2 VBC4 FC2}} VBC5 FL[2]}


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

static void Test_S7719C10()
{
  extern Class_Descriptor cd_S7719C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S7719C10, buf);
    S7719C10 *dp, &lv = *(dp=new (buf) S7719C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S7719C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7719C10)");
    /*is_ambiguous_... S7719C10::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*), ABISELECT(32,24), "S7719C10");
    /*is_ambiguous_... S7719C10::S7719C9 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C9*), ABISELECT(32,24), "S7719C10");
    check_base_class_offset(lv, (S5266C29*)(S7719C9*)(S7719C11*), ABISELECT(32,24), "S7719C10");
    /*is_ambiguous_... S7719C10::S7719C9 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C9*), ABISELECT(40,28), "S7719C10");
    /*is_ambiguous_... S7719C10::S7719C9 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C9*), ABISELECT(32,24), "S7719C10");
    /*is_ambiguous_... S7719C10::S7719C9 */ AMB_check_base_class_offset(lv, (S7719C9*), ABISELECT(32,24), "S7719C10");
    check_base_class_offset(lv, (S5266C26*)(S7719C6*)(S7719C11*), ABISELECT(57,37), "S7719C10");
    check_base_class_offset(lv, (S7719C4_nt*)(S7719C6*)(S7719C11*), ABISELECT(57,37), "S7719C10");
    check_base_class_offset(lv, (S7719C6*)(S7719C11*), ABISELECT(57,37), "S7719C10");
    /*is_ambiguous_... S7719C11::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C11*), ABISELECT(58,38), "S7719C10");
    check_base_class_offset(lv, (S7719C4_nt*)(S7719C9*)(S7719C11*), ABISELECT(56,36), "S7719C10");
    check_base_class_offset(lv, (S5266C26*)(S7719C9*)(S7719C11*), ABISELECT(48,32), "S7719C10");
    check_base_class_offset(lv, (S7719C9*)(S7719C11*), ABISELECT(48,32), "S7719C10");
    check_base_class_offset(lv, (S7719C11*), ABISELECT(48,32), "S7719C10");
    /*is_ambiguous_... S7719C3::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C3*), ABISELECT(72,48), "S7719C10");
    check_base_class_offset(lv, (S7719C4_nt*)(S7719C8*), ABISELECT(72,48), "S7719C10");
    /*is_ambiguous_... S7719C3::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C3*), 0, "S7719C10");
    check_base_class_offset(lv, (S5266C26*)(S7719C6*)(S7719C3*), ABISELECT(8,4), "S7719C10");
    check_base_class_offset(lv, (S7719C4_nt*)(S7719C6*)(S7719C3*), ABISELECT(8,4), "S7719C10");
    check_base_class_offset(lv, (S7719C6*)(S7719C3*), ABISELECT(8,4), "S7719C10");
    check_base_class_offset(lv, (S5266C26*)(S7719C8*), ABISELECT(80,52), "S7719C10");
    check_base_class_offset(lv, (S5266C29*)(S7719C8*), ABISELECT(80,52), "S7719C10");
    check_base_class_offset(lv, (S7719C8*)(S7719C3*), ABISELECT(80,52), "S7719C10");
    check_base_class_offset(lv, (S7719C3*), 0, "S7719C10");
    /*is_ambiguous_... S7719C10::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*), 0, "S7719C10");
    check_field_offset(lv, s7719c10f0, ABISELECT(16,8), "S7719C10.s7719c10f0");
    test_class_info(&lv, &cd_S7719C10);
    dp->~S7719C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7719C10(Test_S7719C10, "S7719C10", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN8S7719C10C1Ev();
extern void _ZN8S7719C10D1Ev();
Name_Map name_map_S7719C10[] = {
  NSPAIR(_ZN8S7719C10C1Ev),
  NSPAIR(_ZN8S7719C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C9;
extern VTBL_ENTRY _ZTI7S7719C9[];
extern  VTBL_ENTRY _ZTV7S7719C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C9[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7719C6;
extern VTBL_ENTRY _ZTI7S7719C6[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C9;
extern VTBL_ENTRY _ZTI7S7719C9[];
extern  VTBL_ENTRY _ZTV7S7719C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C9[];
extern Class_Descriptor cd_S7719C11;
extern VTBL_ENTRY _ZTI8S7719C11[];
extern  VTBL_ENTRY _ZTV8S7719C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7719C11[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7719C6;
extern VTBL_ENTRY _ZTI7S7719C6[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C8;
extern VTBL_ENTRY _ZTI7S7719C8[];
extern  VTBL_ENTRY _ZTV7S7719C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C8[];
extern Class_Descriptor cd_S7719C3;
extern VTBL_ENTRY _ZTI7S7719C3[];
extern  VTBL_ENTRY _ZTV7S7719C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C3[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
static Base_Class bases_S7719C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    ABISELECT(32,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, 1},
  {&cd_S7719C4_nt,    ABISELECT(40,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
    3, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(32,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
    3, //immediately_derived
  0, 0},
  {&cd_S7719C9,    ABISELECT(32,24), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5266C26,    ABISELECT(57,37), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(57,37), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C6,    ABISELECT(57,37), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    ABISELECT(58,38), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(56,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
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C9,    ABISELECT(48,32), //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
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7719C11,    ABISELECT(48,32), //bcp->offset
    11, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7719C4_nt,    ABISELECT(72,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
    19, //immediately_derived
  0, 1},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    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
    16, //immediately_derived
  0, 0},
  {&cd_S7719C4_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
    16, //immediately_derived
  0, 0},
  {&cd_S7719C6,    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
    20, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(80,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
    19, //immediately_derived
  0, 0},
  {&cd_S5266C29,    ABISELECT(80,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
    19, //immediately_derived
  0, 0},
  {&cd_S7719C8,    ABISELECT(80,52), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S7719C3,    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_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S7719C10[];
static  VTBL_ENTRY vtc_S7719C10[] = {
  0,
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(32,24),
  ABISELECT(80,52),
  ABISELECT(72,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S7719C10[0]),
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S7719C10[0]),
  ABISELECT(-16,-8),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S7719C10[0]),
  ABISELECT(-8,-4),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S7719C10[0]),
};
extern VTBL_ENTRY _ZTV8S7719C10[];
static  VTBL_ENTRY _tg__ZTV7S7719C3__8S7719C10[] = {
  ABISELECT(80,52),
  ABISELECT(72,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__7S7719C3__8S7719C10[] = {
  ABISELECT(-8,-4),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI7S7719C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C9__8S7719C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7719C11__8S7719C10[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7719C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C98S7719C11__A1__8S7719C10[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__8S7719C10[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C8[0]),
};
static  VTT_ENTRY vtt_S7719C10[] = {
  {&(_ZTV8S7719C10[8]),  8,17},
  {&(_tg__ZTV7S7719C3__8S7719C10[4]),  4,4},
  {&(_tg__ZTV7S7719C8__7S7719C3__8S7719C10[3]),  3,3},
  {&(_ZTV8S7719C10[11]),  11,17},
  {&(_ZTV8S7719C10[14]),  14,17},
  {&(_ZTV8S7719C10[17]),  17,17},
  {&(_tg__ZTV7S7719C9__8S7719C10[3]),  3,3},
  {&(_tg__ZTV8S7719C11__8S7719C10[3]),  3,3},
  {&(_tg__ZTV7S7719C98S7719C11__A1__8S7719C10[3]),  3,3},
  {&(_tg__ZTV7S7719C8__8S7719C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7719C10[];
extern  VTBL_ENTRY _ZTV8S7719C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7719C10[];
Class_Descriptor cd_S7719C10 = {  "S7719C10", // class name
  bases_S7719C10, 22,
  &(vtc_S7719C10[0]), // expected_vtbl_contents
  &(vtt_S7719C10[0]), // expected_vtt_contents
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI8S7719C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7719C10),17, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7719C10),10, //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  S7719C2  : virtual S7719C3 , virtual S7719C9 , S7719C8 , virtual S7719C10 {
  ~S7719C2(); // tgen
  S7719C2(); // tgen
};
//SIG(-1 S7719C2) C1{ VBC2{ VBC3{ m Fc} BC4{ m} BC5{ BC6{ m} BC3} VBC7{ BC6 BC4 VBC3 FC4}} VBC8{ BC3 BC6 VBC4} BC7 VBC9{ VBC4 VBC8 VBC10{ BC5 BC6 BC8 FL} BC2 VBC6 FL[2]}}


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

static void Test_S7719C2()
{
  extern Class_Descriptor cd_S7719C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,20)];
    init_test(&cd_S7719C2, buf);
    S7719C2 *dp, &lv = *(dp=new (buf) S7719C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,76), "sizeof(S7719C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7719C2)");
    /*is_ambiguous_... S7719C2::S7719C3 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C3*), ABISELECT(25,13), "S7719C2");
    /*is_ambiguous_... S7719C2::S7719C8 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C8*), ABISELECT(25,13), "S7719C2");
    /*is_ambiguous_... S7719C2::S7719C8 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C8*), ABISELECT(25,13), "S7719C2");
    /*is_ambiguous_... S7719C3::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C3*)(S7719C10*), ABISELECT(25,13), "S7719C2");
    /*is_ambiguous_... S7719C2::S7719C3 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C3*), ABISELECT(16,8), "S7719C2");
    /*is_ambiguous_... S7719C2::S7719C3 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C6*)(S7719C3*), ABISELECT(24,12), "S7719C2");
    /*is_ambiguous_... S7719C2::S7719C3 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C6*)(S7719C3*), ABISELECT(24,12), "S7719C2");
    /*is_ambiguous_... S7719C2::S7719C3 */ AMB_check_base_class_offset(lv, (S7719C6*)(S7719C3*), ABISELECT(24,12), "S7719C2");
    /*is_ambiguous_... S7719C2::S7719C8 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C8*), ABISELECT(32,16), "S7719C2");
    /*is_ambiguous_... S7719C2::S7719C8 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C8*), ABISELECT(32,16), "S7719C2");
    /*is_ambiguous_... S7719C2::S7719C3 */ AMB_check_base_class_offset(lv, (S7719C8*)(S7719C3*), ABISELECT(32,16), "S7719C2");
    check_base_class_offset(lv, (S7719C8*)(S7719C3*)(S7719C10*), ABISELECT(32,16), "S7719C2");
    /*is_ambiguous_... S7719C2::S7719C3 */ AMB_check_base_class_offset(lv, (S7719C3*), ABISELECT(16,8), "S7719C2");
    /*is_ambiguous_... S7719C2::S7719C9 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C9*), ABISELECT(56,28), "S7719C2");
    /*is_ambiguous_... S7719C2::S7719C9 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C9*), ABISELECT(48,24), "S7719C2");
    /*is_ambiguous_... S7719C2::S7719C9 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C9*), ABISELECT(57,29), "S7719C2");
    /*is_ambiguous_... S7719C10::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C10*), ABISELECT(57,29), "S7719C2");
    check_base_class_offset(lv, (S5266C29*)(S7719C9*)(S7719C11*), ABISELECT(57,29), "S7719C2");
    /*is_ambiguous_... S7719C2::S7719C9 */ AMB_check_base_class_offset(lv, (S7719C9*), ABISELECT(48,24), "S7719C2");
    /*is_ambiguous_... S7719C10::S7719C9 */ AMB_check_base_class_offset(lv, (S7719C9*)(S7719C10*), ABISELECT(48,24), "S7719C2");
    /*is_ambiguous_... S7719C2::S7719C8 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C8*), 0, "S7719C2");
    /*is_ambiguous_... S7719C2::S7719C8 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C8*), 0, "S7719C2");
    /*is_ambiguous_... S7719C2::S7719C8 */ AMB_check_base_class_offset(lv, (S7719C8*), 0, "S7719C2");
    check_base_class_offset(lv, (S5266C26*)(S7719C6*)(S7719C11*), ABISELECT(105,61), "S7719C2");
    check_base_class_offset(lv, (S7719C4_nt*)(S7719C6*)(S7719C11*), ABISELECT(105,61), "S7719C2");
    check_base_class_offset(lv, (S7719C6*)(S7719C11*), ABISELECT(105,61), "S7719C2");
    /*is_ambiguous_... S7719C11::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C11*), ABISELECT(106,62), "S7719C2");
    check_base_class_offset(lv, (S7719C4_nt*)(S7719C9*)(S7719C11*), ABISELECT(104,60), "S7719C2");
    check_base_class_offset(lv, (S5266C26*)(S7719C9*)(S7719C11*), ABISELECT(96,56), "S7719C2");
    check_base_class_offset(lv, (S7719C9*)(S7719C11*), ABISELECT(96,56), "S7719C2");
    check_base_class_offset(lv, (S7719C11*)(S7719C10*), ABISELECT(96,56), "S7719C2");
    /*is_ambiguous_... S7719C3::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C3*)(S7719C10*), ABISELECT(64,32), "S7719C2");
    check_base_class_offset(lv, (S5266C26*)(S7719C6*)(S7719C3*)(S7719C10*), ABISELECT(72,36), "S7719C2");
    check_base_class_offset(lv, (S7719C4_nt*)(S7719C6*)(S7719C3*)(S7719C10*), ABISELECT(72,36), "S7719C2");
    check_base_class_offset(lv, (S7719C6*)(S7719C3*)(S7719C10*), ABISELECT(72,36), "S7719C2");
    check_base_class_offset(lv, (S7719C3*)(S7719C10*), ABISELECT(64,32), "S7719C2");
    /*is_ambiguous_... S7719C10::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C10*), ABISELECT(120,72), "S7719C2");
    check_base_class_offset(lv, (S7719C10*), ABISELECT(64,32), "S7719C2");
    test_class_info(&lv, &cd_S7719C2);
    dp->~S7719C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7719C2(Test_S7719C2, "S7719C2", ABISELECT(128,76));

#else // __cplusplus

extern void _ZN7S7719C2C1Ev();
extern void _ZN7S7719C2D1Ev();
Name_Map name_map_S7719C2[] = {
  NSPAIR(_ZN7S7719C2C1Ev),
  NSPAIR(_ZN7S7719C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7719C6;
extern VTBL_ENTRY _ZTI7S7719C6[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C8;
extern VTBL_ENTRY _ZTI7S7719C8[];
extern  VTBL_ENTRY _ZTV7S7719C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C8[];
extern Class_Descriptor cd_S7719C3;
extern VTBL_ENTRY _ZTI7S7719C3[];
extern  VTBL_ENTRY _ZTV7S7719C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C3[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C9;
extern VTBL_ENTRY _ZTI7S7719C9[];
extern  VTBL_ENTRY _ZTV7S7719C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C9[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C8;
extern VTBL_ENTRY _ZTI7S7719C8[];
extern  VTBL_ENTRY _ZTV7S7719C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C8[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7719C6;
extern VTBL_ENTRY _ZTI7S7719C6[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C9;
extern VTBL_ENTRY _ZTI7S7719C9[];
extern  VTBL_ENTRY _ZTV7S7719C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C9[];
extern Class_Descriptor cd_S7719C11;
extern VTBL_ENTRY _ZTI8S7719C11[];
extern  VTBL_ENTRY _ZTV8S7719C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7719C11[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7719C6;
extern VTBL_ENTRY _ZTI7S7719C6[];
extern Class_Descriptor cd_S7719C3;
extern VTBL_ENTRY _ZTI7S7719C3[];
extern  VTBL_ENTRY _ZTV7S7719C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C3[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C10;
extern VTBL_ENTRY _ZTI8S7719C10[];
extern  VTBL_ENTRY _ZTV8S7719C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7719C10[];
static Base_Class bases_S7719C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7719C4_nt,    ABISELECT(25,13), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S5266C29,    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
    8, //immediately_derived
  0, 0},
  {&cd_S5266C26,    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
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7719C4_nt,    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
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7719C6,    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
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S5266C26,    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
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S5266C29,    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
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7719C8,    ABISELECT(32,16), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7719C3,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //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_S7719C4_nt,    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
    12, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(48,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
    12, //immediately_derived
  0, 0},
  {&cd_S5266C29,    ABISELECT(57,29), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7719C9,    ABISELECT(48,24), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C8,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5266C26,    ABISELECT(105,61), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(105,61), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C6,    ABISELECT(105,61), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    ABISELECT(106,62), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(104,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
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(96,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
    22, //immediately_derived
  0, 0},
  {&cd_S7719C9,    ABISELECT(96,56), //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
    4, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S7719C11,    ABISELECT(96,56), //bcp->offset
    28, //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
    5, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S5266C29,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    ABISELECT(72,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
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7719C4_nt,    ABISELECT(72,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
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7719C6,    ABISELECT(72,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
    -1, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7719C3,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(120,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
    -1, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S7719C10,    ABISELECT(64,32), //bcp->offset
    20, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //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 _ZTI7S7719C2[];
static  VTBL_ENTRY vtc_S7719C2[] = {
  ABISELECT(120,72),
  ABISELECT(96,56),
  ABISELECT(64,32),
  ABISELECT(57,29),
  ABISELECT(48,24),
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C2[0]),
  ABISELECT(16,8),
  ABISELECT(9,5),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7719C2[0]),
  ABISELECT(-7,-3),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7719C2[0]),
  ABISELECT(9,5),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7719C2[0]),
  ABISELECT(56,40),
  ABISELECT(32,24),
  ABISELECT(-16,-8),
  ABISELECT(-7,-3),
  ABISELECT(-32,-16),
  ABISELECT(-39,-19),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7719C2[0]),
  ABISELECT(-39,-27),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7719C2[0]),
};
extern VTBL_ENTRY _ZTV7S7719C2[];
static  VTBL_ENTRY _tg__ZTV7S7719C8__A__7S7719C2[] = {
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C3__7S7719C2[] = {
  ABISELECT(16,8),
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__7S7719C3__7S7719C2[] = {
  ABISELECT(-7,-3),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7719C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__7S7719C2[] = {
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C9__7S7719C2[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7719C10__7S7719C2[] = {
  ABISELECT(56,40),
  ABISELECT(32,24),
  ABISELECT(-16,-8),
  ABISELECT(-7,-3),
  ABISELECT(-32,-16),
  ABISELECT(-39,-19),
  0,
  (VTBL_ENTRY)&(_ZTI8S7719C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C38S7719C10__A1__7S7719C2[] = {
  ABISELECT(-32,-16),
  ABISELECT(-39,-19),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__7S7719C38S7719C10__A1__7S7719C2[] = {
  ABISELECT(-7,-3),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S7719C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C9__8S7719C10__7S7719C2[] = {
  ABISELECT(9,5),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7719C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7719C11__8S7719C10__7S7719C2[] = {
  ABISELECT(-39,-27),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S7719C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__8S7719C10__7S7719C2[] = {
  ABISELECT(-7,-3),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S7719C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7719C11__7S7719C2[] = {
  ABISELECT(-39,-27),
  0,
  (VTBL_ENTRY)&(_ZTI8S7719C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C98S7719C11__A1__7S7719C2[] = {
  ABISELECT(-39,-27),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C9[0]),
};
static  VTT_ENTRY vtt_S7719C2[] = {
  {&(_ZTV7S7719C2[10]),  10,31},
  {&(_tg__ZTV7S7719C8__A__7S7719C2[3]),  3,3},
  {&(_ZTV7S7719C2[14]),  14,31},
  {&(_ZTV7S7719C2[17]),  17,31},
  {&(_ZTV7S7719C2[20]),  20,31},
  {&(_ZTV7S7719C2[28]),  28,31},
  {&(_ZTV7S7719C2[31]),  31,31},
  {&(_tg__ZTV7S7719C3__7S7719C2[4]),  4,4},
  {&(_tg__ZTV7S7719C8__7S7719C3__7S7719C2[3]),  3,3},
  {&(_tg__ZTV7S7719C8__7S7719C2[3]),  3,3},
  {&(_tg__ZTV7S7719C9__7S7719C2[3]),  3,3},
  {&(_tg__ZTV8S7719C10__7S7719C2[8]),  8,8},
  {&(_tg__ZTV7S7719C38S7719C10__A1__7S7719C2[4]),  4,4},
  {&(_tg__ZTV7S7719C8__7S7719C38S7719C10__A1__7S7719C2[3]),  3,3},
  {&(_tg__ZTV7S7719C9__8S7719C10__7S7719C2[3]),  3,3},
  {&(_tg__ZTV8S7719C11__8S7719C10__7S7719C2[3]),  3,3},
  {&(_tg__ZTV7S7719C8__8S7719C10__7S7719C2[3]),  3,3},
  {&(_tg__ZTV8S7719C11__7S7719C2[3]),  3,3},
  {&(_tg__ZTV7S7719C98S7719C11__A1__7S7719C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7719C2[];
extern  VTBL_ENTRY _ZTV7S7719C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C2[];
Class_Descriptor cd_S7719C2 = {  "S7719C2", // class name
  bases_S7719C2, 31,
  &(vtc_S7719C2[0]), // expected_vtbl_contents
  &(vtt_S7719C2[0]), // expected_vtt_contents
  ABISELECT(128,76), // object size
  NSPAIRA(_ZTI7S7719C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7719C2),31, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7719C2),19, //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  S7719C14  : virtual S7719C9 {
  long double s7719c14f0;
  void *s7719c14f1[8];
  ~S7719C14(); // tgen
  S7719C14(); // tgen
};
//SIG(-1 S7719C14) C1{ VBC2{ BC3{ m Fc} BC4{ m} VBC5{ m}} FD Fp[8]}


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

static void Test_S7719C14()
{
  extern Class_Descriptor cd_S7719C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,15)];
    init_test(&cd_S7719C14, buf);
    S7719C14 *dp, &lv = *(dp=new (buf) S7719C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S7719C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7719C14)");
    check_base_class_offset(lv, (S7719C4_nt*)(S7719C9*), ABISELECT(104,52), "S7719C14");
    check_base_class_offset(lv, (S5266C26*)(S7719C9*), ABISELECT(96,48), "S7719C14");
    check_base_class_offset(lv, (S5266C29*)(S7719C9*), 0, "S7719C14");
    check_base_class_offset(lv, (S7719C9*), ABISELECT(96,48), "S7719C14");
    check_field_offset(lv, s7719c14f0, ABISELECT(16,4), "S7719C14.s7719c14f0");
    check_field_offset(lv, s7719c14f1, ABISELECT(32,16), "S7719C14.s7719c14f1");
    test_class_info(&lv, &cd_S7719C14);
    dp->~S7719C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7719C14(Test_S7719C14, "S7719C14", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN8S7719C14C1Ev();
extern void _ZN8S7719C14D1Ev();
Name_Map name_map_S7719C14[] = {
  NSPAIR(_ZN8S7719C14C1Ev),
  NSPAIR(_ZN8S7719C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C9;
extern VTBL_ENTRY _ZTI7S7719C9[];
extern  VTBL_ENTRY _ZTV7S7719C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C9[];
static Base_Class bases_S7719C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7719C4_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
    3, //immediately_derived
  0, 0},
  {&cd_S5266C26,    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
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C9,    ABISELECT(96,48), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //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 _ZTI8S7719C14[];
static  VTBL_ENTRY vtc_S7719C14[] = {
  0,
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S7719C14[0]),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S7719C14[0]),
};
extern VTBL_ENTRY _ZTV8S7719C14[];
static  VTBL_ENTRY _tg__ZTV7S7719C9__8S7719C14[] = {
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C9[0]),
};
static  VTT_ENTRY vtt_S7719C14[] = {
  {&(_ZTV8S7719C14[4]),  4,7},
  {&(_ZTV8S7719C14[7]),  7,7},
  {&(_tg__ZTV7S7719C9__8S7719C14[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7719C14[];
extern  VTBL_ENTRY _ZTV8S7719C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7719C14[];
Class_Descriptor cd_S7719C14 = {  "S7719C14", // class name
  bases_S7719C14, 4,
  &(vtc_S7719C14[0]), // expected_vtbl_contents
  &(vtt_S7719C14[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI8S7719C14),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7719C14),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7719C14),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7719C13  : S7719C9 , S7719C14 , virtual S5266C26 , virtual S7719C4_nt {
  ~S7719C13(); // tgen
  S7719C13(); // tgen
};
//SIG(-1 S7719C13) C1{ BC2{ BC3{ m Fc} BC4{ m} VBC5{ m}} BC6{ VBC2 FD Fp[8]} VBC4 VBC3}


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

static void Test_S7719C13()
{
  extern Class_Descriptor cd_S7719C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,17)];
    init_test(&cd_S7719C13, buf);
    S7719C13 *dp, &lv = *(dp=new (buf) S7719C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S7719C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7719C13)");
    /*is_ambiguous_... S7719C13::S7719C9 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C9*), ABISELECT(8,4), "S7719C13");
    /*is_ambiguous_... S7719C13::S7719C9 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C9*), 0, "S7719C13");
    /*is_ambiguous_... S7719C13::S7719C9 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C9*), 0, "S7719C13");
    /*is_ambiguous_... S7719C13::S7719C9 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C9*), 0, "S7719C13");
    /*is_ambiguous_... S7719C13::S7719C9 */ AMB_check_base_class_offset(lv, (S7719C9*), 0, "S7719C13");
    /*is_ambiguous_... S7719C13::S7719C9 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C9*), ABISELECT(120,60), "S7719C13");
    /*is_ambiguous_... S7719C13::S7719C9 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C9*), ABISELECT(112,56), "S7719C13");
    check_base_class_offset(lv, (S7719C9*)(S7719C14*), ABISELECT(112,56), "S7719C13");
    check_base_class_offset(lv, (S7719C14*), ABISELECT(16,8), "S7719C13");
    /*is_ambiguous_... S7719C13::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*), ABISELECT(121,61), "S7719C13");
    /*is_ambiguous_... S7719C13::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*), ABISELECT(121,61), "S7719C13");
    test_class_info(&lv, &cd_S7719C13);
    dp->~S7719C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7719C13(Test_S7719C13, "S7719C13", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN8S7719C13C1Ev();
extern void _ZN8S7719C13D1Ev();
Name_Map name_map_S7719C13[] = {
  NSPAIR(_ZN8S7719C13C1Ev),
  NSPAIR(_ZN8S7719C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C9;
extern VTBL_ENTRY _ZTI7S7719C9[];
extern  VTBL_ENTRY _ZTV7S7719C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C9[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C9;
extern VTBL_ENTRY _ZTI7S7719C9[];
extern  VTBL_ENTRY _ZTV7S7719C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C9[];
extern Class_Descriptor cd_S7719C14;
extern VTBL_ENTRY _ZTI8S7719C14[];
extern  VTBL_ENTRY _ZTV8S7719C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7719C14[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
static Base_Class bases_S7719C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7719C4_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
    3, //immediately_derived
  0, 0},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C9,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7719C4_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
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S5266C26,    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
    6, //immediately_derived
  0, 0},
  {&cd_S7719C9,    ABISELECT(112,56), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7719C14,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5266C26,    ABISELECT(121,61), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7719C4_nt,    ABISELECT(121,61), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S7719C13[];
static  VTBL_ENTRY vtc_S7719C13[] = {
  ABISELECT(121,61),
  ABISELECT(121,61),
  ABISELECT(112,56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7719C13[0]),
  ABISELECT(-16,-8),
  ABISELECT(96,48),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7719C13[0]),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S7719C13[0]),
};
extern VTBL_ENTRY _ZTV8S7719C13[];
static  VTBL_ENTRY _tg__ZTV7S7719C9__A__8S7719C13[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7719C14__8S7719C13[] = {
  ABISELECT(-16,-8),
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S7719C14[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C9__8S7719C14__8S7719C13[] = {
  ABISELECT(-112,-56),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S7719C14[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C9__A1__8S7719C13[] = {
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C9[0]),
};
static  VTT_ENTRY vtt_S7719C13[] = {
  {&(_ZTV8S7719C13[6]),  6,13},
  {&(_tg__ZTV7S7719C9__A__8S7719C13[3]),  3,3},
  {&(_tg__ZTV8S7719C14__8S7719C13[4]),  4,4},
  {&(_tg__ZTV7S7719C9__8S7719C14__8S7719C13[3]),  3,3},
  {&(_ZTV8S7719C13[10]),  10,13},
  {&(_ZTV8S7719C13[13]),  13,13},
  {&(_tg__ZTV7S7719C9__A1__8S7719C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7719C13[];
extern  VTBL_ENTRY _ZTV8S7719C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7719C13[];
Class_Descriptor cd_S7719C13 = {  "S7719C13", // class name
  bases_S7719C13, 10,
  &(vtc_S7719C13[0]), // expected_vtbl_contents
  &(vtt_S7719C13[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI8S7719C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7719C13),13, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7719C13),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7719C16  : S5266C26 , S7719C3 , virtual S7719C9 {
  virtual  ~S7719C16(); // _ZN8S7719C16D2Ev
  S7719C16(); // tgen
};
//SIG(-1 S7719C16) C1{ BC2{ m} BC3{ VBC4{ m Fc} BC5{ m} BC6{ BC2 BC4} VBC7{ BC2 BC5 VBC4 FC5}} VBC8{ BC4 BC2 VBC5} vd}


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

static void Test_S7719C16()
{
  extern Class_Descriptor cd_S7719C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S7719C16, buf);
    S7719C16 *dp, &lv = *(dp=new (buf) S7719C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S7719C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7719C16)");
    /*is_ambiguous_... S7719C16::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*), 0, "S7719C16");
    /*is_ambiguous_... S7719C3::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C3*), ABISELECT(9,5), "S7719C16");
    check_base_class_offset(lv, (S7719C4_nt*)(S7719C8*), ABISELECT(9,5), "S7719C16");
    /*is_ambiguous_... S7719C3::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C3*), 0, "S7719C16");
    check_base_class_offset(lv, (S5266C26*)(S7719C6*)(S7719C3*), ABISELECT(8,4), "S7719C16");
    check_base_class_offset(lv, (S7719C4_nt*)(S7719C6*)(S7719C3*), ABISELECT(8,4), "S7719C16");
    check_base_class_offset(lv, (S7719C6*)(S7719C3*), ABISELECT(8,4), "S7719C16");
    check_base_class_offset(lv, (S5266C26*)(S7719C8*), ABISELECT(16,8), "S7719C16");
    check_base_class_offset(lv, (S5266C29*)(S7719C8*), ABISELECT(16,8), "S7719C16");
    check_base_class_offset(lv, (S7719C8*)(S7719C3*), ABISELECT(16,8), "S7719C16");
    check_base_class_offset(lv, (S7719C3*), 0, "S7719C16");
    check_base_class_offset(lv, (S7719C4_nt*)(S7719C9*), ABISELECT(40,20), "S7719C16");
    check_base_class_offset(lv, (S5266C26*)(S7719C9*), ABISELECT(32,16), "S7719C16");
    check_base_class_offset(lv, (S5266C29*)(S7719C9*), ABISELECT(41,21), "S7719C16");
    check_base_class_offset(lv, (S7719C9*), ABISELECT(32,16), "S7719C16");
    test_class_info(&lv, &cd_S7719C16);
    dp->~S7719C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7719C16(Test_S7719C16, "S7719C16", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S7719C16C1Ev();
extern void _ZN8S7719C16D2Ev();
Name_Map name_map_S7719C16[] = {
  NSPAIR(_ZN8S7719C16C1Ev),
  NSPAIR(_ZN8S7719C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7719C6;
extern VTBL_ENTRY _ZTI7S7719C6[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C8;
extern VTBL_ENTRY _ZTI7S7719C8[];
extern  VTBL_ENTRY _ZTV7S7719C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C8[];
extern Class_Descriptor cd_S7719C3;
extern VTBL_ENTRY _ZTI7S7719C3[];
extern  VTBL_ENTRY _ZTV7S7719C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C3[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C9;
extern VTBL_ENTRY _ZTI7S7719C9[];
extern  VTBL_ENTRY _ZTV7S7719C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C9[];
static Base_Class bases_S7719C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7719C4_nt,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    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
    5, //immediately_derived
  0, 0},
  {&cd_S7719C4_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
    5, //immediately_derived
  0, 0},
  {&cd_S7719C6,    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
    9, //immediately_derived
  0, 0},
  {&cd_S5266C26,    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
    8, //immediately_derived
  0, 0},
  {&cd_S5266C29,    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
    8, //immediately_derived
  0, 0},
  {&cd_S7719C8,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7719C3,    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},
  {&cd_S7719C4_nt,    ABISELECT(40,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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5266C26,    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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5266C29,    ABISELECT(41,21), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7719C9,    ABISELECT(32,16), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7719C16[];
extern void _ZN8S7719C16D1Ev();
extern void _ZN8S7719C16D0Ev();
static  VTBL_ENTRY vtc_S7719C16[] = {
  ABISELECT(41,21),
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S7719C16[0]),
  (VTBL_ENTRY)&_ZN8S7719C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7719C16D0Ev,
  ABISELECT(-7,-3),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7719C16[0]),
  ABISELECT(9,5),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7719C16[0]),
};
extern VTBL_ENTRY _ZTV8S7719C16[];
static  VTBL_ENTRY _tg__ZTV7S7719C3__8S7719C16[] = {
  ABISELECT(16,8),
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__7S7719C3__8S7719C16[] = {
  ABISELECT(-7,-3),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7719C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__8S7719C16[] = {
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C9__8S7719C16[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C9[0]),
};
static  VTT_ENTRY vtt_S7719C16[] = {
  {&(_ZTV8S7719C16[6]),  6,14},
  {&(_tg__ZTV7S7719C3__8S7719C16[4]),  4,4},
  {&(_tg__ZTV7S7719C8__7S7719C3__8S7719C16[3]),  3,3},
  {&(_ZTV8S7719C16[11]),  11,14},
  {&(_ZTV8S7719C16[14]),  14,14},
  {&(_tg__ZTV7S7719C8__8S7719C16[3]),  3,3},
  {&(_tg__ZTV7S7719C9__8S7719C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7719C16[];
extern  VTBL_ENTRY _ZTV8S7719C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7719C16[];
Class_Descriptor cd_S7719C16 = {  "S7719C16", // class name
  bases_S7719C16, 14,
  &(vtc_S7719C16[0]), // expected_vtbl_contents
  &(vtt_S7719C16[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S7719C16),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7719C16),14, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7719C16),7, //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  S7719C15  : S7719C6 , virtual S7719C16 , S7719C9 {
  int s7719c15f0;
  virtual  ~S7719C15(); // _ZN8S7719C15D2Ev
  S7719C15(); // tgen
};
//SIG(-1 S7719C15) C1{ BC2{ BC3{ m} BC4{ m Fc}} VBC5{ BC3 BC6{ VBC4 BC7{ m} BC2 VBC8{ BC3 BC7 VBC4 FC7}} VBC9{ BC4 BC3 VBC7} vd} BC9 vd Fi}


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

static void Test_S7719C15()
{
  extern Class_Descriptor cd_S7719C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S7719C15, buf);
    S7719C15 *dp, &lv = *(dp=new (buf) S7719C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S7719C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7719C15)");
    /*is_ambiguous_... S7719C15::S7719C6 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C6*), ABISELECT(9,5), "S7719C15");
    /*is_ambiguous_... S7719C15::S7719C6 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C6*), ABISELECT(9,5), "S7719C15");
    /*is_ambiguous_... S7719C15::S7719C6 */ AMB_check_base_class_offset(lv, (S7719C6*), ABISELECT(9,5), "S7719C15");
    /*is_ambiguous_... S7719C16::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C16*), ABISELECT(16,12), "S7719C15");
    /*is_ambiguous_... S7719C3::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C3*)(S7719C16*), ABISELECT(25,17), "S7719C15");
    check_base_class_offset(lv, (S7719C4_nt*)(S7719C8*), ABISELECT(25,17), "S7719C15");
    /*is_ambiguous_... S7719C3::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C3*)(S7719C16*), ABISELECT(16,12), "S7719C15");
    check_base_class_offset(lv, (S5266C26*)(S7719C6*)(S7719C3*)(S7719C16*), ABISELECT(24,16), "S7719C15");
    check_base_class_offset(lv, (S7719C4_nt*)(S7719C6*)(S7719C3*)(S7719C16*), ABISELECT(24,16), "S7719C15");
    check_base_class_offset(lv, (S7719C6*)(S7719C3*)(S7719C16*), ABISELECT(24,16), "S7719C15");
    check_base_class_offset(lv, (S5266C26*)(S7719C8*), ABISELECT(32,20), "S7719C15");
    check_base_class_offset(lv, (S5266C29*)(S7719C8*), ABISELECT(32,20), "S7719C15");
    check_base_class_offset(lv, (S7719C8*)(S7719C3*)(S7719C16*), ABISELECT(32,20), "S7719C15");
    check_base_class_offset(lv, (S7719C3*)(S7719C16*), ABISELECT(16,12), "S7719C15");
    /*is_ambiguous_... S7719C15::S7719C9 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C9*), ABISELECT(56,32), "S7719C15");
    /*is_ambiguous_... S7719C15::S7719C9 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C9*), ABISELECT(48,28), "S7719C15");
    /*is_ambiguous_... S7719C15::S7719C9 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C9*), 0, "S7719C15");
    /*is_ambiguous_... S7719C15::S7719C9 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C9*), 0, "S7719C15");
    check_base_class_offset(lv, (S7719C9*)(S7719C16*), ABISELECT(48,28), "S7719C15");
    check_base_class_offset(lv, (S7719C16*), ABISELECT(16,12), "S7719C15");
    /*is_ambiguous_... S7719C15::S7719C9 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C9*), ABISELECT(8,4), "S7719C15");
    /*is_ambiguous_... S7719C15::S7719C9 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C9*), 0, "S7719C15");
    /*is_ambiguous_... S7719C15::S7719C9 */ AMB_check_base_class_offset(lv, (S7719C9*), 0, "S7719C15");
    check_field_offset(lv, s7719c15f0, ABISELECT(12,8), "S7719C15.s7719c15f0");
    test_class_info(&lv, &cd_S7719C15);
    dp->~S7719C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7719C15(Test_S7719C15, "S7719C15", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S7719C15C1Ev();
extern void _ZN8S7719C15D2Ev();
Name_Map name_map_S7719C15[] = {
  NSPAIR(_ZN8S7719C15C1Ev),
  NSPAIR(_ZN8S7719C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7719C6;
extern VTBL_ENTRY _ZTI7S7719C6[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7719C6;
extern VTBL_ENTRY _ZTI7S7719C6[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C8;
extern VTBL_ENTRY _ZTI7S7719C8[];
extern  VTBL_ENTRY _ZTV7S7719C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C8[];
extern Class_Descriptor cd_S7719C3;
extern VTBL_ENTRY _ZTI7S7719C3[];
extern  VTBL_ENTRY _ZTV7S7719C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C3[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C9;
extern VTBL_ENTRY _ZTI7S7719C9[];
extern  VTBL_ENTRY _ZTV7S7719C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C9[];
extern Class_Descriptor cd_S7719C16;
extern VTBL_ENTRY _ZTI8S7719C16[];
extern  VTBL_ENTRY _ZTV8S7719C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7719C16[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C9;
extern VTBL_ENTRY _ZTI7S7719C9[];
extern  VTBL_ENTRY _ZTV7S7719C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C9[];
static Base_Class bases_S7719C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C26,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C6,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C26,    ABISELECT(16,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
    17, //immediately_derived
  0, 0},
  {&cd_S7719C4_nt,    ABISELECT(25,17), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S5266C29,    ABISELECT(16,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
    12, //immediately_derived
  0, 0},
  {&cd_S5266C26,    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
    8, //immediately_derived
  0, 0},
  {&cd_S7719C4_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
    8, //immediately_derived
  0, 0},
  {&cd_S7719C6,    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
    12, //immediately_derived
  0, 0},
  {&cd_S5266C26,    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
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S5266C29,    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
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7719C8,    ABISELECT(32,20), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7719C3,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7719C4_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    ABISELECT(48,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
    16, //immediately_derived
  0, 0},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7719C9,    ABISELECT(48,28), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7719C16,    ABISELECT(16,12), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7719C4_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
    20, //immediately_derived
  0, 0},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C9,    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 _ZTI8S7719C15[];
extern void _ZN8S7719C15D1Ev();
extern void _ZN8S7719C15D0Ev();
extern void ABISELECT(_ZTv0_n56_N8S7719C15D1Ev,_ZTv0_n28_N8S7719C15D1Ev)();
extern void ABISELECT(_ZThn16_N8S7719C15D1Ev,_ZThn12_N8S7719C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7719C15D0Ev,_ZTv0_n28_N8S7719C15D0Ev)();
extern void ABISELECT(_ZThn16_N8S7719C15D0Ev,_ZThn12_N8S7719C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7719C15[] = {
  ABISELECT(48,28),
  ABISELECT(32,20),
  ABISELECT(25,17),
  ABISELECT(16,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7719C15[0]),
  (VTBL_ENTRY)&_ZN8S7719C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7719C15D0Ev,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(9,5),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7719C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7719C15D1Ev,_ZTv0_n28_N8S7719C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7719C15D0Ev,_ZTv0_n28_N8S7719C15D0Ev),
  ABISELECT(-7,-3),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S7719C15[0]),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S7719C15[0]),
};
extern VTBL_ENTRY _ZTV8S7719C15[];
static  VTBL_ENTRY _tg__ZTV7S7719C9__A__8S7719C15[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C9[0]),
};
extern void _ZN8S7719C16D1Ev();
extern void _ZN8S7719C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7719C16__8S7719C15[] = {
  ABISELECT(-16,-12),
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S7719C16[0]),
  (VTBL_ENTRY)&_ZN8S7719C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7719C16D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7719C38S7719C16__8S7719C15[] = {
  ABISELECT(16,8),
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__7S7719C38S7719C16__8S7719C15[] = {
  ABISELECT(-7,-3),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7719C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__8S7719C16__8S7719C15[] = {
  ABISELECT(-7,-3),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7719C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C9__8S7719C16__8S7719C15[] = {
  ABISELECT(-48,-28),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7719C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__8S7719C15[] = {
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C9__8S7719C15[] = {
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C9[0]),
};
static  VTT_ENTRY vtt_S7719C15[] = {
  {&(_ZTV8S7719C15[7]),  7,24},
  {&(_tg__ZTV7S7719C9__A__8S7719C15[3]),  3,3},
  {&(_ZTV8S7719C15[16]),  16,24},
  {&(_ZTV8S7719C15[21]),  21,24},
  {&(_ZTV8S7719C15[24]),  24,24},
  {&(_tg__ZTV8S7719C16__8S7719C15[6]),  6,8},
  {&(_tg__ZTV7S7719C38S7719C16__8S7719C15[4]),  4,4},
  {&(_tg__ZTV7S7719C8__7S7719C38S7719C16__8S7719C15[3]),  3,3},
  {&(_tg__ZTV7S7719C8__8S7719C16__8S7719C15[3]),  3,3},
  {&(_tg__ZTV7S7719C9__8S7719C16__8S7719C15[3]),  3,3},
  {&(_tg__ZTV7S7719C8__8S7719C15[3]),  3,3},
  {&(_tg__ZTV7S7719C9__8S7719C15[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7719C15[];
extern  VTBL_ENTRY _ZTV8S7719C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7719C15[];
static VTBL_ENTRY alt_thunk_names71[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7719C15D0Ev,_ZTv0_n28_N8S7719C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7719C15D0Ev,_ZThn12_N8S7719C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7719C15D1Ev,_ZTv0_n28_N8S7719C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7719C15D1Ev,_ZThn12_N8S7719C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7719C15 = {  "S7719C15", // class name
  bases_S7719C15, 21,
  &(vtc_S7719C15[0]), // expected_vtbl_contents
  &(vtt_S7719C15[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S7719C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7719C15),24, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7719C15),12, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names71,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7719C17_nt  {
  int s7719c17f0;
  void  mf7719c17(); // _ZN11S7719C17_nt9mf7719c17Ev
};
//SIG(-1 S7719C17_nt) C1{ m Fi}


void  S7719C17_nt ::mf7719c17(){}

//skip512 S7719C17_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S7719C17_nt[];
VTBL_ENTRY *P__ZTI11S7719C17_nt = _ZTI11S7719C17_nt; 
Class_Descriptor cd_S7719C17_nt = {  "S7719C17_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI11S7719C17_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  S7719C12  : S7719C6 , virtual S7719C13 , S7719C15 , S7719C17_nt {
  int s7719c12f0;
  virtual  ~S7719C12(); // _ZN8S7719C12D2Ev
  S7719C12(); // tgen
};
//SIG(-1 S7719C12) C1{ BC2{ BC3{ m} BC4{ m Fc}} VBC5{ BC6{ BC4 BC3 VBC7{ m}} BC8{ VBC6 FD Fp[8]} VBC3 VBC4} BC9{ BC2 VBC10{ BC3 BC11{ VBC4 BC7 BC2 VBC12{ BC3 BC7 VBC4 FC7}} VBC6 vd} BC6 vd Fi} BC13{ m Fi} vd Fi}


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

static void Test_S7719C12()
{
  extern Class_Descriptor cd_S7719C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,27)];
    init_test(&cd_S7719C12, buf);
    S7719C12 *dp, &lv = *(dp=new (buf) S7719C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,104), "sizeof(S7719C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7719C12)");
    /*is_ambiguous_... S7719C12::S7719C6 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C6*), ABISELECT(16,12), "S7719C12");
    /*is_ambiguous_... S7719C12::S7719C6 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C6*), ABISELECT(16,12), "S7719C12");
    /*is_ambiguous_... S7719C12::S7719C6 */ AMB_check_base_class_offset(lv, (S7719C6*), ABISELECT(16,12), "S7719C12");
    /*is_ambiguous_... S7719C13::S7719C9 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C9*)(S7719C13*), ABISELECT(40,28), "S7719C12");
    /*is_ambiguous_... S7719C13::S7719C9 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C9*)(S7719C13*), ABISELECT(32,24), "S7719C12");
    /*is_ambiguous_... S7719C13::S7719C9 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C9*)(S7719C13*), 0, "S7719C12");
    /*is_ambiguous_... S7719C12::S7719C9 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C9*), 0, "S7719C12");
    /*is_ambiguous_... S7719C15::S7719C9 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C9*)(S7719C15*), 0, "S7719C12");
    /*is_ambiguous_... S7719C13::S7719C9 */ AMB_check_base_class_offset(lv, (S7719C9*)(S7719C13*), ABISELECT(32,24), "S7719C12");
    /*is_ambiguous_... S7719C12::S7719C9 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C9*), ABISELECT(152,84), "S7719C12");
    /*is_ambiguous_... S7719C12::S7719C9 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C9*), ABISELECT(144,80), "S7719C12");
    check_base_class_offset(lv, (S7719C9*)(S7719C14*)(S7719C13*), ABISELECT(144,80), "S7719C12");
    check_base_class_offset(lv, (S7719C9*)(S7719C16*), ABISELECT(144,80), "S7719C12");
    check_base_class_offset(lv, (S7719C14*)(S7719C13*), ABISELECT(48,32), "S7719C12");
    /*is_ambiguous_... S7719C13::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C13*), ABISELECT(153,85), "S7719C12");
    /*is_ambiguous_... S7719C13::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C13*), ABISELECT(153,85), "S7719C12");
    /*is_ambiguous_... S7719C3::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C3*)(S7719C16*), ABISELECT(153,85), "S7719C12");
    check_base_class_offset(lv, (S7719C4_nt*)(S7719C8*), ABISELECT(153,85), "S7719C12");
    check_base_class_offset(lv, (S7719C13*), ABISELECT(32,24), "S7719C12");
    /*is_ambiguous_... S7719C15::S7719C6 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C6*)(S7719C15*), ABISELECT(9,5), "S7719C12");
    /*is_ambiguous_... S7719C15::S7719C6 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C6*)(S7719C15*), ABISELECT(9,5), "S7719C12");
    /*is_ambiguous_... S7719C15::S7719C6 */ AMB_check_base_class_offset(lv, (S7719C6*)(S7719C15*), ABISELECT(9,5), "S7719C12");
    /*is_ambiguous_... S7719C16::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C16*), ABISELECT(160,88), "S7719C12");
    /*is_ambiguous_... S7719C3::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C3*)(S7719C16*), ABISELECT(160,88), "S7719C12");
    check_base_class_offset(lv, (S5266C26*)(S7719C6*)(S7719C3*)(S7719C16*), ABISELECT(168,92), "S7719C12");
    check_base_class_offset(lv, (S7719C4_nt*)(S7719C6*)(S7719C3*)(S7719C16*), ABISELECT(168,92), "S7719C12");
    check_base_class_offset(lv, (S7719C6*)(S7719C3*)(S7719C16*), ABISELECT(168,92), "S7719C12");
    check_base_class_offset(lv, (S5266C26*)(S7719C8*), ABISELECT(176,96), "S7719C12");
    check_base_class_offset(lv, (S5266C29*)(S7719C8*), ABISELECT(176,96), "S7719C12");
    check_base_class_offset(lv, (S7719C8*)(S7719C3*)(S7719C16*), ABISELECT(176,96), "S7719C12");
    check_base_class_offset(lv, (S7719C3*)(S7719C16*), ABISELECT(160,88), "S7719C12");
    check_base_class_offset(lv, (S7719C16*)(S7719C15*), ABISELECT(160,88), "S7719C12");
    /*is_ambiguous_... S7719C15::S7719C9 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C9*)(S7719C15*), ABISELECT(8,4), "S7719C12");
    /*is_ambiguous_... S7719C15::S7719C9 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C9*)(S7719C15*), 0, "S7719C12");
    /*is_ambiguous_... S7719C15::S7719C9 */ AMB_check_base_class_offset(lv, (S7719C9*)(S7719C15*), 0, "S7719C12");
    check_base_class_offset(lv, (S7719C15*), 0, "S7719C12");
    check_base_class_offset(lv, (S7719C17_nt*), ABISELECT(20,16), "S7719C12");
    check_field_offset(lv, s7719c12f0, ABISELECT(24,20), "S7719C12.s7719c12f0");
    test_class_info(&lv, &cd_S7719C12);
    dp->~S7719C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7719C12(Test_S7719C12, "S7719C12", ABISELECT(192,104));

#else // __cplusplus

extern void _ZN8S7719C12C1Ev();
extern void _ZN8S7719C12D2Ev();
Name_Map name_map_S7719C12[] = {
  NSPAIR(_ZN8S7719C12C1Ev),
  NSPAIR(_ZN8S7719C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7719C6;
extern VTBL_ENTRY _ZTI7S7719C6[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C9;
extern VTBL_ENTRY _ZTI7S7719C9[];
extern  VTBL_ENTRY _ZTV7S7719C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C9[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C9;
extern VTBL_ENTRY _ZTI7S7719C9[];
extern  VTBL_ENTRY _ZTV7S7719C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C9[];
extern Class_Descriptor cd_S7719C14;
extern VTBL_ENTRY _ZTI8S7719C14[];
extern  VTBL_ENTRY _ZTV8S7719C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7719C14[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7719C13;
extern VTBL_ENTRY _ZTI8S7719C13[];
extern  VTBL_ENTRY _ZTV8S7719C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7719C13[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7719C6;
extern VTBL_ENTRY _ZTI7S7719C6[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7719C6;
extern VTBL_ENTRY _ZTI7S7719C6[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C8;
extern VTBL_ENTRY _ZTI7S7719C8[];
extern  VTBL_ENTRY _ZTV7S7719C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C8[];
extern Class_Descriptor cd_S7719C3;
extern VTBL_ENTRY _ZTI7S7719C3[];
extern  VTBL_ENTRY _ZTV7S7719C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C3[];
extern Class_Descriptor cd_S7719C16;
extern VTBL_ENTRY _ZTI8S7719C16[];
extern  VTBL_ENTRY _ZTV8S7719C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7719C16[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C9;
extern VTBL_ENTRY _ZTI7S7719C9[];
extern  VTBL_ENTRY _ZTV7S7719C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C9[];
extern Class_Descriptor cd_S7719C15;
extern VTBL_ENTRY _ZTI8S7719C15[];
extern  VTBL_ENTRY _ZTV8S7719C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7719C15[];
extern Class_Descriptor cd_S7719C17_nt;
extern VTBL_ENTRY _ZTI11S7719C17_nt[];
static Base_Class bases_S7719C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C26,    ABISELECT(16,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
    2, //immediately_derived
  0, 0},
  {&cd_S7719C4_nt,    ABISELECT(16,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
    2, //immediately_derived
  0, 0},
  {&cd_S7719C6,    ABISELECT(16,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},
  {&cd_S7719C4_nt,    ABISELECT(40,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
    6, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(32,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
    6, //immediately_derived
  0, 0},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7719C9,    ABISELECT(32,24), //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
    2, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7719C4_nt,    ABISELECT(152,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
    9, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(144,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
    9, //immediately_derived
  0, 0},
  {&cd_S7719C9,    ABISELECT(144,80), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7719C14,    ABISELECT(48,32), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(153,85), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7719C4_nt,    ABISELECT(153,85), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7719C13,    ABISELECT(32,24), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5266C26,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C6,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S5266C29,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    ABISELECT(168,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
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7719C4_nt,    ABISELECT(168,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
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7719C6,    ABISELECT(168,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
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(176,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C29,    ABISELECT(176,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C8,    ABISELECT(176,96), //bcp->offset
    33, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S7719C3,    ABISELECT(160,88), //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
    26, //immediately_derived
  0, 0},
  {&cd_S7719C16,    ABISELECT(160,88), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S7719C4_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
    29, //immediately_derived
  0, 0},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C9,    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
    8, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S7719C15,    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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7719C17_nt,    ABISELECT(20,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}};
extern VTBL_ENTRY _ZTI8S7719C12[];
extern void _ZN8S7719C12D1Ev();
extern void _ZN8S7719C12D0Ev();
extern void ABISELECT(_ZTv0_n56_N8S7719C12D1Ev,_ZTv0_n28_N8S7719C12D1Ev)();
extern void ABISELECT(_ZThn160_N8S7719C12D1Ev,_ZThn88_N8S7719C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7719C12D0Ev,_ZTv0_n28_N8S7719C12D0Ev)();
extern void ABISELECT(_ZThn160_N8S7719C12D0Ev,_ZThn88_N8S7719C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7719C12[] = {
  ABISELECT(153,85),
  ABISELECT(32,24),
  ABISELECT(144,80),
  ABISELECT(176,96),
  ABISELECT(153,85),
  ABISELECT(160,88),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7719C12[0]),
  (VTBL_ENTRY)&_ZN8S7719C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7719C12D0Ev,
  ABISELECT(121,61),
  ABISELECT(121,61),
  ABISELECT(112,56),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S7719C12[0]),
  ABISELECT(-48,-32),
  ABISELECT(96,48),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S7719C12[0]),
  ABISELECT(-144,-80),
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI8S7719C12[0]),
  ABISELECT(-160,-88),
  ABISELECT(-160,-88),
  ABISELECT(-16,-8),
  ABISELECT(16,8),
  ABISELECT(-7,-3),
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI8S7719C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7719C12D1Ev,_ZTv0_n28_N8S7719C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7719C12D0Ev,_ZTv0_n28_N8S7719C12D0Ev),
  ABISELECT(-23,-11),
  ABISELECT(-176,-96),
  (VTBL_ENTRY)&(_ZTI8S7719C12[0]),
};
extern VTBL_ENTRY _ZTV8S7719C12[];
extern void _ZN8S7719C15D1Ev();
extern void _ZN8S7719C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7719C15__8S7719C12[] = {
  ABISELECT(144,80),
  ABISELECT(176,96),
  ABISELECT(153,85),
  ABISELECT(160,88),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7719C15[0]),
  (VTBL_ENTRY)&_ZN8S7719C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7719C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7719C98S7719C15__A2__8S7719C12[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C9[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S7719C15D1Ev,_ZTv0_n28_N8S7719C15D1Ev)();
extern void ABISELECT(_ZThn160_N8S7719C15D1Ev,_ZThn88_N8S7719C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7719C15D0Ev,_ZTv0_n28_N8S7719C15D0Ev)();
extern void ABISELECT(_ZThn160_N8S7719C15D0Ev,_ZThn88_N8S7719C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7719C16__8S7719C15__8S7719C12[] = {
  ABISELECT(-160,-88),
  ABISELECT(-160,-88),
  ABISELECT(-16,-8),
  ABISELECT(16,8),
  ABISELECT(-7,-3),
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI8S7719C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7719C15D1Ev,_ZTv0_n28_N8S7719C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7719C15D0Ev,_ZTv0_n28_N8S7719C15D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__8S7719C15__8S7719C12[] = {
  ABISELECT(-23,-11),
  ABISELECT(-176,-96),
  (VTBL_ENTRY)&(_ZTI8S7719C15[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C9__8S7719C15__8S7719C12[] = {
  ABISELECT(-144,-80),
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI8S7719C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7719C13__8S7719C12[] = {
  ABISELECT(121,61),
  ABISELECT(121,61),
  ABISELECT(112,56),
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7719C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C98S7719C13__8S7719C12[] = {
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7719C148S7719C13__8S7719C12[] = {
  ABISELECT(-48,-32),
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S7719C14[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C9__8S7719C148S7719C13__8S7719C12[] = {
  ABISELECT(-144,-80),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S7719C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7719C14__8S7719C13__8S7719C12[] = {
  ABISELECT(-48,-32),
  ABISELECT(96,48),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7719C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C9__A1__8S7719C13__8S7719C12[] = {
  ABISELECT(-144,-80),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S7719C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C9__A1__8S7719C12[] = {
  ABISELECT(-144,-80),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C9[0]),
};
extern void _ZN8S7719C16D1Ev();
extern void _ZN8S7719C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7719C16__8S7719C12[] = {
  ABISELECT(-160,-88),
  ABISELECT(-16,-8),
  ABISELECT(16,8),
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI8S7719C16[0]),
  (VTBL_ENTRY)&_ZN8S7719C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7719C16D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7719C38S7719C16__8S7719C12[] = {
  ABISELECT(16,8),
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__7S7719C38S7719C16__8S7719C12[] = {
  ABISELECT(-23,-11),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7719C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__8S7719C16__8S7719C12[] = {
  ABISELECT(-23,-11),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7719C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C9__8S7719C16__8S7719C12[] = {
  ABISELECT(-144,-80),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7719C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__8S7719C12[] = {
  ABISELECT(-23,-11),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C8[0]),
};
static  VTT_ENTRY vtt_S7719C12[] = {
  {&(_ZTV8S7719C12[9]),  9,36},
  {&(_tg__ZTV8S7719C15__8S7719C12[7]),  7,9},
  {&(_tg__ZTV7S7719C98S7719C15__A2__8S7719C12[3]),  3,3},
  {&(_tg__ZTV8S7719C16__8S7719C15__8S7719C12[7]),  7,9},
  {&(_tg__ZTV7S7719C8__8S7719C15__8S7719C12[3]),  3,3},
  {&(_tg__ZTV7S7719C9__8S7719C15__8S7719C12[3]),  3,3},
  {&(_ZTV8S7719C12[17]),  17,36},
  {&(_ZTV8S7719C12[21]),  21,36},
  {&(_ZTV8S7719C12[24]),  24,36},
  {&(_ZTV8S7719C12[31]),  31,36},
  {&(_ZTV8S7719C12[36]),  36,36},
  {&(_tg__ZTV8S7719C13__8S7719C12[6]),  6,6},
  {&(_tg__ZTV7S7719C98S7719C13__8S7719C12[3]),  3,3},
  {&(_tg__ZTV8S7719C148S7719C13__8S7719C12[4]),  4,4},
  {&(_tg__ZTV7S7719C9__8S7719C148S7719C13__8S7719C12[3]),  3,3},
  {&(_tg__ZTV8S7719C14__8S7719C13__8S7719C12[4]),  4,4},
  {&(_tg__ZTV7S7719C9__A1__8S7719C13__8S7719C12[3]),  3,3},
  {&(_tg__ZTV7S7719C9__A1__8S7719C12[3]),  3,3},
  {&(_tg__ZTV8S7719C16__8S7719C12[6]),  6,8},
  {&(_tg__ZTV7S7719C38S7719C16__8S7719C12[4]),  4,4},
  {&(_tg__ZTV7S7719C8__7S7719C38S7719C16__8S7719C12[3]),  3,3},
  {&(_tg__ZTV7S7719C8__8S7719C16__8S7719C12[3]),  3,3},
  {&(_tg__ZTV7S7719C9__8S7719C16__8S7719C12[3]),  3,3},
  {&(_tg__ZTV7S7719C8__8S7719C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7719C12[];
extern  VTBL_ENTRY _ZTV8S7719C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7719C12[];
static VTBL_ENTRY alt_thunk_names72[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7719C15D0Ev,_ZTv0_n28_N8S7719C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S7719C15D0Ev,_ZThn88_N8S7719C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7719C15D1Ev,_ZTv0_n28_N8S7719C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S7719C15D1Ev,_ZThn88_N8S7719C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7719C12D0Ev,_ZTv0_n28_N8S7719C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S7719C12D0Ev,_ZThn88_N8S7719C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7719C12D1Ev,_ZTv0_n28_N8S7719C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S7719C12D1Ev,_ZThn88_N8S7719C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7719C12 = {  "S7719C12", // class name
  bases_S7719C12, 32,
  &(vtc_S7719C12[0]), // expected_vtbl_contents
  &(vtt_S7719C12[0]), // expected_vtt_contents
  ABISELECT(192,104), // object size
  NSPAIRA(_ZTI8S7719C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7719C12),36, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7719C12),24, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names72,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7719C18  : virtual S7719C4_nt , virtual S7719C10 , S7719C3 {
  int s7719c18f0;
  virtual  ~S7719C18(); // _ZN8S7719C18D2Ev
  S7719C18(); // tgen
};
//SIG(-1 S7719C18) C1{ VBC2{ m Fc} VBC3{ VBC4{ m} VBC5{ BC2 BC6{ m} VBC4} VBC7{ BC8{ BC6 BC2} BC6 BC5 FL} BC9{ VBC2 BC4 BC8 VBC10{ BC6 BC4 VBC2 FC4}} VBC6 FL[2]} BC9 vd Fi}


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

static void Test_S7719C18()
{
  extern Class_Descriptor cd_S7719C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S7719C18, buf);
    S7719C18 *dp, &lv = *(dp=new (buf) S7719C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S7719C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7719C18)");
    /*is_ambiguous_... S7719C18::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*), ABISELECT(16,12), "S7719C18");
    /*is_ambiguous_... S7719C3::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C3*)(S7719C10*), ABISELECT(16,12), "S7719C18");
    check_base_class_offset(lv, (S7719C4_nt*)(S7719C8*), ABISELECT(16,12), "S7719C18");
    /*is_ambiguous_... S7719C18::S7719C3 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C3*), ABISELECT(16,12), "S7719C18");
    /*is_ambiguous_... S7719C10::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C10*), ABISELECT(56,40), "S7719C18");
    /*is_ambiguous_... S7719C18::S7719C9 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C9*), ABISELECT(56,40), "S7719C18");
    check_base_class_offset(lv, (S5266C29*)(S7719C9*)(S7719C11*), ABISELECT(56,40), "S7719C18");
    /*is_ambiguous_... S7719C18::S7719C9 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C9*), ABISELECT(64,44), "S7719C18");
    /*is_ambiguous_... S7719C18::S7719C9 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C9*), ABISELECT(56,40), "S7719C18");
    /*is_ambiguous_... S7719C10::S7719C9 */ AMB_check_base_class_offset(lv, (S7719C9*)(S7719C10*), ABISELECT(56,40), "S7719C18");
    check_base_class_offset(lv, (S5266C26*)(S7719C6*)(S7719C11*), ABISELECT(81,53), "S7719C18");
    check_base_class_offset(lv, (S7719C4_nt*)(S7719C6*)(S7719C11*), ABISELECT(81,53), "S7719C18");
    check_base_class_offset(lv, (S7719C6*)(S7719C11*), ABISELECT(81,53), "S7719C18");
    /*is_ambiguous_... S7719C11::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C11*), ABISELECT(82,54), "S7719C18");
    check_base_class_offset(lv, (S7719C4_nt*)(S7719C9*)(S7719C11*), ABISELECT(80,52), "S7719C18");
    check_base_class_offset(lv, (S5266C26*)(S7719C9*)(S7719C11*), ABISELECT(72,48), "S7719C18");
    check_base_class_offset(lv, (S7719C9*)(S7719C11*), ABISELECT(72,48), "S7719C18");
    check_base_class_offset(lv, (S7719C11*)(S7719C10*), ABISELECT(72,48), "S7719C18");
    /*is_ambiguous_... S7719C3::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C3*)(S7719C10*), ABISELECT(24,16), "S7719C18");
    check_base_class_offset(lv, (S5266C26*)(S7719C6*)(S7719C3*)(S7719C10*), ABISELECT(32,20), "S7719C18");
    check_base_class_offset(lv, (S7719C4_nt*)(S7719C6*)(S7719C3*)(S7719C10*), ABISELECT(32,20), "S7719C18");
    check_base_class_offset(lv, (S7719C6*)(S7719C3*)(S7719C10*), ABISELECT(32,20), "S7719C18");
    check_base_class_offset(lv, (S5266C26*)(S7719C8*), ABISELECT(96,64), "S7719C18");
    check_base_class_offset(lv, (S5266C29*)(S7719C8*), ABISELECT(96,64), "S7719C18");
    check_base_class_offset(lv, (S7719C8*)(S7719C3*)(S7719C10*), ABISELECT(96,64), "S7719C18");
    /*is_ambiguous_... S7719C18::S7719C3 */ AMB_check_base_class_offset(lv, (S7719C8*)(S7719C3*), ABISELECT(96,64), "S7719C18");
    check_base_class_offset(lv, (S7719C3*)(S7719C10*), ABISELECT(24,16), "S7719C18");
    /*is_ambiguous_... S7719C10::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C10*), 0, "S7719C18");
    check_base_class_offset(lv, (S7719C10*), ABISELECT(24,16), "S7719C18");
    /*is_ambiguous_... S7719C18::S7719C3 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C3*), 0, "S7719C18");
    /*is_ambiguous_... S7719C18::S7719C3 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C6*)(S7719C3*), ABISELECT(8,4), "S7719C18");
    /*is_ambiguous_... S7719C18::S7719C3 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C6*)(S7719C3*), ABISELECT(8,4), "S7719C18");
    /*is_ambiguous_... S7719C18::S7719C3 */ AMB_check_base_class_offset(lv, (S7719C6*)(S7719C3*), ABISELECT(8,4), "S7719C18");
    /*is_ambiguous_... S7719C18::S7719C3 */ AMB_check_base_class_offset(lv, (S7719C3*), 0, "S7719C18");
    check_field_offset(lv, s7719c18f0, ABISELECT(12,8), "S7719C18.s7719c18f0");
    test_class_info(&lv, &cd_S7719C18);
    dp->~S7719C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7719C18(Test_S7719C18, "S7719C18", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN8S7719C18C1Ev();
extern void _ZN8S7719C18D2Ev();
Name_Map name_map_S7719C18[] = {
  NSPAIR(_ZN8S7719C18C1Ev),
  NSPAIR(_ZN8S7719C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C9;
extern VTBL_ENTRY _ZTI7S7719C9[];
extern  VTBL_ENTRY _ZTV7S7719C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C9[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7719C6;
extern VTBL_ENTRY _ZTI7S7719C6[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C9;
extern VTBL_ENTRY _ZTI7S7719C9[];
extern  VTBL_ENTRY _ZTV7S7719C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C9[];
extern Class_Descriptor cd_S7719C11;
extern VTBL_ENTRY _ZTI8S7719C11[];
extern  VTBL_ENTRY _ZTV8S7719C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7719C11[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7719C6;
extern VTBL_ENTRY _ZTI7S7719C6[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C8;
extern VTBL_ENTRY _ZTI7S7719C8[];
extern  VTBL_ENTRY _ZTV7S7719C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C8[];
extern Class_Descriptor cd_S7719C3;
extern VTBL_ENTRY _ZTI7S7719C3[];
extern  VTBL_ENTRY _ZTV7S7719C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C3[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C10;
extern VTBL_ENTRY _ZTI8S7719C10[];
extern  VTBL_ENTRY _ZTV8S7719C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7719C10[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7719C6;
extern VTBL_ENTRY _ZTI7S7719C6[];
extern Class_Descriptor cd_S7719C3;
extern VTBL_ENTRY _ZTI7S7719C3[];
extern  VTBL_ENTRY _ZTV7S7719C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C3[];
static Base_Class bases_S7719C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7719C4_nt,    ABISELECT(16,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, 1},
  {&cd_S5266C29,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7719C4_nt,    ABISELECT(64,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
    4, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C9,    ABISELECT(56,40), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S5266C26,    ABISELECT(81,53), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(81,53), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C6,    ABISELECT(81,53), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    ABISELECT(82,54), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(80,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
    11, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(72,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_S7719C9,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7719C11,    ABISELECT(72,48), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S5266C29,    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
    20, //immediately_derived
  0, 0},
  {&cd_S5266C26,    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
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7719C4_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
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7719C6,    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
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(96,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
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S5266C29,    ABISELECT(96,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
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7719C8,    ABISELECT(96,64), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S7719C3,    ABISELECT(24,16), //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
    5, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7719C10,    ABISELECT(24,16), //bcp->offset
    11, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S5266C26,    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
    26, //immediately_derived
  0, 0},
  {&cd_S7719C4_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
    26, //immediately_derived
  0, 0},
  {&cd_S7719C6,    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
    27, //immediately_derived
  0, 0},
  {&cd_S7719C3,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7719C18[];
extern void _ZN8S7719C18D1Ev();
extern void _ZN8S7719C18D0Ev();
static  VTBL_ENTRY vtc_S7719C18[] = {
  0,
  ABISELECT(72,48),
  ABISELECT(56,40),
  ABISELECT(56,40),
  ABISELECT(24,16),
  ABISELECT(96,64),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7719C18[0]),
  (VTBL_ENTRY)&_ZN8S7719C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7719C18D0Ev,
  ABISELECT(-24,-16),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(32,24),
  ABISELECT(72,48),
  ABISELECT(-8,-4),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S7719C18[0]),
  0,
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7719C18[0]),
  ABISELECT(-16,-8),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S7719C18[0]),
  ABISELECT(-80,-52),
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI8S7719C18[0]),
};
extern VTBL_ENTRY _ZTV8S7719C18[];
static  VTBL_ENTRY _tg__ZTV7S7719C3__A1__8S7719C18[] = {
  ABISELECT(96,64),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__7S7719C3__A1__8S7719C18[] = {
  ABISELECT(-80,-52),
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI7S7719C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7719C10__8S7719C18[] = {
  ABISELECT(-24,-16),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(32,24),
  ABISELECT(72,48),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7719C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C38S7719C10__8S7719C18[] = {
  ABISELECT(72,48),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__7S7719C38S7719C10__8S7719C18[] = {
  ABISELECT(-80,-52),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S7719C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C9__8S7719C10__8S7719C18[] = {
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S7719C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7719C11__8S7719C10__8S7719C18[] = {
  ABISELECT(-16,-8),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S7719C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__8S7719C10__8S7719C18[] = {
  ABISELECT(-80,-52),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S7719C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C9__8S7719C18[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7719C11__8S7719C18[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7719C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C98S7719C11__A1__8S7719C18[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__8S7719C18[] = {
  ABISELECT(-80,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C8[0]),
};
static  VTT_ENTRY vtt_S7719C18[] = {
  {&(_ZTV8S7719C18[9]),  9,28},
  {&(_tg__ZTV7S7719C3__A1__8S7719C18[4]),  4,4},
  {&(_tg__ZTV7S7719C8__7S7719C3__A1__8S7719C18[3]),  3,3},
  {&(_ZTV8S7719C18[19]),  19,28},
  {&(_ZTV8S7719C18[22]),  22,28},
  {&(_ZTV8S7719C18[25]),  25,28},
  {&(_ZTV8S7719C18[28]),  28,28},
  {&(_tg__ZTV8S7719C10__8S7719C18[8]),  8,8},
  {&(_tg__ZTV7S7719C38S7719C10__8S7719C18[4]),  4,4},
  {&(_tg__ZTV7S7719C8__7S7719C38S7719C10__8S7719C18[3]),  3,3},
  {&(_tg__ZTV7S7719C9__8S7719C10__8S7719C18[3]),  3,3},
  {&(_tg__ZTV8S7719C11__8S7719C10__8S7719C18[3]),  3,3},
  {&(_tg__ZTV7S7719C8__8S7719C10__8S7719C18[3]),  3,3},
  {&(_tg__ZTV7S7719C9__8S7719C18[3]),  3,3},
  {&(_tg__ZTV8S7719C11__8S7719C18[3]),  3,3},
  {&(_tg__ZTV7S7719C98S7719C11__A1__8S7719C18[3]),  3,3},
  {&(_tg__ZTV7S7719C8__8S7719C18[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7719C18[];
extern  VTBL_ENTRY _ZTV8S7719C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7719C18[];
Class_Descriptor cd_S7719C18 = {  "S7719C18", // class name
  bases_S7719C18, 28,
  &(vtc_S7719C18[0]), // expected_vtbl_contents
  &(vtt_S7719C18[0]), // expected_vtt_contents
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI8S7719C18),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7719C18),28, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7719C18),17, //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  S7719C1  : S7719C2 , S7719C12 , S7719C18 , S7719C8 {
  ~S7719C1(); // tgen
  S7719C1(); // tgen
};
//SIG(1 S7719C1) C1{ BC2{ VBC3{ VBC4{ m Fc} BC5{ m} BC6{ BC7{ m} BC4} VBC8{ BC7 BC5 VBC4 FC5}} VBC9{ BC4 BC7 VBC5} BC8 VBC10{ VBC5 VBC9 VBC11{ BC6 BC7 BC9 FL} BC3 VBC7 FL[2]}} BC12{ BC6 VBC13{ BC9 BC14{ VBC9 FD Fp[8]} VBC7 VBC4} BC15{ BC6 VBC16{ BC7 BC3 VBC9 vd} BC9 vd Fi} BC17{ m Fi} vd Fi} BC18{ VBC4 VBC10 BC3 vd Fi} BC8}


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

static void Test_S7719C1()
{
  extern Class_Descriptor cd_S7719C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,47)];
    init_test(&cd_S7719C1, buf);
    S7719C1 *dp, &lv = *(dp=new (buf) S7719C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,184), "sizeof(S7719C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7719C1)");
    /*is_ambiguous_... S7719C1::S7719C3 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C3*), ABISELECT(89,57), "S7719C1");
    /*is_ambiguous_... S7719C1::S7719C8 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C8*), ABISELECT(89,57), "S7719C1");
    /*is_ambiguous_... S7719C2::S7719C8 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C8*)(S7719C2*), ABISELECT(89,57), "S7719C1");
    /*is_ambiguous_... S7719C3::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C3*)(S7719C10*), ABISELECT(89,57), "S7719C1");
    /*is_ambiguous_... S7719C13::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C13*), ABISELECT(89,57), "S7719C1");
    /*is_ambiguous_... S7719C3::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C3*)(S7719C16*), ABISELECT(89,57), "S7719C1");
    /*is_ambiguous_... S7719C18::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C18*), ABISELECT(89,57), "S7719C1");
    /*is_ambiguous_... S7719C18::S7719C3 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C3*)(S7719C18*), ABISELECT(89,57), "S7719C1");
    /*is_ambiguous_... S7719C1::S7719C8 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C8*), ABISELECT(89,57), "S7719C1");
    /*is_ambiguous_... S7719C1::S7719C3 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C3*), ABISELECT(80,52), "S7719C1");
    /*is_ambiguous_... S7719C1::S7719C3 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C6*)(S7719C3*), ABISELECT(88,56), "S7719C1");
    /*is_ambiguous_... S7719C1::S7719C3 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C6*)(S7719C3*), ABISELECT(88,56), "S7719C1");
    /*is_ambiguous_... S7719C1::S7719C3 */ AMB_check_base_class_offset(lv, (S7719C6*)(S7719C3*), ABISELECT(88,56), "S7719C1");
    /*is_ambiguous_... S7719C1::S7719C8 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C8*), ABISELECT(96,60), "S7719C1");
    /*is_ambiguous_... S7719C1::S7719C8 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C8*), ABISELECT(96,60), "S7719C1");
    /*is_ambiguous_... S7719C1::S7719C3 */ AMB_check_base_class_offset(lv, (S7719C8*)(S7719C3*), ABISELECT(96,60), "S7719C1");
    check_base_class_offset(lv, (S7719C8*)(S7719C3*)(S7719C10*), ABISELECT(96,60), "S7719C1");
    check_base_class_offset(lv, (S7719C8*)(S7719C3*)(S7719C16*), ABISELECT(96,60), "S7719C1");
    /*is_ambiguous_... S7719C18::S7719C3 */ AMB_check_base_class_offset(lv, (S7719C8*)(S7719C3*)(S7719C18*), ABISELECT(96,60), "S7719C1");
    /*is_ambiguous_... S7719C2::S7719C3 */ AMB_check_base_class_offset(lv, (S7719C3*)(S7719C2*), ABISELECT(80,52), "S7719C1");
    /*is_ambiguous_... S7719C1::S7719C9 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C9*), ABISELECT(120,72), "S7719C1");
    /*is_ambiguous_... S7719C1::S7719C9 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C9*), ABISELECT(112,68), "S7719C1");
    /*is_ambiguous_... S7719C1::S7719C9 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C9*), ABISELECT(121,73), "S7719C1");
    /*is_ambiguous_... S7719C10::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C10*), ABISELECT(121,73), "S7719C1");
    check_base_class_offset(lv, (S5266C29*)(S7719C9*)(S7719C11*), ABISELECT(121,73), "S7719C1");
    /*is_ambiguous_... S7719C13::S7719C9 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C9*)(S7719C13*), ABISELECT(121,73), "S7719C1");
    /*is_ambiguous_... S7719C15::S7719C9 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C9*)(S7719C15*)(S7719C12*), ABISELECT(121,73), "S7719C1");
    /*is_ambiguous_... S7719C2::S7719C9 */ AMB_check_base_class_offset(lv, (S7719C9*)(S7719C2*), ABISELECT(112,68), "S7719C1");
    /*is_ambiguous_... S7719C10::S7719C9 */ AMB_check_base_class_offset(lv, (S7719C9*)(S7719C10*), ABISELECT(112,68), "S7719C1");
    check_base_class_offset(lv, (S7719C9*)(S7719C14*)(S7719C13*), ABISELECT(112,68), "S7719C1");
    check_base_class_offset(lv, (S7719C9*)(S7719C16*), ABISELECT(112,68), "S7719C1");
    /*is_ambiguous_... S7719C2::S7719C8 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C8*)(S7719C2*), 0, "S7719C1");
    /*is_ambiguous_... S7719C2::S7719C8 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C8*)(S7719C2*), 0, "S7719C1");
    /*is_ambiguous_... S7719C2::S7719C8 */ AMB_check_base_class_offset(lv, (S7719C8*)(S7719C2*), 0, "S7719C1");
    check_base_class_offset(lv, (S5266C26*)(S7719C6*)(S7719C11*), ABISELECT(169,105), "S7719C1");
    check_base_class_offset(lv, (S7719C4_nt*)(S7719C6*)(S7719C11*), ABISELECT(169,105), "S7719C1");
    check_base_class_offset(lv, (S7719C6*)(S7719C11*), ABISELECT(169,105), "S7719C1");
    /*is_ambiguous_... S7719C11::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C11*), ABISELECT(170,106), "S7719C1");
    check_base_class_offset(lv, (S7719C4_nt*)(S7719C9*)(S7719C11*), ABISELECT(168,104), "S7719C1");
    check_base_class_offset(lv, (S5266C26*)(S7719C9*)(S7719C11*), ABISELECT(160,100), "S7719C1");
    check_base_class_offset(lv, (S7719C9*)(S7719C11*), ABISELECT(160,100), "S7719C1");
    check_base_class_offset(lv, (S7719C11*)(S7719C10*), ABISELECT(160,100), "S7719C1");
    /*is_ambiguous_... S7719C3::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C3*)(S7719C10*), ABISELECT(128,76), "S7719C1");
    check_base_class_offset(lv, (S5266C26*)(S7719C6*)(S7719C3*)(S7719C10*), ABISELECT(136,80), "S7719C1");
    check_base_class_offset(lv, (S7719C4_nt*)(S7719C6*)(S7719C3*)(S7719C10*), ABISELECT(136,80), "S7719C1");
    check_base_class_offset(lv, (S7719C6*)(S7719C3*)(S7719C10*), ABISELECT(136,80), "S7719C1");
    check_base_class_offset(lv, (S7719C3*)(S7719C10*), ABISELECT(128,76), "S7719C1");
    /*is_ambiguous_... S7719C10::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C10*), ABISELECT(184,116), "S7719C1");
    /*is_ambiguous_... S7719C13::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C13*), ABISELECT(184,116), "S7719C1");
    check_base_class_offset(lv, (S7719C10*)(S7719C2*), ABISELECT(128,76), "S7719C1");
    check_base_class_offset(lv, (S7719C10*)(S7719C18*), ABISELECT(128,76), "S7719C1");
    check_base_class_offset(lv, (S7719C2*), 0, "S7719C1");
    /*is_ambiguous_... S7719C12::S7719C6 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C6*)(S7719C12*), ABISELECT(32,20), "S7719C1");
    /*is_ambiguous_... S7719C12::S7719C6 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C6*)(S7719C12*), ABISELECT(32,20), "S7719C1");
    /*is_ambiguous_... S7719C12::S7719C6 */ AMB_check_base_class_offset(lv, (S7719C6*)(S7719C12*), ABISELECT(32,20), "S7719C1");
    /*is_ambiguous_... S7719C13::S7719C9 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C9*)(S7719C13*), ABISELECT(200,124), "S7719C1");
    /*is_ambiguous_... S7719C13::S7719C9 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C9*)(S7719C13*), ABISELECT(192,120), "S7719C1");
    /*is_ambiguous_... S7719C13::S7719C9 */ AMB_check_base_class_offset(lv, (S7719C9*)(S7719C13*), ABISELECT(192,120), "S7719C1");
    check_base_class_offset(lv, (S7719C14*)(S7719C13*), ABISELECT(208,128), "S7719C1");
    check_base_class_offset(lv, (S7719C13*)(S7719C12*), ABISELECT(192,120), "S7719C1");
    /*is_ambiguous_... S7719C15::S7719C6 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C6*)(S7719C15*)(S7719C12*), ABISELECT(25,13), "S7719C1");
    /*is_ambiguous_... S7719C15::S7719C6 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C6*)(S7719C15*)(S7719C12*), ABISELECT(25,13), "S7719C1");
    /*is_ambiguous_... S7719C15::S7719C6 */ AMB_check_base_class_offset(lv, (S7719C6*)(S7719C15*)(S7719C12*), ABISELECT(25,13), "S7719C1");
    /*is_ambiguous_... S7719C16::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C16*), ABISELECT(304,176), "S7719C1");
    /*is_ambiguous_... S7719C3::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C3*)(S7719C16*), ABISELECT(304,176), "S7719C1");
    check_base_class_offset(lv, (S5266C26*)(S7719C6*)(S7719C3*)(S7719C16*), ABISELECT(312,180), "S7719C1");
    check_base_class_offset(lv, (S7719C4_nt*)(S7719C6*)(S7719C3*)(S7719C16*), ABISELECT(312,180), "S7719C1");
    check_base_class_offset(lv, (S7719C6*)(S7719C3*)(S7719C16*), ABISELECT(312,180), "S7719C1");
    check_base_class_offset(lv, (S7719C3*)(S7719C16*), ABISELECT(304,176), "S7719C1");
    check_base_class_offset(lv, (S7719C16*)(S7719C15*)(S7719C12*), ABISELECT(304,176), "S7719C1");
    /*is_ambiguous_... S7719C15::S7719C9 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C9*)(S7719C15*)(S7719C12*), ABISELECT(24,12), "S7719C1");
    /*is_ambiguous_... S7719C15::S7719C9 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C9*)(S7719C15*)(S7719C12*), ABISELECT(16,8), "S7719C1");
    /*is_ambiguous_... S7719C15::S7719C9 */ AMB_check_base_class_offset(lv, (S7719C9*)(S7719C15*)(S7719C12*), ABISELECT(16,8), "S7719C1");
    check_base_class_offset(lv, (S7719C15*)(S7719C12*), ABISELECT(16,8), "S7719C1");
    check_base_class_offset(lv, (S7719C17_nt*)(S7719C12*), ABISELECT(36,24), "S7719C1");
    check_base_class_offset(lv, (S7719C12*), ABISELECT(16,8), "S7719C1");
    /*is_ambiguous_... S7719C18::S7719C3 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C3*)(S7719C18*), ABISELECT(48,32), "S7719C1");
    /*is_ambiguous_... S7719C18::S7719C3 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C6*)(S7719C3*)(S7719C18*), ABISELECT(56,36), "S7719C1");
    /*is_ambiguous_... S7719C18::S7719C3 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7719C6*)(S7719C3*)(S7719C18*), ABISELECT(56,36), "S7719C1");
    /*is_ambiguous_... S7719C18::S7719C3 */ AMB_check_base_class_offset(lv, (S7719C6*)(S7719C3*)(S7719C18*), ABISELECT(56,36), "S7719C1");
    /*is_ambiguous_... S7719C18::S7719C3 */ AMB_check_base_class_offset(lv, (S7719C3*)(S7719C18*), ABISELECT(48,32), "S7719C1");
    check_base_class_offset(lv, (S7719C18*), ABISELECT(48,32), "S7719C1");
    /*is_ambiguous_... S7719C1::S7719C8 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7719C8*), ABISELECT(64,44), "S7719C1");
    /*is_ambiguous_... S7719C1::S7719C8 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7719C8*), ABISELECT(64,44), "S7719C1");
    /*is_ambiguous_... S7719C1::S7719C8 */ AMB_check_base_class_offset(lv, (S7719C8*), ABISELECT(64,44), "S7719C1");
    test_class_info(&lv, &cd_S7719C1);
    dp->~S7719C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7719C1(Test_S7719C1, "S7719C1", ABISELECT(320,184));

#else // __cplusplus

extern void _ZN7S7719C1C1Ev();
extern void _ZN7S7719C1D1Ev();
Name_Map name_map_S7719C1[] = {
  NSPAIR(_ZN7S7719C1C1Ev),
  NSPAIR(_ZN7S7719C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7719C6;
extern VTBL_ENTRY _ZTI7S7719C6[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C8;
extern VTBL_ENTRY _ZTI7S7719C8[];
extern  VTBL_ENTRY _ZTV7S7719C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C8[];
extern Class_Descriptor cd_S7719C3;
extern VTBL_ENTRY _ZTI7S7719C3[];
extern  VTBL_ENTRY _ZTV7S7719C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C3[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C9;
extern VTBL_ENTRY _ZTI7S7719C9[];
extern  VTBL_ENTRY _ZTV7S7719C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C9[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C8;
extern VTBL_ENTRY _ZTI7S7719C8[];
extern  VTBL_ENTRY _ZTV7S7719C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C8[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7719C6;
extern VTBL_ENTRY _ZTI7S7719C6[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C9;
extern VTBL_ENTRY _ZTI7S7719C9[];
extern  VTBL_ENTRY _ZTV7S7719C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C9[];
extern Class_Descriptor cd_S7719C11;
extern VTBL_ENTRY _ZTI8S7719C11[];
extern  VTBL_ENTRY _ZTV8S7719C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7719C11[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7719C6;
extern VTBL_ENTRY _ZTI7S7719C6[];
extern Class_Descriptor cd_S7719C3;
extern VTBL_ENTRY _ZTI7S7719C3[];
extern  VTBL_ENTRY _ZTV7S7719C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C3[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C10;
extern VTBL_ENTRY _ZTI8S7719C10[];
extern  VTBL_ENTRY _ZTV8S7719C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7719C10[];
extern Class_Descriptor cd_S7719C2;
extern VTBL_ENTRY _ZTI7S7719C2[];
extern  VTBL_ENTRY _ZTV7S7719C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C2[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7719C6;
extern VTBL_ENTRY _ZTI7S7719C6[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C9;
extern VTBL_ENTRY _ZTI7S7719C9[];
extern  VTBL_ENTRY _ZTV7S7719C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C9[];
extern Class_Descriptor cd_S7719C14;
extern VTBL_ENTRY _ZTI8S7719C14[];
extern  VTBL_ENTRY _ZTV8S7719C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7719C14[];
extern Class_Descriptor cd_S7719C13;
extern VTBL_ENTRY _ZTI8S7719C13[];
extern  VTBL_ENTRY _ZTV8S7719C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7719C13[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7719C6;
extern VTBL_ENTRY _ZTI7S7719C6[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7719C6;
extern VTBL_ENTRY _ZTI7S7719C6[];
extern Class_Descriptor cd_S7719C3;
extern VTBL_ENTRY _ZTI7S7719C3[];
extern  VTBL_ENTRY _ZTV7S7719C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C3[];
extern Class_Descriptor cd_S7719C16;
extern VTBL_ENTRY _ZTI8S7719C16[];
extern  VTBL_ENTRY _ZTV8S7719C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7719C16[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C9;
extern VTBL_ENTRY _ZTI7S7719C9[];
extern  VTBL_ENTRY _ZTV7S7719C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C9[];
extern Class_Descriptor cd_S7719C15;
extern VTBL_ENTRY _ZTI8S7719C15[];
extern  VTBL_ENTRY _ZTV8S7719C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7719C15[];
extern Class_Descriptor cd_S7719C17_nt;
extern VTBL_ENTRY _ZTI11S7719C17_nt[];
extern Class_Descriptor cd_S7719C12;
extern VTBL_ENTRY _ZTI8S7719C12[];
extern  VTBL_ENTRY _ZTV8S7719C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7719C12[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7719C6;
extern VTBL_ENTRY _ZTI7S7719C6[];
extern Class_Descriptor cd_S7719C3;
extern VTBL_ENTRY _ZTI7S7719C3[];
extern  VTBL_ENTRY _ZTV7S7719C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C3[];
extern Class_Descriptor cd_S7719C18;
extern VTBL_ENTRY _ZTI8S7719C18[];
extern  VTBL_ENTRY _ZTV8S7719C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7719C18[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C8;
extern VTBL_ENTRY _ZTI7S7719C8[];
extern  VTBL_ENTRY _ZTV7S7719C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C8[];
static Base_Class bases_S7719C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7719C4_nt,    ABISELECT(89,57), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S5266C29,    ABISELECT(80,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
    8, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(88,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
    4, //immediately_derived
  0, 0},
  {&cd_S7719C4_nt,    ABISELECT(88,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
    4, //immediately_derived
  0, 0},
  {&cd_S7719C6,    ABISELECT(88,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
    8, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(96,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
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S5266C29,    ABISELECT(96,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
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7719C8,    ABISELECT(96,60), //bcp->offset
    43, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7719C3,    ABISELECT(80,52), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S7719C4_nt,    ABISELECT(120,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
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(112,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
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S5266C29,    ABISELECT(121,73), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7719C9,    ABISELECT(112,68), //bcp->offset
    46, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C8,    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
    13, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(169,105), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(169,105), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C6,    ABISELECT(169,105), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    ABISELECT(170,106), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(168,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
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(160,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C9,    ABISELECT(160,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S7719C11,    ABISELECT(160,100), //bcp->offset
    57, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S5266C29,    ABISELECT(128,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
    -1, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(136,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
    27, //immediately_derived
  0, 0},
  {&cd_S7719C4_nt,    ABISELECT(136,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
    27, //immediately_derived
  0, 0},
  {&cd_S7719C6,    ABISELECT(136,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
    28, //immediately_derived
  0, 0},
  {&cd_S7719C3,    ABISELECT(128,76), //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
    6, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(184,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7719C10,    ABISELECT(128,76), //bcp->offset
    49, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S7719C2,    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
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5266C26,    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
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7719C4_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
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7719C6,    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
    -1, //init_seq
    55, //immediately_derived
  0, 0},
  {&cd_S7719C4_nt,    ABISELECT(200,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(192,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
    -1, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S7719C9,    ABISELECT(192,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S7719C14,    ABISELECT(208,128), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S7719C13,    ABISELECT(192,120), //bcp->offset
    60, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    55, //immediately_derived
  0, 1},
  {&cd_S5266C26,    ABISELECT(25,13), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S7719C4_nt,    ABISELECT(25,13), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S7719C6,    ABISELECT(25,13), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(304,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C29,    ABISELECT(304,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(312,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
    -1, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S7719C4_nt,    ABISELECT(312,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
    -1, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S7719C6,    ABISELECT(312,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
    -1, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S7719C3,    ABISELECT(304,176), //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
    11, //init_seq
    49, //immediately_derived
  0, 0},
  {&cd_S7719C16,    ABISELECT(304,176), //bcp->offset
    70, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    53, //immediately_derived
  0, 1},
  {&cd_S7719C4_nt,    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
    -1, //init_seq
    52, //immediately_derived
  0, 0},
  {&cd_S5266C26,    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
    52, //immediately_derived
  0, 0},
  {&cd_S7719C9,    ABISELECT(16,8), //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
    15, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S7719C15,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    55, //immediately_derived
  0, 0},
  {&cd_S7719C17_nt,    ABISELECT(36,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
    55, //immediately_derived
  0, 0},
  {&cd_S7719C12,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5266C29,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    60, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(56,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
    -1, //init_seq
    59, //immediately_derived
  0, 0},
  {&cd_S7719C4_nt,    ABISELECT(56,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
    -1, //init_seq
    59, //immediately_derived
  0, 0},
  {&cd_S7719C6,    ABISELECT(56,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
    -1, //init_seq
    60, //immediately_derived
  0, 0},
  {&cd_S7719C3,    ABISELECT(48,32), //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
    18, //init_seq
    61, //immediately_derived
  0, 0},
  {&cd_S7719C18,    ABISELECT(48,32), //bcp->offset
    25, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5266C26,    ABISELECT(64,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
    64, //immediately_derived
  0, 0},
  {&cd_S5266C29,    ABISELECT(64,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
    64, //immediately_derived
  0, 0},
  {&cd_S7719C8,    ABISELECT(64,44), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7719C1[];
extern void _ZN7S7719C1D1Ev();
extern void _ZN7S7719C1D0Ev();
extern void ABISELECT(_ZThn16_N7S7719C1D1Ev,_ZThn8_N7S7719C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S7719C1D0Ev,_ZThn8_N7S7719C1D0Ev)();
extern void ABISELECT(_ZThn48_N7S7719C1D1Ev,_ZThn32_N7S7719C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S7719C1D0Ev,_ZThn32_N7S7719C1D0Ev)();
extern void ABISELECT(_ZTv0_n56_N7S7719C1D1Ev,_ZTv0_n28_N7S7719C1D1Ev)();
extern void ABISELECT(_ZThn304_N7S7719C1D1Ev,_ZThn176_N7S7719C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7719C1D0Ev,_ZTv0_n28_N7S7719C1D0Ev)();
extern void ABISELECT(_ZThn304_N7S7719C1D0Ev,_ZThn176_N7S7719C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7719C1[] = {
  ABISELECT(304,176),
  ABISELECT(192,120),
  ABISELECT(184,116),
  ABISELECT(160,100),
  ABISELECT(128,76),
  ABISELECT(121,73),
  ABISELECT(112,68),
  ABISELECT(96,60),
  ABISELECT(80,52),
  ABISELECT(89,57),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C1[0]),
  (VTBL_ENTRY)&_ZN7S7719C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7719C1D0Ev,
  ABISELECT(168,108),
  ABISELECT(176,112),
  ABISELECT(96,60),
  ABISELECT(80,52),
  ABISELECT(73,49),
  ABISELECT(288,168),
  ABISELECT(105,65),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7719C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7719C1D1Ev,_ZThn8_N7S7719C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7719C1D0Ev,_ZThn8_N7S7719C1D0Ev),
  ABISELECT(136,84),
  ABISELECT(112,68),
  ABISELECT(64,36),
  ABISELECT(73,41),
  ABISELECT(80,44),
  ABISELECT(48,28),
  ABISELECT(41,25),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S7719C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7719C1D1Ev,_ZThn32_N7S7719C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7719C1D0Ev,_ZThn32_N7S7719C1D0Ev),
  ABISELECT(25,13),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S7719C1[0]),
  ABISELECT(16,8),
  ABISELECT(9,5),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI7S7719C1[0]),
  ABISELECT(-7,-3),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S7719C1[0]),
  ABISELECT(9,5),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI7S7719C1[0]),
  ABISELECT(56,40),
  ABISELECT(32,24),
  ABISELECT(-16,-8),
  ABISELECT(-7,-3),
  ABISELECT(-32,-16),
  ABISELECT(-39,-19),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI7S7719C1[0]),
  ABISELECT(-39,-27),
  ABISELECT(-160,-100),
  (VTBL_ENTRY)&(_ZTI7S7719C1[0]),
  ABISELECT(-103,-63),
  ABISELECT(-8,-4),
  ABISELECT(-80,-52),
  ABISELECT(-71,-47),
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI7S7719C1[0]),
  ABISELECT(-87,-55),
  ABISELECT(-96,-60),
  ABISELECT(-208,-128),
  (VTBL_ENTRY)&(_ZTI7S7719C1[0]),
  ABISELECT(-304,-176),
  ABISELECT(-183,-103),
  ABISELECT(-192,-108),
  ABISELECT(-208,-116),
  ABISELECT(-215,-119),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI7S7719C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7719C1D1Ev,_ZTv0_n28_N7S7719C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7719C1D0Ev,_ZTv0_n28_N7S7719C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7719C1[];
static  VTBL_ENTRY _tg__ZTV7S7719C2__7S7719C1[] = {
  ABISELECT(184,116),
  ABISELECT(160,100),
  ABISELECT(128,76),
  ABISELECT(121,73),
  ABISELECT(112,68),
  ABISELECT(96,60),
  ABISELECT(80,52),
  ABISELECT(89,57),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C87S7719C2__A1__7S7719C1[] = {
  ABISELECT(89,57),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C3__7S7719C2__7S7719C1[] = {
  ABISELECT(16,8),
  ABISELECT(9,5),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI7S7719C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__7S7719C2__7S7719C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S7719C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C9__7S7719C2__7S7719C1[] = {
  ABISELECT(9,5),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI7S7719C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7719C10__7S7719C2__7S7719C1[] = {
  ABISELECT(56,40),
  ABISELECT(32,24),
  ABISELECT(-16,-8),
  ABISELECT(-7,-3),
  ABISELECT(-32,-16),
  ABISELECT(-39,-19),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI7S7719C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7719C11__7S7719C2__7S7719C1[] = {
  ABISELECT(-39,-27),
  ABISELECT(-160,-100),
  (VTBL_ENTRY)&(_ZTI7S7719C2[0]),
};
extern void _ZN8S7719C12D1Ev();
extern void _ZN8S7719C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7719C12__7S7719C1[] = {
  ABISELECT(168,108),
  ABISELECT(176,112),
  ABISELECT(96,60),
  ABISELECT(80,52),
  ABISELECT(73,49),
  ABISELECT(288,168),
  ABISELECT(105,65),
  0,
  (VTBL_ENTRY)&(_ZTI8S7719C12[0]),
  (VTBL_ENTRY)&_ZN8S7719C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7719C12D0Ev,
};
extern void _ZN8S7719C15D1Ev();
extern void _ZN8S7719C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7719C158S7719C12__7S7719C1[] = {
  ABISELECT(96,60),
  ABISELECT(80,52),
  ABISELECT(73,49),
  ABISELECT(288,168),
  ABISELECT(105,65),
  0,
  (VTBL_ENTRY)&(_ZTI8S7719C15[0]),
  (VTBL_ENTRY)&_ZN8S7719C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7719C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7719C98S7719C158S7719C12__A3__7S7719C1[] = {
  ABISELECT(105,65),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C9[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S7719C15D1Ev,_ZTv0_n28_N8S7719C15D1Ev)();
extern void ABISELECT(_ZThn288_N8S7719C15D1Ev,_ZThn168_N8S7719C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7719C15D0Ev,_ZTv0_n28_N8S7719C15D0Ev)();
extern void ABISELECT(_ZThn288_N8S7719C15D0Ev,_ZThn168_N8S7719C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7719C16__8S7719C158S7719C12__7S7719C1[] = {
  ABISELECT(-288,-168),
  ABISELECT(-183,-103),
  ABISELECT(-192,-108),
  ABISELECT(-208,-116),
  ABISELECT(-215,-119),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI8S7719C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7719C15D1Ev,_ZTv0_n28_N8S7719C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7719C15D0Ev,_ZTv0_n28_N8S7719C15D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__8S7719C158S7719C12__7S7719C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S7719C15[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C9__8S7719C158S7719C12__7S7719C1[] = {
  ABISELECT(9,5),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI8S7719C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7719C13__8S7719C12__7S7719C1[] = {
  ABISELECT(-103,-63),
  ABISELECT(-8,-4),
  ABISELECT(-80,-52),
  ABISELECT(-71,-47),
  ABISELECT(-176,-112),
  (VTBL_ENTRY)&(_ZTI8S7719C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7719C148S7719C13__8S7719C12__7S7719C1[] = {
  ABISELECT(-87,-55),
  ABISELECT(-96,-60),
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI8S7719C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C9__A1__8S7719C12__7S7719C1[] = {
  ABISELECT(9,5),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI8S7719C12[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S7719C12D1Ev,_ZTv0_n28_N8S7719C12D1Ev)();
extern void ABISELECT(_ZThn288_N8S7719C12D1Ev,_ZThn168_N8S7719C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7719C12D0Ev,_ZTv0_n28_N8S7719C12D0Ev)();
extern void ABISELECT(_ZThn288_N8S7719C12D0Ev,_ZThn168_N8S7719C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7719C16__8S7719C12__7S7719C1[] = {
  ABISELECT(-288,-168),
  ABISELECT(-183,-103),
  ABISELECT(-192,-108),
  ABISELECT(-208,-116),
  ABISELECT(-215,-119),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI8S7719C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7719C12D1Ev,_ZTv0_n28_N8S7719C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7719C12D0Ev,_ZTv0_n28_N8S7719C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__8S7719C12__7S7719C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S7719C12[0]),
};
extern void _ZN8S7719C18D1Ev();
extern void _ZN8S7719C18D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7719C18__7S7719C1[] = {
  ABISELECT(136,84),
  ABISELECT(112,68),
  ABISELECT(64,36),
  ABISELECT(73,41),
  ABISELECT(80,44),
  ABISELECT(48,28),
  ABISELECT(41,25),
  0,
  (VTBL_ENTRY)&(_ZTI8S7719C18[0]),
  (VTBL_ENTRY)&_ZN8S7719C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7719C18D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7719C38S7719C18__A3__7S7719C1[] = {
  ABISELECT(48,28),
  ABISELECT(41,25),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__7S7719C38S7719C18__A3__7S7719C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7719C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7719C10__8S7719C18__7S7719C1[] = {
  ABISELECT(56,40),
  ABISELECT(32,24),
  ABISELECT(-16,-8),
  ABISELECT(-7,-3),
  ABISELECT(-32,-16),
  ABISELECT(-39,-19),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S7719C18[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C9__8S7719C18__7S7719C1[] = {
  ABISELECT(9,5),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S7719C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7719C11__8S7719C18__7S7719C1[] = {
  ABISELECT(-39,-27),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S7719C18[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__8S7719C18__7S7719C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S7719C18[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__A__7S7719C1[] = {
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C3__7S7719C1[] = {
  ABISELECT(16,8),
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__7S7719C3__7S7719C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7719C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__7S7719C1[] = {
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C9__7S7719C1[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7719C10__7S7719C1[] = {
  ABISELECT(56,40),
  ABISELECT(32,24),
  ABISELECT(-16,-8),
  ABISELECT(-7,-3),
  ABISELECT(-32,-16),
  ABISELECT(-39,-19),
  0,
  (VTBL_ENTRY)&(_ZTI8S7719C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C38S7719C10__A1__7S7719C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-39,-19),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__7S7719C38S7719C10__A1__7S7719C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S7719C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C9__8S7719C10__7S7719C1[] = {
  ABISELECT(9,5),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7719C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7719C11__8S7719C10__7S7719C1[] = {
  ABISELECT(-39,-27),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S7719C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__8S7719C10__7S7719C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S7719C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7719C11__7S7719C1[] = {
  ABISELECT(-39,-27),
  0,
  (VTBL_ENTRY)&(_ZTI8S7719C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C98S7719C11__A1__7S7719C1[] = {
  ABISELECT(-39,-27),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7719C13__7S7719C1[] = {
  ABISELECT(-103,-63),
  ABISELECT(-8,-4),
  ABISELECT(-80,-52),
  ABISELECT(-71,-47),
  0,
  (VTBL_ENTRY)&(_ZTI8S7719C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C98S7719C13__A2__7S7719C1[] = {
  ABISELECT(-71,-47),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7719C148S7719C13__7S7719C1[] = {
  ABISELECT(-87,-55),
  ABISELECT(-96,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S7719C14[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C9__8S7719C148S7719C13__7S7719C1[] = {
  ABISELECT(9,5),
  ABISELECT(96,60),
  (VTBL_ENTRY)&(_ZTI8S7719C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7719C14__8S7719C13__7S7719C1[] = {
  ABISELECT(-87,-55),
  ABISELECT(-96,-60),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7719C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C9__A1__8S7719C13__7S7719C1[] = {
  ABISELECT(9,5),
  ABISELECT(80,52),
  (VTBL_ENTRY)&(_ZTI8S7719C13[0]),
};
extern void _ZN8S7719C16D1Ev();
extern void _ZN8S7719C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7719C16__7S7719C1[] = {
  ABISELECT(-183,-103),
  ABISELECT(-192,-108),
  ABISELECT(-208,-116),
  ABISELECT(-215,-119),
  0,
  (VTBL_ENTRY)&(_ZTI8S7719C16[0]),
  (VTBL_ENTRY)&_ZN8S7719C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7719C16D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7719C38S7719C16__A2__7S7719C1[] = {
  ABISELECT(-208,-116),
  ABISELECT(-215,-119),
  0,
  (VTBL_ENTRY)&(_ZTI7S7719C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__7S7719C38S7719C16__A2__7S7719C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(208,116),
  (VTBL_ENTRY)&(_ZTI7S7719C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C8__8S7719C16__7S7719C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(208,116),
  (VTBL_ENTRY)&(_ZTI8S7719C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7719C9__8S7719C16__7S7719C1[] = {
  ABISELECT(9,5),
  ABISELECT(192,108),
  (VTBL_ENTRY)&(_ZTI8S7719C16[0]),
};
static  VTT_ENTRY vtt_S7719C1[] = {
  {&(_ZTV7S7719C1[12]),  12,79},
  {&(_tg__ZTV7S7719C2__7S7719C1[10]),  10,10},
  {&(_tg__ZTV7S7719C87S7719C2__A1__7S7719C1[3]),  3,3},
  {&(_tg__ZTV7S7719C3__7S7719C2__7S7719C1[4]),  4,4},
  {&(_tg__ZTV7S7719C8__7S7719C2__7S7719C1[3]),  3,3},
  {&(_tg__ZTV7S7719C9__7S7719C2__7S7719C1[3]),  3,3},
  {&(_tg__ZTV8S7719C10__7S7719C2__7S7719C1[8]),  8,8},
  {&(_tg__ZTV8S7719C11__7S7719C2__7S7719C1[3]),  3,3},
  {&(_tg__ZTV8S7719C12__7S7719C1[9]),  9,11},
  {&(_tg__ZTV8S7719C158S7719C12__7S7719C1[7]),  7,9},
  {&(_tg__ZTV7S7719C98S7719C158S7719C12__A3__7S7719C1[3]),  3,3},
  {&(_tg__ZTV8S7719C16__8S7719C158S7719C12__7S7719C1[7]),  7,9},
  {&(_tg__ZTV7S7719C8__8S7719C158S7719C12__7S7719C1[3]),  3,3},
  {&(_tg__ZTV7S7719C9__8S7719C158S7719C12__7S7719C1[3]),  3,3},
  {&(_tg__ZTV8S7719C13__8S7719C12__7S7719C1[6]),  6,6},
  {&(_tg__ZTV8S7719C148S7719C13__8S7719C12__7S7719C1[4]),  4,4},
  {&(_tg__ZTV7S7719C9__A1__8S7719C12__7S7719C1[3]),  3,3},
  {&(_tg__ZTV8S7719C16__8S7719C12__7S7719C1[7]),  7,9},
  {&(_tg__ZTV7S7719C8__8S7719C12__7S7719C1[3]),  3,3},
  {&(_tg__ZTV8S7719C18__7S7719C1[9]),  9,11},
  {&(_tg__ZTV7S7719C38S7719C18__A3__7S7719C1[4]),  4,4},
  {&(_tg__ZTV7S7719C8__7S7719C38S7719C18__A3__7S7719C1[3]),  3,3},
  {&(_tg__ZTV8S7719C10__8S7719C18__7S7719C1[8]),  8,8},
  {&(_tg__ZTV7S7719C9__8S7719C18__7S7719C1[3]),  3,3},
  {&(_tg__ZTV8S7719C11__8S7719C18__7S7719C1[3]),  3,3},
  {&(_tg__ZTV7S7719C8__8S7719C18__7S7719C1[3]),  3,3},
  {&(_tg__ZTV7S7719C8__A__7S7719C1[3]),  3,3},
  {&(_ZTV7S7719C1[43]),  43,79},
  {&(_ZTV7S7719C1[46]),  46,79},
  {&(_ZTV7S7719C1[49]),  49,79},
  {&(_ZTV7S7719C1[57]),  57,79},
  {&(_ZTV7S7719C1[60]),  60,79},
  {&(_ZTV7S7719C1[23]),  23,79},
  {&(_ZTV7S7719C1[66]),  66,79},
  {&(_ZTV7S7719C1[70]),  70,79},
  {&(_ZTV7S7719C1[77]),  77,79},
  {&(_ZTV7S7719C1[34]),  34,79},
  {&(_ZTV7S7719C1[39]),  39,79},
  {&(_tg__ZTV7S7719C3__7S7719C1[4]),  4,4},
  {&(_tg__ZTV7S7719C8__7S7719C3__7S7719C1[3]),  3,3},
  {&(_tg__ZTV7S7719C8__7S7719C1[3]),  3,3},
  {&(_tg__ZTV7S7719C9__7S7719C1[3]),  3,3},
  {&(_tg__ZTV8S7719C10__7S7719C1[8]),  8,8},
  {&(_tg__ZTV7S7719C38S7719C10__A1__7S7719C1[4]),  4,4},
  {&(_tg__ZTV7S7719C8__7S7719C38S7719C10__A1__7S7719C1[3]),  3,3},
  {&(_tg__ZTV7S7719C9__8S7719C10__7S7719C1[3]),  3,3},
  {&(_tg__ZTV8S7719C11__8S7719C10__7S7719C1[3]),  3,3},
  {&(_tg__ZTV7S7719C8__8S7719C10__7S7719C1[3]),  3,3},
  {&(_tg__ZTV8S7719C11__7S7719C1[3]),  3,3},
  {&(_tg__ZTV7S7719C98S7719C11__A1__7S7719C1[3]),  3,3},
  {&(_tg__ZTV8S7719C13__7S7719C1[6]),  6,6},
  {&(_tg__ZTV7S7719C98S7719C13__A2__7S7719C1[3]),  3,3},
  {&(_tg__ZTV8S7719C148S7719C13__7S7719C1[4]),  4,4},
  {&(_tg__ZTV7S7719C9__8S7719C148S7719C13__7S7719C1[3]),  3,3},
  {&(_tg__ZTV8S7719C14__8S7719C13__7S7719C1[4]),  4,4},
  {&(_tg__ZTV7S7719C9__A1__8S7719C13__7S7719C1[3]),  3,3},
  {&(_tg__ZTV8S7719C16__7S7719C1[6]),  6,8},
  {&(_tg__ZTV7S7719C38S7719C16__A2__7S7719C1[4]),  4,4},
  {&(_tg__ZTV7S7719C8__7S7719C38S7719C16__A2__7S7719C1[3]),  3,3},
  {&(_tg__ZTV7S7719C8__8S7719C16__7S7719C1[3]),  3,3},
  {&(_tg__ZTV7S7719C9__8S7719C16__7S7719C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7719C1[];
extern  VTBL_ENTRY _ZTV7S7719C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7719C1[];
static VTBL_ENTRY alt_thunk_names73[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7719C12D0Ev,_ZTv0_n28_N8S7719C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S7719C12D0Ev,_ZThn168_N8S7719C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7719C12D1Ev,_ZTv0_n28_N8S7719C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S7719C12D1Ev,_ZThn168_N8S7719C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7719C15D0Ev,_ZTv0_n28_N8S7719C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S7719C15D0Ev,_ZThn168_N8S7719C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7719C15D1Ev,_ZTv0_n28_N8S7719C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S7719C15D1Ev,_ZThn168_N8S7719C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7719C1D0Ev,_ZTv0_n28_N7S7719C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7719C1D0Ev,_ZThn176_N7S7719C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7719C1D1Ev,_ZTv0_n28_N7S7719C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7719C1D1Ev,_ZThn176_N7S7719C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7719C1 = {  "S7719C1", // class name
  bases_S7719C1, 65,
  &(vtc_S7719C1[0]), // expected_vtbl_contents
  &(vtt_S7719C1[0]), // expected_vtt_contents
  ABISELECT(320,184), // object size
  NSPAIRA(_ZTI7S7719C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7719C1),79, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7719C1),61, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names73,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3042C3_nt  {
  virtual  ~S3042C3_nt(); // _ZN10S3042C3_ntD1Ev
  virtual void  v17(); // _ZN10S3042C3_nt3v17Ev
  virtual void  v18(); // _ZN10S3042C3_nt3v18Ev
  virtual void  v19(); // _ZN10S3042C3_nt3v19Ev
  virtual void  v20(); // _ZN10S3042C3_nt3v20Ev
  virtual void  v21(); // _ZN10S3042C3_nt3v21Ev
  virtual void  v22(); // _ZN10S3042C3_nt3v22Ev
  virtual void  v23(); // _ZN10S3042C3_nt3v23Ev
  virtual void  v24(); // _ZN10S3042C3_nt3v24Ev
  virtual void  v25(); // _ZN10S3042C3_nt3v25Ev
  virtual void  v26(); // _ZN10S3042C3_nt3v26Ev
  virtual void  v27(); // _ZN10S3042C3_nt3v27Ev
  virtual void  v28(); // _ZN10S3042C3_nt3v28Ev
  virtual void  v29(); // _ZN10S3042C3_nt3v29Ev
  virtual void  v30(); // _ZN10S3042C3_nt3v30Ev
  virtual void  v31(); // _ZN10S3042C3_nt3v31Ev
  virtual void  v32(); // _ZN10S3042C3_nt3v32Ev
  S3042C3_nt(); // tgen
};
//SIG(-1 S3042C3_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16}


 S3042C3_nt ::~S3042C3_nt(){ note_dtor("S3042C3_nt", this);}
void  S3042C3_nt ::v17(){vfunc_called(this, "_ZN10S3042C3_nt3v17Ev");}
void  S3042C3_nt ::v18(){vfunc_called(this, "_ZN10S3042C3_nt3v18Ev");}
void  S3042C3_nt ::v19(){vfunc_called(this, "_ZN10S3042C3_nt3v19Ev");}
void  S3042C3_nt ::v20(){vfunc_called(this, "_ZN10S3042C3_nt3v20Ev");}
void  S3042C3_nt ::v21(){vfunc_called(this, "_ZN10S3042C3_nt3v21Ev");}
void  S3042C3_nt ::v22(){vfunc_called(this, "_ZN10S3042C3_nt3v22Ev");}
void  S3042C3_nt ::v23(){vfunc_called(this, "_ZN10S3042C3_nt3v23Ev");}
void  S3042C3_nt ::v24(){vfunc_called(this, "_ZN10S3042C3_nt3v24Ev");}
void  S3042C3_nt ::v25(){vfunc_called(this, "_ZN10S3042C3_nt3v25Ev");}
void  S3042C3_nt ::v26(){vfunc_called(this, "_ZN10S3042C3_nt3v26Ev");}
void  S3042C3_nt ::v27(){vfunc_called(this, "_ZN10S3042C3_nt3v27Ev");}
void  S3042C3_nt ::v28(){vfunc_called(this, "_ZN10S3042C3_nt3v28Ev");}
void  S3042C3_nt ::v29(){vfunc_called(this, "_ZN10S3042C3_nt3v29Ev");}
void  S3042C3_nt ::v30(){vfunc_called(this, "_ZN10S3042C3_nt3v30Ev");}
void  S3042C3_nt ::v31(){vfunc_called(this, "_ZN10S3042C3_nt3v31Ev");}
void  S3042C3_nt ::v32(){vfunc_called(this, "_ZN10S3042C3_nt3v32Ev");}
S3042C3_nt ::S3042C3_nt(){ note_ctor("S3042C3_nt", this);} // tgen

//skip512 S3042C3_nt

#else // __cplusplus

extern void _ZN10S3042C3_ntC1Ev();
extern void _ZN10S3042C3_ntD1Ev();
Name_Map name_map_S3042C3_nt[] = {
  NSPAIR(_ZN10S3042C3_ntC1Ev),
  NSPAIR(_ZN10S3042C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3042C3_nt[];
extern void _ZN10S3042C3_ntD1Ev();
extern void _ZN10S3042C3_ntD0Ev();
extern void _ZN10S3042C3_nt3v17Ev();
extern void _ZN10S3042C3_nt3v18Ev();
extern void _ZN10S3042C3_nt3v19Ev();
extern void _ZN10S3042C3_nt3v20Ev();
extern void _ZN10S3042C3_nt3v21Ev();
extern void _ZN10S3042C3_nt3v22Ev();
extern void _ZN10S3042C3_nt3v23Ev();
extern void _ZN10S3042C3_nt3v24Ev();
extern void _ZN10S3042C3_nt3v25Ev();
extern void _ZN10S3042C3_nt3v26Ev();
extern void _ZN10S3042C3_nt3v27Ev();
extern void _ZN10S3042C3_nt3v28Ev();
extern void _ZN10S3042C3_nt3v29Ev();
extern void _ZN10S3042C3_nt3v30Ev();
extern void _ZN10S3042C3_nt3v31Ev();
extern void _ZN10S3042C3_nt3v32Ev();
static  VTBL_ENTRY vtc_S3042C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3042C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S3042C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v32Ev,
};
extern VTBL_ENTRY _ZTI10S3042C3_nt[];
VTBL_ENTRY *P__ZTI10S3042C3_nt = _ZTI10S3042C3_nt; 
extern  VTBL_ENTRY _ZTV10S3042C3_nt[];
Class_Descriptor cd_S3042C3_nt = {  "S3042C3_nt", // class name
  0,0,//no base classes
  &(vtc_S3042C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S3042C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3042C3_nt),20, //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  S3042C2  : S3042C3_nt {
  virtual  ~S3042C2(); // _ZN7S3042C2D1Ev
  virtual void  v33(); // _ZN7S3042C23v33Ev
  virtual void  v34(); // _ZN7S3042C23v34Ev
  virtual void  v35(); // _ZN7S3042C23v35Ev
  virtual void  v36(); // _ZN7S3042C23v36Ev
  virtual void  v37(); // _ZN7S3042C23v37Ev
  virtual void  v38(); // _ZN7S3042C23v38Ev
  virtual void  v39(); // _ZN7S3042C23v39Ev
  virtual void  v40(); // _ZN7S3042C23v40Ev
  virtual void  v41(); // _ZN7S3042C23v41Ev
  virtual void  v42(); // _ZN7S3042C23v42Ev
  virtual void  v43(); // _ZN7S3042C23v43Ev
  virtual void  v44(); // _ZN7S3042C23v44Ev
  virtual void  v45(); // _ZN7S3042C23v45Ev
  virtual void  v46(); // _ZN7S3042C23v46Ev
  virtual void  v47(); // _ZN7S3042C23v47Ev
  virtual void  v48(); // _ZN7S3042C23v48Ev
  S3042C2(); // tgen
};
//SIG(-1 S3042C2) C1{ BC2{ vd v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16}


 S3042C2 ::~S3042C2(){ note_dtor("S3042C2", this);}
void  S3042C2 ::v33(){vfunc_called(this, "_ZN7S3042C23v33Ev");}
void  S3042C2 ::v34(){vfunc_called(this, "_ZN7S3042C23v34Ev");}
void  S3042C2 ::v35(){vfunc_called(this, "_ZN7S3042C23v35Ev");}
void  S3042C2 ::v36(){vfunc_called(this, "_ZN7S3042C23v36Ev");}
void  S3042C2 ::v37(){vfunc_called(this, "_ZN7S3042C23v37Ev");}
void  S3042C2 ::v38(){vfunc_called(this, "_ZN7S3042C23v38Ev");}
void  S3042C2 ::v39(){vfunc_called(this, "_ZN7S3042C23v39Ev");}
void  S3042C2 ::v40(){vfunc_called(this, "_ZN7S3042C23v40Ev");}
void  S3042C2 ::v41(){vfunc_called(this, "_ZN7S3042C23v41Ev");}
void  S3042C2 ::v42(){vfunc_called(this, "_ZN7S3042C23v42Ev");}
void  S3042C2 ::v43(){vfunc_called(this, "_ZN7S3042C23v43Ev");}
void  S3042C2 ::v44(){vfunc_called(this, "_ZN7S3042C23v44Ev");}
void  S3042C2 ::v45(){vfunc_called(this, "_ZN7S3042C23v45Ev");}
void  S3042C2 ::v46(){vfunc_called(this, "_ZN7S3042C23v46Ev");}
void  S3042C2 ::v47(){vfunc_called(this, "_ZN7S3042C23v47Ev");}
void  S3042C2 ::v48(){vfunc_called(this, "_ZN7S3042C23v48Ev");}
S3042C2 ::S3042C2(){ note_ctor("S3042C2", this);} // tgen

static void Test_S3042C2()
{
  extern Class_Descriptor cd_S3042C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3042C2, buf);
    S3042C2 *dp, &lv = *(dp=new (buf) S3042C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3042C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3042C2)");
    check_base_class_offset(lv, (S3042C3_nt*), 0, "S3042C2");
    test_class_info(&lv, &cd_S3042C2);
    dp->~S3042C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3042C2(Test_S3042C2, "S3042C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3042C2C1Ev();
extern void _ZN7S3042C2D1Ev();
Name_Map name_map_S3042C2[] = {
  NSPAIR(_ZN7S3042C2C1Ev),
  NSPAIR(_ZN7S3042C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3042C3_nt;
extern VTBL_ENTRY _ZTI10S3042C3_nt[];
extern  VTBL_ENTRY _ZTV10S3042C3_nt[];
static Base_Class bases_S3042C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3042C3_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 _ZTI7S3042C2[];
extern void _ZN7S3042C2D1Ev();
extern void _ZN7S3042C2D0Ev();
extern void _ZN10S3042C3_nt3v17Ev();
extern void _ZN10S3042C3_nt3v18Ev();
extern void _ZN10S3042C3_nt3v19Ev();
extern void _ZN10S3042C3_nt3v20Ev();
extern void _ZN10S3042C3_nt3v21Ev();
extern void _ZN10S3042C3_nt3v22Ev();
extern void _ZN10S3042C3_nt3v23Ev();
extern void _ZN10S3042C3_nt3v24Ev();
extern void _ZN10S3042C3_nt3v25Ev();
extern void _ZN10S3042C3_nt3v26Ev();
extern void _ZN10S3042C3_nt3v27Ev();
extern void _ZN10S3042C3_nt3v28Ev();
extern void _ZN10S3042C3_nt3v29Ev();
extern void _ZN10S3042C3_nt3v30Ev();
extern void _ZN10S3042C3_nt3v31Ev();
extern void _ZN10S3042C3_nt3v32Ev();
extern void _ZN7S3042C23v33Ev();
extern void _ZN7S3042C23v34Ev();
extern void _ZN7S3042C23v35Ev();
extern void _ZN7S3042C23v36Ev();
extern void _ZN7S3042C23v37Ev();
extern void _ZN7S3042C23v38Ev();
extern void _ZN7S3042C23v39Ev();
extern void _ZN7S3042C23v40Ev();
extern void _ZN7S3042C23v41Ev();
extern void _ZN7S3042C23v42Ev();
extern void _ZN7S3042C23v43Ev();
extern void _ZN7S3042C23v44Ev();
extern void _ZN7S3042C23v45Ev();
extern void _ZN7S3042C23v46Ev();
extern void _ZN7S3042C23v47Ev();
extern void _ZN7S3042C23v48Ev();
static  VTBL_ENTRY vtc_S3042C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3042C2[0]),
  (VTBL_ENTRY)&_ZN7S3042C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3042C2D0Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v34Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v35Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v36Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v37Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v38Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v39Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v40Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v41Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v42Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v43Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v44Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v45Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v46Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v47Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v48Ev,
};
extern VTBL_ENTRY _ZTI7S3042C2[];
extern  VTBL_ENTRY _ZTV7S3042C2[];
Class_Descriptor cd_S3042C2 = {  "S3042C2", // class name
  bases_S3042C2, 1,
  &(vtc_S3042C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3042C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3042C2),36, //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  S3042C4_nt  {
  __tsi64 s3042c4f0[4];
};
//SIG(-1 S3042C4_nt) C1{ FL[4]}



//skip512 S3042C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3042C6_nt  {
  void *s3042c6f0;
  int s3042c6f1;
  virtual  ~S3042C6_nt(); // _ZN10S3042C6_ntD1Ev
  virtual void  v50(); // _ZN10S3042C6_nt3v50Ev
  S3042C6_nt(); // tgen
};
//SIG(-1 S3042C6_nt) C1{ vd v1 Fp Fi}


 S3042C6_nt ::~S3042C6_nt(){ note_dtor("S3042C6_nt", this);}
void  S3042C6_nt ::v50(){vfunc_called(this, "_ZN10S3042C6_nt3v50Ev");}
S3042C6_nt ::S3042C6_nt(){ note_ctor("S3042C6_nt", this);} // tgen

//skip512 S3042C6_nt

#else // __cplusplus

extern void _ZN10S3042C6_ntC1Ev();
extern void _ZN10S3042C6_ntD1Ev();
Name_Map name_map_S3042C6_nt[] = {
  NSPAIR(_ZN10S3042C6_ntC1Ev),
  NSPAIR(_ZN10S3042C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3042C6_nt[];
extern void _ZN10S3042C6_ntD1Ev();
extern void _ZN10S3042C6_ntD0Ev();
extern void _ZN10S3042C6_nt3v50Ev();
static  VTBL_ENTRY vtc_S3042C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3042C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S3042C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3042C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S3042C6_nt3v50Ev,
};
extern VTBL_ENTRY _ZTI10S3042C6_nt[];
VTBL_ENTRY *P__ZTI10S3042C6_nt = _ZTI10S3042C6_nt; 
extern  VTBL_ENTRY _ZTV10S3042C6_nt[];
Class_Descriptor cd_S3042C6_nt = {  "S3042C6_nt", // class name
  0,0,//no base classes
  &(vtc_S3042C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI10S3042C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3042C6_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  S3042C5_nt  : S3042C6_nt {
  void *s3042c5f0;
  virtual  ~S3042C5_nt(); // _ZN10S3042C5_ntD1Ev
  virtual void  v49(); // _ZN10S3042C5_nt3v49Ev
  S3042C5_nt(); // tgen
};
//SIG(-1 S3042C5_nt) C1{ BC2{ vd v2 Fp Fi} vd v1 Fp}


 S3042C5_nt ::~S3042C5_nt(){ note_dtor("S3042C5_nt", this);}
void  S3042C5_nt ::v49(){vfunc_called(this, "_ZN10S3042C5_nt3v49Ev");}
S3042C5_nt ::S3042C5_nt(){ note_ctor("S3042C5_nt", this);} // tgen

//skip512 S3042C5_nt

#else // __cplusplus

extern void _ZN10S3042C5_ntC1Ev();
extern void _ZN10S3042C5_ntD1Ev();
Name_Map name_map_S3042C5_nt[] = {
  NSPAIR(_ZN10S3042C5_ntC1Ev),
  NSPAIR(_ZN10S3042C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3042C6_nt;
extern VTBL_ENTRY _ZTI10S3042C6_nt[];
extern  VTBL_ENTRY _ZTV10S3042C6_nt[];
static Base_Class bases_S3042C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3042C6_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 _ZTI10S3042C5_nt[];
extern void _ZN10S3042C5_ntD1Ev();
extern void _ZN10S3042C5_ntD0Ev();
extern void _ZN10S3042C6_nt3v50Ev();
extern void _ZN10S3042C5_nt3v49Ev();
static  VTBL_ENTRY vtc_S3042C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3042C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S3042C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3042C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S3042C6_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S3042C5_nt3v49Ev,
};
extern VTBL_ENTRY _ZTI10S3042C5_nt[];
VTBL_ENTRY *P__ZTI10S3042C5_nt = _ZTI10S3042C5_nt; 
extern  VTBL_ENTRY _ZTV10S3042C5_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3042C1  : S3042C2 {
  char s3042c1f0[3];
  int s3042c1f1[2];
  ::S3042C4_nt s3042c1f2;
  ::S3042C4_nt s3042c1f3;
  ::S3042C5_nt s3042c1f4;
  __tsi64 s3042c1f5;
  void *s3042c1f6;
  virtual  ~S3042C1(); // _ZN7S3042C1D1Ev
  virtual void  v1(); // _ZN7S3042C12v1Ev
  virtual void  v2(); // _ZN7S3042C12v2Ev
  virtual void  v3(); // _ZN7S3042C12v3Ev
  virtual void  v4(); // _ZN7S3042C12v4Ev
  virtual void  v5(); // _ZN7S3042C12v5Ev
  virtual void  v6(); // _ZN7S3042C12v6Ev
  virtual void  v7(); // _ZN7S3042C12v7Ev
  virtual void  v8(); // _ZN7S3042C12v8Ev
  virtual void  v9(); // _ZN7S3042C12v9Ev
  virtual void  v10(); // _ZN7S3042C13v10Ev
  virtual void  v11(); // _ZN7S3042C13v11Ev
  virtual void  v12(); // _ZN7S3042C13v12Ev
  virtual void  v13(); // _ZN7S3042C13v13Ev
  virtual void  v14(); // _ZN7S3042C13v14Ev
  virtual void  v15(); // _ZN7S3042C13v15Ev
  virtual void  v16(); // _ZN7S3042C13v16Ev
  S3042C1(); // tgen
};
//SIG(1 S3042C1) C1{ BC2{ BC3{ vd v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32} vd v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 Fc[3] Fi[2] FC4{ FL[4]} FC4 FC5{ BC6{ vd v50 Fp Fi} vd v49 Fp} FL Fp}


 S3042C1 ::~S3042C1(){ note_dtor("S3042C1", this);}
void  S3042C1 ::v1(){vfunc_called(this, "_ZN7S3042C12v1Ev");}
void  S3042C1 ::v2(){vfunc_called(this, "_ZN7S3042C12v2Ev");}
void  S3042C1 ::v3(){vfunc_called(this, "_ZN7S3042C12v3Ev");}
void  S3042C1 ::v4(){vfunc_called(this, "_ZN7S3042C12v4Ev");}
void  S3042C1 ::v5(){vfunc_called(this, "_ZN7S3042C12v5Ev");}
void  S3042C1 ::v6(){vfunc_called(this, "_ZN7S3042C12v6Ev");}
void  S3042C1 ::v7(){vfunc_called(this, "_ZN7S3042C12v7Ev");}
void  S3042C1 ::v8(){vfunc_called(this, "_ZN7S3042C12v8Ev");}
void  S3042C1 ::v9(){vfunc_called(this, "_ZN7S3042C12v9Ev");}
void  S3042C1 ::v10(){vfunc_called(this, "_ZN7S3042C13v10Ev");}
void  S3042C1 ::v11(){vfunc_called(this, "_ZN7S3042C13v11Ev");}
void  S3042C1 ::v12(){vfunc_called(this, "_ZN7S3042C13v12Ev");}
void  S3042C1 ::v13(){vfunc_called(this, "_ZN7S3042C13v13Ev");}
void  S3042C1 ::v14(){vfunc_called(this, "_ZN7S3042C13v14Ev");}
void  S3042C1 ::v15(){vfunc_called(this, "_ZN7S3042C13v15Ev");}
void  S3042C1 ::v16(){vfunc_called(this, "_ZN7S3042C13v16Ev");}
S3042C1 ::S3042C1(){ note_ctor("S3042C1", this);} // tgen

static void Test_S3042C1()
{
  extern Class_Descriptor cd_S3042C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,28)];
    init_test(&cd_S3042C1, buf);
    S3042C1 *dp, &lv = *(dp=new (buf) S3042C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,108), "sizeof(S3042C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3042C1)");
    check_base_class_offset(lv, (S3042C3_nt*)(S3042C2*), 0, "S3042C1");
    check_base_class_offset(lv, (S3042C2*), 0, "S3042C1");
    check_field_offset(lv, s3042c1f0, ABISELECT(8,4), "S3042C1.s3042c1f0");
    check_field_offset(lv, s3042c1f1, ABISELECT(12,8), "S3042C1.s3042c1f1");
    check_field_offset(lv, s3042c1f2, ABISELECT(24,16), "S3042C1.s3042c1f2");
    check_field_offset(lv, s3042c1f3, ABISELECT(56,48), "S3042C1.s3042c1f3");
    check_field_offset(lv, s3042c1f4, ABISELECT(88,80), "S3042C1.s3042c1f4");
    check_field_offset(lv, s3042c1f5, ABISELECT(120,96), "S3042C1.s3042c1f5");
    check_field_offset(lv, s3042c1f6, ABISELECT(128,104), "S3042C1.s3042c1f6");
    test_class_info(&lv, &cd_S3042C1);
    dp->~S3042C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3042C1(Test_S3042C1, "S3042C1", ABISELECT(136,108));

#else // __cplusplus

extern void _ZN7S3042C1C1Ev();
extern void _ZN7S3042C1D1Ev();
Name_Map name_map_S3042C1[] = {
  NSPAIR(_ZN7S3042C1C1Ev),
  NSPAIR(_ZN7S3042C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3042C3_nt;
extern VTBL_ENTRY _ZTI10S3042C3_nt[];
extern  VTBL_ENTRY _ZTV10S3042C3_nt[];
extern Class_Descriptor cd_S3042C2;
extern VTBL_ENTRY _ZTI7S3042C2[];
extern  VTBL_ENTRY _ZTV7S3042C2[];
static Base_Class bases_S3042C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3042C3_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_S3042C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3042C1[];
extern void _ZN7S3042C1D1Ev();
extern void _ZN7S3042C1D0Ev();
extern void _ZN10S3042C3_nt3v17Ev();
extern void _ZN10S3042C3_nt3v18Ev();
extern void _ZN10S3042C3_nt3v19Ev();
extern void _ZN10S3042C3_nt3v20Ev();
extern void _ZN10S3042C3_nt3v21Ev();
extern void _ZN10S3042C3_nt3v22Ev();
extern void _ZN10S3042C3_nt3v23Ev();
extern void _ZN10S3042C3_nt3v24Ev();
extern void _ZN10S3042C3_nt3v25Ev();
extern void _ZN10S3042C3_nt3v26Ev();
extern void _ZN10S3042C3_nt3v27Ev();
extern void _ZN10S3042C3_nt3v28Ev();
extern void _ZN10S3042C3_nt3v29Ev();
extern void _ZN10S3042C3_nt3v30Ev();
extern void _ZN10S3042C3_nt3v31Ev();
extern void _ZN10S3042C3_nt3v32Ev();
extern void _ZN7S3042C23v33Ev();
extern void _ZN7S3042C23v34Ev();
extern void _ZN7S3042C23v35Ev();
extern void _ZN7S3042C23v36Ev();
extern void _ZN7S3042C23v37Ev();
extern void _ZN7S3042C23v38Ev();
extern void _ZN7S3042C23v39Ev();
extern void _ZN7S3042C23v40Ev();
extern void _ZN7S3042C23v41Ev();
extern void _ZN7S3042C23v42Ev();
extern void _ZN7S3042C23v43Ev();
extern void _ZN7S3042C23v44Ev();
extern void _ZN7S3042C23v45Ev();
extern void _ZN7S3042C23v46Ev();
extern void _ZN7S3042C23v47Ev();
extern void _ZN7S3042C23v48Ev();
extern void _ZN7S3042C12v1Ev();
extern void _ZN7S3042C12v2Ev();
extern void _ZN7S3042C12v3Ev();
extern void _ZN7S3042C12v4Ev();
extern void _ZN7S3042C12v5Ev();
extern void _ZN7S3042C12v6Ev();
extern void _ZN7S3042C12v7Ev();
extern void _ZN7S3042C12v8Ev();
extern void _ZN7S3042C12v9Ev();
extern void _ZN7S3042C13v10Ev();
extern void _ZN7S3042C13v11Ev();
extern void _ZN7S3042C13v12Ev();
extern void _ZN7S3042C13v13Ev();
extern void _ZN7S3042C13v14Ev();
extern void _ZN7S3042C13v15Ev();
extern void _ZN7S3042C13v16Ev();
static  VTBL_ENTRY vtc_S3042C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3042C1[0]),
  (VTBL_ENTRY)&_ZN7S3042C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3042C1D0Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S3042C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v34Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v35Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v36Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v37Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v38Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v39Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v40Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v41Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v42Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v43Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v44Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v45Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v46Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v47Ev,
  (VTBL_ENTRY)&_ZN7S3042C23v48Ev,
  (VTBL_ENTRY)&_ZN7S3042C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3042C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3042C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3042C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3042C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3042C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3042C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3042C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3042C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3042C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3042C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3042C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3042C13v13Ev,
  (VTBL_ENTRY)&_ZN7S3042C13v14Ev,
  (VTBL_ENTRY)&_ZN7S3042C13v15Ev,
  (VTBL_ENTRY)&_ZN7S3042C13v16Ev,
};
extern VTBL_ENTRY _ZTI7S3042C1[];
extern  VTBL_ENTRY _ZTV7S3042C1[];
Class_Descriptor cd_S3042C1 = {  "S3042C1", // class name
  bases_S3042C1, 2,
  &(vtc_S3042C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,108), // object size
  NSPAIRA(_ZTI7S3042C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3042C1),52, //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  S3041C3  {
  virtual  ~S3041C3(); // _ZN7S3041C3D1Ev
  virtual void  v17(); // _ZN7S3041C33v17Ev
  virtual void  v18(); // _ZN7S3041C33v18Ev
  virtual void  v19(); // _ZN7S3041C33v19Ev
  virtual void  v20(); // _ZN7S3041C33v20Ev
  virtual void  v21(); // _ZN7S3041C33v21Ev
  virtual void  v22(); // _ZN7S3041C33v22Ev
  virtual void  v23(); // _ZN7S3041C33v23Ev
  virtual void  v24(); // _ZN7S3041C33v24Ev
  virtual void  v25(); // _ZN7S3041C33v25Ev
  virtual void  v26(); // _ZN7S3041C33v26Ev
  virtual void  v27(); // _ZN7S3041C33v27Ev
  virtual void  v28(); // _ZN7S3041C33v28Ev
  virtual void  v29(); // _ZN7S3041C33v29Ev
  virtual void  v30(); // _ZN7S3041C33v30Ev
  virtual void  v31(); // _ZN7S3041C33v31Ev
  virtual void  v32(); // _ZN7S3041C33v32Ev
  S3041C3(); // tgen
};
//SIG(-1 S3041C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16}


 S3041C3 ::~S3041C3(){ note_dtor("S3041C3", this);}
void  S3041C3 ::v17(){vfunc_called(this, "_ZN7S3041C33v17Ev");}
void  S3041C3 ::v18(){vfunc_called(this, "_ZN7S3041C33v18Ev");}
void  S3041C3 ::v19(){vfunc_called(this, "_ZN7S3041C33v19Ev");}
void  S3041C3 ::v20(){vfunc_called(this, "_ZN7S3041C33v20Ev");}
void  S3041C3 ::v21(){vfunc_called(this, "_ZN7S3041C33v21Ev");}
void  S3041C3 ::v22(){vfunc_called(this, "_ZN7S3041C33v22Ev");}
void  S3041C3 ::v23(){vfunc_called(this, "_ZN7S3041C33v23Ev");}
void  S3041C3 ::v24(){vfunc_called(this, "_ZN7S3041C33v24Ev");}
void  S3041C3 ::v25(){vfunc_called(this, "_ZN7S3041C33v25Ev");}
void  S3041C3 ::v26(){vfunc_called(this, "_ZN7S3041C33v26Ev");}
void  S3041C3 ::v27(){vfunc_called(this, "_ZN7S3041C33v27Ev");}
void  S3041C3 ::v28(){vfunc_called(this, "_ZN7S3041C33v28Ev");}
void  S3041C3 ::v29(){vfunc_called(this, "_ZN7S3041C33v29Ev");}
void  S3041C3 ::v30(){vfunc_called(this, "_ZN7S3041C33v30Ev");}
void  S3041C3 ::v31(){vfunc_called(this, "_ZN7S3041C33v31Ev");}
void  S3041C3 ::v32(){vfunc_called(this, "_ZN7S3041C33v32Ev");}
S3041C3 ::S3041C3(){ note_ctor("S3041C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3041C3C1Ev();
extern void _ZN7S3041C3D1Ev();
Name_Map name_map_S3041C3[] = {
  NSPAIR(_ZN7S3041C3C1Ev),
  NSPAIR(_ZN7S3041C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3041C3[];
extern void _ZN7S3041C3D1Ev();
extern void _ZN7S3041C3D0Ev();
extern void _ZN7S3041C33v17Ev();
extern void _ZN7S3041C33v18Ev();
extern void _ZN7S3041C33v19Ev();
extern void _ZN7S3041C33v20Ev();
extern void _ZN7S3041C33v21Ev();
extern void _ZN7S3041C33v22Ev();
extern void _ZN7S3041C33v23Ev();
extern void _ZN7S3041C33v24Ev();
extern void _ZN7S3041C33v25Ev();
extern void _ZN7S3041C33v26Ev();
extern void _ZN7S3041C33v27Ev();
extern void _ZN7S3041C33v28Ev();
extern void _ZN7S3041C33v29Ev();
extern void _ZN7S3041C33v30Ev();
extern void _ZN7S3041C33v31Ev();
extern void _ZN7S3041C33v32Ev();
static  VTBL_ENTRY vtc_S3041C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3041C3[0]),
  (VTBL_ENTRY)&_ZN7S3041C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3041C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v32Ev,
};
extern VTBL_ENTRY _ZTI7S3041C3[];
extern  VTBL_ENTRY _ZTV7S3041C3[];
Class_Descriptor cd_S3041C3 = {  "S3041C3", // class name
  0,0,//no base classes
  &(vtc_S3041C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3041C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3041C3),20, //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  S3041C2  : S3041C3 {
  virtual  ~S3041C2(); // _ZN7S3041C2D1Ev
  virtual void  v33(); // _ZN7S3041C23v33Ev
  virtual void  v34(); // _ZN7S3041C23v34Ev
  virtual void  v35(); // _ZN7S3041C23v35Ev
  virtual void  v36(); // _ZN7S3041C23v36Ev
  virtual void  v37(); // _ZN7S3041C23v37Ev
  virtual void  v38(); // _ZN7S3041C23v38Ev
  virtual void  v39(); // _ZN7S3041C23v39Ev
  virtual void  v40(); // _ZN7S3041C23v40Ev
  virtual void  v41(); // _ZN7S3041C23v41Ev
  virtual void  v42(); // _ZN7S3041C23v42Ev
  virtual void  v43(); // _ZN7S3041C23v43Ev
  virtual void  v44(); // _ZN7S3041C23v44Ev
  virtual void  v45(); // _ZN7S3041C23v45Ev
  virtual void  v46(); // _ZN7S3041C23v46Ev
  virtual void  v47(); // _ZN7S3041C23v47Ev
  virtual void  v48(); // _ZN7S3041C23v48Ev
  S3041C2(); // tgen
};
//SIG(-1 S3041C2) C1{ BC2{ vd v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16}


 S3041C2 ::~S3041C2(){ note_dtor("S3041C2", this);}
void  S3041C2 ::v33(){vfunc_called(this, "_ZN7S3041C23v33Ev");}
void  S3041C2 ::v34(){vfunc_called(this, "_ZN7S3041C23v34Ev");}
void  S3041C2 ::v35(){vfunc_called(this, "_ZN7S3041C23v35Ev");}
void  S3041C2 ::v36(){vfunc_called(this, "_ZN7S3041C23v36Ev");}
void  S3041C2 ::v37(){vfunc_called(this, "_ZN7S3041C23v37Ev");}
void  S3041C2 ::v38(){vfunc_called(this, "_ZN7S3041C23v38Ev");}
void  S3041C2 ::v39(){vfunc_called(this, "_ZN7S3041C23v39Ev");}
void  S3041C2 ::v40(){vfunc_called(this, "_ZN7S3041C23v40Ev");}
void  S3041C2 ::v41(){vfunc_called(this, "_ZN7S3041C23v41Ev");}
void  S3041C2 ::v42(){vfunc_called(this, "_ZN7S3041C23v42Ev");}
void  S3041C2 ::v43(){vfunc_called(this, "_ZN7S3041C23v43Ev");}
void  S3041C2 ::v44(){vfunc_called(this, "_ZN7S3041C23v44Ev");}
void  S3041C2 ::v45(){vfunc_called(this, "_ZN7S3041C23v45Ev");}
void  S3041C2 ::v46(){vfunc_called(this, "_ZN7S3041C23v46Ev");}
void  S3041C2 ::v47(){vfunc_called(this, "_ZN7S3041C23v47Ev");}
void  S3041C2 ::v48(){vfunc_called(this, "_ZN7S3041C23v48Ev");}
S3041C2 ::S3041C2(){ note_ctor("S3041C2", this);} // tgen

static void Test_S3041C2()
{
  extern Class_Descriptor cd_S3041C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3041C2, buf);
    S3041C2 *dp, &lv = *(dp=new (buf) S3041C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3041C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3041C2)");
    check_base_class_offset(lv, (S3041C3*), 0, "S3041C2");
    test_class_info(&lv, &cd_S3041C2);
    dp->~S3041C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3041C2(Test_S3041C2, "S3041C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3041C2C1Ev();
extern void _ZN7S3041C2D1Ev();
Name_Map name_map_S3041C2[] = {
  NSPAIR(_ZN7S3041C2C1Ev),
  NSPAIR(_ZN7S3041C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3041C3;
extern VTBL_ENTRY _ZTI7S3041C3[];
extern  VTBL_ENTRY _ZTV7S3041C3[];
static Base_Class bases_S3041C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3041C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S3041C2[];
extern void _ZN7S3041C2D1Ev();
extern void _ZN7S3041C2D0Ev();
extern void _ZN7S3041C33v17Ev();
extern void _ZN7S3041C33v18Ev();
extern void _ZN7S3041C33v19Ev();
extern void _ZN7S3041C33v20Ev();
extern void _ZN7S3041C33v21Ev();
extern void _ZN7S3041C33v22Ev();
extern void _ZN7S3041C33v23Ev();
extern void _ZN7S3041C33v24Ev();
extern void _ZN7S3041C33v25Ev();
extern void _ZN7S3041C33v26Ev();
extern void _ZN7S3041C33v27Ev();
extern void _ZN7S3041C33v28Ev();
extern void _ZN7S3041C33v29Ev();
extern void _ZN7S3041C33v30Ev();
extern void _ZN7S3041C33v31Ev();
extern void _ZN7S3041C33v32Ev();
extern void _ZN7S3041C23v33Ev();
extern void _ZN7S3041C23v34Ev();
extern void _ZN7S3041C23v35Ev();
extern void _ZN7S3041C23v36Ev();
extern void _ZN7S3041C23v37Ev();
extern void _ZN7S3041C23v38Ev();
extern void _ZN7S3041C23v39Ev();
extern void _ZN7S3041C23v40Ev();
extern void _ZN7S3041C23v41Ev();
extern void _ZN7S3041C23v42Ev();
extern void _ZN7S3041C23v43Ev();
extern void _ZN7S3041C23v44Ev();
extern void _ZN7S3041C23v45Ev();
extern void _ZN7S3041C23v46Ev();
extern void _ZN7S3041C23v47Ev();
extern void _ZN7S3041C23v48Ev();
static  VTBL_ENTRY vtc_S3041C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3041C2[0]),
  (VTBL_ENTRY)&_ZN7S3041C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3041C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v34Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v35Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v36Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v37Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v38Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v39Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v40Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v41Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v42Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v43Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v44Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v45Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v46Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v47Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v48Ev,
};
extern VTBL_ENTRY _ZTI7S3041C2[];
extern  VTBL_ENTRY _ZTV7S3041C2[];
Class_Descriptor cd_S3041C2 = {  "S3041C2", // class name
  bases_S3041C2, 1,
  &(vtc_S3041C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3041C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3041C2),36, //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  S3041C4_nt  {
  long s3041c4f0[4];
};
//SIG(-1 S3041C4_nt) C1{ Fl[4]}



//skip512 S3041C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3041C1  : S3041C2 {
  char s3041c1f0[3];
  int s3041c1f1[2];
  ::S3041C4_nt s3041c1f2;
  ::S3041C4_nt s3041c1f3;
  ::S3042C5_nt s3041c1f4;
  long s3041c1f5;
  void *s3041c1f6;
  virtual  ~S3041C1(); // _ZN7S3041C1D1Ev
  virtual void  v1(); // _ZN7S3041C12v1Ev
  virtual void  v2(); // _ZN7S3041C12v2Ev
  virtual void  v3(); // _ZN7S3041C12v3Ev
  virtual void  v4(); // _ZN7S3041C12v4Ev
  virtual void  v5(); // _ZN7S3041C12v5Ev
  virtual void  v6(); // _ZN7S3041C12v6Ev
  virtual void  v7(); // _ZN7S3041C12v7Ev
  virtual void  v8(); // _ZN7S3041C12v8Ev
  virtual void  v9(); // _ZN7S3041C12v9Ev
  virtual void  v10(); // _ZN7S3041C13v10Ev
  virtual void  v11(); // _ZN7S3041C13v11Ev
  virtual void  v12(); // _ZN7S3041C13v12Ev
  virtual void  v13(); // _ZN7S3041C13v13Ev
  virtual void  v14(); // _ZN7S3041C13v14Ev
  virtual void  v15(); // _ZN7S3041C13v15Ev
  virtual void  v16(); // _ZN7S3041C13v16Ev
  S3041C1(); // tgen
};
//SIG(1 S3041C1) C1{ BC2{ BC3{ vd v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32} vd v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 Fc[3] Fi[2] FC4{ Fl[4]} FC4 FC5{ BC6{ vd v50 Fp Fi} vd v49 Fp} Fl Fp}


 S3041C1 ::~S3041C1(){ note_dtor("S3041C1", this);}
void  S3041C1 ::v1(){vfunc_called(this, "_ZN7S3041C12v1Ev");}
void  S3041C1 ::v2(){vfunc_called(this, "_ZN7S3041C12v2Ev");}
void  S3041C1 ::v3(){vfunc_called(this, "_ZN7S3041C12v3Ev");}
void  S3041C1 ::v4(){vfunc_called(this, "_ZN7S3041C12v4Ev");}
void  S3041C1 ::v5(){vfunc_called(this, "_ZN7S3041C12v5Ev");}
void  S3041C1 ::v6(){vfunc_called(this, "_ZN7S3041C12v6Ev");}
void  S3041C1 ::v7(){vfunc_called(this, "_ZN7S3041C12v7Ev");}
void  S3041C1 ::v8(){vfunc_called(this, "_ZN7S3041C12v8Ev");}
void  S3041C1 ::v9(){vfunc_called(this, "_ZN7S3041C12v9Ev");}
void  S3041C1 ::v10(){vfunc_called(this, "_ZN7S3041C13v10Ev");}
void  S3041C1 ::v11(){vfunc_called(this, "_ZN7S3041C13v11Ev");}
void  S3041C1 ::v12(){vfunc_called(this, "_ZN7S3041C13v12Ev");}
void  S3041C1 ::v13(){vfunc_called(this, "_ZN7S3041C13v13Ev");}
void  S3041C1 ::v14(){vfunc_called(this, "_ZN7S3041C13v14Ev");}
void  S3041C1 ::v15(){vfunc_called(this, "_ZN7S3041C13v15Ev");}
void  S3041C1 ::v16(){vfunc_called(this, "_ZN7S3041C13v16Ev");}
S3041C1 ::S3041C1(){ note_ctor("S3041C1", this);} // tgen

static void Test_S3041C1()
{
  extern Class_Descriptor cd_S3041C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,19)];
    init_test(&cd_S3041C1, buf);
    S3041C1 *dp, &lv = *(dp=new (buf) S3041C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,72), "sizeof(S3041C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3041C1)");
    check_base_class_offset(lv, (S3041C3*)(S3041C2*), 0, "S3041C1");
    check_base_class_offset(lv, (S3041C2*), 0, "S3041C1");
    check_field_offset(lv, s3041c1f0, ABISELECT(8,4), "S3041C1.s3041c1f0");
    check_field_offset(lv, s3041c1f1, ABISELECT(12,8), "S3041C1.s3041c1f1");
    check_field_offset(lv, s3041c1f2, ABISELECT(24,16), "S3041C1.s3041c1f2");
    check_field_offset(lv, s3041c1f3, ABISELECT(56,32), "S3041C1.s3041c1f3");
    check_field_offset(lv, s3041c1f4, ABISELECT(88,48), "S3041C1.s3041c1f4");
    check_field_offset(lv, s3041c1f5, ABISELECT(120,64), "S3041C1.s3041c1f5");
    check_field_offset(lv, s3041c1f6, ABISELECT(128,68), "S3041C1.s3041c1f6");
    test_class_info(&lv, &cd_S3041C1);
    dp->~S3041C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3041C1(Test_S3041C1, "S3041C1", ABISELECT(136,72));

#else // __cplusplus

extern void _ZN7S3041C1C1Ev();
extern void _ZN7S3041C1D1Ev();
Name_Map name_map_S3041C1[] = {
  NSPAIR(_ZN7S3041C1C1Ev),
  NSPAIR(_ZN7S3041C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3041C3;
extern VTBL_ENTRY _ZTI7S3041C3[];
extern  VTBL_ENTRY _ZTV7S3041C3[];
extern Class_Descriptor cd_S3041C2;
extern VTBL_ENTRY _ZTI7S3041C2[];
extern  VTBL_ENTRY _ZTV7S3041C2[];
static Base_Class bases_S3041C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3041C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3041C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3041C1[];
extern void _ZN7S3041C1D1Ev();
extern void _ZN7S3041C1D0Ev();
extern void _ZN7S3041C33v17Ev();
extern void _ZN7S3041C33v18Ev();
extern void _ZN7S3041C33v19Ev();
extern void _ZN7S3041C33v20Ev();
extern void _ZN7S3041C33v21Ev();
extern void _ZN7S3041C33v22Ev();
extern void _ZN7S3041C33v23Ev();
extern void _ZN7S3041C33v24Ev();
extern void _ZN7S3041C33v25Ev();
extern void _ZN7S3041C33v26Ev();
extern void _ZN7S3041C33v27Ev();
extern void _ZN7S3041C33v28Ev();
extern void _ZN7S3041C33v29Ev();
extern void _ZN7S3041C33v30Ev();
extern void _ZN7S3041C33v31Ev();
extern void _ZN7S3041C33v32Ev();
extern void _ZN7S3041C23v33Ev();
extern void _ZN7S3041C23v34Ev();
extern void _ZN7S3041C23v35Ev();
extern void _ZN7S3041C23v36Ev();
extern void _ZN7S3041C23v37Ev();
extern void _ZN7S3041C23v38Ev();
extern void _ZN7S3041C23v39Ev();
extern void _ZN7S3041C23v40Ev();
extern void _ZN7S3041C23v41Ev();
extern void _ZN7S3041C23v42Ev();
extern void _ZN7S3041C23v43Ev();
extern void _ZN7S3041C23v44Ev();
extern void _ZN7S3041C23v45Ev();
extern void _ZN7S3041C23v46Ev();
extern void _ZN7S3041C23v47Ev();
extern void _ZN7S3041C23v48Ev();
extern void _ZN7S3041C12v1Ev();
extern void _ZN7S3041C12v2Ev();
extern void _ZN7S3041C12v3Ev();
extern void _ZN7S3041C12v4Ev();
extern void _ZN7S3041C12v5Ev();
extern void _ZN7S3041C12v6Ev();
extern void _ZN7S3041C12v7Ev();
extern void _ZN7S3041C12v8Ev();
extern void _ZN7S3041C12v9Ev();
extern void _ZN7S3041C13v10Ev();
extern void _ZN7S3041C13v11Ev();
extern void _ZN7S3041C13v12Ev();
extern void _ZN7S3041C13v13Ev();
extern void _ZN7S3041C13v14Ev();
extern void _ZN7S3041C13v15Ev();
extern void _ZN7S3041C13v16Ev();
static  VTBL_ENTRY vtc_S3041C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3041C1[0]),
  (VTBL_ENTRY)&_ZN7S3041C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3041C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3041C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v34Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v35Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v36Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v37Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v38Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v39Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v40Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v41Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v42Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v43Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v44Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v45Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v46Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v47Ev,
  (VTBL_ENTRY)&_ZN7S3041C23v48Ev,
  (VTBL_ENTRY)&_ZN7S3041C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3041C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3041C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3041C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3041C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3041C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3041C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3041C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3041C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3041C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3041C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3041C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3041C13v13Ev,
  (VTBL_ENTRY)&_ZN7S3041C13v14Ev,
  (VTBL_ENTRY)&_ZN7S3041C13v15Ev,
  (VTBL_ENTRY)&_ZN7S3041C13v16Ev,
};
extern VTBL_ENTRY _ZTI7S3041C1[];
extern  VTBL_ENTRY _ZTV7S3041C1[];
Class_Descriptor cd_S3041C1 = {  "S3041C1", // class name
  bases_S3041C1, 2,
  &(vtc_S3041C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,72), // object size
  NSPAIRA(_ZTI7S3041C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3041C1),52, //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  S1671C3  : S1679C4_nt {
  virtual void  v3(); // _ZN7S1671C32v3Ev
  virtual void  v4(); // _ZN7S1671C32v4Ev
  virtual void  v5(); // _ZN7S1671C32v5Ev
  virtual void  v6(); // _ZN7S1671C32v6Ev
  virtual void  v7(); // _ZN7S1671C32v7Ev
  virtual void  v8(); // _ZN7S1671C32v8Ev
  virtual void  v9(); // _ZN7S1671C32v9Ev
  virtual void  v10(); // _ZN7S1671C33v10Ev
  virtual void  v11(); // _ZN7S1671C33v11Ev
  virtual void  v12(); // _ZN7S1671C33v12Ev
  virtual void  v13(); // _ZN7S1671C33v13Ev
  virtual void  v14(); // _ZN7S1671C33v14Ev
  ~S1671C3(); // tgen
  S1671C3(); // tgen
};
//SIG(-1 S1671C3) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S1671C3 ::v3(){vfunc_called(this, "_ZN7S1671C32v3Ev");}
void  S1671C3 ::v4(){vfunc_called(this, "_ZN7S1671C32v4Ev");}
void  S1671C3 ::v5(){vfunc_called(this, "_ZN7S1671C32v5Ev");}
void  S1671C3 ::v6(){vfunc_called(this, "_ZN7S1671C32v6Ev");}
void  S1671C3 ::v7(){vfunc_called(this, "_ZN7S1671C32v7Ev");}
void  S1671C3 ::v8(){vfunc_called(this, "_ZN7S1671C32v8Ev");}
void  S1671C3 ::v9(){vfunc_called(this, "_ZN7S1671C32v9Ev");}
void  S1671C3 ::v10(){vfunc_called(this, "_ZN7S1671C33v10Ev");}
void  S1671C3 ::v11(){vfunc_called(this, "_ZN7S1671C33v11Ev");}
void  S1671C3 ::v12(){vfunc_called(this, "_ZN7S1671C33v12Ev");}
void  S1671C3 ::v13(){vfunc_called(this, "_ZN7S1671C33v13Ev");}
void  S1671C3 ::v14(){vfunc_called(this, "_ZN7S1671C33v14Ev");}
S1671C3 ::~S1671C3(){ note_dtor("S1671C3", this);} // tgen
S1671C3 ::S1671C3(){ note_ctor("S1671C3", this);} // tgen

static void Test_S1671C3()
{
  extern Class_Descriptor cd_S1671C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1671C3, buf);
    S1671C3 *dp, &lv = *(dp=new (buf) S1671C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1671C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1671C3)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S1671C3");
    test_class_info(&lv, &cd_S1671C3);
    dp->~S1671C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1671C3(Test_S1671C3, "S1671C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1671C3C1Ev();
extern void _ZN7S1671C3D1Ev();
Name_Map name_map_S1671C3[] = {
  NSPAIR(_ZN7S1671C3C1Ev),
  NSPAIR(_ZN7S1671C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S1671C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S1671C3[];
extern void _ZN7S1671C3D1Ev();
extern void _ZN7S1671C3D0Ev();
extern void _ZN7S1671C32v3Ev();
extern void _ZN7S1671C32v4Ev();
extern void _ZN7S1671C32v5Ev();
extern void _ZN7S1671C32v6Ev();
extern void _ZN7S1671C32v7Ev();
extern void _ZN7S1671C32v8Ev();
extern void _ZN7S1671C32v9Ev();
extern void _ZN7S1671C33v10Ev();
extern void _ZN7S1671C33v11Ev();
extern void _ZN7S1671C33v12Ev();
extern void _ZN7S1671C33v13Ev();
extern void _ZN7S1671C33v14Ev();
static  VTBL_ENTRY vtc_S1671C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1671C3[0]),
  (VTBL_ENTRY)&_ZN7S1671C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1671C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1671C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1671C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1671C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1671C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1671C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1671C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1671C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1671C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1671C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1671C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1671C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1671C33v14Ev,
};
extern VTBL_ENTRY _ZTI7S1671C3[];
extern  VTBL_ENTRY _ZTV7S1671C3[];
Class_Descriptor cd_S1671C3 = {  "S1671C3", // class name
  bases_S1671C3, 1,
  &(vtc_S1671C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1671C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1671C3),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1671C2  : S1671C3 {
  ::S79C38_nt s1671c2f0;
  ::S17777C6_nt s1671c2f1;
  ::S1679C8_nt s1671c2f2;
  int s1671c2f3[4];
  ::S4533C11_nt s1671c2f4;
  void *s1671c2f5[4];
  virtual  ~S1671C2(); // _ZN7S1671C2D1Ev
  virtual void  v15(); // _ZN7S1671C23v15Ev
  virtual void  v16(); // _ZN7S1671C23v16Ev
  virtual void  v17(); // _ZN7S1671C23v17Ev
  virtual void  v18(); // _ZN7S1671C23v18Ev
  virtual void  v19(); // _ZN7S1671C23v19Ev
  virtual void  v20(); // _ZN7S1671C23v20Ev
  virtual void  v21(); // _ZN7S1671C23v21Ev
  virtual void  v22(); // _ZN7S1671C23v22Ev
  virtual void  v23(); // _ZN7S1671C23v23Ev
  virtual void  v24(); // _ZN7S1671C23v24Ev
  virtual void  v25(); // _ZN7S1671C23v25Ev
  virtual void  v26(); // _ZN7S1671C23v26Ev
  virtual void  v27(); // _ZN7S1671C23v27Ev
  S1671C2(); // tgen
};
//SIG(-1 S1671C2) C1{ BC2{ BC3{ vd m Fi} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 FC4{ m Fp[2]} FC5{ m Fp} FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]} Fi[4] FC9{ m Fp} Fp[4]}


 S1671C2 ::~S1671C2(){ note_dtor("S1671C2", this);}
void  S1671C2 ::v15(){vfunc_called(this, "_ZN7S1671C23v15Ev");}
void  S1671C2 ::v16(){vfunc_called(this, "_ZN7S1671C23v16Ev");}
void  S1671C2 ::v17(){vfunc_called(this, "_ZN7S1671C23v17Ev");}
void  S1671C2 ::v18(){vfunc_called(this, "_ZN7S1671C23v18Ev");}
void  S1671C2 ::v19(){vfunc_called(this, "_ZN7S1671C23v19Ev");}
void  S1671C2 ::v20(){vfunc_called(this, "_ZN7S1671C23v20Ev");}
void  S1671C2 ::v21(){vfunc_called(this, "_ZN7S1671C23v21Ev");}
void  S1671C2 ::v22(){vfunc_called(this, "_ZN7S1671C23v22Ev");}
void  S1671C2 ::v23(){vfunc_called(this, "_ZN7S1671C23v23Ev");}
void  S1671C2 ::v24(){vfunc_called(this, "_ZN7S1671C23v24Ev");}
void  S1671C2 ::v25(){vfunc_called(this, "_ZN7S1671C23v25Ev");}
void  S1671C2 ::v26(){vfunc_called(this, "_ZN7S1671C23v26Ev");}
void  S1671C2 ::v27(){vfunc_called(this, "_ZN7S1671C23v27Ev");}
S1671C2 ::S1671C2(){ note_ctor("S1671C2", this);} // tgen

static void Test_S1671C2()
{
  extern Class_Descriptor cd_S1671C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,21)];
    init_test(&cd_S1671C2, buf);
    S1671C2 *dp, &lv = *(dp=new (buf) S1671C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,80), "sizeof(S1671C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1671C2)");
    check_base_class_offset(lv, (S1679C4_nt*)(S1671C3*), 0, "S1671C2");
    check_base_class_offset(lv, (S1671C3*), 0, "S1671C2");
    check_field_offset(lv, s1671c2f0, ABISELECT(16,8), "S1671C2.s1671c2f0");
    check_field_offset(lv, s1671c2f1, ABISELECT(32,16), "S1671C2.s1671c2f1");
    check_field_offset(lv, s1671c2f2, ABISELECT(40,20), "S1671C2.s1671c2f2");
    check_field_offset(lv, s1671c2f3, ABISELECT(80,44), "S1671C2.s1671c2f3");
    check_field_offset(lv, s1671c2f4, ABISELECT(96,60), "S1671C2.s1671c2f4");
    check_field_offset(lv, s1671c2f5, ABISELECT(104,64), "S1671C2.s1671c2f5");
    test_class_info(&lv, &cd_S1671C2);
    dp->~S1671C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1671C2(Test_S1671C2, "S1671C2", ABISELECT(136,80));

#else // __cplusplus

extern void _ZN7S1671C2C1Ev();
extern void _ZN7S1671C2D1Ev();
Name_Map name_map_S1671C2[] = {
  NSPAIR(_ZN7S1671C2C1Ev),
  NSPAIR(_ZN7S1671C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S1671C3;
extern VTBL_ENTRY _ZTI7S1671C3[];
extern  VTBL_ENTRY _ZTV7S1671C3[];
static Base_Class bases_S1671C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S1671C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1671C2[];
extern void _ZN7S1671C2D1Ev();
extern void _ZN7S1671C2D0Ev();
extern void _ZN7S1671C32v3Ev();
extern void _ZN7S1671C32v4Ev();
extern void _ZN7S1671C32v5Ev();
extern void _ZN7S1671C32v6Ev();
extern void _ZN7S1671C32v7Ev();
extern void _ZN7S1671C32v8Ev();
extern void _ZN7S1671C32v9Ev();
extern void _ZN7S1671C33v10Ev();
extern void _ZN7S1671C33v11Ev();
extern void _ZN7S1671C33v12Ev();
extern void _ZN7S1671C33v13Ev();
extern void _ZN7S1671C33v14Ev();
extern void _ZN7S1671C23v15Ev();
extern void _ZN7S1671C23v16Ev();
extern void _ZN7S1671C23v17Ev();
extern void _ZN7S1671C23v18Ev();
extern void _ZN7S1671C23v19Ev();
extern void _ZN7S1671C23v20Ev();
extern void _ZN7S1671C23v21Ev();
extern void _ZN7S1671C23v22Ev();
extern void _ZN7S1671C23v23Ev();
extern void _ZN7S1671C23v24Ev();
extern void _ZN7S1671C23v25Ev();
extern void _ZN7S1671C23v26Ev();
extern void _ZN7S1671C23v27Ev();
static  VTBL_ENTRY vtc_S1671C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1671C2[0]),
  (VTBL_ENTRY)&_ZN7S1671C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1671C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1671C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1671C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1671C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1671C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1671C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1671C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1671C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1671C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1671C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1671C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1671C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1671C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1671C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1671C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1671C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1671C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1671C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1671C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1671C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1671C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1671C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1671C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1671C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1671C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1671C23v27Ev,
};
extern VTBL_ENTRY _ZTI7S1671C2[];
extern  VTBL_ENTRY _ZTV7S1671C2[];
Class_Descriptor cd_S1671C2 = {  "S1671C2", // class name
  bases_S1671C2, 2,
  &(vtc_S1671C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,80), // object size
  NSPAIRA(_ZTI7S1671C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1671C2),29, //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  S1671C15_nt  {
  ::S3041C4_nt s1671c15f0;
  void  mf1671c15(); // _ZN11S1671C15_nt9mf1671c15Ev
};
//SIG(-1 S1671C15_nt) C1{ m FC2{ Fl[4]}}


void  S1671C15_nt ::mf1671c15(){}

//skip512 S1671C15_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1671C1  : S1671C2 {
  ::S1679C8_nt s1671c1f0;
  ::S5266C24 s1671c1f1;
  ::S1671C15_nt s1671c1f2;
  virtual  ~S1671C1(); // _ZN7S1671C1D1Ev
  virtual void  v1(); // _ZN7S1671C12v1Ev
  virtual void  v2(); // _ZN7S1671C12v2Ev
  S1671C1(); // tgen
};
//SIG(1 S1671C1) C1{ BC2{ BC3{ BC4{ vd m Fi} v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14} vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 FC5{ m Fp[2]} FC6{ m Fp} FC7{ m FC8{ m Fp Fi[2] FC9{ m}} Fp[2]} Fi[4] FC10{ m Fp} Fp[4]} vd v1 v2 FC7 FC11{ BC12{ m Fp Fi FC13{ m} FC13}} FC14{ m FC15{ Fl[4]}}}


 S1671C1 ::~S1671C1(){ note_dtor("S1671C1", this);}
void  S1671C1 ::v1(){vfunc_called(this, "_ZN7S1671C12v1Ev");}
void  S1671C1 ::v2(){vfunc_called(this, "_ZN7S1671C12v2Ev");}
S1671C1 ::S1671C1(){ note_ctor("S1671C1", this);} // tgen

static void Test_S1671C1()
{
  extern Class_Descriptor cd_S1671C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,34)];
    init_test(&cd_S1671C1, buf);
    S1671C1 *dp, &lv = *(dp=new (buf) S1671C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,132), "sizeof(S1671C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1671C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S1671C3*)(S1671C2*), 0, "S1671C1");
    check_base_class_offset(lv, (S1671C3*)(S1671C2*), 0, "S1671C1");
    check_base_class_offset(lv, (S1671C2*), 0, "S1671C1");
    check_field_offset(lv, s1671c1f0, ABISELECT(136,80), "S1671C1.s1671c1f0");
    check_field_offset(lv, s1671c1f1, ABISELECT(176,104), "S1671C1.s1671c1f1");
    check_field_offset(lv, s1671c1f2, ABISELECT(192,116), "S1671C1.s1671c1f2");
    test_class_info(&lv, &cd_S1671C1);
    dp->~S1671C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1671C1(Test_S1671C1, "S1671C1", ABISELECT(224,132));

#else // __cplusplus

extern void _ZN7S1671C1C1Ev();
extern void _ZN7S1671C1D1Ev();
Name_Map name_map_S1671C1[] = {
  NSPAIR(_ZN7S1671C1C1Ev),
  NSPAIR(_ZN7S1671C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S1671C3;
extern VTBL_ENTRY _ZTI7S1671C3[];
extern  VTBL_ENTRY _ZTV7S1671C3[];
extern Class_Descriptor cd_S1671C2;
extern VTBL_ENTRY _ZTI7S1671C2[];
extern  VTBL_ENTRY _ZTV7S1671C2[];
static Base_Class bases_S1671C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S1671C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1671C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1671C1[];
extern void _ZN7S1671C1D1Ev();
extern void _ZN7S1671C1D0Ev();
extern void _ZN7S1671C32v3Ev();
extern void _ZN7S1671C32v4Ev();
extern void _ZN7S1671C32v5Ev();
extern void _ZN7S1671C32v6Ev();
extern void _ZN7S1671C32v7Ev();
extern void _ZN7S1671C32v8Ev();
extern void _ZN7S1671C32v9Ev();
extern void _ZN7S1671C33v10Ev();
extern void _ZN7S1671C33v11Ev();
extern void _ZN7S1671C33v12Ev();
extern void _ZN7S1671C33v13Ev();
extern void _ZN7S1671C33v14Ev();
extern void _ZN7S1671C23v15Ev();
extern void _ZN7S1671C23v16Ev();
extern void _ZN7S1671C23v17Ev();
extern void _ZN7S1671C23v18Ev();
extern void _ZN7S1671C23v19Ev();
extern void _ZN7S1671C23v20Ev();
extern void _ZN7S1671C23v21Ev();
extern void _ZN7S1671C23v22Ev();
extern void _ZN7S1671C23v23Ev();
extern void _ZN7S1671C23v24Ev();
extern void _ZN7S1671C23v25Ev();
extern void _ZN7S1671C23v26Ev();
extern void _ZN7S1671C23v27Ev();
extern void _ZN7S1671C12v1Ev();
extern void _ZN7S1671C12v2Ev();
static  VTBL_ENTRY vtc_S1671C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1671C1[0]),
  (VTBL_ENTRY)&_ZN7S1671C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1671C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1671C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1671C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1671C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1671C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1671C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1671C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1671C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1671C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1671C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1671C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1671C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1671C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1671C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1671C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1671C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1671C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1671C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1671C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1671C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1671C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1671C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1671C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1671C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1671C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1671C23v27Ev,
  (VTBL_ENTRY)&_ZN7S1671C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1671C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S1671C1[];
extern  VTBL_ENTRY _ZTV7S1671C1[];
Class_Descriptor cd_S1671C1 = {  "S1671C1", // class name
  bases_S1671C1, 3,
  &(vtc_S1671C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,132), // object size
  NSPAIRA(_ZTI7S1671C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1671C1),31, //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  S1672C3  : S1679C4_nt {
  virtual void  v3(); // _ZN7S1672C32v3Ev
  virtual void  v4(); // _ZN7S1672C32v4Ev
  virtual void  v5(); // _ZN7S1672C32v5Ev
  virtual void  v6(); // _ZN7S1672C32v6Ev
  virtual void  v7(); // _ZN7S1672C32v7Ev
  virtual void  v8(); // _ZN7S1672C32v8Ev
  virtual void  v9(); // _ZN7S1672C32v9Ev
  virtual void  v10(); // _ZN7S1672C33v10Ev
  virtual void  v11(); // _ZN7S1672C33v11Ev
  virtual void  v12(); // _ZN7S1672C33v12Ev
  virtual void  v13(); // _ZN7S1672C33v13Ev
  virtual void  v14(); // _ZN7S1672C33v14Ev
  ~S1672C3(); // tgen
  S1672C3(); // tgen
};
//SIG(-1 S1672C3) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S1672C3 ::v3(){vfunc_called(this, "_ZN7S1672C32v3Ev");}
void  S1672C3 ::v4(){vfunc_called(this, "_ZN7S1672C32v4Ev");}
void  S1672C3 ::v5(){vfunc_called(this, "_ZN7S1672C32v5Ev");}
void  S1672C3 ::v6(){vfunc_called(this, "_ZN7S1672C32v6Ev");}
void  S1672C3 ::v7(){vfunc_called(this, "_ZN7S1672C32v7Ev");}
void  S1672C3 ::v8(){vfunc_called(this, "_ZN7S1672C32v8Ev");}
void  S1672C3 ::v9(){vfunc_called(this, "_ZN7S1672C32v9Ev");}
void  S1672C3 ::v10(){vfunc_called(this, "_ZN7S1672C33v10Ev");}
void  S1672C3 ::v11(){vfunc_called(this, "_ZN7S1672C33v11Ev");}
void  S1672C3 ::v12(){vfunc_called(this, "_ZN7S1672C33v12Ev");}
void  S1672C3 ::v13(){vfunc_called(this, "_ZN7S1672C33v13Ev");}
void  S1672C3 ::v14(){vfunc_called(this, "_ZN7S1672C33v14Ev");}
S1672C3 ::~S1672C3(){ note_dtor("S1672C3", this);} // tgen
S1672C3 ::S1672C3(){ note_ctor("S1672C3", this);} // tgen

static void Test_S1672C3()
{
  extern Class_Descriptor cd_S1672C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1672C3, buf);
    S1672C3 *dp, &lv = *(dp=new (buf) S1672C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1672C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1672C3)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S1672C3");
    test_class_info(&lv, &cd_S1672C3);
    dp->~S1672C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1672C3(Test_S1672C3, "S1672C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1672C3C1Ev();
extern void _ZN7S1672C3D1Ev();
Name_Map name_map_S1672C3[] = {
  NSPAIR(_ZN7S1672C3C1Ev),
  NSPAIR(_ZN7S1672C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S1672C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S1672C3[];
extern void _ZN7S1672C3D1Ev();
extern void _ZN7S1672C3D0Ev();
extern void _ZN7S1672C32v3Ev();
extern void _ZN7S1672C32v4Ev();
extern void _ZN7S1672C32v5Ev();
extern void _ZN7S1672C32v6Ev();
extern void _ZN7S1672C32v7Ev();
extern void _ZN7S1672C32v8Ev();
extern void _ZN7S1672C32v9Ev();
extern void _ZN7S1672C33v10Ev();
extern void _ZN7S1672C33v11Ev();
extern void _ZN7S1672C33v12Ev();
extern void _ZN7S1672C33v13Ev();
extern void _ZN7S1672C33v14Ev();
static  VTBL_ENTRY vtc_S1672C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1672C3[0]),
  (VTBL_ENTRY)&_ZN7S1672C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1672C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1672C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1672C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1672C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1672C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1672C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1672C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1672C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1672C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1672C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1672C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1672C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1672C33v14Ev,
};
extern VTBL_ENTRY _ZTI7S1672C3[];
extern  VTBL_ENTRY _ZTV7S1672C3[];
Class_Descriptor cd_S1672C3 = {  "S1672C3", // class name
  bases_S1672C3, 1,
  &(vtc_S1672C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1672C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1672C3),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1672C2  : S1672C3 {
  ::S79C38_nt s1672c2f0;
  ::S17777C6_nt s1672c2f1;
  ::S1679C8_nt s1672c2f2;
  int s1672c2f3[4];
  ::S4533C11_nt s1672c2f4;
  void *s1672c2f5[4];
  virtual  ~S1672C2(); // _ZN7S1672C2D1Ev
  virtual void  v15(); // _ZN7S1672C23v15Ev
  virtual void  v16(); // _ZN7S1672C23v16Ev
  virtual void  v17(); // _ZN7S1672C23v17Ev
  virtual void  v18(); // _ZN7S1672C23v18Ev
  virtual void  v19(); // _ZN7S1672C23v19Ev
  virtual void  v20(); // _ZN7S1672C23v20Ev
  virtual void  v21(); // _ZN7S1672C23v21Ev
  virtual void  v22(); // _ZN7S1672C23v22Ev
  virtual void  v23(); // _ZN7S1672C23v23Ev
  virtual void  v24(); // _ZN7S1672C23v24Ev
  virtual void  v25(); // _ZN7S1672C23v25Ev
  virtual void  v26(); // _ZN7S1672C23v26Ev
  virtual void  v27(); // _ZN7S1672C23v27Ev
  S1672C2(); // tgen
};
//SIG(-1 S1672C2) C1{ BC2{ BC3{ vd m Fi} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 FC4{ m Fp[2]} FC5{ m Fp} FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]} Fi[4] FC9{ m Fp} Fp[4]}


 S1672C2 ::~S1672C2(){ note_dtor("S1672C2", this);}
void  S1672C2 ::v15(){vfunc_called(this, "_ZN7S1672C23v15Ev");}
void  S1672C2 ::v16(){vfunc_called(this, "_ZN7S1672C23v16Ev");}
void  S1672C2 ::v17(){vfunc_called(this, "_ZN7S1672C23v17Ev");}
void  S1672C2 ::v18(){vfunc_called(this, "_ZN7S1672C23v18Ev");}
void  S1672C2 ::v19(){vfunc_called(this, "_ZN7S1672C23v19Ev");}
void  S1672C2 ::v20(){vfunc_called(this, "_ZN7S1672C23v20Ev");}
void  S1672C2 ::v21(){vfunc_called(this, "_ZN7S1672C23v21Ev");}
void  S1672C2 ::v22(){vfunc_called(this, "_ZN7S1672C23v22Ev");}
void  S1672C2 ::v23(){vfunc_called(this, "_ZN7S1672C23v23Ev");}
void  S1672C2 ::v24(){vfunc_called(this, "_ZN7S1672C23v24Ev");}
void  S1672C2 ::v25(){vfunc_called(this, "_ZN7S1672C23v25Ev");}
void  S1672C2 ::v26(){vfunc_called(this, "_ZN7S1672C23v26Ev");}
void  S1672C2 ::v27(){vfunc_called(this, "_ZN7S1672C23v27Ev");}
S1672C2 ::S1672C2(){ note_ctor("S1672C2", this);} // tgen

static void Test_S1672C2()
{
  extern Class_Descriptor cd_S1672C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,21)];
    init_test(&cd_S1672C2, buf);
    S1672C2 *dp, &lv = *(dp=new (buf) S1672C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,80), "sizeof(S1672C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1672C2)");
    check_base_class_offset(lv, (S1679C4_nt*)(S1672C3*), 0, "S1672C2");
    check_base_class_offset(lv, (S1672C3*), 0, "S1672C2");
    check_field_offset(lv, s1672c2f0, ABISELECT(16,8), "S1672C2.s1672c2f0");
    check_field_offset(lv, s1672c2f1, ABISELECT(32,16), "S1672C2.s1672c2f1");
    check_field_offset(lv, s1672c2f2, ABISELECT(40,20), "S1672C2.s1672c2f2");
    check_field_offset(lv, s1672c2f3, ABISELECT(80,44), "S1672C2.s1672c2f3");
    check_field_offset(lv, s1672c2f4, ABISELECT(96,60), "S1672C2.s1672c2f4");
    check_field_offset(lv, s1672c2f5, ABISELECT(104,64), "S1672C2.s1672c2f5");
    test_class_info(&lv, &cd_S1672C2);
    dp->~S1672C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1672C2(Test_S1672C2, "S1672C2", ABISELECT(136,80));

#else // __cplusplus

extern void _ZN7S1672C2C1Ev();
extern void _ZN7S1672C2D1Ev();
Name_Map name_map_S1672C2[] = {
  NSPAIR(_ZN7S1672C2C1Ev),
  NSPAIR(_ZN7S1672C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S1672C3;
extern VTBL_ENTRY _ZTI7S1672C3[];
extern  VTBL_ENTRY _ZTV7S1672C3[];
static Base_Class bases_S1672C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S1672C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1672C2[];
extern void _ZN7S1672C2D1Ev();
extern void _ZN7S1672C2D0Ev();
extern void _ZN7S1672C32v3Ev();
extern void _ZN7S1672C32v4Ev();
extern void _ZN7S1672C32v5Ev();
extern void _ZN7S1672C32v6Ev();
extern void _ZN7S1672C32v7Ev();
extern void _ZN7S1672C32v8Ev();
extern void _ZN7S1672C32v9Ev();
extern void _ZN7S1672C33v10Ev();
extern void _ZN7S1672C33v11Ev();
extern void _ZN7S1672C33v12Ev();
extern void _ZN7S1672C33v13Ev();
extern void _ZN7S1672C33v14Ev();
extern void _ZN7S1672C23v15Ev();
extern void _ZN7S1672C23v16Ev();
extern void _ZN7S1672C23v17Ev();
extern void _ZN7S1672C23v18Ev();
extern void _ZN7S1672C23v19Ev();
extern void _ZN7S1672C23v20Ev();
extern void _ZN7S1672C23v21Ev();
extern void _ZN7S1672C23v22Ev();
extern void _ZN7S1672C23v23Ev();
extern void _ZN7S1672C23v24Ev();
extern void _ZN7S1672C23v25Ev();
extern void _ZN7S1672C23v26Ev();
extern void _ZN7S1672C23v27Ev();
static  VTBL_ENTRY vtc_S1672C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1672C2[0]),
  (VTBL_ENTRY)&_ZN7S1672C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1672C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1672C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1672C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1672C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1672C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1672C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1672C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1672C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1672C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1672C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1672C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1672C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1672C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1672C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1672C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1672C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1672C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1672C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1672C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1672C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1672C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1672C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1672C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1672C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1672C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1672C23v27Ev,
};
extern VTBL_ENTRY _ZTI7S1672C2[];
extern  VTBL_ENTRY _ZTV7S1672C2[];
Class_Descriptor cd_S1672C2 = {  "S1672C2", // class name
  bases_S1672C2, 2,
  &(vtc_S1672C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,80), // object size
  NSPAIRA(_ZTI7S1672C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1672C2),29, //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  S1672C15_nt  {
  ::S3042C4_nt s1672c15f0;
  void  mf1672c15(); // _ZN11S1672C15_nt9mf1672c15Ev
};
//SIG(-1 S1672C15_nt) C1{ m FC2{ FL[4]}}


void  S1672C15_nt ::mf1672c15(){}

//skip512 S1672C15_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1672C1  : S1672C2 {
  ::S1679C8_nt s1672c1f0;
  ::S5266C24 s1672c1f1;
  ::S1672C15_nt s1672c1f2;
  virtual  ~S1672C1(); // _ZN7S1672C1D1Ev
  virtual void  v1(); // _ZN7S1672C12v1Ev
  virtual void  v2(); // _ZN7S1672C12v2Ev
  S1672C1(); // tgen
};
//SIG(1 S1672C1) C1{ BC2{ BC3{ BC4{ vd m Fi} v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14} vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 FC5{ m Fp[2]} FC6{ m Fp} FC7{ m FC8{ m Fp Fi[2] FC9{ m}} Fp[2]} Fi[4] FC10{ m Fp} Fp[4]} vd v1 v2 FC7 FC11{ BC12{ m Fp Fi FC13{ m} FC13}} FC14{ m FC15{ FL[4]}}}


 S1672C1 ::~S1672C1(){ note_dtor("S1672C1", this);}
void  S1672C1 ::v1(){vfunc_called(this, "_ZN7S1672C12v1Ev");}
void  S1672C1 ::v2(){vfunc_called(this, "_ZN7S1672C12v2Ev");}
S1672C1 ::S1672C1(){ note_ctor("S1672C1", this);} // tgen

static void Test_S1672C1()
{
  extern Class_Descriptor cd_S1672C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,38)];
    init_test(&cd_S1672C1, buf);
    S1672C1 *dp, &lv = *(dp=new (buf) S1672C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,148), "sizeof(S1672C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1672C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S1672C3*)(S1672C2*), 0, "S1672C1");
    check_base_class_offset(lv, (S1672C3*)(S1672C2*), 0, "S1672C1");
    check_base_class_offset(lv, (S1672C2*), 0, "S1672C1");
    check_field_offset(lv, s1672c1f0, ABISELECT(136,80), "S1672C1.s1672c1f0");
    check_field_offset(lv, s1672c1f1, ABISELECT(176,104), "S1672C1.s1672c1f1");
    check_field_offset(lv, s1672c1f2, ABISELECT(192,116), "S1672C1.s1672c1f2");
    test_class_info(&lv, &cd_S1672C1);
    dp->~S1672C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1672C1(Test_S1672C1, "S1672C1", ABISELECT(224,148));

#else // __cplusplus

extern void _ZN7S1672C1C1Ev();
extern void _ZN7S1672C1D1Ev();
Name_Map name_map_S1672C1[] = {
  NSPAIR(_ZN7S1672C1C1Ev),
  NSPAIR(_ZN7S1672C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S1672C3;
extern VTBL_ENTRY _ZTI7S1672C3[];
extern  VTBL_ENTRY _ZTV7S1672C3[];
extern Class_Descriptor cd_S1672C2;
extern VTBL_ENTRY _ZTI7S1672C2[];
extern  VTBL_ENTRY _ZTV7S1672C2[];
static Base_Class bases_S1672C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S1672C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1672C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1672C1[];
extern void _ZN7S1672C1D1Ev();
extern void _ZN7S1672C1D0Ev();
extern void _ZN7S1672C32v3Ev();
extern void _ZN7S1672C32v4Ev();
extern void _ZN7S1672C32v5Ev();
extern void _ZN7S1672C32v6Ev();
extern void _ZN7S1672C32v7Ev();
extern void _ZN7S1672C32v8Ev();
extern void _ZN7S1672C32v9Ev();
extern void _ZN7S1672C33v10Ev();
extern void _ZN7S1672C33v11Ev();
extern void _ZN7S1672C33v12Ev();
extern void _ZN7S1672C33v13Ev();
extern void _ZN7S1672C33v14Ev();
extern void _ZN7S1672C23v15Ev();
extern void _ZN7S1672C23v16Ev();
extern void _ZN7S1672C23v17Ev();
extern void _ZN7S1672C23v18Ev();
extern void _ZN7S1672C23v19Ev();
extern void _ZN7S1672C23v20Ev();
extern void _ZN7S1672C23v21Ev();
extern void _ZN7S1672C23v22Ev();
extern void _ZN7S1672C23v23Ev();
extern void _ZN7S1672C23v24Ev();
extern void _ZN7S1672C23v25Ev();
extern void _ZN7S1672C23v26Ev();
extern void _ZN7S1672C23v27Ev();
extern void _ZN7S1672C12v1Ev();
extern void _ZN7S1672C12v2Ev();
static  VTBL_ENTRY vtc_S1672C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1672C1[0]),
  (VTBL_ENTRY)&_ZN7S1672C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1672C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1672C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1672C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1672C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1672C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1672C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1672C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1672C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1672C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1672C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1672C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1672C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1672C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1672C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1672C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1672C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1672C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1672C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1672C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1672C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1672C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1672C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1672C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1672C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1672C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1672C23v27Ev,
  (VTBL_ENTRY)&_ZN7S1672C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1672C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S1672C1[];
extern  VTBL_ENTRY _ZTV7S1672C1[];
Class_Descriptor cd_S1672C1 = {  "S1672C1", // class name
  bases_S1672C1, 3,
  &(vtc_S1672C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,148), // object size
  NSPAIRA(_ZTI7S1672C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1672C1),31, //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  S19010C7  : S5266C26 , S5266C29 , virtual S7719C4_nt {
  ::S5266C29 s19010c7f0;
  ~S19010C7(); // tgen
  S19010C7(); // tgen
};
//SIG(-1 S19010C7) C1{ BC2{ m} BC3{ m} VBC4{ m Fc} FC3}


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

static void Test_S19010C7()
{
  extern Class_Descriptor cd_S19010C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19010C7, buf);
    S19010C7 *dp, &lv = *(dp=new (buf) S19010C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19010C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19010C7)");
    check_base_class_offset(lv, (S5266C26*), 0, "S19010C7");
    check_base_class_offset(lv, (S5266C29*), 0, "S19010C7");
    check_base_class_offset(lv, (S7719C4_nt*), ABISELECT(9,5), "S19010C7");
    check_field_offset(lv, s19010c7f0, ABISELECT(8,4), "S19010C7.s19010c7f0");
    test_class_info(&lv, &cd_S19010C7);
    dp->~S19010C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19010C7(Test_S19010C7, "S19010C7", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19010C7C1Ev();
extern void _ZN8S19010C7D1Ev();
Name_Map name_map_S19010C7[] = {
  NSPAIR(_ZN8S19010C7C1Ev),
  NSPAIR(_ZN8S19010C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
static Base_Class bases_S19010C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7719C4_nt,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S19010C7[];
static  VTBL_ENTRY vtc_S19010C7[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S19010C7[0]),
};
extern VTBL_ENTRY _ZTV8S19010C7[];
static  VTT_ENTRY vtt_S19010C7[] = {
  {&(_ZTV8S19010C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19010C7[];
extern  VTBL_ENTRY _ZTV8S19010C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19010C7[];
Class_Descriptor cd_S19010C7 = {  "S19010C7", // class name
  bases_S19010C7, 3,
  &(vtc_S19010C7[0]), // expected_vtbl_contents
  &(vtt_S19010C7[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19010C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19010C7),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19010C7),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  S19010C11  : S5266C26 , S7719C4_nt {
};
//SIG(-1 S19010C11) C1{ BC2{ m} BC3{ m Fc}}



static void Test_S19010C11()
{
  extern Class_Descriptor cd_S19010C11;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S19010C11, buf);
    S19010C11 &lv = *(new (buf) S19010C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S19010C11)");
    check2(__alignof__(lv), 1, "__alignof__(S19010C11)");
    check_base_class_offset(lv, (S5266C26*), 0, "S19010C11");
    check_base_class_offset(lv, (S7719C4_nt*), 0, "S19010C11");
    test_class_info(&lv, &cd_S19010C11);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19010C11(Test_S19010C11, "S19010C11", 1);

#else // __cplusplus

extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
static Base_Class bases_S19010C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7719C4_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 _ZTI9S19010C11[];
Class_Descriptor cd_S19010C11 = {  "S19010C11", // class name
  bases_S19010C11, 2,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI9S19010C11),ABISELECT(56,32), //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  S19010C10  : virtual S7719C4_nt , S5266C29 , S19010C11 , virtual S19010C7 {
  ~S19010C10(); // tgen
  S19010C10(); // tgen
};
//SIG(-1 S19010C10) C1{ VBC2{ m Fc} BC3{ m} BC4{ BC5{ m} BC2} VBC6{ BC5 BC3 VBC2 FC3}}


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

static void Test_S19010C10()
{
  extern Class_Descriptor cd_S19010C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19010C10, buf);
    S19010C10 *dp, &lv = *(dp=new (buf) S19010C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19010C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19010C10)");
    /*is_ambiguous_... S19010C10::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*), ABISELECT(9,5), "S19010C10");
    check_base_class_offset(lv, (S7719C4_nt*)(S19010C7*), ABISELECT(9,5), "S19010C10");
    /*is_ambiguous_... S19010C10::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*), 0, "S19010C10");
    check_base_class_offset(lv, (S5266C26*)(S19010C11*), ABISELECT(8,4), "S19010C10");
    check_base_class_offset(lv, (S7719C4_nt*)(S19010C11*), ABISELECT(8,4), "S19010C10");
    check_base_class_offset(lv, (S19010C11*), ABISELECT(8,4), "S19010C10");
    check_base_class_offset(lv, (S5266C26*)(S19010C7*), ABISELECT(16,8), "S19010C10");
    check_base_class_offset(lv, (S5266C29*)(S19010C7*), ABISELECT(16,8), "S19010C10");
    check_base_class_offset(lv, (S19010C7*), ABISELECT(16,8), "S19010C10");
    test_class_info(&lv, &cd_S19010C10);
    dp->~S19010C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19010C10(Test_S19010C10, "S19010C10", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN9S19010C10C1Ev();
extern void _ZN9S19010C10D1Ev();
Name_Map name_map_S19010C10[] = {
  NSPAIR(_ZN9S19010C10C1Ev),
  NSPAIR(_ZN9S19010C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S19010C11;
extern VTBL_ENTRY _ZTI9S19010C11[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19010C7;
extern VTBL_ENTRY _ZTI8S19010C7[];
extern  VTBL_ENTRY _ZTV8S19010C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19010C7[];
static Base_Class bases_S19010C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7719C4_nt,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C26,    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
    4, //immediately_derived
  0, 0},
  {&cd_S7719C4_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
    4, //immediately_derived
  0, 0},
  {&cd_S19010C11,    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},
  {&cd_S5266C26,    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
    7, //immediately_derived
  0, 0},
  {&cd_S5266C29,    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
    7, //immediately_derived
  0, 0},
  {&cd_S19010C7,    ABISELECT(16,8), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //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 _ZTI9S19010C10[];
static  VTBL_ENTRY vtc_S19010C10[] = {
  ABISELECT(16,8),
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C10[0]),
  ABISELECT(-7,-3),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19010C10[0]),
};
extern VTBL_ENTRY _ZTV9S19010C10[];
static  VTBL_ENTRY _tg__ZTV8S19010C7__9S19010C10[] = {
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI8S19010C7[0]),
};
static  VTT_ENTRY vtt_S19010C10[] = {
  {&(_ZTV9S19010C10[4]),  4,7},
  {&(_ZTV9S19010C10[7]),  7,7},
  {&(_tg__ZTV8S19010C7__9S19010C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19010C10[];
extern  VTBL_ENTRY _ZTV9S19010C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C10[];
Class_Descriptor cd_S19010C10 = {  "S19010C10", // class name
  bases_S19010C10, 8,
  &(vtc_S19010C10[0]), // expected_vtbl_contents
  &(vtt_S19010C10[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S19010C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19010C10),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19010C10),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  S19010C13  : S7719C4_nt , S5266C26 , virtual S5266C29 {
  ~S19010C13(); // tgen
  S19010C13(); // tgen
};
//SIG(-1 S19010C13) C1{ BC2{ m Fc} BC3{ m} VBC4{ m}}


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

static void Test_S19010C13()
{
  extern Class_Descriptor cd_S19010C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19010C13, buf);
    S19010C13 *dp, &lv = *(dp=new (buf) S19010C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19010C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19010C13)");
    check_base_class_offset(lv, (S7719C4_nt*), ABISELECT(8,4), "S19010C13");
    check_base_class_offset(lv, (S5266C26*), 0, "S19010C13");
    check_base_class_offset(lv, (S5266C29*), 0, "S19010C13");
    test_class_info(&lv, &cd_S19010C13);
    dp->~S19010C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19010C13(Test_S19010C13, "S19010C13", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19010C13C1Ev();
extern void _ZN9S19010C13D1Ev();
Name_Map name_map_S19010C13[] = {
  NSPAIR(_ZN9S19010C13C1Ev),
  NSPAIR(_ZN9S19010C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
static Base_Class bases_S19010C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7719C4_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, 0},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S19010C13[];
static  VTBL_ENTRY vtc_S19010C13[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C13[0]),
};
extern VTBL_ENTRY _ZTV9S19010C13[];
static  VTT_ENTRY vtt_S19010C13[] = {
  {&(_ZTV9S19010C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19010C13[];
extern  VTBL_ENTRY _ZTV9S19010C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C13[];
Class_Descriptor cd_S19010C13 = {  "S19010C13", // class name
  bases_S19010C13, 3,
  &(vtc_S19010C13[0]), // expected_vtbl_contents
  &(vtt_S19010C13[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19010C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19010C13),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19010C13),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  S19010C12  : virtual S19010C13 {
  long double s19010c12f0;
  void *s19010c12f1[8];
  ~S19010C12(); // tgen
  S19010C12(); // tgen
};
//SIG(-1 S19010C12) C1{ VBC2{ BC3{ m Fc} BC4{ m} VBC5{ m}} FD Fp[8]}


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

static void Test_S19010C12()
{
  extern Class_Descriptor cd_S19010C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,15)];
    init_test(&cd_S19010C12, buf);
    S19010C12 *dp, &lv = *(dp=new (buf) S19010C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S19010C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19010C12)");
    check_base_class_offset(lv, (S7719C4_nt*)(S19010C13*), ABISELECT(104,52), "S19010C12");
    check_base_class_offset(lv, (S5266C26*)(S19010C13*), ABISELECT(96,48), "S19010C12");
    check_base_class_offset(lv, (S5266C29*)(S19010C13*), 0, "S19010C12");
    check_base_class_offset(lv, (S19010C13*), ABISELECT(96,48), "S19010C12");
    check_field_offset(lv, s19010c12f0, ABISELECT(16,4), "S19010C12.s19010c12f0");
    check_field_offset(lv, s19010c12f1, ABISELECT(32,16), "S19010C12.s19010c12f1");
    test_class_info(&lv, &cd_S19010C12);
    dp->~S19010C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19010C12(Test_S19010C12, "S19010C12", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN9S19010C12C1Ev();
extern void _ZN9S19010C12D1Ev();
Name_Map name_map_S19010C12[] = {
  NSPAIR(_ZN9S19010C12C1Ev),
  NSPAIR(_ZN9S19010C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19010C13;
extern VTBL_ENTRY _ZTI9S19010C13[];
extern  VTBL_ENTRY _ZTV9S19010C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C13[];
static Base_Class bases_S19010C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7719C4_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
    3, //immediately_derived
  0, 0},
  {&cd_S5266C26,    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
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19010C13,    ABISELECT(96,48), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //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 _ZTI9S19010C12[];
static  VTBL_ENTRY vtc_S19010C12[] = {
  0,
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C12[0]),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI9S19010C12[0]),
};
extern VTBL_ENTRY _ZTV9S19010C12[];
static  VTBL_ENTRY _tg__ZTV9S19010C13__9S19010C12[] = {
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C13[0]),
};
static  VTT_ENTRY vtt_S19010C12[] = {
  {&(_ZTV9S19010C12[4]),  4,7},
  {&(_ZTV9S19010C12[7]),  7,7},
  {&(_tg__ZTV9S19010C13__9S19010C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19010C12[];
extern  VTBL_ENTRY _ZTV9S19010C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C12[];
Class_Descriptor cd_S19010C12 = {  "S19010C12", // class name
  bases_S19010C12, 4,
  &(vtc_S19010C12[0]), // expected_vtbl_contents
  &(vtt_S19010C12[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI9S19010C12),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19010C12),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19010C12),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19010C6  : virtual S19010C7 , virtual S19010C10 , S19010C12 {
  virtual  ~S19010C6(); // _ZN8S19010C6D2Ev
  S19010C6(); // tgen
};
//SIG(-1 S19010C6) C1{ VBC2{ BC3{ m} BC4{ m} VBC5{ m Fc} FC4} VBC6{ VBC5 BC4 BC7{ BC3 BC5} VBC2} BC8{ VBC9{ BC5 BC3 VBC4} FD Fp[8]} vd}


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

static void Test_S19010C6()
{
  extern Class_Descriptor cd_S19010C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,19)];
    init_test(&cd_S19010C6, buf);
    S19010C6 *dp, &lv = *(dp=new (buf) S19010C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,72), "sizeof(S19010C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19010C6)");
    check_base_class_offset(lv, (S5266C26*)(S19010C7*), ABISELECT(96,48), "S19010C6");
    check_base_class_offset(lv, (S5266C29*)(S19010C7*), ABISELECT(96,48), "S19010C6");
    check_base_class_offset(lv, (S7719C4_nt*)(S19010C7*), ABISELECT(105,53), "S19010C6");
    /*is_ambiguous_... S19010C10::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S19010C10*), ABISELECT(105,53), "S19010C6");
    check_base_class_offset(lv, (S19010C7*), ABISELECT(96,48), "S19010C6");
    check_base_class_offset(lv, (S19010C7*)(S19010C10*), ABISELECT(96,48), "S19010C6");
    /*is_ambiguous_... S19010C10::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S19010C10*), ABISELECT(112,56), "S19010C6");
    check_base_class_offset(lv, (S5266C26*)(S19010C11*)(S19010C10*), ABISELECT(120,60), "S19010C6");
    check_base_class_offset(lv, (S7719C4_nt*)(S19010C11*)(S19010C10*), ABISELECT(120,60), "S19010C6");
    check_base_class_offset(lv, (S19010C11*)(S19010C10*), ABISELECT(120,60), "S19010C6");
    check_base_class_offset(lv, (S19010C10*), ABISELECT(112,56), "S19010C6");
    check_base_class_offset(lv, (S7719C4_nt*)(S19010C13*), ABISELECT(136,68), "S19010C6");
    check_base_class_offset(lv, (S5266C26*)(S19010C13*), ABISELECT(128,64), "S19010C6");
    check_base_class_offset(lv, (S5266C29*)(S19010C13*), 0, "S19010C6");
    check_base_class_offset(lv, (S19010C13*)(S19010C12*), ABISELECT(128,64), "S19010C6");
    check_base_class_offset(lv, (S19010C12*), 0, "S19010C6");
    test_class_info(&lv, &cd_S19010C6);
    dp->~S19010C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19010C6(Test_S19010C6, "S19010C6", ABISELECT(144,72));

#else // __cplusplus

extern void _ZN8S19010C6C1Ev();
extern void _ZN8S19010C6D2Ev();
Name_Map name_map_S19010C6[] = {
  NSPAIR(_ZN8S19010C6C1Ev),
  NSPAIR(_ZN8S19010C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S19010C7;
extern VTBL_ENTRY _ZTI8S19010C7[];
extern  VTBL_ENTRY _ZTV8S19010C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19010C7[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S19010C11;
extern VTBL_ENTRY _ZTI9S19010C11[];
extern Class_Descriptor cd_S19010C10;
extern VTBL_ENTRY _ZTI9S19010C10[];
extern  VTBL_ENTRY _ZTV9S19010C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C10[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19010C13;
extern VTBL_ENTRY _ZTI9S19010C13[];
extern  VTBL_ENTRY _ZTV9S19010C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C13[];
extern Class_Descriptor cd_S19010C12;
extern VTBL_ENTRY _ZTI9S19010C12[];
extern  VTBL_ENTRY _ZTV9S19010C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C12[];
static Base_Class bases_S19010C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C26,    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
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5266C29,    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
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7719C4_nt,    ABISELECT(105,53), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19010C7,    ABISELECT(96,48), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5266C29,    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
    8, //immediately_derived
  0, 0},
  {&cd_S5266C26,    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
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7719C4_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
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19010C11,    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
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19010C10,    ABISELECT(112,56), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7719C4_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
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S5266C26,    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
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19010C13,    ABISELECT(128,64), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19010C12,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19010C6[];
extern void _ZN8S19010C6D1Ev();
extern void _ZN8S19010C6D0Ev();
static  VTBL_ENTRY vtc_S19010C6[] = {
  ABISELECT(112,56),
  ABISELECT(105,53),
  ABISELECT(96,48),
  0,
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19010C6[0]),
  (VTBL_ENTRY)&_ZN8S19010C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19010C6D0Ev,
  ABISELECT(9,5),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S19010C6[0]),
  ABISELECT(-16,-8),
  ABISELECT(-7,-3),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S19010C6[0]),
  ABISELECT(-128,-64),
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI8S19010C6[0]),
};
extern VTBL_ENTRY _ZTV8S19010C6[];
static  VTBL_ENTRY _tg__ZTV9S19010C12__8S19010C6[] = {
  0,
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C13__9S19010C12__8S19010C6[] = {
  ABISELECT(-128,-64),
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI9S19010C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19010C7__8S19010C6[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S19010C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C10__8S19010C6[] = {
  ABISELECT(-16,-8),
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19010C7__9S19010C10__8S19010C6[] = {
  ABISELECT(9,5),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19010C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C13__8S19010C6[] = {
  ABISELECT(-128,-64),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C13[0]),
};
static  VTT_ENTRY vtt_S19010C6[] = {
  {&(_ZTV8S19010C6[7]),  7,19},
  {&(_tg__ZTV9S19010C12__8S19010C6[4]),  4,4},
  {&(_tg__ZTV9S19010C13__9S19010C12__8S19010C6[3]),  3,3},
  {&(_ZTV8S19010C6[12]),  12,19},
  {&(_ZTV8S19010C6[16]),  16,19},
  {&(_ZTV8S19010C6[19]),  19,19},
  {&(_tg__ZTV8S19010C7__8S19010C6[3]),  3,3},
  {&(_tg__ZTV9S19010C10__8S19010C6[4]),  4,4},
  {&(_tg__ZTV8S19010C7__9S19010C10__8S19010C6[3]),  3,3},
  {&(_tg__ZTV9S19010C13__8S19010C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19010C6[];
extern  VTBL_ENTRY _ZTV8S19010C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19010C6[];
Class_Descriptor cd_S19010C6 = {  "S19010C6", // class name
  bases_S19010C6, 14,
  &(vtc_S19010C6[0]), // expected_vtbl_contents
  &(vtt_S19010C6[0]), // expected_vtt_contents
  ABISELECT(144,72), // object size
  NSPAIRA(_ZTI8S19010C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19010C6),19, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19010C6),10, //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  S19010C3  : S7719C17_nt , virtual S5266C29 , virtual S19010C6 , S19010C12 {
  int s19010c3f0;
  virtual  ~S19010C3(); // _ZN8S19010C3D2Ev
  S19010C3(); // tgen
};
//SIG(-1 S19010C3) C1{ BC2{ m Fi} VBC3{ m} VBC4{ VBC5{ BC6{ m} BC3 VBC7{ m Fc} FC3} VBC8{ VBC7 BC3 BC9{ BC6 BC7} VBC5} BC10{ VBC11{ BC7 BC6 VBC3} FD Fp[8]} vd} BC10 vd Fi}


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

static void Test_S19010C3()
{
  extern Class_Descriptor cd_S19010C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,33)];
    init_test(&cd_S19010C3, buf);
    S19010C3 *dp, &lv = *(dp=new (buf) S19010C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,128), "sizeof(S19010C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19010C3)");
    check_base_class_offset(lv, (S7719C17_nt*), ABISELECT(96,48), "S19010C3");
    /*is_ambiguous_... S19010C3::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*), 0, "S19010C3");
    check_base_class_offset(lv, (S5266C29*)(S19010C13*), 0, "S19010C3");
    check_base_class_offset(lv, (S5266C26*)(S19010C7*), ABISELECT(208,104), "S19010C3");
    check_base_class_offset(lv, (S5266C29*)(S19010C7*), ABISELECT(208,104), "S19010C3");
    check_base_class_offset(lv, (S7719C4_nt*)(S19010C7*), ABISELECT(217,109), "S19010C3");
    /*is_ambiguous_... S19010C10::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S19010C10*), ABISELECT(217,109), "S19010C3");
    check_base_class_offset(lv, (S19010C7*)(S19010C6*), ABISELECT(208,104), "S19010C3");
    check_base_class_offset(lv, (S19010C7*)(S19010C10*), ABISELECT(208,104), "S19010C3");
    /*is_ambiguous_... S19010C10::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S19010C10*), ABISELECT(224,112), "S19010C3");
    check_base_class_offset(lv, (S5266C26*)(S19010C11*)(S19010C10*), ABISELECT(232,116), "S19010C3");
    check_base_class_offset(lv, (S7719C4_nt*)(S19010C11*)(S19010C10*), ABISELECT(232,116), "S19010C3");
    check_base_class_offset(lv, (S19010C11*)(S19010C10*), ABISELECT(232,116), "S19010C3");
    check_base_class_offset(lv, (S19010C10*)(S19010C6*), ABISELECT(224,112), "S19010C3");
    check_base_class_offset(lv, (S7719C4_nt*)(S19010C13*), ABISELECT(248,124), "S19010C3");
    check_base_class_offset(lv, (S5266C26*)(S19010C13*), ABISELECT(240,120), "S19010C3");
    check_base_class_offset(lv, (S19010C13*)(S19010C12*)(S19010C6*), ABISELECT(240,120), "S19010C3");
    /*is_ambiguous_... S19010C3::S19010C12 */ AMB_check_base_class_offset(lv, (S19010C13*)(S19010C12*), ABISELECT(240,120), "S19010C3");
    check_base_class_offset(lv, (S19010C12*)(S19010C6*), ABISELECT(112,56), "S19010C3");
    check_base_class_offset(lv, (S19010C6*), ABISELECT(112,56), "S19010C3");
    /*is_ambiguous_... S19010C3::S19010C12 */ AMB_check_base_class_offset(lv, (S19010C12*), 0, "S19010C3");
    check_field_offset(lv, s19010c3f0, ABISELECT(100,52), "S19010C3.s19010c3f0");
    test_class_info(&lv, &cd_S19010C3);
    dp->~S19010C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19010C3(Test_S19010C3, "S19010C3", ABISELECT(256,128));

#else // __cplusplus

extern void _ZN8S19010C3C1Ev();
extern void _ZN8S19010C3D2Ev();
Name_Map name_map_S19010C3[] = {
  NSPAIR(_ZN8S19010C3C1Ev),
  NSPAIR(_ZN8S19010C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7719C17_nt;
extern VTBL_ENTRY _ZTI11S7719C17_nt[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S19010C7;
extern VTBL_ENTRY _ZTI8S19010C7[];
extern  VTBL_ENTRY _ZTV8S19010C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19010C7[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S19010C11;
extern VTBL_ENTRY _ZTI9S19010C11[];
extern Class_Descriptor cd_S19010C10;
extern VTBL_ENTRY _ZTI9S19010C10[];
extern  VTBL_ENTRY _ZTV9S19010C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C10[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S19010C13;
extern VTBL_ENTRY _ZTI9S19010C13[];
extern  VTBL_ENTRY _ZTV9S19010C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C13[];
extern Class_Descriptor cd_S19010C12;
extern VTBL_ENTRY _ZTI9S19010C12[];
extern  VTBL_ENTRY _ZTV9S19010C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C12[];
extern Class_Descriptor cd_S19010C6;
extern VTBL_ENTRY _ZTI8S19010C6[];
extern  VTBL_ENTRY _ZTV8S19010C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19010C6[];
extern Class_Descriptor cd_S19010C12;
extern VTBL_ENTRY _ZTI9S19010C12[];
extern  VTBL_ENTRY _ZTV9S19010C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C12[];
static Base_Class bases_S19010C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7719C17_nt,    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
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C26,    ABISELECT(208,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
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5266C29,    ABISELECT(208,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
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7719C4_nt,    ABISELECT(217,109), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19010C7,    ABISELECT(208,104), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S5266C29,    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
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(232,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(232,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19010C11,    ABISELECT(232,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19010C10,    ABISELECT(224,112), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7719C4_nt,    ABISELECT(248,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19010C13,    ABISELECT(240,120), //bcp->offset
    27, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19010C12,    ABISELECT(112,56), //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
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19010C6,    ABISELECT(112,56), //bcp->offset
    10, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19010C12,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S19010C3[];
extern void _ZN8S19010C3D1Ev();
extern void _ZN8S19010C3D0Ev();
extern void ABISELECT(_ZTv0_n64_N8S19010C3D1Ev,_ZTv0_n32_N8S19010C3D1Ev)();
extern void ABISELECT(_ZThn112_N8S19010C3D1Ev,_ZThn56_N8S19010C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19010C3D0Ev,_ZTv0_n32_N8S19010C3D0Ev)();
extern void ABISELECT(_ZThn112_N8S19010C3D0Ev,_ZThn56_N8S19010C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19010C3[] = {
  ABISELECT(224,112),
  ABISELECT(217,109),
  ABISELECT(208,104),
  ABISELECT(112,56),
  0,
  ABISELECT(240,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S19010C3[0]),
  (VTBL_ENTRY)&_ZN8S19010C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19010C3D0Ev,
  ABISELECT(-112,-56),
  ABISELECT(112,56),
  ABISELECT(105,53),
  ABISELECT(96,48),
  ABISELECT(-112,-56),
  ABISELECT(128,64),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S19010C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19010C3D1Ev,_ZTv0_n32_N8S19010C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19010C3D0Ev,_ZTv0_n32_N8S19010C3D0Ev),
  ABISELECT(9,5),
  ABISELECT(-208,-104),
  (VTBL_ENTRY)&(_ZTI8S19010C3[0]),
  ABISELECT(-16,-8),
  ABISELECT(-7,-3),
  ABISELECT(-224,-112),
  (VTBL_ENTRY)&(_ZTI8S19010C3[0]),
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S19010C3[0]),
};
extern VTBL_ENTRY _ZTV8S19010C3[];
static  VTBL_ENTRY _tg__ZTV9S19010C12__A1__8S19010C3[] = {
  0,
  ABISELECT(240,120),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C13__9S19010C12__A1__8S19010C3[] = {
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI9S19010C12[0]),
};
extern void _ZN8S19010C6D1Ev();
extern void _ZN8S19010C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19010C6__8S19010C3[] = {
  ABISELECT(112,56),
  ABISELECT(105,53),
  ABISELECT(96,48),
  ABISELECT(-112,-56),
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19010C6[0]),
  (VTBL_ENTRY)&_ZN8S19010C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19010C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19010C128S19010C6__8S19010C3[] = {
  ABISELECT(-112,-56),
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C13__9S19010C128S19010C6__8S19010C3[] = {
  ABISELECT(-240,-120),
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI9S19010C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19010C7__8S19010C6__8S19010C3[] = {
  ABISELECT(9,5),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S19010C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C10__8S19010C6__8S19010C3[] = {
  ABISELECT(-16,-8),
  ABISELECT(-7,-3),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S19010C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C13__8S19010C6__8S19010C3[] = {
  ABISELECT(-240,-120),
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI8S19010C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19010C7__8S19010C3[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S19010C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C10__8S19010C3[] = {
  ABISELECT(-16,-8),
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19010C7__9S19010C10__8S19010C3[] = {
  ABISELECT(9,5),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19010C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C13__8S19010C3[] = {
  ABISELECT(-240,-120),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C13[0]),
};
static  VTT_ENTRY vtt_S19010C3[] = {
  {&(_ZTV8S19010C3[8]),  8,30},
  {&(_tg__ZTV9S19010C12__A1__8S19010C3[4]),  4,4},
  {&(_tg__ZTV9S19010C13__9S19010C12__A1__8S19010C3[3]),  3,3},
  {&(_ZTV8S19010C3[18]),  18,30},
  {&(_ZTV8S19010C3[23]),  23,30},
  {&(_ZTV8S19010C3[27]),  27,30},
  {&(_ZTV8S19010C3[30]),  30,30},
  {&(_tg__ZTV8S19010C6__8S19010C3[7]),  7,9},
  {&(_tg__ZTV9S19010C128S19010C6__8S19010C3[4]),  4,4},
  {&(_tg__ZTV9S19010C13__9S19010C128S19010C6__8S19010C3[3]),  3,3},
  {&(_tg__ZTV8S19010C7__8S19010C6__8S19010C3[3]),  3,3},
  {&(_tg__ZTV9S19010C10__8S19010C6__8S19010C3[4]),  4,4},
  {&(_tg__ZTV9S19010C13__8S19010C6__8S19010C3[3]),  3,3},
  {&(_tg__ZTV8S19010C7__8S19010C3[3]),  3,3},
  {&(_tg__ZTV9S19010C10__8S19010C3[4]),  4,4},
  {&(_tg__ZTV8S19010C7__9S19010C10__8S19010C3[3]),  3,3},
  {&(_tg__ZTV9S19010C13__8S19010C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19010C3[];
extern  VTBL_ENTRY _ZTV8S19010C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19010C3[];
static VTBL_ENTRY alt_thunk_names74[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19010C3D0Ev,_ZTv0_n32_N8S19010C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19010C3D0Ev,_ZThn56_N8S19010C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19010C3D1Ev,_ZTv0_n32_N8S19010C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19010C3D1Ev,_ZThn56_N8S19010C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19010C3 = {  "S19010C3", // class name
  bases_S19010C3, 17,
  &(vtc_S19010C3[0]), // expected_vtbl_contents
  &(vtt_S19010C3[0]), // expected_vtt_contents
  ABISELECT(256,128), // object size
  NSPAIRA(_ZTI8S19010C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19010C3),30, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19010C3),17, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names74,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19010C2  : S19010C3 {
  virtual void  v1(); // _ZN8S19010C22v1Ev
  ~S19010C2(); // tgen
  S19010C2(); // tgen
};
//SIG(-1 S19010C2) C1{ BC2{ BC3{ m Fi} VBC4{ m} VBC5{ VBC6{ BC7{ m} BC4 VBC8{ m Fc} FC4} VBC9{ VBC8 BC4 BC10{ BC7 BC8} VBC6} BC11{ VBC12{ BC8 BC7 VBC4} FD Fp[8]} vd} BC11 vd Fi} v1}


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

static void Test_S19010C2()
{
  extern Class_Descriptor cd_S19010C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,33)];
    init_test(&cd_S19010C2, buf);
    S19010C2 *dp, &lv = *(dp=new (buf) S19010C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,128), "sizeof(S19010C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19010C2)");
    check_base_class_offset(lv, (S7719C17_nt*)(S19010C3*), ABISELECT(96,48), "S19010C2");
    /*is_ambiguous_... S19010C3::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S19010C3*), 0, "S19010C2");
    check_base_class_offset(lv, (S5266C29*)(S19010C13*), 0, "S19010C2");
    check_base_class_offset(lv, (S5266C26*)(S19010C7*), ABISELECT(208,104), "S19010C2");
    check_base_class_offset(lv, (S5266C29*)(S19010C7*), ABISELECT(208,104), "S19010C2");
    check_base_class_offset(lv, (S7719C4_nt*)(S19010C7*), ABISELECT(217,109), "S19010C2");
    /*is_ambiguous_... S19010C10::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S19010C10*), ABISELECT(217,109), "S19010C2");
    check_base_class_offset(lv, (S19010C7*)(S19010C6*), ABISELECT(208,104), "S19010C2");
    check_base_class_offset(lv, (S19010C7*)(S19010C10*), ABISELECT(208,104), "S19010C2");
    /*is_ambiguous_... S19010C10::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S19010C10*), ABISELECT(224,112), "S19010C2");
    check_base_class_offset(lv, (S5266C26*)(S19010C11*)(S19010C10*), ABISELECT(232,116), "S19010C2");
    check_base_class_offset(lv, (S7719C4_nt*)(S19010C11*)(S19010C10*), ABISELECT(232,116), "S19010C2");
    check_base_class_offset(lv, (S19010C11*)(S19010C10*), ABISELECT(232,116), "S19010C2");
    check_base_class_offset(lv, (S19010C10*)(S19010C6*), ABISELECT(224,112), "S19010C2");
    check_base_class_offset(lv, (S7719C4_nt*)(S19010C13*), ABISELECT(248,124), "S19010C2");
    check_base_class_offset(lv, (S5266C26*)(S19010C13*), ABISELECT(240,120), "S19010C2");
    check_base_class_offset(lv, (S19010C13*)(S19010C12*)(S19010C6*), ABISELECT(240,120), "S19010C2");
    /*is_ambiguous_... S19010C3::S19010C12 */ AMB_check_base_class_offset(lv, (S19010C13*)(S19010C12*)(S19010C3*), ABISELECT(240,120), "S19010C2");
    check_base_class_offset(lv, (S19010C12*)(S19010C6*), ABISELECT(112,56), "S19010C2");
    check_base_class_offset(lv, (S19010C6*)(S19010C3*), ABISELECT(112,56), "S19010C2");
    /*is_ambiguous_... S19010C3::S19010C12 */ AMB_check_base_class_offset(lv, (S19010C12*)(S19010C3*), 0, "S19010C2");
    check_base_class_offset(lv, (S19010C3*), 0, "S19010C2");
    test_class_info(&lv, &cd_S19010C2);
    dp->~S19010C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19010C2(Test_S19010C2, "S19010C2", ABISELECT(256,128));

#else // __cplusplus

extern void _ZN8S19010C2C1Ev();
extern void _ZN8S19010C2D1Ev();
Name_Map name_map_S19010C2[] = {
  NSPAIR(_ZN8S19010C2C1Ev),
  NSPAIR(_ZN8S19010C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7719C17_nt;
extern VTBL_ENTRY _ZTI11S7719C17_nt[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S19010C7;
extern VTBL_ENTRY _ZTI8S19010C7[];
extern  VTBL_ENTRY _ZTV8S19010C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19010C7[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S19010C11;
extern VTBL_ENTRY _ZTI9S19010C11[];
extern Class_Descriptor cd_S19010C10;
extern VTBL_ENTRY _ZTI9S19010C10[];
extern  VTBL_ENTRY _ZTV9S19010C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C10[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S19010C13;
extern VTBL_ENTRY _ZTI9S19010C13[];
extern  VTBL_ENTRY _ZTV9S19010C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C13[];
extern Class_Descriptor cd_S19010C12;
extern VTBL_ENTRY _ZTI9S19010C12[];
extern  VTBL_ENTRY _ZTV9S19010C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C12[];
extern Class_Descriptor cd_S19010C6;
extern VTBL_ENTRY _ZTI8S19010C6[];
extern  VTBL_ENTRY _ZTV8S19010C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19010C6[];
extern Class_Descriptor cd_S19010C12;
extern VTBL_ENTRY _ZTI9S19010C12[];
extern  VTBL_ENTRY _ZTV9S19010C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C12[];
extern Class_Descriptor cd_S19010C3;
extern VTBL_ENTRY _ZTI8S19010C3[];
extern  VTBL_ENTRY _ZTV8S19010C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19010C3[];
static Base_Class bases_S19010C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7719C17_nt,    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
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S5266C26,    ABISELECT(208,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
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5266C29,    ABISELECT(208,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
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7719C4_nt,    ABISELECT(217,109), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19010C7,    ABISELECT(208,104), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S5266C29,    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
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(232,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(232,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19010C11,    ABISELECT(232,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19010C10,    ABISELECT(224,112), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7719C4_nt,    ABISELECT(248,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19010C13,    ABISELECT(240,120), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19010C12,    ABISELECT(112,56), //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
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19010C6,    ABISELECT(112,56), //bcp->offset
    11, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19010C12,    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
    17, //immediately_derived
  0, 0},
  {&cd_S19010C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S19010C2[];
extern void _ZN8S19010C2D1Ev();
extern void _ZN8S19010C2D0Ev();
extern void _ZN8S19010C22v1Ev();
extern void ABISELECT(_ZTv0_n64_N8S19010C2D1Ev,_ZTv0_n32_N8S19010C2D1Ev)();
extern void ABISELECT(_ZThn112_N8S19010C2D1Ev,_ZThn56_N8S19010C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19010C2D0Ev,_ZTv0_n32_N8S19010C2D0Ev)();
extern void ABISELECT(_ZThn112_N8S19010C2D0Ev,_ZThn56_N8S19010C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19010C2[] = {
  ABISELECT(224,112),
  ABISELECT(217,109),
  ABISELECT(208,104),
  ABISELECT(112,56),
  0,
  ABISELECT(240,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S19010C2[0]),
  (VTBL_ENTRY)&_ZN8S19010C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19010C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19010C22v1Ev,
  ABISELECT(-112,-56),
  ABISELECT(112,56),
  ABISELECT(105,53),
  ABISELECT(96,48),
  ABISELECT(-112,-56),
  ABISELECT(128,64),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S19010C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19010C2D1Ev,_ZTv0_n32_N8S19010C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19010C2D0Ev,_ZTv0_n32_N8S19010C2D0Ev),
  ABISELECT(9,5),
  ABISELECT(-208,-104),
  (VTBL_ENTRY)&(_ZTI8S19010C2[0]),
  ABISELECT(-16,-8),
  ABISELECT(-7,-3),
  ABISELECT(-224,-112),
  (VTBL_ENTRY)&(_ZTI8S19010C2[0]),
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S19010C2[0]),
};
extern VTBL_ENTRY _ZTV8S19010C2[];
extern void _ZN8S19010C3D1Ev();
extern void _ZN8S19010C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19010C3__8S19010C2[] = {
  ABISELECT(224,112),
  ABISELECT(217,109),
  ABISELECT(208,104),
  ABISELECT(112,56),
  0,
  ABISELECT(240,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S19010C3[0]),
  (VTBL_ENTRY)&_ZN8S19010C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19010C3D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19010C128S19010C3__A1__8S19010C2[] = {
  0,
  ABISELECT(240,120),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C13__9S19010C128S19010C3__A1__8S19010C2[] = {
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI9S19010C12[0]),
};
extern void ABISELECT(_ZTv0_n64_N8S19010C3D1Ev,_ZTv0_n32_N8S19010C3D1Ev)();
extern void ABISELECT(_ZThn112_N8S19010C3D1Ev,_ZThn56_N8S19010C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19010C3D0Ev,_ZTv0_n32_N8S19010C3D0Ev)();
extern void ABISELECT(_ZThn112_N8S19010C3D0Ev,_ZThn56_N8S19010C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19010C6__8S19010C3__8S19010C2[] = {
  ABISELECT(-112,-56),
  ABISELECT(112,56),
  ABISELECT(105,53),
  ABISELECT(96,48),
  ABISELECT(-112,-56),
  ABISELECT(128,64),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S19010C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19010C3D1Ev,_ZTv0_n32_N8S19010C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19010C3D0Ev,_ZTv0_n32_N8S19010C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19010C7__8S19010C3__8S19010C2[] = {
  ABISELECT(9,5),
  ABISELECT(-208,-104),
  (VTBL_ENTRY)&(_ZTI8S19010C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C10__8S19010C3__8S19010C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-7,-3),
  ABISELECT(-224,-112),
  (VTBL_ENTRY)&(_ZTI8S19010C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C13__8S19010C3__8S19010C2[] = {
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S19010C3[0]),
};
extern void _ZN8S19010C6D1Ev();
extern void _ZN8S19010C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19010C6__8S19010C2[] = {
  ABISELECT(112,56),
  ABISELECT(105,53),
  ABISELECT(96,48),
  ABISELECT(-112,-56),
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19010C6[0]),
  (VTBL_ENTRY)&_ZN8S19010C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19010C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19010C128S19010C6__8S19010C2[] = {
  ABISELECT(-112,-56),
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C13__9S19010C128S19010C6__8S19010C2[] = {
  ABISELECT(-240,-120),
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI9S19010C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19010C7__8S19010C6__8S19010C2[] = {
  ABISELECT(9,5),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S19010C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C10__8S19010C6__8S19010C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-7,-3),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S19010C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C13__8S19010C6__8S19010C2[] = {
  ABISELECT(-240,-120),
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI8S19010C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19010C7__8S19010C2[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S19010C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C10__8S19010C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19010C7__9S19010C10__8S19010C2[] = {
  ABISELECT(9,5),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19010C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C13__8S19010C2[] = {
  ABISELECT(-240,-120),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C13[0]),
};
static  VTT_ENTRY vtt_S19010C2[] = {
  {&(_ZTV8S19010C2[8]),  8,31},
  {&(_tg__ZTV8S19010C3__8S19010C2[8]),  8,10},
  {&(_tg__ZTV9S19010C128S19010C3__A1__8S19010C2[4]),  4,4},
  {&(_tg__ZTV9S19010C13__9S19010C128S19010C3__A1__8S19010C2[3]),  3,3},
  {&(_tg__ZTV8S19010C6__8S19010C3__8S19010C2[8]),  8,10},
  {&(_tg__ZTV8S19010C7__8S19010C3__8S19010C2[3]),  3,3},
  {&(_tg__ZTV9S19010C10__8S19010C3__8S19010C2[4]),  4,4},
  {&(_tg__ZTV9S19010C13__8S19010C3__8S19010C2[3]),  3,3},
  {&(_ZTV8S19010C2[19]),  19,31},
  {&(_ZTV8S19010C2[24]),  24,31},
  {&(_ZTV8S19010C2[28]),  28,31},
  {&(_ZTV8S19010C2[31]),  31,31},
  {&(_tg__ZTV8S19010C6__8S19010C2[7]),  7,9},
  {&(_tg__ZTV9S19010C128S19010C6__8S19010C2[4]),  4,4},
  {&(_tg__ZTV9S19010C13__9S19010C128S19010C6__8S19010C2[3]),  3,3},
  {&(_tg__ZTV8S19010C7__8S19010C6__8S19010C2[3]),  3,3},
  {&(_tg__ZTV9S19010C10__8S19010C6__8S19010C2[4]),  4,4},
  {&(_tg__ZTV9S19010C13__8S19010C6__8S19010C2[3]),  3,3},
  {&(_tg__ZTV8S19010C7__8S19010C2[3]),  3,3},
  {&(_tg__ZTV9S19010C10__8S19010C2[4]),  4,4},
  {&(_tg__ZTV8S19010C7__9S19010C10__8S19010C2[3]),  3,3},
  {&(_tg__ZTV9S19010C13__8S19010C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19010C2[];
extern  VTBL_ENTRY _ZTV8S19010C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19010C2[];
static VTBL_ENTRY alt_thunk_names75[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19010C3D0Ev,_ZTv0_n32_N8S19010C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19010C3D0Ev,_ZThn56_N8S19010C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19010C3D1Ev,_ZTv0_n32_N8S19010C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19010C3D1Ev,_ZThn56_N8S19010C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19010C2D0Ev,_ZTv0_n32_N8S19010C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19010C2D0Ev,_ZThn56_N8S19010C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19010C2D1Ev,_ZTv0_n32_N8S19010C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19010C2D1Ev,_ZThn56_N8S19010C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19010C2 = {  "S19010C2", // class name
  bases_S19010C2, 18,
  &(vtc_S19010C2[0]), // expected_vtbl_contents
  &(vtt_S19010C2[0]), // expected_vtt_contents
  ABISELECT(256,128), // object size
  NSPAIRA(_ZTI8S19010C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19010C2),31, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19010C2),22, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names75,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19010C16  : S19010C11 , S5266C26 , S19010C13 {
  __tsi64 s19010c16f0;
  ~S19010C16(); // tgen
  S19010C16(); // tgen
};
//SIG(-1 S19010C16) C1{ BC2{ BC3{ m} BC4{ m Fc}} BC3 BC5{ BC4 BC3 VBC6{ m}} FL}


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

static void Test_S19010C16()
{
  extern Class_Descriptor cd_S19010C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S19010C16, buf);
    S19010C16 *dp, &lv = *(dp=new (buf) S19010C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S19010C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19010C16)");
    check_base_class_offset(lv, (S5266C26*)(S19010C11*), ABISELECT(9,5), "S19010C16");
    check_base_class_offset(lv, (S7719C4_nt*)(S19010C11*), ABISELECT(9,5), "S19010C16");
    check_base_class_offset(lv, (S19010C11*), ABISELECT(9,5), "S19010C16");
    /*is_ambiguous_... S19010C16::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*), ABISELECT(10,6), "S19010C16");
    check_base_class_offset(lv, (S7719C4_nt*)(S19010C13*), ABISELECT(8,4), "S19010C16");
    check_base_class_offset(lv, (S5266C26*)(S19010C13*), 0, "S19010C16");
    check_base_class_offset(lv, (S5266C29*)(S19010C13*), 0, "S19010C16");
    check_base_class_offset(lv, (S19010C13*), 0, "S19010C16");
    check_field_offset(lv, s19010c16f0, ABISELECT(16,8), "S19010C16.s19010c16f0");
    test_class_info(&lv, &cd_S19010C16);
    dp->~S19010C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19010C16(Test_S19010C16, "S19010C16", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN9S19010C16C1Ev();
extern void _ZN9S19010C16D1Ev();
Name_Map name_map_S19010C16[] = {
  NSPAIR(_ZN9S19010C16C1Ev),
  NSPAIR(_ZN9S19010C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S19010C11;
extern VTBL_ENTRY _ZTI9S19010C11[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19010C13;
extern VTBL_ENTRY _ZTI9S19010C13[];
extern  VTBL_ENTRY _ZTV9S19010C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C13[];
static Base_Class bases_S19010C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C26,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19010C11,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C26,    ABISELECT(10,6), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7719C4_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
    7, //immediately_derived
  0, 0},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19010C13,    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 _ZTI9S19010C16[];
static  VTBL_ENTRY vtc_S19010C16[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C16[0]),
};
extern VTBL_ENTRY _ZTV9S19010C16[];
static  VTBL_ENTRY _tg__ZTV9S19010C13__9S19010C16[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C13[0]),
};
static  VTT_ENTRY vtt_S19010C16[] = {
  {&(_ZTV9S19010C16[3]),  3,3},
  {&(_tg__ZTV9S19010C13__9S19010C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19010C16[];
extern  VTBL_ENTRY _ZTV9S19010C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C16[];
Class_Descriptor cd_S19010C16 = {  "S19010C16", // class name
  bases_S19010C16, 8,
  &(vtc_S19010C16[0]), // expected_vtbl_contents
  &(vtt_S19010C16[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI9S19010C16),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19010C16),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19010C16),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19010C15  : virtual S5266C29 , virtual S19010C13 , virtual S19010C16 , S19010C10 , virtual S5266C26 {
  __tsi64 s19010c15f0[2];
  ~S19010C15(); // tgen
  S19010C15(); // tgen
};
//SIG(-1 S19010C15) C1{ VBC2{ m} VBC3{ BC4{ m Fc} BC5{ m} VBC2} VBC6{ BC7{ BC5 BC4} BC5 BC3 FL} BC8{ VBC4 BC2 BC7 VBC9{ BC5 BC2 VBC4 FC2}} VBC5 FL[2]}


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

static void Test_S19010C15()
{
  extern Class_Descriptor cd_S19010C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S19010C15, buf);
    S19010C15 *dp, &lv = *(dp=new (buf) S19010C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S19010C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19010C15)");
    /*is_ambiguous_... S19010C15::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*), ABISELECT(32,24), "S19010C15");
    /*is_ambiguous_... S19010C15::S19010C13 */ AMB_check_base_class_offset(lv, (S5266C29*)(S19010C13*), ABISELECT(32,24), "S19010C15");
    check_base_class_offset(lv, (S5266C29*)(S19010C13*)(S19010C16*), ABISELECT(32,24), "S19010C15");
    /*is_ambiguous_... S19010C15::S19010C13 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S19010C13*), ABISELECT(40,28), "S19010C15");
    /*is_ambiguous_... S19010C15::S19010C13 */ AMB_check_base_class_offset(lv, (S5266C26*)(S19010C13*), ABISELECT(32,24), "S19010C15");
    /*is_ambiguous_... S19010C15::S19010C13 */ AMB_check_base_class_offset(lv, (S19010C13*), ABISELECT(32,24), "S19010C15");
    check_base_class_offset(lv, (S5266C26*)(S19010C11*)(S19010C16*), ABISELECT(57,37), "S19010C15");
    check_base_class_offset(lv, (S7719C4_nt*)(S19010C11*)(S19010C16*), ABISELECT(57,37), "S19010C15");
    check_base_class_offset(lv, (S19010C11*)(S19010C16*), ABISELECT(57,37), "S19010C15");
    /*is_ambiguous_... S19010C16::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S19010C16*), ABISELECT(58,38), "S19010C15");
    check_base_class_offset(lv, (S7719C4_nt*)(S19010C13*)(S19010C16*), ABISELECT(56,36), "S19010C15");
    check_base_class_offset(lv, (S5266C26*)(S19010C13*)(S19010C16*), ABISELECT(48,32), "S19010C15");
    check_base_class_offset(lv, (S19010C13*)(S19010C16*), ABISELECT(48,32), "S19010C15");
    check_base_class_offset(lv, (S19010C16*), ABISELECT(48,32), "S19010C15");
    /*is_ambiguous_... S19010C10::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S19010C10*), ABISELECT(72,48), "S19010C15");
    check_base_class_offset(lv, (S7719C4_nt*)(S19010C7*), ABISELECT(72,48), "S19010C15");
    /*is_ambiguous_... S19010C10::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S19010C10*), 0, "S19010C15");
    check_base_class_offset(lv, (S5266C26*)(S19010C11*)(S19010C10*), ABISELECT(8,4), "S19010C15");
    check_base_class_offset(lv, (S7719C4_nt*)(S19010C11*)(S19010C10*), ABISELECT(8,4), "S19010C15");
    check_base_class_offset(lv, (S19010C11*)(S19010C10*), ABISELECT(8,4), "S19010C15");
    check_base_class_offset(lv, (S5266C26*)(S19010C7*), ABISELECT(80,52), "S19010C15");
    check_base_class_offset(lv, (S5266C29*)(S19010C7*), ABISELECT(80,52), "S19010C15");
    check_base_class_offset(lv, (S19010C7*)(S19010C10*), ABISELECT(80,52), "S19010C15");
    check_base_class_offset(lv, (S19010C10*), 0, "S19010C15");
    /*is_ambiguous_... S19010C15::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*), 0, "S19010C15");
    check_field_offset(lv, s19010c15f0, ABISELECT(16,8), "S19010C15.s19010c15f0");
    test_class_info(&lv, &cd_S19010C15);
    dp->~S19010C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19010C15(Test_S19010C15, "S19010C15", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN9S19010C15C1Ev();
extern void _ZN9S19010C15D1Ev();
Name_Map name_map_S19010C15[] = {
  NSPAIR(_ZN9S19010C15C1Ev),
  NSPAIR(_ZN9S19010C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S19010C13;
extern VTBL_ENTRY _ZTI9S19010C13[];
extern  VTBL_ENTRY _ZTV9S19010C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C13[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S19010C11;
extern VTBL_ENTRY _ZTI9S19010C11[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S19010C13;
extern VTBL_ENTRY _ZTI9S19010C13[];
extern  VTBL_ENTRY _ZTV9S19010C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C13[];
extern Class_Descriptor cd_S19010C16;
extern VTBL_ENTRY _ZTI9S19010C16[];
extern  VTBL_ENTRY _ZTV9S19010C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C16[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S19010C11;
extern VTBL_ENTRY _ZTI9S19010C11[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19010C7;
extern VTBL_ENTRY _ZTI8S19010C7[];
extern  VTBL_ENTRY _ZTV8S19010C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19010C7[];
extern Class_Descriptor cd_S19010C10;
extern VTBL_ENTRY _ZTI9S19010C10[];
extern  VTBL_ENTRY _ZTV9S19010C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C10[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
static Base_Class bases_S19010C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    ABISELECT(32,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, 1},
  {&cd_S7719C4_nt,    ABISELECT(40,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
    3, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(32,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
    3, //immediately_derived
  0, 0},
  {&cd_S19010C13,    ABISELECT(32,24), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5266C26,    ABISELECT(57,37), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(57,37), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19010C11,    ABISELECT(57,37), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    ABISELECT(58,38), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(56,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
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19010C13,    ABISELECT(48,32), //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
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19010C16,    ABISELECT(48,32), //bcp->offset
    11, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7719C4_nt,    ABISELECT(72,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
    19, //immediately_derived
  0, 1},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    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
    16, //immediately_derived
  0, 0},
  {&cd_S7719C4_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
    16, //immediately_derived
  0, 0},
  {&cd_S19010C11,    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
    20, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(80,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
    19, //immediately_derived
  0, 0},
  {&cd_S5266C29,    ABISELECT(80,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
    19, //immediately_derived
  0, 0},
  {&cd_S19010C7,    ABISELECT(80,52), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S19010C10,    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_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S19010C15[];
static  VTBL_ENTRY vtc_S19010C15[] = {
  0,
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(32,24),
  ABISELECT(80,52),
  ABISELECT(72,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C15[0]),
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI9S19010C15[0]),
  ABISELECT(-16,-8),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI9S19010C15[0]),
  ABISELECT(-8,-4),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI9S19010C15[0]),
};
extern VTBL_ENTRY _ZTV9S19010C15[];
static  VTBL_ENTRY _tg__ZTV9S19010C10__9S19010C15[] = {
  ABISELECT(80,52),
  ABISELECT(72,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19010C7__9S19010C10__9S19010C15[] = {
  ABISELECT(-8,-4),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI9S19010C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C13__9S19010C15[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C13[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C16__9S19010C15[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C16[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C139S19010C16__A1__9S19010C15[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19010C7__9S19010C15[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19010C7[0]),
};
static  VTT_ENTRY vtt_S19010C15[] = {
  {&(_ZTV9S19010C15[8]),  8,17},
  {&(_tg__ZTV9S19010C10__9S19010C15[4]),  4,4},
  {&(_tg__ZTV8S19010C7__9S19010C10__9S19010C15[3]),  3,3},
  {&(_ZTV9S19010C15[11]),  11,17},
  {&(_ZTV9S19010C15[14]),  14,17},
  {&(_ZTV9S19010C15[17]),  17,17},
  {&(_tg__ZTV9S19010C13__9S19010C15[3]),  3,3},
  {&(_tg__ZTV9S19010C16__9S19010C15[3]),  3,3},
  {&(_tg__ZTV9S19010C139S19010C16__A1__9S19010C15[3]),  3,3},
  {&(_tg__ZTV8S19010C7__9S19010C15[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19010C15[];
extern  VTBL_ENTRY _ZTV9S19010C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C15[];
Class_Descriptor cd_S19010C15 = {  "S19010C15", // class name
  bases_S19010C15, 22,
  &(vtc_S19010C15[0]), // expected_vtbl_contents
  &(vtt_S19010C15[0]), // expected_vtt_contents
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI9S19010C15),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19010C15),17, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19010C15),10, //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  S19010C14  : virtual S19010C10 , virtual S19010C13 , S19010C7 , virtual S19010C15 {
  ~S19010C14(); // tgen
  S19010C14(); // tgen
};
//SIG(-1 S19010C14) C1{ VBC2{ VBC3{ m Fc} BC4{ m} BC5{ BC6{ m} BC3} VBC7{ BC6 BC4 VBC3 FC4}} VBC8{ BC3 BC6 VBC4} BC7 VBC9{ VBC4 VBC8 VBC10{ BC5 BC6 BC8 FL} BC2 VBC6 FL[2]}}


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

static void Test_S19010C14()
{
  extern Class_Descriptor cd_S19010C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,20)];
    init_test(&cd_S19010C14, buf);
    S19010C14 *dp, &lv = *(dp=new (buf) S19010C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,76), "sizeof(S19010C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19010C14)");
    /*is_ambiguous_... S19010C14::S19010C10 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S19010C10*), ABISELECT(25,13), "S19010C14");
    /*is_ambiguous_... S19010C14::S19010C7 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S19010C7*), ABISELECT(25,13), "S19010C14");
    /*is_ambiguous_... S19010C14::S19010C7 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S19010C7*), ABISELECT(25,13), "S19010C14");
    /*is_ambiguous_... S19010C10::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S19010C10*)(S19010C15*), ABISELECT(25,13), "S19010C14");
    /*is_ambiguous_... S19010C14::S19010C10 */ AMB_check_base_class_offset(lv, (S5266C29*)(S19010C10*), ABISELECT(16,8), "S19010C14");
    /*is_ambiguous_... S19010C14::S19010C10 */ AMB_check_base_class_offset(lv, (S5266C26*)(S19010C11*)(S19010C10*), ABISELECT(24,12), "S19010C14");
    /*is_ambiguous_... S19010C14::S19010C10 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S19010C11*)(S19010C10*), ABISELECT(24,12), "S19010C14");
    /*is_ambiguous_... S19010C14::S19010C10 */ AMB_check_base_class_offset(lv, (S19010C11*)(S19010C10*), ABISELECT(24,12), "S19010C14");
    /*is_ambiguous_... S19010C14::S19010C7 */ AMB_check_base_class_offset(lv, (S5266C26*)(S19010C7*), ABISELECT(32,16), "S19010C14");
    /*is_ambiguous_... S19010C14::S19010C7 */ AMB_check_base_class_offset(lv, (S5266C29*)(S19010C7*), ABISELECT(32,16), "S19010C14");
    /*is_ambiguous_... S19010C14::S19010C10 */ AMB_check_base_class_offset(lv, (S19010C7*)(S19010C10*), ABISELECT(32,16), "S19010C14");
    check_base_class_offset(lv, (S19010C7*)(S19010C10*)(S19010C15*), ABISELECT(32,16), "S19010C14");
    /*is_ambiguous_... S19010C14::S19010C10 */ AMB_check_base_class_offset(lv, (S19010C10*), ABISELECT(16,8), "S19010C14");
    /*is_ambiguous_... S19010C14::S19010C13 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S19010C13*), ABISELECT(56,28), "S19010C14");
    /*is_ambiguous_... S19010C14::S19010C13 */ AMB_check_base_class_offset(lv, (S5266C26*)(S19010C13*), ABISELECT(48,24), "S19010C14");
    /*is_ambiguous_... S19010C14::S19010C13 */ AMB_check_base_class_offset(lv, (S5266C29*)(S19010C13*), ABISELECT(57,29), "S19010C14");
    /*is_ambiguous_... S19010C15::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S19010C15*), ABISELECT(57,29), "S19010C14");
    check_base_class_offset(lv, (S5266C29*)(S19010C13*)(S19010C16*), ABISELECT(57,29), "S19010C14");
    /*is_ambiguous_... S19010C14::S19010C13 */ AMB_check_base_class_offset(lv, (S19010C13*), ABISELECT(48,24), "S19010C14");
    /*is_ambiguous_... S19010C15::S19010C13 */ AMB_check_base_class_offset(lv, (S19010C13*)(S19010C15*), ABISELECT(48,24), "S19010C14");
    /*is_ambiguous_... S19010C14::S19010C7 */ AMB_check_base_class_offset(lv, (S5266C26*)(S19010C7*), 0, "S19010C14");
    /*is_ambiguous_... S19010C14::S19010C7 */ AMB_check_base_class_offset(lv, (S5266C29*)(S19010C7*), 0, "S19010C14");
    /*is_ambiguous_... S19010C14::S19010C7 */ AMB_check_base_class_offset(lv, (S19010C7*), 0, "S19010C14");
    check_base_class_offset(lv, (S5266C26*)(S19010C11*)(S19010C16*), ABISELECT(105,61), "S19010C14");
    check_base_class_offset(lv, (S7719C4_nt*)(S19010C11*)(S19010C16*), ABISELECT(105,61), "S19010C14");
    check_base_class_offset(lv, (S19010C11*)(S19010C16*), ABISELECT(105,61), "S19010C14");
    /*is_ambiguous_... S19010C16::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S19010C16*), ABISELECT(106,62), "S19010C14");
    check_base_class_offset(lv, (S7719C4_nt*)(S19010C13*)(S19010C16*), ABISELECT(104,60), "S19010C14");
    check_base_class_offset(lv, (S5266C26*)(S19010C13*)(S19010C16*), ABISELECT(96,56), "S19010C14");
    check_base_class_offset(lv, (S19010C13*)(S19010C16*), ABISELECT(96,56), "S19010C14");
    check_base_class_offset(lv, (S19010C16*)(S19010C15*), ABISELECT(96,56), "S19010C14");
    /*is_ambiguous_... S19010C10::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S19010C10*)(S19010C15*), ABISELECT(64,32), "S19010C14");
    check_base_class_offset(lv, (S5266C26*)(S19010C11*)(S19010C10*)(S19010C15*), ABISELECT(72,36), "S19010C14");
    check_base_class_offset(lv, (S7719C4_nt*)(S19010C11*)(S19010C10*)(S19010C15*), ABISELECT(72,36), "S19010C14");
    check_base_class_offset(lv, (S19010C11*)(S19010C10*)(S19010C15*), ABISELECT(72,36), "S19010C14");
    check_base_class_offset(lv, (S19010C10*)(S19010C15*), ABISELECT(64,32), "S19010C14");
    /*is_ambiguous_... S19010C15::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S19010C15*), ABISELECT(120,72), "S19010C14");
    check_base_class_offset(lv, (S19010C15*), ABISELECT(64,32), "S19010C14");
    test_class_info(&lv, &cd_S19010C14);
    dp->~S19010C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19010C14(Test_S19010C14, "S19010C14", ABISELECT(128,76));

#else // __cplusplus

extern void _ZN9S19010C14C1Ev();
extern void _ZN9S19010C14D1Ev();
Name_Map name_map_S19010C14[] = {
  NSPAIR(_ZN9S19010C14C1Ev),
  NSPAIR(_ZN9S19010C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S19010C11;
extern VTBL_ENTRY _ZTI9S19010C11[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19010C7;
extern VTBL_ENTRY _ZTI8S19010C7[];
extern  VTBL_ENTRY _ZTV8S19010C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19010C7[];
extern Class_Descriptor cd_S19010C10;
extern VTBL_ENTRY _ZTI9S19010C10[];
extern  VTBL_ENTRY _ZTV9S19010C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C10[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19010C13;
extern VTBL_ENTRY _ZTI9S19010C13[];
extern  VTBL_ENTRY _ZTV9S19010C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C13[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19010C7;
extern VTBL_ENTRY _ZTI8S19010C7[];
extern  VTBL_ENTRY _ZTV8S19010C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19010C7[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S19010C11;
extern VTBL_ENTRY _ZTI9S19010C11[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S19010C13;
extern VTBL_ENTRY _ZTI9S19010C13[];
extern  VTBL_ENTRY _ZTV9S19010C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C13[];
extern Class_Descriptor cd_S19010C16;
extern VTBL_ENTRY _ZTI9S19010C16[];
extern  VTBL_ENTRY _ZTV9S19010C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C16[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S19010C11;
extern VTBL_ENTRY _ZTI9S19010C11[];
extern Class_Descriptor cd_S19010C10;
extern VTBL_ENTRY _ZTI9S19010C10[];
extern  VTBL_ENTRY _ZTV9S19010C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C10[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S19010C15;
extern VTBL_ENTRY _ZTI9S19010C15[];
extern  VTBL_ENTRY _ZTV9S19010C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C15[];
static Base_Class bases_S19010C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7719C4_nt,    ABISELECT(25,13), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S5266C29,    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
    8, //immediately_derived
  0, 0},
  {&cd_S5266C26,    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
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7719C4_nt,    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
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19010C11,    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
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S5266C26,    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
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S5266C29,    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
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19010C7,    ABISELECT(32,16), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19010C10,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //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_S7719C4_nt,    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
    12, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(48,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
    12, //immediately_derived
  0, 0},
  {&cd_S5266C29,    ABISELECT(57,29), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19010C13,    ABISELECT(48,24), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19010C7,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5266C26,    ABISELECT(105,61), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(105,61), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19010C11,    ABISELECT(105,61), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    ABISELECT(106,62), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(104,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
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(96,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
    22, //immediately_derived
  0, 0},
  {&cd_S19010C13,    ABISELECT(96,56), //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
    4, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19010C16,    ABISELECT(96,56), //bcp->offset
    28, //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
    5, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S5266C29,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    ABISELECT(72,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
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7719C4_nt,    ABISELECT(72,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
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19010C11,    ABISELECT(72,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
    -1, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19010C10,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(120,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
    -1, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S19010C15,    ABISELECT(64,32), //bcp->offset
    20, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //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 _ZTI9S19010C14[];
static  VTBL_ENTRY vtc_S19010C14[] = {
  ABISELECT(120,72),
  ABISELECT(96,56),
  ABISELECT(64,32),
  ABISELECT(57,29),
  ABISELECT(48,24),
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C14[0]),
  ABISELECT(16,8),
  ABISELECT(9,5),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19010C14[0]),
  ABISELECT(-7,-3),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19010C14[0]),
  ABISELECT(9,5),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19010C14[0]),
  ABISELECT(56,40),
  ABISELECT(32,24),
  ABISELECT(-16,-8),
  ABISELECT(-7,-3),
  ABISELECT(-32,-16),
  ABISELECT(-39,-19),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S19010C14[0]),
  ABISELECT(-39,-27),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S19010C14[0]),
};
extern VTBL_ENTRY _ZTV9S19010C14[];
static  VTBL_ENTRY _tg__ZTV8S19010C7__A__9S19010C14[] = {
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI8S19010C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C10__9S19010C14[] = {
  ABISELECT(16,8),
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19010C7__9S19010C10__9S19010C14[] = {
  ABISELECT(-7,-3),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19010C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19010C7__9S19010C14[] = {
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI8S19010C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C13__9S19010C14[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C13[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C15__9S19010C14[] = {
  ABISELECT(56,40),
  ABISELECT(32,24),
  ABISELECT(-16,-8),
  ABISELECT(-7,-3),
  ABISELECT(-32,-16),
  ABISELECT(-39,-19),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C109S19010C15__A1__9S19010C14[] = {
  ABISELECT(-32,-16),
  ABISELECT(-39,-19),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19010C7__9S19010C109S19010C15__A1__9S19010C14[] = {
  ABISELECT(-7,-3),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI9S19010C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C13__9S19010C15__9S19010C14[] = {
  ABISELECT(9,5),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19010C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C16__9S19010C15__9S19010C14[] = {
  ABISELECT(-39,-27),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI9S19010C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19010C7__9S19010C15__9S19010C14[] = {
  ABISELECT(-7,-3),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI9S19010C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C16__9S19010C14[] = {
  ABISELECT(-39,-27),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C16[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C139S19010C16__A1__9S19010C14[] = {
  ABISELECT(-39,-27),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C13[0]),
};
static  VTT_ENTRY vtt_S19010C14[] = {
  {&(_ZTV9S19010C14[10]),  10,31},
  {&(_tg__ZTV8S19010C7__A__9S19010C14[3]),  3,3},
  {&(_ZTV9S19010C14[14]),  14,31},
  {&(_ZTV9S19010C14[17]),  17,31},
  {&(_ZTV9S19010C14[20]),  20,31},
  {&(_ZTV9S19010C14[28]),  28,31},
  {&(_ZTV9S19010C14[31]),  31,31},
  {&(_tg__ZTV9S19010C10__9S19010C14[4]),  4,4},
  {&(_tg__ZTV8S19010C7__9S19010C10__9S19010C14[3]),  3,3},
  {&(_tg__ZTV8S19010C7__9S19010C14[3]),  3,3},
  {&(_tg__ZTV9S19010C13__9S19010C14[3]),  3,3},
  {&(_tg__ZTV9S19010C15__9S19010C14[8]),  8,8},
  {&(_tg__ZTV9S19010C109S19010C15__A1__9S19010C14[4]),  4,4},
  {&(_tg__ZTV8S19010C7__9S19010C109S19010C15__A1__9S19010C14[3]),  3,3},
  {&(_tg__ZTV9S19010C13__9S19010C15__9S19010C14[3]),  3,3},
  {&(_tg__ZTV9S19010C16__9S19010C15__9S19010C14[3]),  3,3},
  {&(_tg__ZTV8S19010C7__9S19010C15__9S19010C14[3]),  3,3},
  {&(_tg__ZTV9S19010C16__9S19010C14[3]),  3,3},
  {&(_tg__ZTV9S19010C139S19010C16__A1__9S19010C14[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19010C14[];
extern  VTBL_ENTRY _ZTV9S19010C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C14[];
Class_Descriptor cd_S19010C14 = {  "S19010C14", // class name
  bases_S19010C14, 31,
  &(vtc_S19010C14[0]), // expected_vtbl_contents
  &(vtt_S19010C14[0]), // expected_vtt_contents
  ABISELECT(128,76), // object size
  NSPAIRA(_ZTI9S19010C14),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19010C14),31, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19010C14),19, //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

union  S19010C18_nt  {
  void  mf19010c18(); // _ZN12S19010C18_nt10mf19010c18Ev
};
//SIG(1 S19010C18_nt) U1{ m}

#endif // __cplusplus
#ifdef __cplusplus

struct  S19010C17  : virtual S5266C26 , S19010C13 {
  ::S19010C18_nt s19010c17f0;
  long s19010c17f1[9];
  ~S19010C17(); // tgen
  S19010C17(); // tgen
};
//SIG(-1 S19010C17) C1{ VBC2{ m} BC3{ BC4{ m Fc} BC2 VBC5{ m}} FU6{ m} Fl[9]}


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

static void Test_S19010C17()
{
  extern Class_Descriptor cd_S19010C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[13];
    init_test(&cd_S19010C17, buf);
    S19010C17 *dp, &lv = *(dp=new (buf) S19010C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S19010C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19010C17)");
    /*is_ambiguous_... S19010C17::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*), ABISELECT(88,44), "S19010C17");
    check_base_class_offset(lv, (S7719C4_nt*)(S19010C13*), ABISELECT(8,4), "S19010C17");
    check_base_class_offset(lv, (S5266C26*)(S19010C13*), 0, "S19010C17");
    check_base_class_offset(lv, (S5266C29*)(S19010C13*), 0, "S19010C17");
    check_base_class_offset(lv, (S19010C13*), 0, "S19010C17");
    check_field_offset(lv, s19010c17f0, ABISELECT(9,5), "S19010C17.s19010c17f0");
    check_field_offset(lv, s19010c17f1, ABISELECT(16,8), "S19010C17.s19010c17f1");
    test_class_info(&lv, &cd_S19010C17);
    dp->~S19010C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19010C17(Test_S19010C17, "S19010C17", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN9S19010C17C1Ev();
extern void _ZN9S19010C17D1Ev();
Name_Map name_map_S19010C17[] = {
  NSPAIR(_ZN9S19010C17C1Ev),
  NSPAIR(_ZN9S19010C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19010C13;
extern VTBL_ENTRY _ZTI9S19010C13[];
extern  VTBL_ENTRY _ZTV9S19010C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C13[];
static Base_Class bases_S19010C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C26,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S7719C4_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
    4, //immediately_derived
  0, 0},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19010C13,    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 _ZTI9S19010C17[];
static  VTBL_ENTRY vtc_S19010C17[] = {
  ABISELECT(88,44),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C17[0]),
};
extern VTBL_ENTRY _ZTV9S19010C17[];
static  VTBL_ENTRY _tg__ZTV9S19010C13__9S19010C17[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C13[0]),
};
static  VTT_ENTRY vtt_S19010C17[] = {
  {&(_ZTV9S19010C17[4]),  4,4},
  {&(_tg__ZTV9S19010C13__9S19010C17[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19010C17[];
extern  VTBL_ENTRY _ZTV9S19010C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C17[];
Class_Descriptor cd_S19010C17 = {  "S19010C17", // class name
  bases_S19010C17, 5,
  &(vtc_S19010C17[0]), // expected_vtbl_contents
  &(vtt_S19010C17[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI9S19010C17),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19010C17),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19010C17),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19010C1  : virtual S19010C2 , virtual S19010C14 , S19010C11 , S19010C17 {
  virtual  ~S19010C1(); // _ZN8S19010C1D2Ev
  S19010C1(); // tgen
};
//SIG(1 S19010C1) C1{ VBC2{ BC3{ BC4{ m Fi} VBC5{ m} VBC6{ VBC7{ BC8{ m} BC5 VBC9{ m Fc} FC5} VBC10{ VBC9 BC5 BC11{ BC8 BC9} VBC7} BC12{ VBC13{ BC9 BC8 VBC5} FD Fp[8]} vd} BC12 vd Fi} v1} VBC14{ VBC10 VBC13 BC7 VBC15{ VBC5 VBC13 VBC16{ BC11 BC8 BC13 FL} BC10 VBC8 FL[2]}} BC11 BC17{ VBC8 BC13 FU18{ m} Fl[9]} vd}


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

static void Test_S19010C1()
{
  extern Class_Descriptor cd_S19010C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,58)];
    init_test(&cd_S19010C1, buf);
    S19010C1 *dp, &lv = *(dp=new (buf) S19010C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,228), "sizeof(S19010C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19010C1)");
    check_base_class_offset(lv, (S7719C17_nt*)(S19010C3*)(S19010C2*), ABISELECT(192,96), "S19010C1");
    /*is_ambiguous_... S19010C3::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S19010C3*)(S19010C2*), 0, "S19010C1");
    /*is_ambiguous_... S19010C1::S19010C13 */ AMB_check_base_class_offset(lv, (S5266C29*)(S19010C13*), 0, "S19010C1");
    /*is_ambiguous_... S19010C15::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S19010C15*), 0, "S19010C1");
    check_base_class_offset(lv, (S5266C29*)(S19010C13*)(S19010C16*), 0, "S19010C1");
    check_base_class_offset(lv, (S5266C29*)(S19010C13*)(S19010C17*), 0, "S19010C1");
    /*is_ambiguous_... S19010C1::S19010C7 */ AMB_check_base_class_offset(lv, (S5266C26*)(S19010C7*), ABISELECT(304,152), "S19010C1");
    /*is_ambiguous_... S19010C1::S19010C7 */ AMB_check_base_class_offset(lv, (S5266C29*)(S19010C7*), ABISELECT(304,152), "S19010C1");
    /*is_ambiguous_... S19010C1::S19010C7 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S19010C7*), ABISELECT(313,157), "S19010C1");
    /*is_ambiguous_... S19010C1::S19010C10 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S19010C10*), ABISELECT(313,157), "S19010C1");
    /*is_ambiguous_... S19010C14::S19010C7 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S19010C7*)(S19010C14*), ABISELECT(313,157), "S19010C1");
    /*is_ambiguous_... S19010C10::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S19010C10*)(S19010C15*), ABISELECT(313,157), "S19010C1");
    check_base_class_offset(lv, (S19010C7*)(S19010C6*), ABISELECT(304,152), "S19010C1");
    /*is_ambiguous_... S19010C1::S19010C10 */ AMB_check_base_class_offset(lv, (S19010C7*)(S19010C10*), ABISELECT(304,152), "S19010C1");
    check_base_class_offset(lv, (S19010C7*)(S19010C10*)(S19010C15*), ABISELECT(304,152), "S19010C1");
    /*is_ambiguous_... S19010C1::S19010C10 */ AMB_check_base_class_offset(lv, (S5266C29*)(S19010C10*), ABISELECT(320,160), "S19010C1");
    /*is_ambiguous_... S19010C1::S19010C10 */ AMB_check_base_class_offset(lv, (S5266C26*)(S19010C11*)(S19010C10*), ABISELECT(328,164), "S19010C1");
    /*is_ambiguous_... S19010C1::S19010C10 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S19010C11*)(S19010C10*), ABISELECT(328,164), "S19010C1");
    /*is_ambiguous_... S19010C1::S19010C10 */ AMB_check_base_class_offset(lv, (S19010C11*)(S19010C10*), ABISELECT(328,164), "S19010C1");
    check_base_class_offset(lv, (S19010C10*)(S19010C6*), ABISELECT(320,160), "S19010C1");
    /*is_ambiguous_... S19010C14::S19010C10 */ AMB_check_base_class_offset(lv, (S19010C10*)(S19010C14*), ABISELECT(320,160), "S19010C1");
    /*is_ambiguous_... S19010C1::S19010C13 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S19010C13*), ABISELECT(344,172), "S19010C1");
    /*is_ambiguous_... S19010C1::S19010C13 */ AMB_check_base_class_offset(lv, (S5266C26*)(S19010C13*), ABISELECT(336,168), "S19010C1");
    check_base_class_offset(lv, (S19010C13*)(S19010C12*)(S19010C6*), ABISELECT(336,168), "S19010C1");
    /*is_ambiguous_... S19010C3::S19010C12 */ AMB_check_base_class_offset(lv, (S19010C13*)(S19010C12*)(S19010C3*)(S19010C2*), ABISELECT(336,168), "S19010C1");
    /*is_ambiguous_... S19010C14::S19010C13 */ AMB_check_base_class_offset(lv, (S19010C13*)(S19010C14*), ABISELECT(336,168), "S19010C1");
    /*is_ambiguous_... S19010C15::S19010C13 */ AMB_check_base_class_offset(lv, (S19010C13*)(S19010C15*), ABISELECT(336,168), "S19010C1");
    check_base_class_offset(lv, (S19010C12*)(S19010C6*), ABISELECT(208,104), "S19010C1");
    check_base_class_offset(lv, (S19010C6*)(S19010C3*)(S19010C2*), ABISELECT(208,104), "S19010C1");
    /*is_ambiguous_... S19010C3::S19010C12 */ AMB_check_base_class_offset(lv, (S19010C12*)(S19010C3*)(S19010C2*), ABISELECT(96,48), "S19010C1");
    check_base_class_offset(lv, (S19010C3*)(S19010C2*), ABISELECT(96,48), "S19010C1");
    check_base_class_offset(lv, (S19010C2*), ABISELECT(96,48), "S19010C1");
    /*is_ambiguous_... S19010C14::S19010C7 */ AMB_check_base_class_offset(lv, (S5266C26*)(S19010C7*)(S19010C14*), ABISELECT(352,176), "S19010C1");
    /*is_ambiguous_... S19010C14::S19010C7 */ AMB_check_base_class_offset(lv, (S5266C29*)(S19010C7*)(S19010C14*), ABISELECT(352,176), "S19010C1");
    /*is_ambiguous_... S19010C14::S19010C7 */ AMB_check_base_class_offset(lv, (S19010C7*)(S19010C14*), ABISELECT(352,176), "S19010C1");
    check_base_class_offset(lv, (S5266C26*)(S19010C11*)(S19010C16*), ABISELECT(409,213), "S19010C1");
    check_base_class_offset(lv, (S7719C4_nt*)(S19010C11*)(S19010C16*), ABISELECT(409,213), "S19010C1");
    check_base_class_offset(lv, (S19010C11*)(S19010C16*), ABISELECT(409,213), "S19010C1");
    /*is_ambiguous_... S19010C16::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S19010C16*), ABISELECT(410,214), "S19010C1");
    check_base_class_offset(lv, (S7719C4_nt*)(S19010C13*)(S19010C16*), ABISELECT(408,212), "S19010C1");
    check_base_class_offset(lv, (S5266C26*)(S19010C13*)(S19010C16*), ABISELECT(400,208), "S19010C1");
    check_base_class_offset(lv, (S19010C13*)(S19010C16*), ABISELECT(400,208), "S19010C1");
    check_base_class_offset(lv, (S19010C16*)(S19010C15*), ABISELECT(400,208), "S19010C1");
    /*is_ambiguous_... S19010C10::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S19010C10*)(S19010C15*), ABISELECT(368,184), "S19010C1");
    check_base_class_offset(lv, (S5266C26*)(S19010C11*)(S19010C10*)(S19010C15*), ABISELECT(376,188), "S19010C1");
    check_base_class_offset(lv, (S7719C4_nt*)(S19010C11*)(S19010C10*)(S19010C15*), ABISELECT(376,188), "S19010C1");
    check_base_class_offset(lv, (S19010C11*)(S19010C10*)(S19010C15*), ABISELECT(376,188), "S19010C1");
    check_base_class_offset(lv, (S19010C10*)(S19010C15*), ABISELECT(368,184), "S19010C1");
    /*is_ambiguous_... S19010C15::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S19010C15*), ABISELECT(424,224), "S19010C1");
    /*is_ambiguous_... S19010C17::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S19010C17*), ABISELECT(424,224), "S19010C1");
    check_base_class_offset(lv, (S19010C15*)(S19010C14*), ABISELECT(368,184), "S19010C1");
    check_base_class_offset(lv, (S19010C14*), ABISELECT(352,176), "S19010C1");
    /*is_ambiguous_... S19010C1::S19010C11 */ AMB_check_base_class_offset(lv, (S5266C26*)(S19010C11*), ABISELECT(88,44), "S19010C1");
    /*is_ambiguous_... S19010C1::S19010C11 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S19010C11*), ABISELECT(88,44), "S19010C1");
    /*is_ambiguous_... S19010C1::S19010C11 */ AMB_check_base_class_offset(lv, (S19010C11*), ABISELECT(88,44), "S19010C1");
    check_base_class_offset(lv, (S7719C4_nt*)(S19010C13*)(S19010C17*), ABISELECT(8,4), "S19010C1");
    check_base_class_offset(lv, (S5266C26*)(S19010C13*)(S19010C17*), 0, "S19010C1");
    check_base_class_offset(lv, (S19010C13*)(S19010C17*), 0, "S19010C1");
    check_base_class_offset(lv, (S19010C17*), 0, "S19010C1");
    test_class_info(&lv, &cd_S19010C1);
    dp->~S19010C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19010C1(Test_S19010C1, "S19010C1", ABISELECT(432,228));

#else // __cplusplus

extern void _ZN8S19010C1C1Ev();
extern void _ZN8S19010C1D2Ev();
Name_Map name_map_S19010C1[] = {
  NSPAIR(_ZN8S19010C1C1Ev),
  NSPAIR(_ZN8S19010C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7719C17_nt;
extern VTBL_ENTRY _ZTI11S7719C17_nt[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S19010C7;
extern VTBL_ENTRY _ZTI8S19010C7[];
extern  VTBL_ENTRY _ZTV8S19010C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19010C7[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S19010C11;
extern VTBL_ENTRY _ZTI9S19010C11[];
extern Class_Descriptor cd_S19010C10;
extern VTBL_ENTRY _ZTI9S19010C10[];
extern  VTBL_ENTRY _ZTV9S19010C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C10[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S19010C13;
extern VTBL_ENTRY _ZTI9S19010C13[];
extern  VTBL_ENTRY _ZTV9S19010C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C13[];
extern Class_Descriptor cd_S19010C12;
extern VTBL_ENTRY _ZTI9S19010C12[];
extern  VTBL_ENTRY _ZTV9S19010C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C12[];
extern Class_Descriptor cd_S19010C6;
extern VTBL_ENTRY _ZTI8S19010C6[];
extern  VTBL_ENTRY _ZTV8S19010C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19010C6[];
extern Class_Descriptor cd_S19010C12;
extern VTBL_ENTRY _ZTI9S19010C12[];
extern  VTBL_ENTRY _ZTV9S19010C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C12[];
extern Class_Descriptor cd_S19010C3;
extern VTBL_ENTRY _ZTI8S19010C3[];
extern  VTBL_ENTRY _ZTV8S19010C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19010C3[];
extern Class_Descriptor cd_S19010C2;
extern VTBL_ENTRY _ZTI8S19010C2[];
extern  VTBL_ENTRY _ZTV8S19010C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19010C2[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19010C7;
extern VTBL_ENTRY _ZTI8S19010C7[];
extern  VTBL_ENTRY _ZTV8S19010C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19010C7[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S19010C11;
extern VTBL_ENTRY _ZTI9S19010C11[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S19010C13;
extern VTBL_ENTRY _ZTI9S19010C13[];
extern  VTBL_ENTRY _ZTV9S19010C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C13[];
extern Class_Descriptor cd_S19010C16;
extern VTBL_ENTRY _ZTI9S19010C16[];
extern  VTBL_ENTRY _ZTV9S19010C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C16[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S19010C11;
extern VTBL_ENTRY _ZTI9S19010C11[];
extern Class_Descriptor cd_S19010C10;
extern VTBL_ENTRY _ZTI9S19010C10[];
extern  VTBL_ENTRY _ZTV9S19010C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C10[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S19010C15;
extern VTBL_ENTRY _ZTI9S19010C15[];
extern  VTBL_ENTRY _ZTV9S19010C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C15[];
extern Class_Descriptor cd_S19010C14;
extern VTBL_ENTRY _ZTI9S19010C14[];
extern  VTBL_ENTRY _ZTV9S19010C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C14[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S19010C11;
extern VTBL_ENTRY _ZTI9S19010C11[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S19010C13;
extern VTBL_ENTRY _ZTI9S19010C13[];
extern  VTBL_ENTRY _ZTV9S19010C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C13[];
extern Class_Descriptor cd_S19010C17;
extern VTBL_ENTRY _ZTI9S19010C17[];
extern  VTBL_ENTRY _ZTV9S19010C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19010C17[];
static Base_Class bases_S19010C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7719C17_nt,    ABISELECT(192,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S5266C26,    ABISELECT(304,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C29,    ABISELECT(304,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(313,157), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19010C7,    ABISELECT(304,152), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S5266C29,    ABISELECT(320,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    ABISELECT(328,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
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7719C4_nt,    ABISELECT(328,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
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19010C11,    ABISELECT(328,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
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19010C10,    ABISELECT(320,160), //bcp->offset
    41, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7719C4_nt,    ABISELECT(344,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    ABISELECT(336,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
    13, //immediately_derived
  0, 0},
  {&cd_S19010C13,    ABISELECT(336,168), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19010C12,    ABISELECT(208,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19010C6,    ABISELECT(208,104), //bcp->offset
    28, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19010C12,    ABISELECT(96,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
    6, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19010C3,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19010C2,    ABISELECT(96,48), //bcp->offset
    15, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5266C26,    ABISELECT(352,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C29,    ABISELECT(352,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19010C7,    ABISELECT(352,176), //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
    13, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(409,213), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(409,213), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19010C11,    ABISELECT(409,213), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    ABISELECT(410,214), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(408,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
    28, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(400,208), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19010C13,    ABISELECT(400,208), //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
    9, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19010C16,    ABISELECT(400,208), //bcp->offset
    66, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    36, //immediately_derived
  0, 1},
  {&cd_S5266C29,    ABISELECT(368,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
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(376,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(376,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19010C11,    ABISELECT(376,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19010C10,    ABISELECT(368,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(424,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19010C15,    ABISELECT(368,184), //bcp->offset
    58, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    37, //immediately_derived
  0, 1},
  {&cd_S19010C14,    ABISELECT(352,176), //bcp->offset
    48, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5266C26,    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
    40, //immediately_derived
  0, 0},
  {&cd_S7719C4_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
    40, //immediately_derived
  0, 0},
  {&cd_S19010C11,    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
    -1, //immediately_derived
  1, 0},
  {&cd_S7719C4_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
    43, //immediately_derived
  0, 0},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S19010C13,    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
    15, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S19010C17,    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
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19010C1[];
extern void _ZN8S19010C1D1Ev();
extern void _ZN8S19010C1D0Ev();
extern void ABISELECT(_ZTv0_n72_N8S19010C1D1Ev,_ZTv0_n36_N8S19010C1D1Ev)();
extern void ABISELECT(_ZThn96_N8S19010C1D1Ev,_ZThn48_N8S19010C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19010C1D0Ev,_ZTv0_n36_N8S19010C1D0Ev)();
extern void ABISELECT(_ZThn96_N8S19010C1D0Ev,_ZThn48_N8S19010C1D0Ev)() __attribute__((weak));
extern void _ZN8S19010C22v1Ev();
extern void ABISELECT(_ZTv0_n64_N8S19010C1D1Ev,_ZTv0_n32_N8S19010C1D1Ev)();
extern void ABISELECT(_ZThn208_N8S19010C1D1Ev,_ZThn104_N8S19010C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19010C1D0Ev,_ZTv0_n32_N8S19010C1D0Ev)();
extern void ABISELECT(_ZThn208_N8S19010C1D0Ev,_ZThn104_N8S19010C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19010C1[] = {
  ABISELECT(400,208),
  ABISELECT(368,184),
  ABISELECT(352,176),
  ABISELECT(336,168),
  ABISELECT(320,160),
  ABISELECT(313,157),
  ABISELECT(304,152),
  ABISELECT(208,104),
  ABISELECT(96,48),
  ABISELECT(424,224),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19010C1[0]),
  (VTBL_ENTRY)&_ZN8S19010C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19010C1D0Ev,
  0,
  ABISELECT(-96,-48),
  ABISELECT(224,112),
  ABISELECT(217,109),
  ABISELECT(208,104),
  ABISELECT(112,56),
  ABISELECT(-96,-48),
  ABISELECT(240,120),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S19010C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19010C1D1Ev,_ZTv0_n36_N8S19010C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19010C1D0Ev,_ZTv0_n36_N8S19010C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19010C22v1Ev,
  ABISELECT(-208,-104),
  ABISELECT(112,56),
  ABISELECT(105,53),
  ABISELECT(96,48),
  ABISELECT(-208,-104),
  ABISELECT(128,64),
  ABISELECT(-208,-104),
  (VTBL_ENTRY)&(_ZTI8S19010C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19010C1D1Ev,_ZTv0_n32_N8S19010C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19010C1D0Ev,_ZTv0_n32_N8S19010C1D0Ev),
  ABISELECT(9,5),
  ABISELECT(-304,-152),
  (VTBL_ENTRY)&(_ZTI8S19010C1[0]),
  ABISELECT(-16,-8),
  ABISELECT(-7,-3),
  ABISELECT(-320,-160),
  (VTBL_ENTRY)&(_ZTI8S19010C1[0]),
  ABISELECT(-336,-168),
  ABISELECT(-336,-168),
  (VTBL_ENTRY)&(_ZTI8S19010C1[0]),
  ABISELECT(72,48),
  ABISELECT(48,32),
  ABISELECT(16,8),
  ABISELECT(-352,-176),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(-32,-16),
  ABISELECT(-39,-19),
  ABISELECT(-352,-176),
  (VTBL_ENTRY)&(_ZTI8S19010C1[0]),
  ABISELECT(56,40),
  ABISELECT(32,24),
  ABISELECT(-32,-16),
  ABISELECT(-368,-184),
  ABISELECT(-64,-32),
  ABISELECT(-55,-27),
  ABISELECT(-368,-184),
  (VTBL_ENTRY)&(_ZTI8S19010C1[0]),
  ABISELECT(-400,-208),
  ABISELECT(-400,-208),
  (VTBL_ENTRY)&(_ZTI8S19010C1[0]),
};
extern VTBL_ENTRY _ZTV8S19010C1[];
static  VTBL_ENTRY _tg__ZTV9S19010C17__8S19010C1[] = {
  ABISELECT(424,224),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C17[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C139S19010C17__A2__8S19010C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C13[0]),
};
extern void _ZN8S19010C2D1Ev();
extern void _ZN8S19010C2D0Ev();
extern void _ZN8S19010C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19010C2__8S19010C1[] = {
  ABISELECT(224,112),
  ABISELECT(217,109),
  ABISELECT(208,104),
  ABISELECT(112,56),
  ABISELECT(-96,-48),
  ABISELECT(240,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S19010C2[0]),
  (VTBL_ENTRY)&_ZN8S19010C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19010C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19010C22v1Ev,
};
extern void _ZN8S19010C3D1Ev();
extern void _ZN8S19010C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19010C38S19010C2__8S19010C1[] = {
  ABISELECT(224,112),
  ABISELECT(217,109),
  ABISELECT(208,104),
  ABISELECT(112,56),
  ABISELECT(-96,-48),
  ABISELECT(240,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S19010C3[0]),
  (VTBL_ENTRY)&_ZN8S19010C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19010C3D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19010C128S19010C38S19010C2__A1__8S19010C1[] = {
  ABISELECT(-96,-48),
  ABISELECT(240,120),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C13__9S19010C128S19010C38S19010C2__A1__8S19010C1[] = {
  ABISELECT(-336,-168),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI9S19010C12[0]),
};
extern void ABISELECT(_ZTv0_n64_N8S19010C3D1Ev,_ZTv0_n32_N8S19010C3D1Ev)();
extern void ABISELECT(_ZThn112_N8S19010C3D1Ev,_ZThn56_N8S19010C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19010C3D0Ev,_ZTv0_n32_N8S19010C3D0Ev)();
extern void ABISELECT(_ZThn112_N8S19010C3D0Ev,_ZThn56_N8S19010C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19010C6__8S19010C38S19010C2__8S19010C1[] = {
  ABISELECT(-112,-56),
  ABISELECT(112,56),
  ABISELECT(105,53),
  ABISELECT(96,48),
  ABISELECT(-208,-104),
  ABISELECT(128,64),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S19010C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19010C3D1Ev,_ZTv0_n32_N8S19010C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19010C3D0Ev,_ZTv0_n32_N8S19010C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19010C7__8S19010C38S19010C2__8S19010C1[] = {
  ABISELECT(9,5),
  ABISELECT(-208,-104),
  (VTBL_ENTRY)&(_ZTI8S19010C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C10__8S19010C38S19010C2__8S19010C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-7,-3),
  ABISELECT(-224,-112),
  (VTBL_ENTRY)&(_ZTI8S19010C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C13__8S19010C38S19010C2__8S19010C1[] = {
  ABISELECT(-336,-168),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S19010C3[0]),
};
extern void ABISELECT(_ZTv0_n64_N8S19010C2D1Ev,_ZTv0_n32_N8S19010C2D1Ev)();
extern void ABISELECT(_ZThn112_N8S19010C2D1Ev,_ZThn56_N8S19010C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19010C2D0Ev,_ZTv0_n32_N8S19010C2D0Ev)();
extern void ABISELECT(_ZThn112_N8S19010C2D0Ev,_ZThn56_N8S19010C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19010C6__8S19010C2__8S19010C1[] = {
  ABISELECT(-112,-56),
  ABISELECT(112,56),
  ABISELECT(105,53),
  ABISELECT(96,48),
  ABISELECT(-208,-104),
  ABISELECT(128,64),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S19010C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19010C2D1Ev,_ZTv0_n32_N8S19010C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19010C2D0Ev,_ZTv0_n32_N8S19010C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19010C7__8S19010C2__8S19010C1[] = {
  ABISELECT(9,5),
  ABISELECT(-208,-104),
  (VTBL_ENTRY)&(_ZTI8S19010C2[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C10__8S19010C2__8S19010C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-7,-3),
  ABISELECT(-224,-112),
  (VTBL_ENTRY)&(_ZTI8S19010C2[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C13__8S19010C2__8S19010C1[] = {
  ABISELECT(-336,-168),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S19010C2[0]),
};
extern void _ZN8S19010C6D1Ev();
extern void _ZN8S19010C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19010C6__8S19010C1[] = {
  ABISELECT(112,56),
  ABISELECT(105,53),
  ABISELECT(96,48),
  ABISELECT(-208,-104),
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19010C6[0]),
  (VTBL_ENTRY)&_ZN8S19010C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19010C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19010C128S19010C6__8S19010C1[] = {
  ABISELECT(-208,-104),
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C13__9S19010C128S19010C6__8S19010C1[] = {
  ABISELECT(-336,-168),
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI9S19010C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19010C7__8S19010C6__8S19010C1[] = {
  ABISELECT(9,5),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S19010C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C10__8S19010C6__8S19010C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-7,-3),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S19010C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C13__8S19010C6__8S19010C1[] = {
  ABISELECT(-336,-168),
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI8S19010C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19010C7__8S19010C1[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S19010C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C10__8S19010C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19010C7__9S19010C10__8S19010C1[] = {
  ABISELECT(9,5),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19010C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C13__8S19010C1[] = {
  ABISELECT(-336,-168),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C13[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C14__8S19010C1[] = {
  ABISELECT(72,48),
  ABISELECT(48,32),
  ABISELECT(16,8),
  ABISELECT(-352,-176),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(-32,-16),
  ABISELECT(-39,-19),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19010C79S19010C14__A1__8S19010C1[] = {
  ABISELECT(-39,-19),
  0,
  (VTBL_ENTRY)&(_ZTI8S19010C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C10__9S19010C14__8S19010C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-7,-3),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI9S19010C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19010C7__9S19010C14__8S19010C1[] = {
  ABISELECT(9,5),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI9S19010C14[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C13__9S19010C14__8S19010C1[] = {
  ABISELECT(-336,-168),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19010C14[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C15__9S19010C14__8S19010C1[] = {
  ABISELECT(56,40),
  ABISELECT(32,24),
  ABISELECT(-32,-16),
  ABISELECT(-368,-184),
  ABISELECT(-64,-32),
  ABISELECT(-55,-27),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19010C14[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C16__9S19010C14__8S19010C1[] = {
  ABISELECT(-400,-208),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI9S19010C14[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C15__8S19010C1[] = {
  ABISELECT(56,40),
  ABISELECT(32,24),
  ABISELECT(-32,-16),
  ABISELECT(-368,-184),
  ABISELECT(-64,-32),
  ABISELECT(-55,-27),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C109S19010C15__A1__8S19010C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(-55,-27),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19010C7__9S19010C109S19010C15__A1__8S19010C1[] = {
  ABISELECT(9,5),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI9S19010C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C13__9S19010C15__8S19010C1[] = {
  ABISELECT(-336,-168),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI9S19010C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C16__9S19010C15__8S19010C1[] = {
  ABISELECT(-400,-208),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI9S19010C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19010C7__9S19010C15__8S19010C1[] = {
  ABISELECT(9,5),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI9S19010C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C16__8S19010C1[] = {
  ABISELECT(-400,-208),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C16[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19010C139S19010C16__A1__8S19010C1[] = {
  ABISELECT(-400,-208),
  0,
  (VTBL_ENTRY)&(_ZTI9S19010C13[0]),
};
static  VTT_ENTRY vtt_S19010C1[] = {
  {&(_ZTV8S19010C1[13]),  13,69},
  {&(_tg__ZTV9S19010C17__8S19010C1[4]),  4,4},
  {&(_tg__ZTV9S19010C139S19010C17__A2__8S19010C1[3]),  3,3},
  {&(_ZTV8S19010C1[25]),  25,69},
  {&(_ZTV8S19010C1[36]),  36,69},
  {&(_ZTV8S19010C1[41]),  41,69},
  {&(_ZTV8S19010C1[45]),  45,69},
  {&(_ZTV8S19010C1[48]),  48,69},
  {&(_ZTV8S19010C1[58]),  58,69},
  {&(_ZTV8S19010C1[66]),  66,69},
  {&(_ZTV8S19010C1[69]),  69,69},
  {&(_tg__ZTV8S19010C2__8S19010C1[8]),  8,11},
  {&(_tg__ZTV8S19010C38S19010C2__8S19010C1[8]),  8,10},
  {&(_tg__ZTV9S19010C128S19010C38S19010C2__A1__8S19010C1[4]),  4,4},
  {&(_tg__ZTV9S19010C13__9S19010C128S19010C38S19010C2__A1__8S19010C1[3]),  3,3},
  {&(_tg__ZTV8S19010C6__8S19010C38S19010C2__8S19010C1[8]),  8,10},
  {&(_tg__ZTV8S19010C7__8S19010C38S19010C2__8S19010C1[3]),  3,3},
  {&(_tg__ZTV9S19010C10__8S19010C38S19010C2__8S19010C1[4]),  4,4},
  {&(_tg__ZTV9S19010C13__8S19010C38S19010C2__8S19010C1[3]),  3,3},
  {&(_tg__ZTV8S19010C6__8S19010C2__8S19010C1[8]),  8,10},
  {&(_tg__ZTV8S19010C7__8S19010C2__8S19010C1[3]),  3,3},
  {&(_tg__ZTV9S19010C10__8S19010C2__8S19010C1[4]),  4,4},
  {&(_tg__ZTV9S19010C13__8S19010C2__8S19010C1[3]),  3,3},
  {&(_tg__ZTV8S19010C6__8S19010C1[7]),  7,9},
  {&(_tg__ZTV9S19010C128S19010C6__8S19010C1[4]),  4,4},
  {&(_tg__ZTV9S19010C13__9S19010C128S19010C6__8S19010C1[3]),  3,3},
  {&(_tg__ZTV8S19010C7__8S19010C6__8S19010C1[3]),  3,3},
  {&(_tg__ZTV9S19010C10__8S19010C6__8S19010C1[4]),  4,4},
  {&(_tg__ZTV9S19010C13__8S19010C6__8S19010C1[3]),  3,3},
  {&(_tg__ZTV8S19010C7__8S19010C1[3]),  3,3},
  {&(_tg__ZTV9S19010C10__8S19010C1[4]),  4,4},
  {&(_tg__ZTV8S19010C7__9S19010C10__8S19010C1[3]),  3,3},
  {&(_tg__ZTV9S19010C13__8S19010C1[3]),  3,3},
  {&(_tg__ZTV9S19010C14__8S19010C1[10]),  10,10},
  {&(_tg__ZTV8S19010C79S19010C14__A1__8S19010C1[3]),  3,3},
  {&(_tg__ZTV9S19010C10__9S19010C14__8S19010C1[4]),  4,4},
  {&(_tg__ZTV8S19010C7__9S19010C14__8S19010C1[3]),  3,3},
  {&(_tg__ZTV9S19010C13__9S19010C14__8S19010C1[3]),  3,3},
  {&(_tg__ZTV9S19010C15__9S19010C14__8S19010C1[8]),  8,8},
  {&(_tg__ZTV9S19010C16__9S19010C14__8S19010C1[3]),  3,3},
  {&(_tg__ZTV9S19010C15__8S19010C1[8]),  8,8},
  {&(_tg__ZTV9S19010C109S19010C15__A1__8S19010C1[4]),  4,4},
  {&(_tg__ZTV8S19010C7__9S19010C109S19010C15__A1__8S19010C1[3]),  3,3},
  {&(_tg__ZTV9S19010C13__9S19010C15__8S19010C1[3]),  3,3},
  {&(_tg__ZTV9S19010C16__9S19010C15__8S19010C1[3]),  3,3},
  {&(_tg__ZTV8S19010C7__9S19010C15__8S19010C1[3]),  3,3},
  {&(_tg__ZTV9S19010C16__8S19010C1[3]),  3,3},
  {&(_tg__ZTV9S19010C139S19010C16__A1__8S19010C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19010C1[];
extern  VTBL_ENTRY _ZTV8S19010C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19010C1[];
static VTBL_ENTRY alt_thunk_names76[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19010C2D0Ev,_ZTv0_n32_N8S19010C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19010C2D0Ev,_ZThn56_N8S19010C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19010C2D1Ev,_ZTv0_n32_N8S19010C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19010C2D1Ev,_ZThn56_N8S19010C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19010C3D0Ev,_ZTv0_n32_N8S19010C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19010C3D0Ev,_ZThn56_N8S19010C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19010C3D1Ev,_ZTv0_n32_N8S19010C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19010C3D1Ev,_ZThn56_N8S19010C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19010C1D0Ev,_ZTv0_n32_N8S19010C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19010C1D0Ev,_ZThn104_N8S19010C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19010C1D1Ev,_ZTv0_n32_N8S19010C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19010C1D1Ev,_ZThn104_N8S19010C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19010C1D0Ev,_ZTv0_n36_N8S19010C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19010C1D0Ev,_ZThn48_N8S19010C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19010C1D1Ev,_ZTv0_n36_N8S19010C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19010C1D1Ev,_ZThn48_N8S19010C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19010C1 = {  "S19010C1", // class name
  bases_S19010C1, 45,
  &(vtc_S19010C1[0]), // expected_vtbl_contents
  &(vtt_S19010C1[0]), // expected_vtt_contents
  ABISELECT(432,228), // object size
  NSPAIRA(_ZTI8S19010C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19010C1),69, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19010C1),48, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names76,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1584C4  {
  virtual  ~S1584C4(); // _ZN7S1584C4D1Ev
  virtual void  v8(); // _ZN7S1584C42v8Ev
  virtual void  v9(); // _ZN7S1584C42v9Ev
  S1584C4(); // tgen
};
//SIG(-1 S1584C4) C1{ vd v1 v2}


 S1584C4 ::~S1584C4(){ note_dtor("S1584C4", this);}
void  S1584C4 ::v8(){vfunc_called(this, "_ZN7S1584C42v8Ev");}
void  S1584C4 ::v9(){vfunc_called(this, "_ZN7S1584C42v9Ev");}
S1584C4 ::S1584C4(){ note_ctor("S1584C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1584C4C1Ev();
extern void _ZN7S1584C4D1Ev();
Name_Map name_map_S1584C4[] = {
  NSPAIR(_ZN7S1584C4C1Ev),
  NSPAIR(_ZN7S1584C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1584C4[];
extern void _ZN7S1584C4D1Ev();
extern void _ZN7S1584C4D0Ev();
extern void _ZN7S1584C42v8Ev();
extern void _ZN7S1584C42v9Ev();
static  VTBL_ENTRY vtc_S1584C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1584C4[0]),
  (VTBL_ENTRY)&_ZN7S1584C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1584C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1584C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1584C42v9Ev,
};
extern VTBL_ENTRY _ZTI7S1584C4[];
extern  VTBL_ENTRY _ZTV7S1584C4[];
Class_Descriptor cd_S1584C4 = {  "S1584C4", // class name
  0,0,//no base classes
  &(vtc_S1584C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1584C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1584C4),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  S1584C6  {
  virtual void  v10(); // _ZN7S1584C63v10Ev
  virtual void  v11(); // _ZN7S1584C63v11Ev
  virtual void  v12(); // _ZN7S1584C63v12Ev
  virtual void  v13(); // _ZN7S1584C63v13Ev
  virtual void  v14(); // _ZN7S1584C63v14Ev
  virtual void  v15(); // _ZN7S1584C63v15Ev
  virtual void  v16(); // _ZN7S1584C63v16Ev
  virtual void  v17(); // _ZN7S1584C63v17Ev
  virtual void  v18(); // _ZN7S1584C63v18Ev
  ~S1584C6(); // tgen
  S1584C6(); // tgen
};
//SIG(-1 S1584C6) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S1584C6 ::v10(){vfunc_called(this, "_ZN7S1584C63v10Ev");}
void  S1584C6 ::v11(){vfunc_called(this, "_ZN7S1584C63v11Ev");}
void  S1584C6 ::v12(){vfunc_called(this, "_ZN7S1584C63v12Ev");}
void  S1584C6 ::v13(){vfunc_called(this, "_ZN7S1584C63v13Ev");}
void  S1584C6 ::v14(){vfunc_called(this, "_ZN7S1584C63v14Ev");}
void  S1584C6 ::v15(){vfunc_called(this, "_ZN7S1584C63v15Ev");}
void  S1584C6 ::v16(){vfunc_called(this, "_ZN7S1584C63v16Ev");}
void  S1584C6 ::v17(){vfunc_called(this, "_ZN7S1584C63v17Ev");}
void  S1584C6 ::v18(){vfunc_called(this, "_ZN7S1584C63v18Ev");}
S1584C6 ::~S1584C6(){ note_dtor("S1584C6", this);} // tgen
S1584C6 ::S1584C6(){ note_ctor("S1584C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1584C6C1Ev();
extern void _ZN7S1584C6D1Ev();
Name_Map name_map_S1584C6[] = {
  NSPAIR(_ZN7S1584C6C1Ev),
  NSPAIR(_ZN7S1584C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1584C6[];
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
static  VTBL_ENTRY vtc_S1584C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1584C6[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
};
extern VTBL_ENTRY _ZTI7S1584C6[];
extern  VTBL_ENTRY _ZTV7S1584C6[];
Class_Descriptor cd_S1584C6 = {  "S1584C6", // class name
  0,0,//no base classes
  &(vtc_S1584C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1584C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1584C6),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  S1584C5  : virtual S1584C6 {
  void *s1584c5f0;
  long double s1584c5f1;
  int s1584c5f2;
  virtual void  v19(); // _ZN7S1584C53v19Ev
  virtual void  v20(); // _ZN7S1584C53v20Ev
  virtual void  v21(); // _ZN7S1584C53v21Ev
  ~S1584C5(); // tgen
  S1584C5(); // tgen
};
//SIG(-1 S1584C5) C1{ VBC2{ v4 v5 v6 v7 v8 v9 v10 v11 v12} v1 v2 v3 Fp FD Fi}


void  S1584C5 ::v19(){vfunc_called(this, "_ZN7S1584C53v19Ev");}
void  S1584C5 ::v20(){vfunc_called(this, "_ZN7S1584C53v20Ev");}
void  S1584C5 ::v21(){vfunc_called(this, "_ZN7S1584C53v21Ev");}
S1584C5 ::~S1584C5(){ note_dtor("S1584C5", this);} // tgen
S1584C5 ::S1584C5(){ note_ctor("S1584C5", this);} // tgen

static void Test_S1584C5()
{
  extern Class_Descriptor cd_S1584C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S1584C5, buf);
    S1584C5 *dp, &lv = *(dp=new (buf) S1584C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S1584C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1584C5)");
    check_base_class_offset(lv, (S1584C6*), 0, "S1584C5");
    check_field_offset(lv, s1584c5f0, ABISELECT(8,4), "S1584C5.s1584c5f0");
    check_field_offset(lv, s1584c5f1, ABISELECT(16,8), "S1584C5.s1584c5f1");
    check_field_offset(lv, s1584c5f2, ABISELECT(32,20), "S1584C5.s1584c5f2");
    test_class_info(&lv, &cd_S1584C5);
    dp->~S1584C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1584C5(Test_S1584C5, "S1584C5", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S1584C5C1Ev();
extern void _ZN7S1584C5D1Ev();
Name_Map name_map_S1584C5[] = {
  NSPAIR(_ZN7S1584C5C1Ev),
  NSPAIR(_ZN7S1584C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1584C6;
extern VTBL_ENTRY _ZTI7S1584C6[];
extern  VTBL_ENTRY _ZTV7S1584C6[];
static Base_Class bases_S1584C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1584C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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 _ZTI7S1584C5[];
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void _ZN7S1584C53v19Ev();
extern void _ZN7S1584C53v20Ev();
extern void _ZN7S1584C53v21Ev();
static  VTBL_ENTRY vtc_S1584C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1584C5[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v21Ev,
};
extern VTBL_ENTRY _ZTV7S1584C5[];
static  VTT_ENTRY vtt_S1584C5[] = {
  {&(_ZTV7S1584C5[12]),  12,24},
  {&(_ZTV7S1584C5[12]),  12,24},
};
extern VTBL_ENTRY _ZTI7S1584C5[];
extern  VTBL_ENTRY _ZTV7S1584C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1584C5[];
Class_Descriptor cd_S1584C5 = {  "S1584C5", // class name
  bases_S1584C5, 1,
  &(vtc_S1584C5[0]), // expected_vtbl_contents
  &(vtt_S1584C5[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S1584C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1584C5),24, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1584C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1584C3  : S1584C4 , S1584C5 {
  void *s1584c3f0;
  virtual  ~S1584C3(); // _ZN7S1584C3D2Ev
  virtual void  v22(); // _ZN7S1584C33v22Ev
  virtual void  v23(); // _ZN7S1584C33v23Ev
  virtual void  v24(); // _ZN7S1584C33v24Ev
  virtual void  v25(); // _ZN7S1584C33v25Ev
  virtual void  v26(); // _ZN7S1584C33v26Ev
  virtual void  v27(); // _ZN7S1584C33v27Ev
  virtual void  v28(); // _ZN7S1584C33v28Ev
  S1584C3(); // tgen
};
//SIG(-1 S1584C3) C1{ BC2{ vd v8 v9} BC3{ VBC4{ v10 v11 v12 v13 v14 v15 v16 v17 v18} v19 v20 v21 Fp FD Fi} vd v1 v2 v3 v4 v5 v6 v7 Fp}


 S1584C3 ::~S1584C3(){ note_dtor("S1584C3", this);}
void  S1584C3 ::v22(){vfunc_called(this, "_ZN7S1584C33v22Ev");}
void  S1584C3 ::v23(){vfunc_called(this, "_ZN7S1584C33v23Ev");}
void  S1584C3 ::v24(){vfunc_called(this, "_ZN7S1584C33v24Ev");}
void  S1584C3 ::v25(){vfunc_called(this, "_ZN7S1584C33v25Ev");}
void  S1584C3 ::v26(){vfunc_called(this, "_ZN7S1584C33v26Ev");}
void  S1584C3 ::v27(){vfunc_called(this, "_ZN7S1584C33v27Ev");}
void  S1584C3 ::v28(){vfunc_called(this, "_ZN7S1584C33v28Ev");}
S1584C3 ::S1584C3(){ note_ctor("S1584C3", this);} // tgen

static void Test_S1584C3()
{
  extern Class_Descriptor cd_S1584C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,9)];
    init_test(&cd_S1584C3, buf);
    S1584C3 *dp, &lv = *(dp=new (buf) S1584C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S1584C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1584C3)");
    check_base_class_offset(lv, (S1584C4*), 0, "S1584C3");
    check_base_class_offset(lv, (S1584C6*)(S1584C5*), ABISELECT(16,4), "S1584C3");
    check_base_class_offset(lv, (S1584C5*), ABISELECT(16,4), "S1584C3");
    check_field_offset(lv, s1584c3f0, ABISELECT(56,28), "S1584C3.s1584c3f0");
    test_class_info(&lv, &cd_S1584C3);
    dp->~S1584C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1584C3(Test_S1584C3, "S1584C3", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S1584C3C1Ev();
extern void _ZN7S1584C3D2Ev();
Name_Map name_map_S1584C3[] = {
  NSPAIR(_ZN7S1584C3C1Ev),
  NSPAIR(_ZN7S1584C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1584C4;
extern VTBL_ENTRY _ZTI7S1584C4[];
extern  VTBL_ENTRY _ZTV7S1584C4[];
extern Class_Descriptor cd_S1584C6;
extern VTBL_ENTRY _ZTI7S1584C6[];
extern  VTBL_ENTRY _ZTV7S1584C6[];
extern Class_Descriptor cd_S1584C5;
extern VTBL_ENTRY _ZTI7S1584C5[];
extern  VTBL_ENTRY _ZTV7S1584C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1584C5[];
static Base_Class bases_S1584C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1584C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1584C6,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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
    2, //immediately_derived
  0, 1},
  {&cd_S1584C5,    ABISELECT(16,4), //bcp->offset
    14, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    4, //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 _ZTI7S1584C3[];
extern void _ZN7S1584C3D1Ev();
extern void _ZN7S1584C3D0Ev();
extern void _ZN7S1584C42v8Ev();
extern void _ZN7S1584C42v9Ev();
extern void _ZN7S1584C33v22Ev();
extern void _ZN7S1584C33v23Ev();
extern void _ZN7S1584C33v24Ev();
extern void _ZN7S1584C33v25Ev();
extern void _ZN7S1584C33v26Ev();
extern void _ZN7S1584C33v27Ev();
extern void _ZN7S1584C33v28Ev();
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void _ZN7S1584C53v19Ev();
extern void _ZN7S1584C53v20Ev();
extern void _ZN7S1584C53v21Ev();
static  VTBL_ENTRY vtc_S1584C3[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S1584C3[0]),
  (VTBL_ENTRY)&_ZN7S1584C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1584C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1584C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1584C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v28Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S1584C3[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v21Ev,
};
extern VTBL_ENTRY _ZTV7S1584C3[];
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void _ZN7S1584C53v19Ev();
extern void _ZN7S1584C53v20Ev();
extern void _ZN7S1584C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C5__7S1584C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1584C5[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v21Ev,
};
static  VTT_ENTRY vtt_S1584C3[] = {
  {&(_ZTV7S1584C3[3]),  3,38},
  {&(_tg__ZTV7S1584C5__7S1584C3[12]),  12,24},
  {&(_tg__ZTV7S1584C5__7S1584C3[12]),  12,24},
  {&(_ZTV7S1584C3[26]),  26,38},
  {&(_ZTV7S1584C3[26]),  26,38},
};
extern VTBL_ENTRY _ZTI7S1584C3[];
extern  VTBL_ENTRY _ZTV7S1584C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1584C3[];
Class_Descriptor cd_S1584C3 = {  "S1584C3", // class name
  bases_S1584C3, 3,
  &(vtc_S1584C3[0]), // expected_vtbl_contents
  &(vtt_S1584C3[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S1584C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1584C3),38, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1584C3),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1584C9  {
  __tsi64 s1584c9f0;
  int s1584c9f1;
  virtual  ~S1584C9(); // _ZN7S1584C9D1Ev
  virtual void  v29(); // _ZN7S1584C93v29Ev
  virtual void  v30(); // _ZN7S1584C93v30Ev
  S1584C9(); // tgen
};
//SIG(-1 S1584C9) C1{ vd v1 v2 FL Fi}


 S1584C9 ::~S1584C9(){ note_dtor("S1584C9", this);}
void  S1584C9 ::v29(){vfunc_called(this, "_ZN7S1584C93v29Ev");}
void  S1584C9 ::v30(){vfunc_called(this, "_ZN7S1584C93v30Ev");}
S1584C9 ::S1584C9(){ note_ctor("S1584C9", this);} // tgen

static void Test_S1584C9()
{
  extern Class_Descriptor cd_S1584C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S1584C9, buf);
    S1584C9 *dp, &lv = *(dp=new (buf) S1584C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S1584C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1584C9)");
    check_field_offset(lv, s1584c9f0, ABISELECT(8,4), "S1584C9.s1584c9f0");
    check_field_offset(lv, s1584c9f1, ABISELECT(16,12), "S1584C9.s1584c9f1");
    test_class_info(&lv, &cd_S1584C9);
    dp->~S1584C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1584C9(Test_S1584C9, "S1584C9", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S1584C9C1Ev();
extern void _ZN7S1584C9D1Ev();
Name_Map name_map_S1584C9[] = {
  NSPAIR(_ZN7S1584C9C1Ev),
  NSPAIR(_ZN7S1584C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1584C9[];
extern void _ZN7S1584C9D1Ev();
extern void _ZN7S1584C9D0Ev();
extern void _ZN7S1584C93v29Ev();
extern void _ZN7S1584C93v30Ev();
static  VTBL_ENTRY vtc_S1584C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1584C9[0]),
  (VTBL_ENTRY)&_ZN7S1584C9D1Ev,
  (VTBL_ENTRY)&_ZN7S1584C9D0Ev,
  (VTBL_ENTRY)&_ZN7S1584C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1584C93v30Ev,
};
extern VTBL_ENTRY _ZTI7S1584C9[];
extern  VTBL_ENTRY _ZTV7S1584C9[];
Class_Descriptor cd_S1584C9 = {  "S1584C9", // class name
  0,0,//no base classes
  &(vtc_S1584C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S1584C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1584C9),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  S1584C8  : S1584C5 , S1584C9 {
  void *s1584c8f0;
  virtual  ~S1584C8(); // _ZN7S1584C8D2Ev
  virtual void  v31(); // _ZN7S1584C83v31Ev
  virtual void  v32(); // _ZN7S1584C83v32Ev
  S1584C8(); // tgen
};
//SIG(-1 S1584C8) C1{ BC2{ VBC3{ v3 v4 v5 v6 v7 v8 v9 v10 v11} v12 v13 v14 Fp FD Fi} BC4{ vd v15 v16 FL Fi} vd v1 v2 Fp}


 S1584C8 ::~S1584C8(){ note_dtor("S1584C8", this);}
void  S1584C8 ::v31(){vfunc_called(this, "_ZN7S1584C83v31Ev");}
void  S1584C8 ::v32(){vfunc_called(this, "_ZN7S1584C83v32Ev");}
S1584C8 ::S1584C8(){ note_ctor("S1584C8", this);} // tgen

static void Test_S1584C8()
{
  extern Class_Descriptor cd_S1584C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S1584C8, buf);
    S1584C8 *dp, &lv = *(dp=new (buf) S1584C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S1584C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1584C8)");
    check_base_class_offset(lv, (S1584C6*)(S1584C5*), 0, "S1584C8");
    check_base_class_offset(lv, (S1584C5*), 0, "S1584C8");
    check_base_class_offset(lv, (S1584C9*), ABISELECT(40,24), "S1584C8");
    check_field_offset(lv, s1584c8f0, ABISELECT(64,40), "S1584C8.s1584c8f0");
    test_class_info(&lv, &cd_S1584C8);
    dp->~S1584C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1584C8(Test_S1584C8, "S1584C8", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN7S1584C8C1Ev();
extern void _ZN7S1584C8D2Ev();
Name_Map name_map_S1584C8[] = {
  NSPAIR(_ZN7S1584C8C1Ev),
  NSPAIR(_ZN7S1584C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1584C6;
extern VTBL_ENTRY _ZTI7S1584C6[];
extern  VTBL_ENTRY _ZTV7S1584C6[];
extern Class_Descriptor cd_S1584C5;
extern VTBL_ENTRY _ZTI7S1584C5[];
extern  VTBL_ENTRY _ZTV7S1584C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1584C5[];
extern Class_Descriptor cd_S1584C9;
extern VTBL_ENTRY _ZTI7S1584C9[];
extern  VTBL_ENTRY _ZTV7S1584C9[];
static Base_Class bases_S1584C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1584C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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_S1584C5,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1584C9,    ABISELECT(40,24), //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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1584C8[];
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void _ZN7S1584C53v19Ev();
extern void _ZN7S1584C53v20Ev();
extern void _ZN7S1584C53v21Ev();
extern void _ZN7S1584C8D1Ev();
extern void _ZN7S1584C8D0Ev();
extern void _ZN7S1584C83v31Ev();
extern void _ZN7S1584C83v32Ev();
extern void ABISELECT(_ZThn40_N7S1584C8D1Ev,_ZThn24_N7S1584C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S1584C8D0Ev,_ZThn24_N7S1584C8D0Ev)();
extern void _ZN7S1584C93v29Ev();
extern void _ZN7S1584C93v30Ev();
static  VTBL_ENTRY vtc_S1584C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1584C8[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v21Ev,
  (VTBL_ENTRY)&_ZN7S1584C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1584C8D0Ev,
  (VTBL_ENTRY)&_ZN7S1584C83v31Ev,
  (VTBL_ENTRY)&_ZN7S1584C83v32Ev,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1584C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S1584C8D1Ev,_ZThn24_N7S1584C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S1584C8D0Ev,_ZThn24_N7S1584C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1584C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1584C93v30Ev,
};
extern VTBL_ENTRY _ZTV7S1584C8[];
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void _ZN7S1584C53v19Ev();
extern void _ZN7S1584C53v20Ev();
extern void _ZN7S1584C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C5__7S1584C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1584C5[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v21Ev,
};
static  VTT_ENTRY vtt_S1584C8[] = {
  {&(_ZTV7S1584C8[12]),  12,34},
  {&(_tg__ZTV7S1584C5__7S1584C8[12]),  12,24},
  {&(_tg__ZTV7S1584C5__7S1584C8[12]),  12,24},
  {&(_ZTV7S1584C8[12]),  12,34},
};
extern VTBL_ENTRY _ZTI7S1584C8[];
extern  VTBL_ENTRY _ZTV7S1584C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1584C8[];
Class_Descriptor cd_S1584C8 = {  "S1584C8", // class name
  bases_S1584C8, 3,
  &(vtc_S1584C8[0]), // expected_vtbl_contents
  &(vtt_S1584C8[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI7S1584C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1584C8),34, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1584C8),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1584C7  : virtual S1584C8 {
  void *s1584c7f0;
  int s1584c7f1;
  virtual  ~S1584C7(); // _ZN7S1584C7D2Ev
  virtual void  v33(); // _ZN7S1584C73v33Ev
  virtual void  v34(); // _ZN7S1584C73v34Ev
  virtual void  v35(); // _ZN7S1584C73v35Ev
  virtual void  v36(); // _ZN7S1584C73v36Ev
  S1584C7(); // tgen
};
//SIG(-1 S1584C7) C1{ VBC2{ BC3{ VBC4{ v5 v6 v7 v8 v9 v10 v11 v12 v13} v14 v15 v16 Fp FD Fi} BC5{ vd v17 v18 FL Fi} vd v19 v20 Fp} vd v1 v2 v3 v4 Fp Fi}


 S1584C7 ::~S1584C7(){ note_dtor("S1584C7", this);}
void  S1584C7 ::v33(){vfunc_called(this, "_ZN7S1584C73v33Ev");}
void  S1584C7 ::v34(){vfunc_called(this, "_ZN7S1584C73v34Ev");}
void  S1584C7 ::v35(){vfunc_called(this, "_ZN7S1584C73v35Ev");}
void  S1584C7 ::v36(){vfunc_called(this, "_ZN7S1584C73v36Ev");}
S1584C7 ::S1584C7(){ note_ctor("S1584C7", this);} // tgen

static void Test_S1584C7()
{
  extern Class_Descriptor cd_S1584C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,15)];
    init_test(&cd_S1584C7, buf);
    S1584C7 *dp, &lv = *(dp=new (buf) S1584C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S1584C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1584C7)");
    check_base_class_offset(lv, (S1584C6*)(S1584C5*)(S1584C8*), 0, "S1584C7");
    check_base_class_offset(lv, (S1584C5*)(S1584C8*), ABISELECT(32,12), "S1584C7");
    check_base_class_offset(lv, (S1584C9*)(S1584C8*), ABISELECT(72,36), "S1584C7");
    check_base_class_offset(lv, (S1584C8*), ABISELECT(32,12), "S1584C7");
    check_field_offset(lv, s1584c7f0, ABISELECT(8,4), "S1584C7.s1584c7f0");
    check_field_offset(lv, s1584c7f1, ABISELECT(16,8), "S1584C7.s1584c7f1");
    test_class_info(&lv, &cd_S1584C7);
    dp->~S1584C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1584C7(Test_S1584C7, "S1584C7", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN7S1584C7C1Ev();
extern void _ZN7S1584C7D2Ev();
Name_Map name_map_S1584C7[] = {
  NSPAIR(_ZN7S1584C7C1Ev),
  NSPAIR(_ZN7S1584C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1584C6;
extern VTBL_ENTRY _ZTI7S1584C6[];
extern  VTBL_ENTRY _ZTV7S1584C6[];
extern Class_Descriptor cd_S1584C5;
extern VTBL_ENTRY _ZTI7S1584C5[];
extern  VTBL_ENTRY _ZTV7S1584C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1584C5[];
extern Class_Descriptor cd_S1584C9;
extern VTBL_ENTRY _ZTI7S1584C9[];
extern  VTBL_ENTRY _ZTV7S1584C9[];
extern Class_Descriptor cd_S1584C8;
extern VTBL_ENTRY _ZTI7S1584C8[];
extern  VTBL_ENTRY _ZTV7S1584C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1584C8[];
static Base_Class bases_S1584C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1584C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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_S1584C5,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1584C9,    ABISELECT(72,36), //bcp->offset
    64, //bcp->virtual_function_table_offset
    2, //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, 0},
  {&cd_S1584C8,    ABISELECT(32,12), //bcp->offset
    28, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI7S1584C7[];
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void _ZN7S1584C7D1Ev();
extern void _ZN7S1584C7D0Ev();
extern void _ZN7S1584C73v33Ev();
extern void _ZN7S1584C73v34Ev();
extern void _ZN7S1584C73v35Ev();
extern void _ZN7S1584C73v36Ev();
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void _ZN7S1584C53v19Ev();
extern void _ZN7S1584C53v20Ev();
extern void _ZN7S1584C53v21Ev();
extern void ABISELECT(_ZTv0_n128_N7S1584C7D1Ev,_ZTv0_n64_N7S1584C7D1Ev)();
extern void ABISELECT(_ZThn32_N7S1584C7D1Ev,_ZThn12_N7S1584C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n128_N7S1584C7D0Ev,_ZTv0_n64_N7S1584C7D0Ev)();
extern void ABISELECT(_ZThn32_N7S1584C7D0Ev,_ZThn12_N7S1584C7D0Ev)() __attribute__((weak));
extern void _ZN7S1584C83v31Ev();
extern void _ZN7S1584C83v32Ev();
extern void ABISELECT(_ZTvn40_n128_N7S1584C7D1Ev,_ZTvn24_n64_N7S1584C7D1Ev)();
extern void ABISELECT(_ZTvn40_n128_N7S1584C7D0Ev,_ZTvn24_n64_N7S1584C7D0Ev)();
extern void _ZN7S1584C93v29Ev();
extern void _ZN7S1584C93v30Ev();
static  VTBL_ENTRY vtc_S1584C7[] = {
  0,
  ABISELECT(32,12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1584C7[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&_ZN7S1584C7D1Ev,
  (VTBL_ENTRY)&_ZN7S1584C7D0Ev,
  (VTBL_ENTRY)&_ZN7S1584C73v33Ev,
  (VTBL_ENTRY)&_ZN7S1584C73v34Ev,
  (VTBL_ENTRY)&_ZN7S1584C73v35Ev,
  (VTBL_ENTRY)&_ZN7S1584C73v36Ev,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(-32,-12),
  0,
  0,
  0,
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S1584C7[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v21Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N7S1584C7D1Ev,_ZTv0_n64_N7S1584C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N7S1584C7D0Ev,_ZTv0_n64_N7S1584C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1584C83v31Ev,
  (VTBL_ENTRY)&_ZN7S1584C83v32Ev,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI7S1584C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n128_N7S1584C7D1Ev,_ZTvn24_n64_N7S1584C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n128_N7S1584C7D0Ev,_ZTvn24_n64_N7S1584C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1584C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1584C93v30Ev,
};
extern VTBL_ENTRY _ZTV7S1584C7[];
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void _ZN7S1584C53v19Ev();
extern void _ZN7S1584C53v20Ev();
extern void _ZN7S1584C53v21Ev();
extern void _ZN7S1584C8D1Ev();
extern void _ZN7S1584C8D0Ev();
extern void _ZN7S1584C83v31Ev();
extern void _ZN7S1584C83v32Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C8__7S1584C7[] = {
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S1584C8[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v21Ev,
  (VTBL_ENTRY)&_ZN7S1584C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1584C8D0Ev,
  (VTBL_ENTRY)&_ZN7S1584C83v31Ev,
  (VTBL_ENTRY)&_ZN7S1584C83v32Ev,
};
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void _ZN7S1584C53v19Ev();
extern void _ZN7S1584C53v20Ev();
extern void _ZN7S1584C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C57S1584C8__7S1584C7[] = {
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S1584C5[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v21Ev,
};
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C6__7S1584C57S1584C8__7S1584C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  (VTBL_ENTRY)&(_ZTI7S1584C5[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
};
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C6__7S1584C8__7S1584C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  (VTBL_ENTRY)&(_ZTI7S1584C8[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
};
static  VTT_ENTRY vtt_S1584C7[] = {
  {&(_ZTV7S1584C7[13]),  13,70},
  {&(_ZTV7S1584C7[48]),  48,70},
  {&(_ZTV7S1584C7[13]),  13,70},
  {&(_ZTV7S1584C7[66]),  66,70},
  {&(_tg__ZTV7S1584C8__7S1584C7[12]),  12,28},
  {&(_tg__ZTV7S1584C57S1584C8__7S1584C7[12]),  12,24},
  {&(_tg__ZTV7S1584C6__7S1584C57S1584C8__7S1584C7[11]),  11,20},
  {&(_tg__ZTV7S1584C6__7S1584C8__7S1584C7[11]),  11,20},
};
extern VTBL_ENTRY _ZTI7S1584C7[];
extern  VTBL_ENTRY _ZTV7S1584C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1584C7[];
static VTBL_ENTRY alt_thunk_names77[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N7S1584C7D0Ev,_ZTv0_n64_N7S1584C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S1584C7D0Ev,_ZThn12_N7S1584C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N7S1584C7D1Ev,_ZTv0_n64_N7S1584C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S1584C7D1Ev,_ZThn12_N7S1584C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1584C7 = {  "S1584C7", // class name
  bases_S1584C7, 4,
  &(vtc_S1584C7[0]), // expected_vtbl_contents
  &(vtt_S1584C7[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI7S1584C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1584C7),70, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1584C7),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names77,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1584C2  : S1584C3 , S1584C7 {
  virtual  ~S1584C2(); // _ZN7S1584C2D2Ev
  virtual void  v37(); // _ZN7S1584C23v37Ev
  virtual void  v38(); // _ZN7S1584C23v38Ev
  virtual void  v39(); // _ZN7S1584C23v39Ev
  virtual void  v40(); // _ZN7S1584C23v40Ev
  S1584C2(); // tgen
};
//SIG(-1 S1584C2) C1{ BC2{ BC3{ vd v5 v6} BC4{ VBC5{ v7 v8 v9 v10 v11 v12 v13 v14 v15} v16 v17 v18 Fp FD Fi} vd v19 v20 v21 v22 v23 v24 v25 Fp} BC6{ VBC7{ BC4 BC8{ vd v26 v27 FL Fi} vd v28 v29 Fp} vd v30 v31 v32 v33 Fp Fi} vd v1 v2 v3 v4}


 S1584C2 ::~S1584C2(){ note_dtor("S1584C2", this);}
void  S1584C2 ::v37(){vfunc_called(this, "_ZN7S1584C23v37Ev");}
void  S1584C2 ::v38(){vfunc_called(this, "_ZN7S1584C23v38Ev");}
void  S1584C2 ::v39(){vfunc_called(this, "_ZN7S1584C23v39Ev");}
void  S1584C2 ::v40(){vfunc_called(this, "_ZN7S1584C23v40Ev");}
S1584C2 ::S1584C2(){ note_ctor("S1584C2", this);} // tgen

static void Test_S1584C2()
{
  extern Class_Descriptor cd_S1584C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,23)];
    init_test(&cd_S1584C2, buf);
    S1584C2 *dp, &lv = *(dp=new (buf) S1584C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,88), "sizeof(S1584C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1584C2)");
    check_base_class_offset(lv, (S1584C4*)(S1584C3*), 0, "S1584C2");
    check_base_class_offset(lv, (S1584C6*)(S1584C5*)(S1584C3*), ABISELECT(16,4), "S1584C2");
    check_base_class_offset(lv, (S1584C6*)(S1584C5*)(S1584C8*), ABISELECT(16,4), "S1584C2");
    check_base_class_offset(lv, (S1584C5*)(S1584C3*), ABISELECT(16,4), "S1584C2");
    check_base_class_offset(lv, (S1584C3*), 0, "S1584C2");
    check_base_class_offset(lv, (S1584C5*)(S1584C8*), ABISELECT(96,44), "S1584C2");
    check_base_class_offset(lv, (S1584C9*)(S1584C8*), ABISELECT(136,68), "S1584C2");
    check_base_class_offset(lv, (S1584C8*)(S1584C7*), ABISELECT(96,44), "S1584C2");
    check_base_class_offset(lv, (S1584C7*), ABISELECT(64,32), "S1584C2");
    test_class_info(&lv, &cd_S1584C2);
    dp->~S1584C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1584C2(Test_S1584C2, "S1584C2", ABISELECT(176,88));

#else // __cplusplus

extern void _ZN7S1584C2C1Ev();
extern void _ZN7S1584C2D2Ev();
Name_Map name_map_S1584C2[] = {
  NSPAIR(_ZN7S1584C2C1Ev),
  NSPAIR(_ZN7S1584C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1584C4;
extern VTBL_ENTRY _ZTI7S1584C4[];
extern  VTBL_ENTRY _ZTV7S1584C4[];
extern Class_Descriptor cd_S1584C6;
extern VTBL_ENTRY _ZTI7S1584C6[];
extern  VTBL_ENTRY _ZTV7S1584C6[];
extern Class_Descriptor cd_S1584C5;
extern VTBL_ENTRY _ZTI7S1584C5[];
extern  VTBL_ENTRY _ZTV7S1584C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1584C5[];
extern Class_Descriptor cd_S1584C3;
extern VTBL_ENTRY _ZTI7S1584C3[];
extern  VTBL_ENTRY _ZTV7S1584C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1584C3[];
extern Class_Descriptor cd_S1584C5;
extern VTBL_ENTRY _ZTI7S1584C5[];
extern  VTBL_ENTRY _ZTV7S1584C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1584C5[];
extern Class_Descriptor cd_S1584C9;
extern VTBL_ENTRY _ZTI7S1584C9[];
extern  VTBL_ENTRY _ZTV7S1584C9[];
extern Class_Descriptor cd_S1584C8;
extern VTBL_ENTRY _ZTI7S1584C8[];
extern  VTBL_ENTRY _ZTV7S1584C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1584C8[];
extern Class_Descriptor cd_S1584C7;
extern VTBL_ENTRY _ZTI7S1584C7[];
extern  VTBL_ENTRY _ZTV7S1584C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1584C7[];
static Base_Class bases_S1584C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1584C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1584C6,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S1584C5,    ABISELECT(16,4), //bcp->offset
    19, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1584C3,    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_S1584C5,    ABISELECT(96,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1584C9,    ABISELECT(136,68), //bcp->offset
    107, //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
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1584C8,    ABISELECT(96,44), //bcp->offset
    71, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S1584C7,    ABISELECT(64,32), //bcp->offset
    43, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1584C2[];
extern void _ZN7S1584C2D1Ev();
extern void _ZN7S1584C2D0Ev();
extern void _ZN7S1584C42v8Ev();
extern void _ZN7S1584C42v9Ev();
extern void _ZN7S1584C33v22Ev();
extern void _ZN7S1584C33v23Ev();
extern void _ZN7S1584C33v24Ev();
extern void _ZN7S1584C33v25Ev();
extern void _ZN7S1584C33v26Ev();
extern void _ZN7S1584C33v27Ev();
extern void _ZN7S1584C33v28Ev();
extern void _ZN7S1584C23v37Ev();
extern void _ZN7S1584C23v38Ev();
extern void _ZN7S1584C23v39Ev();
extern void _ZN7S1584C23v40Ev();
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void _ZN7S1584C53v19Ev();
extern void _ZN7S1584C53v20Ev();
extern void _ZN7S1584C53v21Ev();
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void ABISELECT(_ZThn64_N7S1584C2D1Ev,_ZThn32_N7S1584C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S1584C2D0Ev,_ZThn32_N7S1584C2D0Ev)();
extern void _ZN7S1584C73v33Ev();
extern void _ZN7S1584C73v34Ev();
extern void _ZN7S1584C73v35Ev();
extern void _ZN7S1584C73v36Ev();
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void _ZN7S1584C53v19Ev();
extern void _ZN7S1584C53v20Ev();
extern void _ZN7S1584C53v21Ev();
extern void ABISELECT(_ZTv0_n128_N7S1584C2D1Ev,_ZTv0_n64_N7S1584C2D1Ev)();
extern void ABISELECT(_ZThn96_N7S1584C2D1Ev,_ZThn44_N7S1584C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n128_N7S1584C2D0Ev,_ZTv0_n64_N7S1584C2D0Ev)();
extern void ABISELECT(_ZThn96_N7S1584C2D0Ev,_ZThn44_N7S1584C2D0Ev)() __attribute__((weak));
extern void _ZN7S1584C83v31Ev();
extern void _ZN7S1584C83v32Ev();
extern void ABISELECT(_ZTvn40_n128_N7S1584C2D1Ev,_ZTvn24_n64_N7S1584C2D1Ev)();
extern void ABISELECT(_ZTvn40_n128_N7S1584C2D0Ev,_ZTvn24_n64_N7S1584C2D0Ev)();
extern void _ZN7S1584C93v29Ev();
extern void _ZN7S1584C93v30Ev();
static  VTBL_ENTRY vtc_S1584C2[] = {
  ABISELECT(96,44),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S1584C2[0]),
  (VTBL_ENTRY)&_ZN7S1584C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1584C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1584C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1584C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1584C23v37Ev,
  (VTBL_ENTRY)&_ZN7S1584C23v38Ev,
  (VTBL_ENTRY)&_ZN7S1584C23v39Ev,
  (VTBL_ENTRY)&_ZN7S1584C23v40Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S1584C2[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v21Ev,
  ABISELECT(-48,-28),
  ABISELECT(32,12),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S1584C2[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S1584C2D1Ev,_ZThn32_N7S1584C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S1584C2D0Ev,_ZThn32_N7S1584C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1584C73v33Ev,
  (VTBL_ENTRY)&_ZN7S1584C73v34Ev,
  (VTBL_ENTRY)&_ZN7S1584C73v35Ev,
  (VTBL_ENTRY)&_ZN7S1584C73v36Ev,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(-96,-44),
  0,
  0,
  0,
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI7S1584C2[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v21Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N7S1584C2D1Ev,_ZTv0_n64_N7S1584C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N7S1584C2D0Ev,_ZTv0_n64_N7S1584C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1584C83v31Ev,
  (VTBL_ENTRY)&_ZN7S1584C83v32Ev,
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI7S1584C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n128_N7S1584C2D1Ev,_ZTvn24_n64_N7S1584C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n128_N7S1584C2D0Ev,_ZTvn24_n64_N7S1584C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1584C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1584C93v30Ev,
};
extern VTBL_ENTRY _ZTV7S1584C2[];
extern void _ZN7S1584C3D1Ev();
extern void _ZN7S1584C3D0Ev();
extern void _ZN7S1584C42v8Ev();
extern void _ZN7S1584C42v9Ev();
extern void _ZN7S1584C33v22Ev();
extern void _ZN7S1584C33v23Ev();
extern void _ZN7S1584C33v24Ev();
extern void _ZN7S1584C33v25Ev();
extern void _ZN7S1584C33v26Ev();
extern void _ZN7S1584C33v27Ev();
extern void _ZN7S1584C33v28Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C3__7S1584C2[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S1584C3[0]),
  (VTBL_ENTRY)&_ZN7S1584C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1584C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1584C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1584C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v28Ev,
};
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void _ZN7S1584C53v19Ev();
extern void _ZN7S1584C53v20Ev();
extern void _ZN7S1584C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C57S1584C3__7S1584C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1584C5[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v21Ev,
};
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void _ZN7S1584C53v19Ev();
extern void _ZN7S1584C53v20Ev();
extern void _ZN7S1584C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C5__7S1584C3__7S1584C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S1584C3[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v21Ev,
};
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void _ZN7S1584C7D1Ev();
extern void _ZN7S1584C7D0Ev();
extern void _ZN7S1584C73v33Ev();
extern void _ZN7S1584C73v34Ev();
extern void _ZN7S1584C73v35Ev();
extern void _ZN7S1584C73v36Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C7__7S1584C2[] = {
  ABISELECT(-48,-28),
  ABISELECT(32,12),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI7S1584C7[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&_ZN7S1584C7D1Ev,
  (VTBL_ENTRY)&_ZN7S1584C7D0Ev,
  (VTBL_ENTRY)&_ZN7S1584C73v33Ev,
  (VTBL_ENTRY)&_ZN7S1584C73v34Ev,
  (VTBL_ENTRY)&_ZN7S1584C73v35Ev,
  (VTBL_ENTRY)&_ZN7S1584C73v36Ev,
};
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void _ZN7S1584C53v19Ev();
extern void _ZN7S1584C53v20Ev();
extern void _ZN7S1584C53v21Ev();
extern void ABISELECT(_ZTv0_n128_N7S1584C7D1Ev,_ZTv0_n64_N7S1584C7D1Ev)();
extern void ABISELECT(_ZThn32_N7S1584C7D1Ev,_ZThn12_N7S1584C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n128_N7S1584C7D0Ev,_ZTv0_n64_N7S1584C7D0Ev)();
extern void ABISELECT(_ZThn32_N7S1584C7D0Ev,_ZThn12_N7S1584C7D0Ev)() __attribute__((weak));
extern void _ZN7S1584C83v31Ev();
extern void _ZN7S1584C83v32Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C8__7S1584C7__7S1584C2[] = {
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(-32,-12),
  0,
  0,
  0,
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S1584C7[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v21Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N7S1584C7D1Ev,_ZTv0_n64_N7S1584C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N7S1584C7D0Ev,_ZTv0_n64_N7S1584C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1584C83v31Ev,
  (VTBL_ENTRY)&_ZN7S1584C83v32Ev,
};
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C6__7S1584C7__7S1584C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI7S1584C7[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
};
extern void ABISELECT(_ZTvn40_n128_N7S1584C7D1Ev,_ZTvn24_n64_N7S1584C7D1Ev)();
extern void ABISELECT(_ZTvn40_n128_N7S1584C7D0Ev,_ZTvn24_n64_N7S1584C7D0Ev)();
extern void _ZN7S1584C93v29Ev();
extern void _ZN7S1584C93v30Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C97S1584C8__7S1584C7__7S1584C2[] = {
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI7S1584C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n128_N7S1584C7D1Ev,_ZTvn24_n64_N7S1584C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n128_N7S1584C7D0Ev,_ZTvn24_n64_N7S1584C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1584C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1584C93v30Ev,
};
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void _ZN7S1584C53v19Ev();
extern void _ZN7S1584C53v20Ev();
extern void _ZN7S1584C53v21Ev();
extern void _ZN7S1584C8D1Ev();
extern void _ZN7S1584C8D0Ev();
extern void _ZN7S1584C83v31Ev();
extern void _ZN7S1584C83v32Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C8__7S1584C2[] = {
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S1584C8[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v21Ev,
  (VTBL_ENTRY)&_ZN7S1584C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1584C8D0Ev,
  (VTBL_ENTRY)&_ZN7S1584C83v31Ev,
  (VTBL_ENTRY)&_ZN7S1584C83v32Ev,
};
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void _ZN7S1584C53v19Ev();
extern void _ZN7S1584C53v20Ev();
extern void _ZN7S1584C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C57S1584C8__A1__7S1584C2[] = {
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S1584C5[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v21Ev,
};
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C6__7S1584C57S1584C8__A1__7S1584C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI7S1584C5[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
};
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C6__7S1584C8__7S1584C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI7S1584C8[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
};
static  VTT_ENTRY vtt_S1584C2[] = {
  {&(_ZTV7S1584C2[4]),  4,113},
  {&(_tg__ZTV7S1584C3__7S1584C2[3]),  3,14},
  {&(_tg__ZTV7S1584C57S1584C3__7S1584C2[12]),  12,24},
  {&(_tg__ZTV7S1584C57S1584C3__7S1584C2[12]),  12,24},
  {&(_tg__ZTV7S1584C5__7S1584C3__7S1584C2[12]),  12,24},
  {&(_tg__ZTV7S1584C5__7S1584C3__7S1584C2[12]),  12,24},
  {&(_tg__ZTV7S1584C7__7S1584C2[13]),  13,28},
  {&(_tg__ZTV7S1584C8__7S1584C7__7S1584C2[20]),  20,36},
  {&(_tg__ZTV7S1584C6__7S1584C7__7S1584C2[11]),  11,20},
  {&(_tg__ZTV7S1584C97S1584C8__7S1584C7__7S1584C2[2]),  2,6},
  {&(_ZTV7S1584C2[31]),  31,113},
  {&(_ZTV7S1584C2[31]),  31,113},
  {&(_ZTV7S1584C2[56]),  56,113},
  {&(_ZTV7S1584C2[91]),  91,113},
  {&(_ZTV7S1584C2[109]),  109,113},
  {&(_tg__ZTV7S1584C8__7S1584C2[12]),  12,28},
  {&(_tg__ZTV7S1584C57S1584C8__A1__7S1584C2[12]),  12,24},
  {&(_tg__ZTV7S1584C6__7S1584C57S1584C8__A1__7S1584C2[11]),  11,20},
  {&(_tg__ZTV7S1584C6__7S1584C8__7S1584C2[11]),  11,20},
};
extern VTBL_ENTRY _ZTI7S1584C2[];
extern  VTBL_ENTRY _ZTV7S1584C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1584C2[];
static VTBL_ENTRY alt_thunk_names78[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N7S1584C7D0Ev,_ZTv0_n64_N7S1584C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S1584C7D0Ev,_ZThn12_N7S1584C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N7S1584C7D1Ev,_ZTv0_n64_N7S1584C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S1584C7D1Ev,_ZThn12_N7S1584C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N7S1584C2D0Ev,_ZTv0_n64_N7S1584C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S1584C2D0Ev,_ZThn44_N7S1584C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N7S1584C2D1Ev,_ZTv0_n64_N7S1584C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S1584C2D1Ev,_ZThn44_N7S1584C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1584C2 = {  "S1584C2", // class name
  bases_S1584C2, 8,
  &(vtc_S1584C2[0]), // expected_vtbl_contents
  &(vtt_S1584C2[0]), // expected_vtt_contents
  ABISELECT(176,88), // object size
  NSPAIRA(_ZTI7S1584C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1584C2),113, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1584C2),19, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names78,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1584C1  : S1584C2 , S1584C6 {
  int s1584c1f0;
  ::S5266C29 s1584c1f1;
  long double s1584c1f2[2];
  virtual void  v1(); // _ZN7S1584C12v1Ev
  virtual void  v2(); // _ZN7S1584C12v2Ev
  virtual void  v3(); // _ZN7S1584C12v3Ev
  virtual void  v4(); // _ZN7S1584C12v4Ev
  virtual void  v5(); // _ZN7S1584C12v5Ev
  virtual void  v6(); // _ZN7S1584C12v6Ev
  virtual void  v7(); // _ZN7S1584C12v7Ev
  ~S1584C1(); // tgen
  S1584C1(); // tgen
};
//SIG(1 S1584C1) C1{ BC2{ BC3{ BC4{ vd v8 v9} BC5{ VBC6{ v10 v11 v12 v13 v14 v15 v16 v17 v18} v19 v20 v21 Fp FD Fi} vd v22 v23 v24 v25 v26 v27 v28 Fp} BC7{ VBC8{ BC5 BC9{ vd v29 v30 FL Fi} vd v31 v32 Fp} vd v33 v34 v35 v36 Fp Fi} vd v37 v38 v39 v40} BC6 v1 v2 v3 v4 v5 v6 v7 Fi FC10{ m} FD[2]}


void  S1584C1 ::v1(){vfunc_called(this, "_ZN7S1584C12v1Ev");}
void  S1584C1 ::v2(){vfunc_called(this, "_ZN7S1584C12v2Ev");}
void  S1584C1 ::v3(){vfunc_called(this, "_ZN7S1584C12v3Ev");}
void  S1584C1 ::v4(){vfunc_called(this, "_ZN7S1584C12v4Ev");}
void  S1584C1 ::v5(){vfunc_called(this, "_ZN7S1584C12v5Ev");}
void  S1584C1 ::v6(){vfunc_called(this, "_ZN7S1584C12v6Ev");}
void  S1584C1 ::v7(){vfunc_called(this, "_ZN7S1584C12v7Ev");}
S1584C1 ::~S1584C1(){ note_dtor("S1584C1", this);} // tgen
S1584C1 ::S1584C1(){ note_ctor("S1584C1", this);} // tgen

static void Test_S1584C1()
{
  extern Class_Descriptor cd_S1584C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,32)];
    init_test(&cd_S1584C1, buf);
    S1584C1 *dp, &lv = *(dp=new (buf) S1584C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,124), "sizeof(S1584C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1584C1)");
    check_base_class_offset(lv, (S1584C4*)(S1584C3*)(S1584C2*), 0, "S1584C1");
    check_base_class_offset(lv, (S1584C6*)(S1584C5*)(S1584C3*)(S1584C2*), ABISELECT(16,4), "S1584C1");
    check_base_class_offset(lv, (S1584C6*)(S1584C5*)(S1584C8*), ABISELECT(16,4), "S1584C1");
    check_base_class_offset(lv, (S1584C5*)(S1584C3*)(S1584C2*), ABISELECT(16,4), "S1584C1");
    check_base_class_offset(lv, (S1584C3*)(S1584C2*), 0, "S1584C1");
    check_base_class_offset(lv, (S1584C5*)(S1584C8*), ABISELECT(144,80), "S1584C1");
    check_base_class_offset(lv, (S1584C9*)(S1584C8*), ABISELECT(184,104), "S1584C1");
    check_base_class_offset(lv, (S1584C8*)(S1584C7*)(S1584C2*), ABISELECT(144,80), "S1584C1");
    check_base_class_offset(lv, (S1584C7*)(S1584C2*), ABISELECT(64,32), "S1584C1");
    check_base_class_offset(lv, (S1584C2*), 0, "S1584C1");
    /*is_ambiguous_... S1584C1::S1584C6 */ AMB_check_base_class_offset(lv, (S1584C6*), ABISELECT(88,44), "S1584C1");
    check_field_offset(lv, s1584c1f0, ABISELECT(96,48), "S1584C1.s1584c1f0");
    check_field_offset(lv, s1584c1f1, ABISELECT(100,52), "S1584C1.s1584c1f1");
    check_field_offset(lv, s1584c1f2, ABISELECT(112,56), "S1584C1.s1584c1f2");
    test_class_info(&lv, &cd_S1584C1);
    dp->~S1584C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1584C1(Test_S1584C1, "S1584C1", ABISELECT(224,124));

#else // __cplusplus

extern void _ZN7S1584C1C1Ev();
extern void _ZN7S1584C1D1Ev();
Name_Map name_map_S1584C1[] = {
  NSPAIR(_ZN7S1584C1C1Ev),
  NSPAIR(_ZN7S1584C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1584C4;
extern VTBL_ENTRY _ZTI7S1584C4[];
extern  VTBL_ENTRY _ZTV7S1584C4[];
extern Class_Descriptor cd_S1584C6;
extern VTBL_ENTRY _ZTI7S1584C6[];
extern  VTBL_ENTRY _ZTV7S1584C6[];
extern Class_Descriptor cd_S1584C5;
extern VTBL_ENTRY _ZTI7S1584C5[];
extern  VTBL_ENTRY _ZTV7S1584C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1584C5[];
extern Class_Descriptor cd_S1584C3;
extern VTBL_ENTRY _ZTI7S1584C3[];
extern  VTBL_ENTRY _ZTV7S1584C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1584C3[];
extern Class_Descriptor cd_S1584C5;
extern VTBL_ENTRY _ZTI7S1584C5[];
extern  VTBL_ENTRY _ZTV7S1584C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1584C5[];
extern Class_Descriptor cd_S1584C9;
extern VTBL_ENTRY _ZTI7S1584C9[];
extern  VTBL_ENTRY _ZTV7S1584C9[];
extern Class_Descriptor cd_S1584C8;
extern VTBL_ENTRY _ZTI7S1584C8[];
extern  VTBL_ENTRY _ZTV7S1584C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1584C8[];
extern Class_Descriptor cd_S1584C7;
extern VTBL_ENTRY _ZTI7S1584C7[];
extern  VTBL_ENTRY _ZTV7S1584C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1584C7[];
extern Class_Descriptor cd_S1584C2;
extern VTBL_ENTRY _ZTI7S1584C2[];
extern  VTBL_ENTRY _ZTV7S1584C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1584C2[];
extern Class_Descriptor cd_S1584C6;
extern VTBL_ENTRY _ZTI7S1584C6[];
extern  VTBL_ENTRY _ZTV7S1584C6[];
static Base_Class bases_S1584C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1584C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1584C6,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S1584C5,    ABISELECT(16,4), //bcp->offset
    26, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1584C3,    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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1584C5,    ABISELECT(144,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1584C9,    ABISELECT(184,104), //bcp->offset
    125, //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
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1584C8,    ABISELECT(144,80), //bcp->offset
    89, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S1584C7,    ABISELECT(64,32), //bcp->offset
    50, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1584C2,    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_S1584C6,    ABISELECT(88,44), //bcp->offset
    78, //bcp->virtual_function_table_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 _ZTI7S1584C1[];
extern void _ZN7S1584C1D1Ev();
extern void _ZN7S1584C1D0Ev();
extern void _ZN7S1584C42v8Ev();
extern void _ZN7S1584C42v9Ev();
extern void _ZN7S1584C33v22Ev();
extern void _ZN7S1584C33v23Ev();
extern void _ZN7S1584C33v24Ev();
extern void _ZN7S1584C33v25Ev();
extern void _ZN7S1584C33v26Ev();
extern void _ZN7S1584C33v27Ev();
extern void _ZN7S1584C33v28Ev();
extern void _ZN7S1584C23v37Ev();
extern void _ZN7S1584C23v38Ev();
extern void _ZN7S1584C23v39Ev();
extern void _ZN7S1584C23v40Ev();
extern void _ZN7S1584C12v1Ev();
extern void _ZN7S1584C12v2Ev();
extern void _ZN7S1584C12v3Ev();
extern void _ZN7S1584C12v4Ev();
extern void _ZN7S1584C12v5Ev();
extern void _ZN7S1584C12v6Ev();
extern void _ZN7S1584C12v7Ev();
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void _ZN7S1584C53v19Ev();
extern void _ZN7S1584C53v20Ev();
extern void _ZN7S1584C53v21Ev();
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void ABISELECT(_ZThn64_N7S1584C1D1Ev,_ZThn32_N7S1584C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S1584C1D0Ev,_ZThn32_N7S1584C1D0Ev)();
extern void _ZN7S1584C73v33Ev();
extern void _ZN7S1584C73v34Ev();
extern void _ZN7S1584C73v35Ev();
extern void _ZN7S1584C73v36Ev();
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void _ZN7S1584C53v19Ev();
extern void _ZN7S1584C53v20Ev();
extern void _ZN7S1584C53v21Ev();
extern void ABISELECT(_ZTv0_n128_N7S1584C1D1Ev,_ZTv0_n64_N7S1584C1D1Ev)();
extern void ABISELECT(_ZThn144_N7S1584C1D1Ev,_ZThn80_N7S1584C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n128_N7S1584C1D0Ev,_ZTv0_n64_N7S1584C1D0Ev)();
extern void ABISELECT(_ZThn144_N7S1584C1D0Ev,_ZThn80_N7S1584C1D0Ev)() __attribute__((weak));
extern void _ZN7S1584C83v31Ev();
extern void _ZN7S1584C83v32Ev();
extern void ABISELECT(_ZTvn40_n128_N7S1584C1D1Ev,_ZTvn24_n64_N7S1584C1D1Ev)();
extern void ABISELECT(_ZTvn40_n128_N7S1584C1D0Ev,_ZTvn24_n64_N7S1584C1D0Ev)();
extern void _ZN7S1584C93v29Ev();
extern void _ZN7S1584C93v30Ev();
static  VTBL_ENTRY vtc_S1584C1[] = {
  ABISELECT(144,80),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S1584C1[0]),
  (VTBL_ENTRY)&_ZN7S1584C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1584C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1584C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1584C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1584C23v37Ev,
  (VTBL_ENTRY)&_ZN7S1584C23v38Ev,
  (VTBL_ENTRY)&_ZN7S1584C23v39Ev,
  (VTBL_ENTRY)&_ZN7S1584C23v40Ev,
  (VTBL_ENTRY)&_ZN7S1584C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1584C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1584C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1584C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1584C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1584C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1584C12v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S1584C1[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v21Ev,
  ABISELECT(-48,-28),
  ABISELECT(80,48),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S1584C1[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S1584C1D1Ev,_ZThn32_N7S1584C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S1584C1D0Ev,_ZThn32_N7S1584C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1584C73v33Ev,
  (VTBL_ENTRY)&_ZN7S1584C73v34Ev,
  (VTBL_ENTRY)&_ZN7S1584C73v35Ev,
  (VTBL_ENTRY)&_ZN7S1584C73v36Ev,
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI7S1584C1[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(-144,-80),
  0,
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI7S1584C1[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v21Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N7S1584C1D1Ev,_ZTv0_n64_N7S1584C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N7S1584C1D0Ev,_ZTv0_n64_N7S1584C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1584C83v31Ev,
  (VTBL_ENTRY)&_ZN7S1584C83v32Ev,
  ABISELECT(-184,-104),
  (VTBL_ENTRY)&(_ZTI7S1584C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n128_N7S1584C1D1Ev,_ZTvn24_n64_N7S1584C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n128_N7S1584C1D0Ev,_ZTvn24_n64_N7S1584C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1584C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1584C93v30Ev,
};
extern VTBL_ENTRY _ZTV7S1584C1[];
extern void _ZN7S1584C2D1Ev();
extern void _ZN7S1584C2D0Ev();
extern void _ZN7S1584C42v8Ev();
extern void _ZN7S1584C42v9Ev();
extern void _ZN7S1584C33v22Ev();
extern void _ZN7S1584C33v23Ev();
extern void _ZN7S1584C33v24Ev();
extern void _ZN7S1584C33v25Ev();
extern void _ZN7S1584C33v26Ev();
extern void _ZN7S1584C33v27Ev();
extern void _ZN7S1584C33v28Ev();
extern void _ZN7S1584C23v37Ev();
extern void _ZN7S1584C23v38Ev();
extern void _ZN7S1584C23v39Ev();
extern void _ZN7S1584C23v40Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C2__7S1584C1[] = {
  ABISELECT(144,80),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S1584C2[0]),
  (VTBL_ENTRY)&_ZN7S1584C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1584C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1584C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1584C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1584C23v37Ev,
  (VTBL_ENTRY)&_ZN7S1584C23v38Ev,
  (VTBL_ENTRY)&_ZN7S1584C23v39Ev,
  (VTBL_ENTRY)&_ZN7S1584C23v40Ev,
};
extern void _ZN7S1584C3D1Ev();
extern void _ZN7S1584C3D0Ev();
extern void _ZN7S1584C42v8Ev();
extern void _ZN7S1584C42v9Ev();
extern void _ZN7S1584C33v22Ev();
extern void _ZN7S1584C33v23Ev();
extern void _ZN7S1584C33v24Ev();
extern void _ZN7S1584C33v25Ev();
extern void _ZN7S1584C33v26Ev();
extern void _ZN7S1584C33v27Ev();
extern void _ZN7S1584C33v28Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C37S1584C2__7S1584C1[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S1584C3[0]),
  (VTBL_ENTRY)&_ZN7S1584C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1584C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1584C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1584C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1584C33v28Ev,
};
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void _ZN7S1584C53v19Ev();
extern void _ZN7S1584C53v20Ev();
extern void _ZN7S1584C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C57S1584C37S1584C2__7S1584C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1584C5[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v21Ev,
};
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void _ZN7S1584C53v19Ev();
extern void _ZN7S1584C53v20Ev();
extern void _ZN7S1584C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C5__7S1584C37S1584C2__7S1584C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S1584C3[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v21Ev,
};
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void _ZN7S1584C7D1Ev();
extern void _ZN7S1584C7D0Ev();
extern void _ZN7S1584C73v33Ev();
extern void _ZN7S1584C73v34Ev();
extern void _ZN7S1584C73v35Ev();
extern void _ZN7S1584C73v36Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C77S1584C2__7S1584C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(80,48),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI7S1584C7[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&_ZN7S1584C7D1Ev,
  (VTBL_ENTRY)&_ZN7S1584C7D0Ev,
  (VTBL_ENTRY)&_ZN7S1584C73v33Ev,
  (VTBL_ENTRY)&_ZN7S1584C73v34Ev,
  (VTBL_ENTRY)&_ZN7S1584C73v35Ev,
  (VTBL_ENTRY)&_ZN7S1584C73v36Ev,
};
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void _ZN7S1584C53v19Ev();
extern void _ZN7S1584C53v20Ev();
extern void _ZN7S1584C53v21Ev();
extern void ABISELECT(_ZTv0_n128_N7S1584C7D1Ev,_ZTv0_n64_N7S1584C7D1Ev)();
extern void ABISELECT(_ZThn80_N7S1584C7D1Ev,_ZThn48_N7S1584C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n128_N7S1584C7D0Ev,_ZTv0_n64_N7S1584C7D0Ev)();
extern void ABISELECT(_ZThn80_N7S1584C7D0Ev,_ZThn48_N7S1584C7D0Ev)() __attribute__((weak));
extern void _ZN7S1584C83v31Ev();
extern void _ZN7S1584C83v32Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C8__7S1584C77S1584C2__7S1584C1[] = {
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(-80,-48),
  0,
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI7S1584C7[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v21Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N7S1584C7D1Ev,_ZTv0_n64_N7S1584C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N7S1584C7D0Ev,_ZTv0_n64_N7S1584C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1584C83v31Ev,
  (VTBL_ENTRY)&_ZN7S1584C83v32Ev,
};
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C6__7S1584C77S1584C2__7S1584C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI7S1584C7[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
};
extern void ABISELECT(_ZTvn40_n128_N7S1584C7D1Ev,_ZTvn24_n64_N7S1584C7D1Ev)();
extern void ABISELECT(_ZTvn40_n128_N7S1584C7D0Ev,_ZTvn24_n64_N7S1584C7D0Ev)();
extern void _ZN7S1584C93v29Ev();
extern void _ZN7S1584C93v30Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C97S1584C8__7S1584C77S1584C2__7S1584C1[] = {
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI7S1584C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n128_N7S1584C7D1Ev,_ZTvn24_n64_N7S1584C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n128_N7S1584C7D0Ev,_ZTvn24_n64_N7S1584C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1584C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1584C93v30Ev,
};
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void _ZN7S1584C53v19Ev();
extern void _ZN7S1584C53v20Ev();
extern void _ZN7S1584C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C57S1584C3__7S1584C2__7S1584C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S1584C2[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v21Ev,
};
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void ABISELECT(_ZThn64_N7S1584C2D1Ev,_ZThn32_N7S1584C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S1584C2D0Ev,_ZThn32_N7S1584C2D0Ev)();
extern void _ZN7S1584C73v33Ev();
extern void _ZN7S1584C73v34Ev();
extern void _ZN7S1584C73v35Ev();
extern void _ZN7S1584C73v36Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C7__7S1584C2__7S1584C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(80,48),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S1584C2[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S1584C2D1Ev,_ZThn32_N7S1584C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S1584C2D0Ev,_ZThn32_N7S1584C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1584C73v33Ev,
  (VTBL_ENTRY)&_ZN7S1584C73v34Ev,
  (VTBL_ENTRY)&_ZN7S1584C73v35Ev,
  (VTBL_ENTRY)&_ZN7S1584C73v36Ev,
};
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void _ZN7S1584C53v19Ev();
extern void _ZN7S1584C53v20Ev();
extern void _ZN7S1584C53v21Ev();
extern void ABISELECT(_ZTv0_n128_N7S1584C2D1Ev,_ZTv0_n64_N7S1584C2D1Ev)();
extern void ABISELECT(_ZThn144_N7S1584C2D1Ev,_ZThn80_N7S1584C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n128_N7S1584C2D0Ev,_ZTv0_n64_N7S1584C2D0Ev)();
extern void ABISELECT(_ZThn144_N7S1584C2D0Ev,_ZThn80_N7S1584C2D0Ev)() __attribute__((weak));
extern void _ZN7S1584C83v31Ev();
extern void _ZN7S1584C83v32Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C8__7S1584C2__7S1584C1[] = {
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(-144,-80),
  0,
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI7S1584C2[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v21Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N7S1584C2D1Ev,_ZTv0_n64_N7S1584C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N7S1584C2D0Ev,_ZTv0_n64_N7S1584C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1584C83v31Ev,
  (VTBL_ENTRY)&_ZN7S1584C83v32Ev,
};
extern void ABISELECT(_ZTvn40_n128_N7S1584C2D1Ev,_ZTvn24_n64_N7S1584C2D1Ev)();
extern void ABISELECT(_ZTvn40_n128_N7S1584C2D0Ev,_ZTvn24_n64_N7S1584C2D0Ev)();
extern void _ZN7S1584C93v29Ev();
extern void _ZN7S1584C93v30Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C97S1584C8__7S1584C2__7S1584C1[] = {
  ABISELECT(-184,-104),
  (VTBL_ENTRY)&(_ZTI7S1584C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n128_N7S1584C2D1Ev,_ZTvn24_n64_N7S1584C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n128_N7S1584C2D0Ev,_ZTvn24_n64_N7S1584C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1584C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1584C93v30Ev,
};
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void _ZN7S1584C53v19Ev();
extern void _ZN7S1584C53v20Ev();
extern void _ZN7S1584C53v21Ev();
extern void _ZN7S1584C8D1Ev();
extern void _ZN7S1584C8D0Ev();
extern void _ZN7S1584C83v31Ev();
extern void _ZN7S1584C83v32Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C8__7S1584C1[] = {
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S1584C8[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v21Ev,
  (VTBL_ENTRY)&_ZN7S1584C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1584C8D0Ev,
  (VTBL_ENTRY)&_ZN7S1584C83v31Ev,
  (VTBL_ENTRY)&_ZN7S1584C83v32Ev,
};
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
extern void _ZN7S1584C53v19Ev();
extern void _ZN7S1584C53v20Ev();
extern void _ZN7S1584C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C57S1584C8__A1__7S1584C1[] = {
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S1584C5[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1584C53v21Ev,
};
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C6__7S1584C57S1584C8__A1__7S1584C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S1584C5[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
};
extern void _ZN7S1584C63v10Ev();
extern void _ZN7S1584C63v11Ev();
extern void _ZN7S1584C63v12Ev();
extern void _ZN7S1584C63v13Ev();
extern void _ZN7S1584C63v14Ev();
extern void _ZN7S1584C63v15Ev();
extern void _ZN7S1584C63v16Ev();
extern void _ZN7S1584C63v17Ev();
extern void _ZN7S1584C63v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1584C6__7S1584C8__7S1584C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S1584C8[0]),
  (VTBL_ENTRY)&_ZN7S1584C63v10Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v11Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v12Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v17Ev,
  (VTBL_ENTRY)&_ZN7S1584C63v18Ev,
};
static  VTT_ENTRY vtt_S1584C1[] = {
  {&(_ZTV7S1584C1[4]),  4,131},
  {&(_tg__ZTV7S1584C2__7S1584C1[4]),  4,19},
  {&(_tg__ZTV7S1584C37S1584C2__7S1584C1[3]),  3,14},
  {&(_tg__ZTV7S1584C57S1584C37S1584C2__7S1584C1[12]),  12,24},
  {&(_tg__ZTV7S1584C57S1584C37S1584C2__7S1584C1[12]),  12,24},
  {&(_tg__ZTV7S1584C5__7S1584C37S1584C2__7S1584C1[12]),  12,24},
  {&(_tg__ZTV7S1584C5__7S1584C37S1584C2__7S1584C1[12]),  12,24},
  {&(_tg__ZTV7S1584C77S1584C2__7S1584C1[13]),  13,28},
  {&(_tg__ZTV7S1584C8__7S1584C77S1584C2__7S1584C1[20]),  20,36},
  {&(_tg__ZTV7S1584C6__7S1584C77S1584C2__7S1584C1[11]),  11,20},
  {&(_tg__ZTV7S1584C97S1584C8__7S1584C77S1584C2__7S1584C1[2]),  2,6},
  {&(_tg__ZTV7S1584C57S1584C3__7S1584C2__7S1584C1[12]),  12,24},
  {&(_tg__ZTV7S1584C57S1584C3__7S1584C2__7S1584C1[12]),  12,24},
  {&(_tg__ZTV7S1584C7__7S1584C2__7S1584C1[13]),  13,28},
  {&(_tg__ZTV7S1584C8__7S1584C2__7S1584C1[20]),  20,36},
  {&(_tg__ZTV7S1584C97S1584C8__7S1584C2__7S1584C1[2]),  2,6},
  {&(_ZTV7S1584C1[38]),  38,131},
  {&(_ZTV7S1584C1[38]),  38,131},
  {&(_ZTV7S1584C1[63]),  63,131},
  {&(_ZTV7S1584C1[109]),  109,131},
  {&(_ZTV7S1584C1[127]),  127,131},
  {&(_tg__ZTV7S1584C8__7S1584C1[12]),  12,28},
  {&(_tg__ZTV7S1584C57S1584C8__A1__7S1584C1[12]),  12,24},
  {&(_tg__ZTV7S1584C6__7S1584C57S1584C8__A1__7S1584C1[11]),  11,20},
  {&(_tg__ZTV7S1584C6__7S1584C8__7S1584C1[11]),  11,20},
};
extern VTBL_ENTRY _ZTI7S1584C1[];
extern  VTBL_ENTRY _ZTV7S1584C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1584C1[];
static VTBL_ENTRY alt_thunk_names79[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N7S1584C2D0Ev,_ZTv0_n64_N7S1584C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S1584C2D0Ev,_ZThn80_N7S1584C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N7S1584C2D1Ev,_ZTv0_n64_N7S1584C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S1584C2D1Ev,_ZThn80_N7S1584C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N7S1584C7D0Ev,_ZTv0_n64_N7S1584C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S1584C7D0Ev,_ZThn48_N7S1584C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N7S1584C7D1Ev,_ZTv0_n64_N7S1584C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S1584C7D1Ev,_ZThn48_N7S1584C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N7S1584C1D0Ev,_ZTv0_n64_N7S1584C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S1584C1D0Ev,_ZThn80_N7S1584C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N7S1584C1D1Ev,_ZTv0_n64_N7S1584C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S1584C1D1Ev,_ZThn80_N7S1584C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1584C1 = {  "S1584C1", // class name
  bases_S1584C1, 10,
  &(vtc_S1584C1[0]), // expected_vtbl_contents
  &(vtt_S1584C1[0]), // expected_vtt_contents
  ABISELECT(224,124), // object size
  NSPAIRA(_ZTI7S1584C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1584C1),131, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1584C1),25, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names79,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1673C3  : S1679C4_nt {
  virtual void  v3(); // _ZN7S1673C32v3Ev
  virtual void  v4(); // _ZN7S1673C32v4Ev
  virtual void  v5(); // _ZN7S1673C32v5Ev
  virtual void  v6(); // _ZN7S1673C32v6Ev
  virtual void  v7(); // _ZN7S1673C32v7Ev
  virtual void  v8(); // _ZN7S1673C32v8Ev
  virtual void  v9(); // _ZN7S1673C32v9Ev
  virtual void  v10(); // _ZN7S1673C33v10Ev
  virtual void  v11(); // _ZN7S1673C33v11Ev
  virtual void  v12(); // _ZN7S1673C33v12Ev
  virtual void  v13(); // _ZN7S1673C33v13Ev
  virtual void  v14(); // _ZN7S1673C33v14Ev
  ~S1673C3(); // tgen
  S1673C3(); // tgen
};
//SIG(-1 S1673C3) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S1673C3 ::v3(){vfunc_called(this, "_ZN7S1673C32v3Ev");}
void  S1673C3 ::v4(){vfunc_called(this, "_ZN7S1673C32v4Ev");}
void  S1673C3 ::v5(){vfunc_called(this, "_ZN7S1673C32v5Ev");}
void  S1673C3 ::v6(){vfunc_called(this, "_ZN7S1673C32v6Ev");}
void  S1673C3 ::v7(){vfunc_called(this, "_ZN7S1673C32v7Ev");}
void  S1673C3 ::v8(){vfunc_called(this, "_ZN7S1673C32v8Ev");}
void  S1673C3 ::v9(){vfunc_called(this, "_ZN7S1673C32v9Ev");}
void  S1673C3 ::v10(){vfunc_called(this, "_ZN7S1673C33v10Ev");}
void  S1673C3 ::v11(){vfunc_called(this, "_ZN7S1673C33v11Ev");}
void  S1673C3 ::v12(){vfunc_called(this, "_ZN7S1673C33v12Ev");}
void  S1673C3 ::v13(){vfunc_called(this, "_ZN7S1673C33v13Ev");}
void  S1673C3 ::v14(){vfunc_called(this, "_ZN7S1673C33v14Ev");}
S1673C3 ::~S1673C3(){ note_dtor("S1673C3", this);} // tgen
S1673C3 ::S1673C3(){ note_ctor("S1673C3", this);} // tgen

static void Test_S1673C3()
{
  extern Class_Descriptor cd_S1673C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1673C3, buf);
    S1673C3 *dp, &lv = *(dp=new (buf) S1673C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1673C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1673C3)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S1673C3");
    test_class_info(&lv, &cd_S1673C3);
    dp->~S1673C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1673C3(Test_S1673C3, "S1673C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1673C3C1Ev();
extern void _ZN7S1673C3D1Ev();
Name_Map name_map_S1673C3[] = {
  NSPAIR(_ZN7S1673C3C1Ev),
  NSPAIR(_ZN7S1673C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S1673C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S1673C3[];
extern void _ZN7S1673C3D1Ev();
extern void _ZN7S1673C3D0Ev();
extern void _ZN7S1673C32v3Ev();
extern void _ZN7S1673C32v4Ev();
extern void _ZN7S1673C32v5Ev();
extern void _ZN7S1673C32v6Ev();
extern void _ZN7S1673C32v7Ev();
extern void _ZN7S1673C32v8Ev();
extern void _ZN7S1673C32v9Ev();
extern void _ZN7S1673C33v10Ev();
extern void _ZN7S1673C33v11Ev();
extern void _ZN7S1673C33v12Ev();
extern void _ZN7S1673C33v13Ev();
extern void _ZN7S1673C33v14Ev();
static  VTBL_ENTRY vtc_S1673C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1673C3[0]),
  (VTBL_ENTRY)&_ZN7S1673C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1673C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1673C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1673C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1673C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1673C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1673C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1673C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1673C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1673C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1673C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1673C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1673C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1673C33v14Ev,
};
extern VTBL_ENTRY _ZTI7S1673C3[];
extern  VTBL_ENTRY _ZTV7S1673C3[];
Class_Descriptor cd_S1673C3 = {  "S1673C3", // class name
  bases_S1673C3, 1,
  &(vtc_S1673C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1673C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1673C3),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1673C2  : S1673C3 {
  ::S79C38_nt s1673c2f0;
  ::S17777C6_nt s1673c2f1;
  ::S1679C8_nt s1673c2f2;
  int s1673c2f3[4];
  ::S4533C11_nt s1673c2f4;
  void *s1673c2f5[4];
  virtual  ~S1673C2(); // _ZN7S1673C2D1Ev
  virtual void  v15(); // _ZN7S1673C23v15Ev
  virtual void  v16(); // _ZN7S1673C23v16Ev
  virtual void  v17(); // _ZN7S1673C23v17Ev
  virtual void  v18(); // _ZN7S1673C23v18Ev
  virtual void  v19(); // _ZN7S1673C23v19Ev
  virtual void  v20(); // _ZN7S1673C23v20Ev
  virtual void  v21(); // _ZN7S1673C23v21Ev
  virtual void  v22(); // _ZN7S1673C23v22Ev
  virtual void  v23(); // _ZN7S1673C23v23Ev
  virtual void  v24(); // _ZN7S1673C23v24Ev
  virtual void  v25(); // _ZN7S1673C23v25Ev
  virtual void  v26(); // _ZN7S1673C23v26Ev
  virtual void  v27(); // _ZN7S1673C23v27Ev
  S1673C2(); // tgen
};
//SIG(-1 S1673C2) C1{ BC2{ BC3{ vd m Fi} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 FC4{ m Fp[2]} FC5{ m Fp} FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]} Fi[4] FC9{ m Fp} Fp[4]}


 S1673C2 ::~S1673C2(){ note_dtor("S1673C2", this);}
void  S1673C2 ::v15(){vfunc_called(this, "_ZN7S1673C23v15Ev");}
void  S1673C2 ::v16(){vfunc_called(this, "_ZN7S1673C23v16Ev");}
void  S1673C2 ::v17(){vfunc_called(this, "_ZN7S1673C23v17Ev");}
void  S1673C2 ::v18(){vfunc_called(this, "_ZN7S1673C23v18Ev");}
void  S1673C2 ::v19(){vfunc_called(this, "_ZN7S1673C23v19Ev");}
void  S1673C2 ::v20(){vfunc_called(this, "_ZN7S1673C23v20Ev");}
void  S1673C2 ::v21(){vfunc_called(this, "_ZN7S1673C23v21Ev");}
void  S1673C2 ::v22(){vfunc_called(this, "_ZN7S1673C23v22Ev");}
void  S1673C2 ::v23(){vfunc_called(this, "_ZN7S1673C23v23Ev");}
void  S1673C2 ::v24(){vfunc_called(this, "_ZN7S1673C23v24Ev");}
void  S1673C2 ::v25(){vfunc_called(this, "_ZN7S1673C23v25Ev");}
void  S1673C2 ::v26(){vfunc_called(this, "_ZN7S1673C23v26Ev");}
void  S1673C2 ::v27(){vfunc_called(this, "_ZN7S1673C23v27Ev");}
S1673C2 ::S1673C2(){ note_ctor("S1673C2", this);} // tgen

static void Test_S1673C2()
{
  extern Class_Descriptor cd_S1673C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,21)];
    init_test(&cd_S1673C2, buf);
    S1673C2 *dp, &lv = *(dp=new (buf) S1673C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,80), "sizeof(S1673C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1673C2)");
    check_base_class_offset(lv, (S1679C4_nt*)(S1673C3*), 0, "S1673C2");
    check_base_class_offset(lv, (S1673C3*), 0, "S1673C2");
    check_field_offset(lv, s1673c2f0, ABISELECT(16,8), "S1673C2.s1673c2f0");
    check_field_offset(lv, s1673c2f1, ABISELECT(32,16), "S1673C2.s1673c2f1");
    check_field_offset(lv, s1673c2f2, ABISELECT(40,20), "S1673C2.s1673c2f2");
    check_field_offset(lv, s1673c2f3, ABISELECT(80,44), "S1673C2.s1673c2f3");
    check_field_offset(lv, s1673c2f4, ABISELECT(96,60), "S1673C2.s1673c2f4");
    check_field_offset(lv, s1673c2f5, ABISELECT(104,64), "S1673C2.s1673c2f5");
    test_class_info(&lv, &cd_S1673C2);
    dp->~S1673C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1673C2(Test_S1673C2, "S1673C2", ABISELECT(136,80));

#else // __cplusplus

extern void _ZN7S1673C2C1Ev();
extern void _ZN7S1673C2D1Ev();
Name_Map name_map_S1673C2[] = {
  NSPAIR(_ZN7S1673C2C1Ev),
  NSPAIR(_ZN7S1673C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S1673C3;
extern VTBL_ENTRY _ZTI7S1673C3[];
extern  VTBL_ENTRY _ZTV7S1673C3[];
static Base_Class bases_S1673C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S1673C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1673C2[];
extern void _ZN7S1673C2D1Ev();
extern void _ZN7S1673C2D0Ev();
extern void _ZN7S1673C32v3Ev();
extern void _ZN7S1673C32v4Ev();
extern void _ZN7S1673C32v5Ev();
extern void _ZN7S1673C32v6Ev();
extern void _ZN7S1673C32v7Ev();
extern void _ZN7S1673C32v8Ev();
extern void _ZN7S1673C32v9Ev();
extern void _ZN7S1673C33v10Ev();
extern void _ZN7S1673C33v11Ev();
extern void _ZN7S1673C33v12Ev();
extern void _ZN7S1673C33v13Ev();
extern void _ZN7S1673C33v14Ev();
extern void _ZN7S1673C23v15Ev();
extern void _ZN7S1673C23v16Ev();
extern void _ZN7S1673C23v17Ev();
extern void _ZN7S1673C23v18Ev();
extern void _ZN7S1673C23v19Ev();
extern void _ZN7S1673C23v20Ev();
extern void _ZN7S1673C23v21Ev();
extern void _ZN7S1673C23v22Ev();
extern void _ZN7S1673C23v23Ev();
extern void _ZN7S1673C23v24Ev();
extern void _ZN7S1673C23v25Ev();
extern void _ZN7S1673C23v26Ev();
extern void _ZN7S1673C23v27Ev();
static  VTBL_ENTRY vtc_S1673C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1673C2[0]),
  (VTBL_ENTRY)&_ZN7S1673C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1673C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1673C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1673C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1673C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1673C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1673C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1673C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1673C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1673C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1673C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1673C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1673C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1673C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1673C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1673C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1673C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1673C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1673C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1673C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1673C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1673C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1673C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1673C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1673C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1673C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1673C23v27Ev,
};
extern VTBL_ENTRY _ZTI7S1673C2[];
extern  VTBL_ENTRY _ZTV7S1673C2[];
Class_Descriptor cd_S1673C2 = {  "S1673C2", // class name
  bases_S1673C2, 2,
  &(vtc_S1673C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,80), // object size
  NSPAIRA(_ZTI7S1673C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1673C2),29, //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  S1673C15_nt  {
  __tsi64 s1673c15f0[4];
  void  mf1673c15(); // _ZN11S1673C15_nt9mf1673c15Ev
};
//SIG(-1 S1673C15_nt) C1{ m FL[4]}


void  S1673C15_nt ::mf1673c15(){}

//skip512 S1673C15_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1673C1  : S1673C2 {
  ::S1679C8_nt s1673c1f0;
  ::S5266C24 s1673c1f1;
  ::S1673C15_nt s1673c1f2;
  virtual  ~S1673C1(); // _ZN7S1673C1D1Ev
  virtual void  v1(); // _ZN7S1673C12v1Ev
  virtual void  v2(); // _ZN7S1673C12v2Ev
  S1673C1(); // tgen
};
//SIG(1 S1673C1) C1{ BC2{ BC3{ BC4{ vd m Fi} v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14} vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 FC5{ m Fp[2]} FC6{ m Fp} FC7{ m FC8{ m Fp Fi[2] FC9{ m}} Fp[2]} Fi[4] FC10{ m Fp} Fp[4]} vd v1 v2 FC7 FC11{ BC12{ m Fp Fi FC13{ m} FC13}} FC14{ m FL[4]}}


 S1673C1 ::~S1673C1(){ note_dtor("S1673C1", this);}
void  S1673C1 ::v1(){vfunc_called(this, "_ZN7S1673C12v1Ev");}
void  S1673C1 ::v2(){vfunc_called(this, "_ZN7S1673C12v2Ev");}
S1673C1 ::S1673C1(){ note_ctor("S1673C1", this);} // tgen

static void Test_S1673C1()
{
  extern Class_Descriptor cd_S1673C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,38)];
    init_test(&cd_S1673C1, buf);
    S1673C1 *dp, &lv = *(dp=new (buf) S1673C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,148), "sizeof(S1673C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1673C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S1673C3*)(S1673C2*), 0, "S1673C1");
    check_base_class_offset(lv, (S1673C3*)(S1673C2*), 0, "S1673C1");
    check_base_class_offset(lv, (S1673C2*), 0, "S1673C1");
    check_field_offset(lv, s1673c1f0, ABISELECT(136,80), "S1673C1.s1673c1f0");
    check_field_offset(lv, s1673c1f1, ABISELECT(176,104), "S1673C1.s1673c1f1");
    check_field_offset(lv, s1673c1f2, ABISELECT(192,116), "S1673C1.s1673c1f2");
    test_class_info(&lv, &cd_S1673C1);
    dp->~S1673C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1673C1(Test_S1673C1, "S1673C1", ABISELECT(224,148));

#else // __cplusplus

extern void _ZN7S1673C1C1Ev();
extern void _ZN7S1673C1D1Ev();
Name_Map name_map_S1673C1[] = {
  NSPAIR(_ZN7S1673C1C1Ev),
  NSPAIR(_ZN7S1673C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S1673C3;
extern VTBL_ENTRY _ZTI7S1673C3[];
extern  VTBL_ENTRY _ZTV7S1673C3[];
extern Class_Descriptor cd_S1673C2;
extern VTBL_ENTRY _ZTI7S1673C2[];
extern  VTBL_ENTRY _ZTV7S1673C2[];
static Base_Class bases_S1673C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S1673C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1673C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1673C1[];
extern void _ZN7S1673C1D1Ev();
extern void _ZN7S1673C1D0Ev();
extern void _ZN7S1673C32v3Ev();
extern void _ZN7S1673C32v4Ev();
extern void _ZN7S1673C32v5Ev();
extern void _ZN7S1673C32v6Ev();
extern void _ZN7S1673C32v7Ev();
extern void _ZN7S1673C32v8Ev();
extern void _ZN7S1673C32v9Ev();
extern void _ZN7S1673C33v10Ev();
extern void _ZN7S1673C33v11Ev();
extern void _ZN7S1673C33v12Ev();
extern void _ZN7S1673C33v13Ev();
extern void _ZN7S1673C33v14Ev();
extern void _ZN7S1673C23v15Ev();
extern void _ZN7S1673C23v16Ev();
extern void _ZN7S1673C23v17Ev();
extern void _ZN7S1673C23v18Ev();
extern void _ZN7S1673C23v19Ev();
extern void _ZN7S1673C23v20Ev();
extern void _ZN7S1673C23v21Ev();
extern void _ZN7S1673C23v22Ev();
extern void _ZN7S1673C23v23Ev();
extern void _ZN7S1673C23v24Ev();
extern void _ZN7S1673C23v25Ev();
extern void _ZN7S1673C23v26Ev();
extern void _ZN7S1673C23v27Ev();
extern void _ZN7S1673C12v1Ev();
extern void _ZN7S1673C12v2Ev();
static  VTBL_ENTRY vtc_S1673C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1673C1[0]),
  (VTBL_ENTRY)&_ZN7S1673C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1673C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1673C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1673C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1673C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1673C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1673C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1673C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1673C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1673C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1673C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1673C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1673C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1673C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1673C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1673C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1673C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1673C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1673C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1673C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1673C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1673C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1673C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1673C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1673C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1673C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1673C23v27Ev,
  (VTBL_ENTRY)&_ZN7S1673C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1673C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S1673C1[];
extern  VTBL_ENTRY _ZTV7S1673C1[];
Class_Descriptor cd_S1673C1 = {  "S1673C1", // class name
  bases_S1673C1, 3,
  &(vtc_S1673C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,148), // object size
  NSPAIRA(_ZTI7S1673C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1673C1),31, //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  S1681C3  : S1679C4_nt {
  virtual void  v4(); // _ZN7S1681C32v4Ev
  virtual void  v5(); // _ZN7S1681C32v5Ev
  virtual void  v6(); // _ZN7S1681C32v6Ev
  virtual void  v7(); // _ZN7S1681C32v7Ev
  virtual void  v8(); // _ZN7S1681C32v8Ev
  virtual void  v9(); // _ZN7S1681C32v9Ev
  virtual void  v10(); // _ZN7S1681C33v10Ev
  virtual void  v11(); // _ZN7S1681C33v11Ev
  virtual void  v12(); // _ZN7S1681C33v12Ev
  virtual void  v13(); // _ZN7S1681C33v13Ev
  virtual void  v14(); // _ZN7S1681C33v14Ev
  virtual void  v15(); // _ZN7S1681C33v15Ev
  ~S1681C3(); // tgen
  S1681C3(); // tgen
};
//SIG(-1 S1681C3) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S1681C3 ::v4(){vfunc_called(this, "_ZN7S1681C32v4Ev");}
void  S1681C3 ::v5(){vfunc_called(this, "_ZN7S1681C32v5Ev");}
void  S1681C3 ::v6(){vfunc_called(this, "_ZN7S1681C32v6Ev");}
void  S1681C3 ::v7(){vfunc_called(this, "_ZN7S1681C32v7Ev");}
void  S1681C3 ::v8(){vfunc_called(this, "_ZN7S1681C32v8Ev");}
void  S1681C3 ::v9(){vfunc_called(this, "_ZN7S1681C32v9Ev");}
void  S1681C3 ::v10(){vfunc_called(this, "_ZN7S1681C33v10Ev");}
void  S1681C3 ::v11(){vfunc_called(this, "_ZN7S1681C33v11Ev");}
void  S1681C3 ::v12(){vfunc_called(this, "_ZN7S1681C33v12Ev");}
void  S1681C3 ::v13(){vfunc_called(this, "_ZN7S1681C33v13Ev");}
void  S1681C3 ::v14(){vfunc_called(this, "_ZN7S1681C33v14Ev");}
void  S1681C3 ::v15(){vfunc_called(this, "_ZN7S1681C33v15Ev");}
S1681C3 ::~S1681C3(){ note_dtor("S1681C3", this);} // tgen
S1681C3 ::S1681C3(){ note_ctor("S1681C3", this);} // tgen

static void Test_S1681C3()
{
  extern Class_Descriptor cd_S1681C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1681C3, buf);
    S1681C3 *dp, &lv = *(dp=new (buf) S1681C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1681C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1681C3)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S1681C3");
    test_class_info(&lv, &cd_S1681C3);
    dp->~S1681C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1681C3(Test_S1681C3, "S1681C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1681C3C1Ev();
extern void _ZN7S1681C3D1Ev();
Name_Map name_map_S1681C3[] = {
  NSPAIR(_ZN7S1681C3C1Ev),
  NSPAIR(_ZN7S1681C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S1681C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S1681C3[];
extern void _ZN7S1681C3D1Ev();
extern void _ZN7S1681C3D0Ev();
extern void _ZN7S1681C32v4Ev();
extern void _ZN7S1681C32v5Ev();
extern void _ZN7S1681C32v6Ev();
extern void _ZN7S1681C32v7Ev();
extern void _ZN7S1681C32v8Ev();
extern void _ZN7S1681C32v9Ev();
extern void _ZN7S1681C33v10Ev();
extern void _ZN7S1681C33v11Ev();
extern void _ZN7S1681C33v12Ev();
extern void _ZN7S1681C33v13Ev();
extern void _ZN7S1681C33v14Ev();
extern void _ZN7S1681C33v15Ev();
static  VTBL_ENTRY vtc_S1681C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1681C3[0]),
  (VTBL_ENTRY)&_ZN7S1681C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1681C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1681C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1681C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1681C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1681C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1681C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1681C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1681C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1681C33v15Ev,
};
extern VTBL_ENTRY _ZTI7S1681C3[];
extern  VTBL_ENTRY _ZTV7S1681C3[];
Class_Descriptor cd_S1681C3 = {  "S1681C3", // class name
  bases_S1681C3, 1,
  &(vtc_S1681C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1681C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1681C3),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1681C2  : S1681C3 {
  ::S79C38_nt s1681c2f0;
  ::S17777C6_nt s1681c2f1;
  ::S1679C8_nt s1681c2f2;
  int s1681c2f3[4];
  ::S4533C11_nt s1681c2f4;
  void *s1681c2f5[4];
  virtual  ~S1681C2(); // _ZN7S1681C2D1Ev
  virtual void  v16(); // _ZN7S1681C23v16Ev
  virtual void  v17(); // _ZN7S1681C23v17Ev
  virtual void  v18(); // _ZN7S1681C23v18Ev
  virtual void  v19(); // _ZN7S1681C23v19Ev
  virtual void  v20(); // _ZN7S1681C23v20Ev
  virtual void  v21(); // _ZN7S1681C23v21Ev
  virtual void  v22(); // _ZN7S1681C23v22Ev
  virtual void  v23(); // _ZN7S1681C23v23Ev
  virtual void  v24(); // _ZN7S1681C23v24Ev
  virtual void  v25(); // _ZN7S1681C23v25Ev
  virtual void  v26(); // _ZN7S1681C23v26Ev
  virtual void  v27(); // _ZN7S1681C23v27Ev
  virtual void  v28(); // _ZN7S1681C23v28Ev
  S1681C2(); // tgen
};
//SIG(-1 S1681C2) C1{ BC2{ BC3{ vd m Fi} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 FC4{ m Fp[2]} FC5{ m Fp} FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]} Fi[4] FC9{ m Fp} Fp[4]}


 S1681C2 ::~S1681C2(){ note_dtor("S1681C2", this);}
void  S1681C2 ::v16(){vfunc_called(this, "_ZN7S1681C23v16Ev");}
void  S1681C2 ::v17(){vfunc_called(this, "_ZN7S1681C23v17Ev");}
void  S1681C2 ::v18(){vfunc_called(this, "_ZN7S1681C23v18Ev");}
void  S1681C2 ::v19(){vfunc_called(this, "_ZN7S1681C23v19Ev");}
void  S1681C2 ::v20(){vfunc_called(this, "_ZN7S1681C23v20Ev");}
void  S1681C2 ::v21(){vfunc_called(this, "_ZN7S1681C23v21Ev");}
void  S1681C2 ::v22(){vfunc_called(this, "_ZN7S1681C23v22Ev");}
void  S1681C2 ::v23(){vfunc_called(this, "_ZN7S1681C23v23Ev");}
void  S1681C2 ::v24(){vfunc_called(this, "_ZN7S1681C23v24Ev");}
void  S1681C2 ::v25(){vfunc_called(this, "_ZN7S1681C23v25Ev");}
void  S1681C2 ::v26(){vfunc_called(this, "_ZN7S1681C23v26Ev");}
void  S1681C2 ::v27(){vfunc_called(this, "_ZN7S1681C23v27Ev");}
void  S1681C2 ::v28(){vfunc_called(this, "_ZN7S1681C23v28Ev");}
S1681C2 ::S1681C2(){ note_ctor("S1681C2", this);} // tgen

static void Test_S1681C2()
{
  extern Class_Descriptor cd_S1681C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,21)];
    init_test(&cd_S1681C2, buf);
    S1681C2 *dp, &lv = *(dp=new (buf) S1681C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,80), "sizeof(S1681C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1681C2)");
    check_base_class_offset(lv, (S1679C4_nt*)(S1681C3*), 0, "S1681C2");
    check_base_class_offset(lv, (S1681C3*), 0, "S1681C2");
    check_field_offset(lv, s1681c2f0, ABISELECT(16,8), "S1681C2.s1681c2f0");
    check_field_offset(lv, s1681c2f1, ABISELECT(32,16), "S1681C2.s1681c2f1");
    check_field_offset(lv, s1681c2f2, ABISELECT(40,20), "S1681C2.s1681c2f2");
    check_field_offset(lv, s1681c2f3, ABISELECT(80,44), "S1681C2.s1681c2f3");
    check_field_offset(lv, s1681c2f4, ABISELECT(96,60), "S1681C2.s1681c2f4");
    check_field_offset(lv, s1681c2f5, ABISELECT(104,64), "S1681C2.s1681c2f5");
    test_class_info(&lv, &cd_S1681C2);
    dp->~S1681C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1681C2(Test_S1681C2, "S1681C2", ABISELECT(136,80));

#else // __cplusplus

extern void _ZN7S1681C2C1Ev();
extern void _ZN7S1681C2D1Ev();
Name_Map name_map_S1681C2[] = {
  NSPAIR(_ZN7S1681C2C1Ev),
  NSPAIR(_ZN7S1681C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S1681C3;
extern VTBL_ENTRY _ZTI7S1681C3[];
extern  VTBL_ENTRY _ZTV7S1681C3[];
static Base_Class bases_S1681C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S1681C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1681C2[];
extern void _ZN7S1681C2D1Ev();
extern void _ZN7S1681C2D0Ev();
extern void _ZN7S1681C32v4Ev();
extern void _ZN7S1681C32v5Ev();
extern void _ZN7S1681C32v6Ev();
extern void _ZN7S1681C32v7Ev();
extern void _ZN7S1681C32v8Ev();
extern void _ZN7S1681C32v9Ev();
extern void _ZN7S1681C33v10Ev();
extern void _ZN7S1681C33v11Ev();
extern void _ZN7S1681C33v12Ev();
extern void _ZN7S1681C33v13Ev();
extern void _ZN7S1681C33v14Ev();
extern void _ZN7S1681C33v15Ev();
extern void _ZN7S1681C23v16Ev();
extern void _ZN7S1681C23v17Ev();
extern void _ZN7S1681C23v18Ev();
extern void _ZN7S1681C23v19Ev();
extern void _ZN7S1681C23v20Ev();
extern void _ZN7S1681C23v21Ev();
extern void _ZN7S1681C23v22Ev();
extern void _ZN7S1681C23v23Ev();
extern void _ZN7S1681C23v24Ev();
extern void _ZN7S1681C23v25Ev();
extern void _ZN7S1681C23v26Ev();
extern void _ZN7S1681C23v27Ev();
extern void _ZN7S1681C23v28Ev();
static  VTBL_ENTRY vtc_S1681C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1681C2[0]),
  (VTBL_ENTRY)&_ZN7S1681C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1681C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1681C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1681C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1681C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1681C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1681C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1681C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1681C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1681C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1681C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1681C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1681C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1681C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1681C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1681C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1681C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1681C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1681C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1681C23v27Ev,
  (VTBL_ENTRY)&_ZN7S1681C23v28Ev,
};
extern VTBL_ENTRY _ZTI7S1681C2[];
extern  VTBL_ENTRY _ZTV7S1681C2[];
Class_Descriptor cd_S1681C2 = {  "S1681C2", // class name
  bases_S1681C2, 2,
  &(vtc_S1681C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,80), // object size
  NSPAIRA(_ZTI7S1681C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1681C2),29, //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  S1681C11  {
  void *s1681c11f0[2];
  ::S5266C19_nt s1681c11f1;
  ::S5266C19_nt s1681c11f2;
  void  mf1681c11(); // _ZN8S1681C119mf1681c11Ev
};
//SIG(-1 S1681C11) C1{ m Fp[2] FC2{ m Fp Fi FC3{ m}} FC2}


void  S1681C11 ::mf1681c11(){}

static void Test_S1681C11()
{
  {
    init_simple_test("S1681C11");
    S1681C11 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S1681C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1681C11)");
    check_field_offset(lv, s1681c11f0, 0, "S1681C11.s1681c11f0");
    check_field_offset(lv, s1681c11f1, ABISELECT(16,8), "S1681C11.s1681c11f1");
    check_field_offset(lv, s1681c11f2, ABISELECT(32,20), "S1681C11.s1681c11f2");
  }
}
static Arrange_To_Call_Me vS1681C11(Test_S1681C11, "S1681C11", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1681C1  : S1681C2 {
  void *s1681c1f0;
  ::S1681C11 s1681c1f1;
  virtual  ~S1681C1(); // _ZN7S1681C1D1Ev
  virtual void  v1(); // _ZN7S1681C12v1Ev
  virtual void  v2(); // _ZN7S1681C12v2Ev
  virtual void  v3(); // _ZN7S1681C12v3Ev
  S1681C1(); // tgen
};
//SIG(1 S1681C1) C1{ BC2{ BC3{ BC4{ vd m Fi} v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15} vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 FC5{ m Fp[2]} FC6{ m Fp} FC7{ m FC8{ m Fp Fi[2] FC9{ m}} Fp[2]} Fi[4] FC10{ m Fp} Fp[4]} vd v1 v2 v3 Fp FC11{ m Fp[2] FC12{ m Fp Fi FC13{ m}} FC12}}


 S1681C1 ::~S1681C1(){ note_dtor("S1681C1", this);}
void  S1681C1 ::v1(){vfunc_called(this, "_ZN7S1681C12v1Ev");}
void  S1681C1 ::v2(){vfunc_called(this, "_ZN7S1681C12v2Ev");}
void  S1681C1 ::v3(){vfunc_called(this, "_ZN7S1681C12v3Ev");}
S1681C1 ::S1681C1(){ note_ctor("S1681C1", this);} // tgen

static void Test_S1681C1()
{
  extern Class_Descriptor cd_S1681C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,30)];
    init_test(&cd_S1681C1, buf);
    S1681C1 *dp, &lv = *(dp=new (buf) S1681C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,116), "sizeof(S1681C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1681C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S1681C3*)(S1681C2*), 0, "S1681C1");
    check_base_class_offset(lv, (S1681C3*)(S1681C2*), 0, "S1681C1");
    check_base_class_offset(lv, (S1681C2*), 0, "S1681C1");
    check_field_offset(lv, s1681c1f0, ABISELECT(136,80), "S1681C1.s1681c1f0");
    check_field_offset(lv, s1681c1f1, ABISELECT(144,84), "S1681C1.s1681c1f1");
    test_class_info(&lv, &cd_S1681C1);
    dp->~S1681C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1681C1(Test_S1681C1, "S1681C1", ABISELECT(192,116));

#else // __cplusplus

extern void _ZN7S1681C1C1Ev();
extern void _ZN7S1681C1D1Ev();
Name_Map name_map_S1681C1[] = {
  NSPAIR(_ZN7S1681C1C1Ev),
  NSPAIR(_ZN7S1681C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S1681C3;
extern VTBL_ENTRY _ZTI7S1681C3[];
extern  VTBL_ENTRY _ZTV7S1681C3[];
extern Class_Descriptor cd_S1681C2;
extern VTBL_ENTRY _ZTI7S1681C2[];
extern  VTBL_ENTRY _ZTV7S1681C2[];
static Base_Class bases_S1681C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S1681C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1681C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1681C1[];
extern void _ZN7S1681C1D1Ev();
extern void _ZN7S1681C1D0Ev();
extern void _ZN7S1681C32v4Ev();
extern void _ZN7S1681C32v5Ev();
extern void _ZN7S1681C32v6Ev();
extern void _ZN7S1681C32v7Ev();
extern void _ZN7S1681C32v8Ev();
extern void _ZN7S1681C32v9Ev();
extern void _ZN7S1681C33v10Ev();
extern void _ZN7S1681C33v11Ev();
extern void _ZN7S1681C33v12Ev();
extern void _ZN7S1681C33v13Ev();
extern void _ZN7S1681C33v14Ev();
extern void _ZN7S1681C33v15Ev();
extern void _ZN7S1681C23v16Ev();
extern void _ZN7S1681C23v17Ev();
extern void _ZN7S1681C23v18Ev();
extern void _ZN7S1681C23v19Ev();
extern void _ZN7S1681C23v20Ev();
extern void _ZN7S1681C23v21Ev();
extern void _ZN7S1681C23v22Ev();
extern void _ZN7S1681C23v23Ev();
extern void _ZN7S1681C23v24Ev();
extern void _ZN7S1681C23v25Ev();
extern void _ZN7S1681C23v26Ev();
extern void _ZN7S1681C23v27Ev();
extern void _ZN7S1681C23v28Ev();
extern void _ZN7S1681C12v1Ev();
extern void _ZN7S1681C12v2Ev();
extern void _ZN7S1681C12v3Ev();
static  VTBL_ENTRY vtc_S1681C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1681C1[0]),
  (VTBL_ENTRY)&_ZN7S1681C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1681C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1681C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1681C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1681C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1681C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1681C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1681C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1681C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1681C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1681C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1681C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1681C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1681C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1681C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1681C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1681C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1681C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1681C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1681C23v27Ev,
  (VTBL_ENTRY)&_ZN7S1681C23v28Ev,
  (VTBL_ENTRY)&_ZN7S1681C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1681C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1681C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1681C1[];
extern  VTBL_ENTRY _ZTV7S1681C1[];
Class_Descriptor cd_S1681C1 = {  "S1681C1", // class name
  bases_S1681C1, 3,
  &(vtc_S1681C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,116), // object size
  NSPAIRA(_ZTI7S1681C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1681C1),32, //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  S20360C2  {
  virtual void  v7(); // _ZN8S20360C22v7Ev
  virtual void  v8(); // _ZN8S20360C22v8Ev
  virtual void  v9(); // _ZN8S20360C22v9Ev
  virtual void  v10(); // _ZN8S20360C23v10Ev
  virtual void  v11(); // _ZN8S20360C23v11Ev
  ~S20360C2(); // tgen
  S20360C2(); // tgen
};
//SIG(-1 S20360C2) C1{ v1 v2 v3 v4 v5}


void  S20360C2 ::v7(){vfunc_called(this, "_ZN8S20360C22v7Ev");}
void  S20360C2 ::v8(){vfunc_called(this, "_ZN8S20360C22v8Ev");}
void  S20360C2 ::v9(){vfunc_called(this, "_ZN8S20360C22v9Ev");}
void  S20360C2 ::v10(){vfunc_called(this, "_ZN8S20360C23v10Ev");}
void  S20360C2 ::v11(){vfunc_called(this, "_ZN8S20360C23v11Ev");}
S20360C2 ::~S20360C2(){ note_dtor("S20360C2", this);} // tgen
S20360C2 ::S20360C2(){ note_ctor("S20360C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20360C2C1Ev();
extern void _ZN8S20360C2D1Ev();
Name_Map name_map_S20360C2[] = {
  NSPAIR(_ZN8S20360C2C1Ev),
  NSPAIR(_ZN8S20360C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20360C2[];
extern void _ZN8S20360C22v7Ev();
extern void _ZN8S20360C22v8Ev();
extern void _ZN8S20360C22v9Ev();
extern void _ZN8S20360C23v10Ev();
extern void _ZN8S20360C23v11Ev();
static  VTBL_ENTRY vtc_S20360C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20360C2[0]),
  (VTBL_ENTRY)&_ZN8S20360C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20360C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20360C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20360C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20360C23v11Ev,
};
extern VTBL_ENTRY _ZTI8S20360C2[];
extern  VTBL_ENTRY _ZTV8S20360C2[];
Class_Descriptor cd_S20360C2 = {  "S20360C2", // class name
  0,0,//no base classes
  &(vtc_S20360C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20360C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20360C2),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  S20360C4  {
  virtual void  v12(); // _ZN8S20360C43v12Ev
  ~S20360C4(); // tgen
  S20360C4(); // tgen
};
//SIG(-1 S20360C4) C1{ v1}


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

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

#else // __cplusplus

extern void _ZN8S20360C4C1Ev();
extern void _ZN8S20360C4D1Ev();
Name_Map name_map_S20360C4[] = {
  NSPAIR(_ZN8S20360C4C1Ev),
  NSPAIR(_ZN8S20360C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20360C4[];
extern void _ZN8S20360C43v12Ev();
static  VTBL_ENTRY vtc_S20360C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20360C4[0]),
  (VTBL_ENTRY)&_ZN8S20360C43v12Ev,
};
extern VTBL_ENTRY _ZTI8S20360C4[];
extern  VTBL_ENTRY _ZTV8S20360C4[];
Class_Descriptor cd_S20360C4 = {  "S20360C4", // class name
  0,0,//no base classes
  &(vtc_S20360C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20360C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20360C4),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  S20360C5  {
  int s20360c5f0;
  virtual void  v13(); // _ZN8S20360C53v13Ev
  virtual void  v14(); // _ZN8S20360C53v14Ev
  virtual void  v15(); // _ZN8S20360C53v15Ev
  ~S20360C5(); // tgen
  S20360C5(); // tgen
};
//SIG(-1 S20360C5) C1{ v1 v2 v3 Fi}


void  S20360C5 ::v13(){vfunc_called(this, "_ZN8S20360C53v13Ev");}
void  S20360C5 ::v14(){vfunc_called(this, "_ZN8S20360C53v14Ev");}
void  S20360C5 ::v15(){vfunc_called(this, "_ZN8S20360C53v15Ev");}
S20360C5 ::~S20360C5(){ note_dtor("S20360C5", this);} // tgen
S20360C5 ::S20360C5(){ note_ctor("S20360C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20360C5C1Ev();
extern void _ZN8S20360C5D1Ev();
Name_Map name_map_S20360C5[] = {
  NSPAIR(_ZN8S20360C5C1Ev),
  NSPAIR(_ZN8S20360C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20360C5[];
extern void _ZN8S20360C53v13Ev();
extern void _ZN8S20360C53v14Ev();
extern void _ZN8S20360C53v15Ev();
static  VTBL_ENTRY vtc_S20360C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20360C5[0]),
  (VTBL_ENTRY)&_ZN8S20360C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20360C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20360C53v15Ev,
};
extern VTBL_ENTRY _ZTI8S20360C5[];
extern  VTBL_ENTRY _ZTV8S20360C5[];
Class_Descriptor cd_S20360C5 = {  "S20360C5", // class name
  0,0,//no base classes
  &(vtc_S20360C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20360C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20360C5),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  S20360C8  {
  virtual void  v16(); // _ZN8S20360C83v16Ev
  ~S20360C8(); // tgen
  S20360C8(); // tgen
};
//SIG(-1 S20360C8) C1{ v1}


void  S20360C8 ::v16(){vfunc_called(this, "_ZN8S20360C83v16Ev");}
S20360C8 ::~S20360C8(){ note_dtor("S20360C8", this);} // tgen
S20360C8 ::S20360C8(){ note_ctor("S20360C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20360C8C1Ev();
extern void _ZN8S20360C8D1Ev();
Name_Map name_map_S20360C8[] = {
  NSPAIR(_ZN8S20360C8C1Ev),
  NSPAIR(_ZN8S20360C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20360C8[];
extern void _ZN8S20360C83v16Ev();
static  VTBL_ENTRY vtc_S20360C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20360C8[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
};
extern VTBL_ENTRY _ZTI8S20360C8[];
extern  VTBL_ENTRY _ZTV8S20360C8[];
Class_Descriptor cd_S20360C8 = {  "S20360C8", // class name
  0,0,//no base classes
  &(vtc_S20360C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20360C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20360C8),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  S20360C7  : S20360C8 {
  virtual void  v17(); // _ZN8S20360C73v17Ev
  virtual void  v18(); // _ZN8S20360C73v18Ev
  virtual void  v19(); // _ZN8S20360C73v19Ev
  ~S20360C7(); // tgen
  S20360C7(); // tgen
};
//SIG(-1 S20360C7) C1{ BC2{ v4} v1 v2 v3}


void  S20360C7 ::v17(){vfunc_called(this, "_ZN8S20360C73v17Ev");}
void  S20360C7 ::v18(){vfunc_called(this, "_ZN8S20360C73v18Ev");}
void  S20360C7 ::v19(){vfunc_called(this, "_ZN8S20360C73v19Ev");}
S20360C7 ::~S20360C7(){ note_dtor("S20360C7", this);} // tgen
S20360C7 ::S20360C7(){ note_ctor("S20360C7", this);} // tgen

static void Test_S20360C7()
{
  extern Class_Descriptor cd_S20360C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20360C7, buf);
    S20360C7 *dp, &lv = *(dp=new (buf) S20360C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20360C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20360C7)");
    check_base_class_offset(lv, (S20360C8*), 0, "S20360C7");
    test_class_info(&lv, &cd_S20360C7);
    dp->~S20360C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20360C7(Test_S20360C7, "S20360C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20360C7C1Ev();
extern void _ZN8S20360C7D1Ev();
Name_Map name_map_S20360C7[] = {
  NSPAIR(_ZN8S20360C7C1Ev),
  NSPAIR(_ZN8S20360C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20360C8;
extern VTBL_ENTRY _ZTI8S20360C8[];
extern  VTBL_ENTRY _ZTV8S20360C8[];
static Base_Class bases_S20360C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20360C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S20360C7[];
extern void _ZN8S20360C83v16Ev();
extern void _ZN8S20360C73v17Ev();
extern void _ZN8S20360C73v18Ev();
extern void _ZN8S20360C73v19Ev();
static  VTBL_ENTRY vtc_S20360C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20360C7[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v19Ev,
};
extern VTBL_ENTRY _ZTI8S20360C7[];
extern  VTBL_ENTRY _ZTV8S20360C7[];
Class_Descriptor cd_S20360C7 = {  "S20360C7", // class name
  bases_S20360C7, 1,
  &(vtc_S20360C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20360C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20360C7),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  S20360C6  : virtual S20360C7 , S20360C8 {
  int s20360c6f0;
  virtual void  v20(); // _ZN8S20360C63v20Ev
  virtual void  v21(); // _ZN8S20360C63v21Ev
  virtual void  v22(); // _ZN8S20360C63v22Ev
  virtual void  v23(); // _ZN8S20360C63v23Ev
  virtual void  v24(); // _ZN8S20360C63v24Ev
  virtual void  v25(); // _ZN8S20360C63v25Ev
  ~S20360C6(); // tgen
  S20360C6(); // tgen
};
//SIG(-1 S20360C6) C1{ VBC2{ BC3{ v7} v8 v9 v10} BC3 v1 v2 v3 v4 v5 v6 Fi}


void  S20360C6 ::v20(){vfunc_called(this, "_ZN8S20360C63v20Ev");}
void  S20360C6 ::v21(){vfunc_called(this, "_ZN8S20360C63v21Ev");}
void  S20360C6 ::v22(){vfunc_called(this, "_ZN8S20360C63v22Ev");}
void  S20360C6 ::v23(){vfunc_called(this, "_ZN8S20360C63v23Ev");}
void  S20360C6 ::v24(){vfunc_called(this, "_ZN8S20360C63v24Ev");}
void  S20360C6 ::v25(){vfunc_called(this, "_ZN8S20360C63v25Ev");}
S20360C6 ::~S20360C6(){ note_dtor("S20360C6", this);} // tgen
S20360C6 ::S20360C6(){ note_ctor("S20360C6", this);} // tgen

static void Test_S20360C6()
{
  extern Class_Descriptor cd_S20360C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20360C6, buf);
    S20360C6 *dp, &lv = *(dp=new (buf) S20360C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20360C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20360C6)");
    check_base_class_offset(lv, (S20360C8*)(S20360C7*), ABISELECT(16,8), "S20360C6");
    check_base_class_offset(lv, (S20360C7*), ABISELECT(16,8), "S20360C6");
    /*is_ambiguous_... S20360C6::S20360C8 */ AMB_check_base_class_offset(lv, (S20360C8*), 0, "S20360C6");
    check_field_offset(lv, s20360c6f0, ABISELECT(8,4), "S20360C6.s20360c6f0");
    test_class_info(&lv, &cd_S20360C6);
    dp->~S20360C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20360C6(Test_S20360C6, "S20360C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20360C6C1Ev();
extern void _ZN8S20360C6D1Ev();
Name_Map name_map_S20360C6[] = {
  NSPAIR(_ZN8S20360C6C1Ev),
  NSPAIR(_ZN8S20360C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20360C8;
extern VTBL_ENTRY _ZTI8S20360C8[];
extern  VTBL_ENTRY _ZTV8S20360C8[];
extern Class_Descriptor cd_S20360C7;
extern VTBL_ENTRY _ZTI8S20360C7[];
extern  VTBL_ENTRY _ZTV8S20360C7[];
extern Class_Descriptor cd_S20360C8;
extern VTBL_ENTRY _ZTI8S20360C8[];
extern  VTBL_ENTRY _ZTV8S20360C8[];
static Base_Class bases_S20360C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20360C8,    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
  0, 0},
  {&cd_S20360C7,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //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},
  {&cd_S20360C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20360C6[];
extern void _ZN8S20360C83v16Ev();
extern void _ZN8S20360C63v20Ev();
extern void _ZN8S20360C63v21Ev();
extern void _ZN8S20360C63v22Ev();
extern void _ZN8S20360C63v23Ev();
extern void _ZN8S20360C63v24Ev();
extern void _ZN8S20360C63v25Ev();
extern void _ZN8S20360C83v16Ev();
extern void _ZN8S20360C73v17Ev();
extern void _ZN8S20360C73v18Ev();
extern void _ZN8S20360C73v19Ev();
static  VTBL_ENTRY vtc_S20360C6[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20360C6[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v25Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20360C6[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v19Ev,
};
extern VTBL_ENTRY _ZTV8S20360C6[];
static  VTT_ENTRY vtt_S20360C6[] = {
  {&(_ZTV8S20360C6[3]),  3,20},
  {&(_ZTV8S20360C6[16]),  16,20},
};
extern VTBL_ENTRY _ZTI8S20360C6[];
extern  VTBL_ENTRY _ZTV8S20360C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20360C6[];
Class_Descriptor cd_S20360C6 = {  "S20360C6", // class name
  bases_S20360C6, 3,
  &(vtc_S20360C6[0]), // expected_vtbl_contents
  &(vtt_S20360C6[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20360C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20360C6),20, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20360C6),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20360C3  : virtual S20360C2 , S20360C4 , S20360C5 , S20360C6 {
  int s20360c3f0;
  __tsi64 s20360c3f1;
  virtual void  v26(); // _ZN8S20360C33v26Ev
  virtual void  v27(); // _ZN8S20360C33v27Ev
  virtual void  v28(); // _ZN8S20360C33v28Ev
  virtual void  v29(); // _ZN8S20360C33v29Ev
  virtual void  v30(); // _ZN8S20360C33v30Ev
  virtual void  v31(); // _ZN8S20360C33v31Ev
  ~S20360C3(); // tgen
  S20360C3(); // tgen
};
//SIG(-1 S20360C3) C1{ VBC2{ v7 v8 v9 v10 v11} BC3{ v12} BC4{ v13 v14 v15 Fi} BC5{ VBC6{ BC7{ v16} v17 v18 v19} BC7 v20 v21 v22 v23 v24 v25 Fi} v1 v2 v3 v4 v5 v6 Fi FL}


void  S20360C3 ::v26(){vfunc_called(this, "_ZN8S20360C33v26Ev");}
void  S20360C3 ::v27(){vfunc_called(this, "_ZN8S20360C33v27Ev");}
void  S20360C3 ::v28(){vfunc_called(this, "_ZN8S20360C33v28Ev");}
void  S20360C3 ::v29(){vfunc_called(this, "_ZN8S20360C33v29Ev");}
void  S20360C3 ::v30(){vfunc_called(this, "_ZN8S20360C33v30Ev");}
void  S20360C3 ::v31(){vfunc_called(this, "_ZN8S20360C33v31Ev");}
S20360C3 ::~S20360C3(){ note_dtor("S20360C3", this);} // tgen
S20360C3 ::S20360C3(){ note_ctor("S20360C3", this);} // tgen

static void Test_S20360C3()
{
  extern Class_Descriptor cd_S20360C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S20360C3, buf);
    S20360C3 *dp, &lv = *(dp=new (buf) S20360C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S20360C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20360C3)");
    check_base_class_offset(lv, (S20360C2*), ABISELECT(48,32), "S20360C3");
    check_base_class_offset(lv, (S20360C4*), 0, "S20360C3");
    check_base_class_offset(lv, (S20360C5*), ABISELECT(8,4), "S20360C3");
    check_base_class_offset(lv, (S20360C8*)(S20360C7*), ABISELECT(56,36), "S20360C3");
    check_base_class_offset(lv, (S20360C7*)(S20360C6*), ABISELECT(56,36), "S20360C3");
    /*is_ambiguous_... S20360C6::S20360C8 */ AMB_check_base_class_offset(lv, (S20360C8*)(S20360C6*), ABISELECT(24,12), "S20360C3");
    check_base_class_offset(lv, (S20360C6*), ABISELECT(24,12), "S20360C3");
    check_field_offset(lv, s20360c3f0, ABISELECT(36,20), "S20360C3.s20360c3f0");
    check_field_offset(lv, s20360c3f1, ABISELECT(40,24), "S20360C3.s20360c3f1");
    test_class_info(&lv, &cd_S20360C3);
    dp->~S20360C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20360C3(Test_S20360C3, "S20360C3", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S20360C3C1Ev();
extern void _ZN8S20360C3D1Ev();
Name_Map name_map_S20360C3[] = {
  NSPAIR(_ZN8S20360C3C1Ev),
  NSPAIR(_ZN8S20360C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20360C2;
extern VTBL_ENTRY _ZTI8S20360C2[];
extern  VTBL_ENTRY _ZTV8S20360C2[];
extern Class_Descriptor cd_S20360C4;
extern VTBL_ENTRY _ZTI8S20360C4[];
extern  VTBL_ENTRY _ZTV8S20360C4[];
extern Class_Descriptor cd_S20360C5;
extern VTBL_ENTRY _ZTI8S20360C5[];
extern  VTBL_ENTRY _ZTV8S20360C5[];
extern Class_Descriptor cd_S20360C8;
extern VTBL_ENTRY _ZTI8S20360C8[];
extern  VTBL_ENTRY _ZTV8S20360C8[];
extern Class_Descriptor cd_S20360C7;
extern VTBL_ENTRY _ZTI8S20360C7[];
extern  VTBL_ENTRY _ZTV8S20360C7[];
extern Class_Descriptor cd_S20360C8;
extern VTBL_ENTRY _ZTI8S20360C8[];
extern  VTBL_ENTRY _ZTV8S20360C8[];
extern Class_Descriptor cd_S20360C6;
extern VTBL_ENTRY _ZTI8S20360C6[];
extern  VTBL_ENTRY _ZTV8S20360C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20360C6[];
static Base_Class bases_S20360C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20360C2,    ABISELECT(48,32), //bcp->offset
    26, //bcp->virtual_function_table_offset
    7, //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_S20360C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20360C5,    ABISELECT(8,4), //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20360C8,    ABISELECT(56,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
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20360C7,    ABISELECT(56,36), //bcp->offset
    38, //bcp->virtual_function_table_offset
    6, //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_S20360C8,    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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20360C6,    ABISELECT(24,12), //bcp->offset
    16, //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 _ZTI8S20360C3[];
extern void _ZN8S20360C43v12Ev();
extern void _ZN8S20360C33v26Ev();
extern void _ZN8S20360C33v27Ev();
extern void _ZN8S20360C33v28Ev();
extern void _ZN8S20360C33v29Ev();
extern void _ZN8S20360C33v30Ev();
extern void _ZN8S20360C33v31Ev();
extern void _ZN8S20360C53v13Ev();
extern void _ZN8S20360C53v14Ev();
extern void _ZN8S20360C53v15Ev();
extern void _ZN8S20360C83v16Ev();
extern void _ZN8S20360C63v20Ev();
extern void _ZN8S20360C63v21Ev();
extern void _ZN8S20360C63v22Ev();
extern void _ZN8S20360C63v23Ev();
extern void _ZN8S20360C63v24Ev();
extern void _ZN8S20360C63v25Ev();
extern void _ZN8S20360C22v7Ev();
extern void _ZN8S20360C22v8Ev();
extern void _ZN8S20360C22v9Ev();
extern void _ZN8S20360C23v10Ev();
extern void _ZN8S20360C23v11Ev();
extern void _ZN8S20360C83v16Ev();
extern void _ZN8S20360C73v17Ev();
extern void _ZN8S20360C73v18Ev();
extern void _ZN8S20360C73v19Ev();
static  VTBL_ENTRY vtc_S20360C3[] = {
  ABISELECT(56,36),
  ABISELECT(48,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20360C3[0]),
  (VTBL_ENTRY)&_ZN8S20360C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20360C33v26Ev,
  (VTBL_ENTRY)&_ZN8S20360C33v27Ev,
  (VTBL_ENTRY)&_ZN8S20360C33v28Ev,
  (VTBL_ENTRY)&_ZN8S20360C33v29Ev,
  (VTBL_ENTRY)&_ZN8S20360C33v30Ev,
  (VTBL_ENTRY)&_ZN8S20360C33v31Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20360C3[0]),
  (VTBL_ENTRY)&_ZN8S20360C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20360C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20360C53v15Ev,
  ABISELECT(32,24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20360C3[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v25Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S20360C3[0]),
  (VTBL_ENTRY)&_ZN8S20360C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20360C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20360C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20360C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20360C23v11Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20360C3[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v19Ev,
};
extern VTBL_ENTRY _ZTV8S20360C3[];
extern void _ZN8S20360C83v16Ev();
extern void _ZN8S20360C63v20Ev();
extern void _ZN8S20360C63v21Ev();
extern void _ZN8S20360C63v22Ev();
extern void _ZN8S20360C63v23Ev();
extern void _ZN8S20360C63v24Ev();
extern void _ZN8S20360C63v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20360C6__8S20360C3[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20360C6[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v25Ev,
};
extern void _ZN8S20360C83v16Ev();
extern void _ZN8S20360C73v17Ev();
extern void _ZN8S20360C73v18Ev();
extern void _ZN8S20360C73v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20360C7__8S20360C6__8S20360C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S20360C6[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v19Ev,
};
static  VTT_ENTRY vtt_S20360C3[] = {
  {&(_ZTV8S20360C3[4]),  4,48},
  {&(_tg__ZTV8S20360C6__8S20360C3[3]),  3,10},
  {&(_tg__ZTV8S20360C7__8S20360C6__8S20360C3[6]),  6,10},
  {&(_ZTV8S20360C3[33]),  33,48},
  {&(_ZTV8S20360C3[19]),  19,48},
  {&(_ZTV8S20360C3[44]),  44,48},
};
extern VTBL_ENTRY _ZTI8S20360C3[];
extern  VTBL_ENTRY _ZTV8S20360C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20360C3[];
Class_Descriptor cd_S20360C3 = {  "S20360C3", // class name
  bases_S20360C3, 7,
  &(vtc_S20360C3[0]), // expected_vtbl_contents
  &(vtt_S20360C3[0]), // expected_vtt_contents
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S20360C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20360C3),48, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20360C3),6, //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  S20360C9  : S20360C8 , virtual S20360C7 , S20360C6 {
  char s20360c9f0;
  virtual void  v32(); // _ZN8S20360C93v32Ev
  virtual void  v33(); // _ZN8S20360C93v33Ev
  virtual void  v34(); // _ZN8S20360C93v34Ev
  virtual void  v35(); // _ZN8S20360C93v35Ev
  virtual void  v36(); // _ZN8S20360C93v36Ev
  virtual void  v37(); // _ZN8S20360C93v37Ev
  virtual void  v38(); // _ZN8S20360C93v38Ev
  ~S20360C9(); // tgen
  S20360C9(); // tgen
};
//SIG(-1 S20360C9) C1{ BC2{ v8} VBC3{ BC2 v9 v10 v11} BC4{ VBC3 BC2 v12 v13 v14 v15 v16 v17 Fi} v1 v2 v3 v4 v5 v6 v7 Fc}


void  S20360C9 ::v32(){vfunc_called(this, "_ZN8S20360C93v32Ev");}
void  S20360C9 ::v33(){vfunc_called(this, "_ZN8S20360C93v33Ev");}
void  S20360C9 ::v34(){vfunc_called(this, "_ZN8S20360C93v34Ev");}
void  S20360C9 ::v35(){vfunc_called(this, "_ZN8S20360C93v35Ev");}
void  S20360C9 ::v36(){vfunc_called(this, "_ZN8S20360C93v36Ev");}
void  S20360C9 ::v37(){vfunc_called(this, "_ZN8S20360C93v37Ev");}
void  S20360C9 ::v38(){vfunc_called(this, "_ZN8S20360C93v38Ev");}
S20360C9 ::~S20360C9(){ note_dtor("S20360C9", this);} // tgen
S20360C9 ::S20360C9(){ note_ctor("S20360C9", this);} // tgen

static void Test_S20360C9()
{
  extern Class_Descriptor cd_S20360C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S20360C9, buf);
    S20360C9 *dp, &lv = *(dp=new (buf) S20360C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S20360C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20360C9)");
    /*is_ambiguous_... S20360C9::S20360C8 */ AMB_check_base_class_offset(lv, (S20360C8*), 0, "S20360C9");
    check_base_class_offset(lv, (S20360C8*)(S20360C7*), ABISELECT(24,16), "S20360C9");
    check_base_class_offset(lv, (S20360C7*), ABISELECT(24,16), "S20360C9");
    check_base_class_offset(lv, (S20360C7*)(S20360C6*), ABISELECT(24,16), "S20360C9");
    /*is_ambiguous_... S20360C6::S20360C8 */ AMB_check_base_class_offset(lv, (S20360C8*)(S20360C6*), ABISELECT(8,4), "S20360C9");
    check_base_class_offset(lv, (S20360C6*), ABISELECT(8,4), "S20360C9");
    check_field_offset(lv, s20360c9f0, ABISELECT(20,12), "S20360C9.s20360c9f0");
    test_class_info(&lv, &cd_S20360C9);
    dp->~S20360C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20360C9(Test_S20360C9, "S20360C9", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S20360C9C1Ev();
extern void _ZN8S20360C9D1Ev();
Name_Map name_map_S20360C9[] = {
  NSPAIR(_ZN8S20360C9C1Ev),
  NSPAIR(_ZN8S20360C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20360C8;
extern VTBL_ENTRY _ZTI8S20360C8[];
extern  VTBL_ENTRY _ZTV8S20360C8[];
extern Class_Descriptor cd_S20360C8;
extern VTBL_ENTRY _ZTI8S20360C8[];
extern  VTBL_ENTRY _ZTV8S20360C8[];
extern Class_Descriptor cd_S20360C7;
extern VTBL_ENTRY _ZTI8S20360C7[];
extern  VTBL_ENTRY _ZTV8S20360C7[];
extern Class_Descriptor cd_S20360C8;
extern VTBL_ENTRY _ZTI8S20360C8[];
extern  VTBL_ENTRY _ZTV8S20360C8[];
extern Class_Descriptor cd_S20360C6;
extern VTBL_ENTRY _ZTI8S20360C6[];
extern  VTBL_ENTRY _ZTV8S20360C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20360C6[];
static Base_Class bases_S20360C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20360C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20360C8,    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
    2, //immediately_derived
  0, 0},
  {&cd_S20360C7,    ABISELECT(24,16), //bcp->offset
    21, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20360C8,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20360C6,    ABISELECT(8,4), //bcp->offset
    11, //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20360C9[];
extern void _ZN8S20360C83v16Ev();
extern void _ZN8S20360C93v32Ev();
extern void _ZN8S20360C93v33Ev();
extern void _ZN8S20360C93v34Ev();
extern void _ZN8S20360C93v35Ev();
extern void _ZN8S20360C93v36Ev();
extern void _ZN8S20360C93v37Ev();
extern void _ZN8S20360C93v38Ev();
extern void _ZN8S20360C83v16Ev();
extern void _ZN8S20360C63v20Ev();
extern void _ZN8S20360C63v21Ev();
extern void _ZN8S20360C63v22Ev();
extern void _ZN8S20360C63v23Ev();
extern void _ZN8S20360C63v24Ev();
extern void _ZN8S20360C63v25Ev();
extern void _ZN8S20360C83v16Ev();
extern void _ZN8S20360C73v17Ev();
extern void _ZN8S20360C73v18Ev();
extern void _ZN8S20360C73v19Ev();
static  VTBL_ENTRY vtc_S20360C9[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20360C9[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20360C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20360C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20360C93v34Ev,
  (VTBL_ENTRY)&_ZN8S20360C93v35Ev,
  (VTBL_ENTRY)&_ZN8S20360C93v36Ev,
  (VTBL_ENTRY)&_ZN8S20360C93v37Ev,
  (VTBL_ENTRY)&_ZN8S20360C93v38Ev,
  ABISELECT(16,12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20360C9[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v25Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20360C9[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v19Ev,
};
extern VTBL_ENTRY _ZTV8S20360C9[];
extern void _ZN8S20360C83v16Ev();
extern void _ZN8S20360C63v20Ev();
extern void _ZN8S20360C63v21Ev();
extern void _ZN8S20360C63v22Ev();
extern void _ZN8S20360C63v23Ev();
extern void _ZN8S20360C63v24Ev();
extern void _ZN8S20360C63v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20360C6__8S20360C9[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20360C6[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v25Ev,
};
extern void _ZN8S20360C83v16Ev();
extern void _ZN8S20360C73v17Ev();
extern void _ZN8S20360C73v18Ev();
extern void _ZN8S20360C73v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20360C7__8S20360C6__8S20360C9[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20360C6[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v19Ev,
};
static  VTT_ENTRY vtt_S20360C9[] = {
  {&(_ZTV8S20360C9[3]),  3,31},
  {&(_tg__ZTV8S20360C6__8S20360C9[3]),  3,10},
  {&(_tg__ZTV8S20360C7__8S20360C6__8S20360C9[6]),  6,10},
  {&(_ZTV8S20360C9[27]),  27,31},
  {&(_ZTV8S20360C9[14]),  14,31},
};
extern VTBL_ENTRY _ZTI8S20360C9[];
extern  VTBL_ENTRY _ZTV8S20360C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20360C9[];
Class_Descriptor cd_S20360C9 = {  "S20360C9", // class name
  bases_S20360C9, 5,
  &(vtc_S20360C9[0]), // expected_vtbl_contents
  &(vtt_S20360C9[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S20360C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20360C9),31, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20360C9),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20360C10  : virtual S20360C8 {
  virtual  ~S20360C10(); // _ZN9S20360C10D2Ev
  virtual void  v39(); // _ZN9S20360C103v39Ev
  S20360C10(); // tgen
};
//SIG(-1 S20360C10) C1{ VBC2{ v2} vd v1}


 S20360C10 ::~S20360C10(){ note_dtor("S20360C10", this);}
void  S20360C10 ::v39(){vfunc_called(this, "_ZN9S20360C103v39Ev");}
S20360C10 ::S20360C10(){ note_ctor("S20360C10", this);} // tgen

static void Test_S20360C10()
{
  extern Class_Descriptor cd_S20360C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20360C10, buf);
    S20360C10 *dp, &lv = *(dp=new (buf) S20360C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20360C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20360C10)");
    check_base_class_offset(lv, (S20360C8*), 0, "S20360C10");
    test_class_info(&lv, &cd_S20360C10);
    dp->~S20360C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20360C10(Test_S20360C10, "S20360C10", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S20360C10C1Ev();
extern void _ZN9S20360C10D2Ev();
Name_Map name_map_S20360C10[] = {
  NSPAIR(_ZN9S20360C10C1Ev),
  NSPAIR(_ZN9S20360C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20360C8;
extern VTBL_ENTRY _ZTI8S20360C8[];
extern  VTBL_ENTRY _ZTV8S20360C8[];
static Base_Class bases_S20360C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20360C8,    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 _ZTI9S20360C10[];
extern void _ZN8S20360C83v16Ev();
extern void _ZN9S20360C10D1Ev();
extern void _ZN9S20360C10D0Ev();
extern void _ZN9S20360C103v39Ev();
static  VTBL_ENTRY vtc_S20360C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20360C10[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
  (VTBL_ENTRY)&_ZN9S20360C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20360C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20360C103v39Ev,
};
extern VTBL_ENTRY _ZTV9S20360C10[];
static  VTT_ENTRY vtt_S20360C10[] = {
  {&(_ZTV9S20360C10[4]),  4,8},
  {&(_ZTV9S20360C10[4]),  4,8},
};
extern VTBL_ENTRY _ZTI9S20360C10[];
extern  VTBL_ENTRY _ZTV9S20360C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20360C10[];
Class_Descriptor cd_S20360C10 = {  "S20360C10", // class name
  bases_S20360C10, 1,
  &(vtc_S20360C10[0]), // expected_vtbl_contents
  &(vtt_S20360C10[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S20360C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20360C10),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20360C10),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20360C1  : virtual S20360C2 , S20360C3 , S20360C9 , virtual S20360C10 {
  ::S20360C2 s20360c1f0;
  __tsi64 s20360c1f1;
  virtual  ~S20360C1(); // _ZN8S20360C1D2Ev
  virtual void  v1(); // _ZN8S20360C12v1Ev
  virtual void  v2(); // _ZN8S20360C12v2Ev
  virtual void  v3(); // _ZN8S20360C12v3Ev
  virtual void  v4(); // _ZN8S20360C12v4Ev
  virtual void  v5(); // _ZN8S20360C12v5Ev
  virtual void  v6(); // _ZN8S20360C12v6Ev
  S20360C1(); // tgen
};
//SIG(1 S20360C1) C1{ VBC2{ v7 v8 v9 v10 v11} BC3{ VBC2 BC4{ v12} BC5{ v13 v14 v15 Fi} BC6{ VBC7{ BC8{ v16} v17 v18 v19} BC8 v20 v21 v22 v23 v24 v25 Fi} v26 v27 v28 v29 v30 v31 Fi FL} BC9{ BC8 VBC7 BC6 v32 v33 v34 v35 v36 v37 v38 Fc} VBC10{ VBC8 vd v39} vd v1 v2 v3 v4 v5 v6 FC2 FL}


 S20360C1 ::~S20360C1(){ note_dtor("S20360C1", this);}
void  S20360C1 ::v1(){vfunc_called(this, "_ZN8S20360C12v1Ev");}
void  S20360C1 ::v2(){vfunc_called(this, "_ZN8S20360C12v2Ev");}
void  S20360C1 ::v3(){vfunc_called(this, "_ZN8S20360C12v3Ev");}
void  S20360C1 ::v4(){vfunc_called(this, "_ZN8S20360C12v4Ev");}
void  S20360C1 ::v5(){vfunc_called(this, "_ZN8S20360C12v5Ev");}
void  S20360C1 ::v6(){vfunc_called(this, "_ZN8S20360C12v6Ev");}
S20360C1 ::S20360C1(){ note_ctor("S20360C1", this);} // tgen

static void Test_S20360C1()
{
  extern Class_Descriptor cd_S20360C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S20360C1, buf);
    S20360C1 *dp, &lv = *(dp=new (buf) S20360C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S20360C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20360C1)");
    check_base_class_offset(lv, (S20360C2*), ABISELECT(88,60), "S20360C1");
    check_base_class_offset(lv, (S20360C2*)(S20360C3*), ABISELECT(88,60), "S20360C1");
    check_base_class_offset(lv, (S20360C4*)(S20360C3*), 0, "S20360C1");
    check_base_class_offset(lv, (S20360C5*)(S20360C3*), ABISELECT(8,4), "S20360C1");
    check_base_class_offset(lv, (S20360C8*)(S20360C7*), ABISELECT(96,64), "S20360C1");
    check_base_class_offset(lv, (S20360C7*)(S20360C6*)(S20360C3*), ABISELECT(96,64), "S20360C1");
    check_base_class_offset(lv, (S20360C7*)(S20360C9*), ABISELECT(96,64), "S20360C1");
    check_base_class_offset(lv, (S20360C7*)(S20360C6*)(S20360C9*), ABISELECT(96,64), "S20360C1");
    /*is_ambiguous_... S20360C6::S20360C8 */ AMB_check_base_class_offset(lv, (S20360C8*)(S20360C6*)(S20360C3*), ABISELECT(24,12), "S20360C1");
    check_base_class_offset(lv, (S20360C6*)(S20360C3*), ABISELECT(24,12), "S20360C1");
    check_base_class_offset(lv, (S20360C3*), 0, "S20360C1");
    /*is_ambiguous_... S20360C9::S20360C8 */ AMB_check_base_class_offset(lv, (S20360C8*)(S20360C9*), ABISELECT(48,32), "S20360C1");
    /*is_ambiguous_... S20360C6::S20360C8 */ AMB_check_base_class_offset(lv, (S20360C8*)(S20360C6*)(S20360C9*), ABISELECT(56,36), "S20360C1");
    check_base_class_offset(lv, (S20360C6*)(S20360C9*), ABISELECT(56,36), "S20360C1");
    check_base_class_offset(lv, (S20360C9*), ABISELECT(48,32), "S20360C1");
    check_base_class_offset(lv, (S20360C8*)(S20360C10*), ABISELECT(104,68), "S20360C1");
    check_base_class_offset(lv, (S20360C10*), ABISELECT(104,68), "S20360C1");
    check_field_offset(lv, s20360c1f0, ABISELECT(72,48), "S20360C1.s20360c1f0");
    check_field_offset(lv, s20360c1f1, ABISELECT(80,52), "S20360C1.s20360c1f1");
    test_class_info(&lv, &cd_S20360C1);
    dp->~S20360C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20360C1(Test_S20360C1, "S20360C1", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN8S20360C1C1Ev();
extern void _ZN8S20360C1D2Ev();
Name_Map name_map_S20360C1[] = {
  NSPAIR(_ZN8S20360C1C1Ev),
  NSPAIR(_ZN8S20360C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20360C2;
extern VTBL_ENTRY _ZTI8S20360C2[];
extern  VTBL_ENTRY _ZTV8S20360C2[];
extern Class_Descriptor cd_S20360C4;
extern VTBL_ENTRY _ZTI8S20360C4[];
extern  VTBL_ENTRY _ZTV8S20360C4[];
extern Class_Descriptor cd_S20360C5;
extern VTBL_ENTRY _ZTI8S20360C5[];
extern  VTBL_ENTRY _ZTV8S20360C5[];
extern Class_Descriptor cd_S20360C8;
extern VTBL_ENTRY _ZTI8S20360C8[];
extern  VTBL_ENTRY _ZTV8S20360C8[];
extern Class_Descriptor cd_S20360C7;
extern VTBL_ENTRY _ZTI8S20360C7[];
extern  VTBL_ENTRY _ZTV8S20360C7[];
extern Class_Descriptor cd_S20360C8;
extern VTBL_ENTRY _ZTI8S20360C8[];
extern  VTBL_ENTRY _ZTV8S20360C8[];
extern Class_Descriptor cd_S20360C6;
extern VTBL_ENTRY _ZTI8S20360C6[];
extern  VTBL_ENTRY _ZTV8S20360C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20360C6[];
extern Class_Descriptor cd_S20360C3;
extern VTBL_ENTRY _ZTI8S20360C3[];
extern  VTBL_ENTRY _ZTV8S20360C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20360C3[];
extern Class_Descriptor cd_S20360C8;
extern VTBL_ENTRY _ZTI8S20360C8[];
extern  VTBL_ENTRY _ZTV8S20360C8[];
extern Class_Descriptor cd_S20360C8;
extern VTBL_ENTRY _ZTI8S20360C8[];
extern  VTBL_ENTRY _ZTV8S20360C8[];
extern Class_Descriptor cd_S20360C6;
extern VTBL_ENTRY _ZTI8S20360C6[];
extern  VTBL_ENTRY _ZTV8S20360C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20360C6[];
extern Class_Descriptor cd_S20360C9;
extern VTBL_ENTRY _ZTI8S20360C9[];
extern  VTBL_ENTRY _ZTV8S20360C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20360C9[];
extern Class_Descriptor cd_S20360C8;
extern VTBL_ENTRY _ZTI8S20360C8[];
extern  VTBL_ENTRY _ZTV8S20360C8[];
extern Class_Descriptor cd_S20360C10;
extern VTBL_ENTRY _ZTI9S20360C10[];
extern  VTBL_ENTRY _ZTV9S20360C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20360C10[];
static Base_Class bases_S20360C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20360C2,    ABISELECT(88,60), //bcp->offset
    57, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20360C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S20360C5,    ABISELECT(8,4), //bcp->offset
    21, //bcp->virtual_function_table_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_S20360C8,    ABISELECT(96,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
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20360C7,    ABISELECT(96,64), //bcp->offset
    69, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20360C8,    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
    8, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20360C6,    ABISELECT(24,12), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20360C3,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20360C8,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S20360C8,    ABISELECT(56,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
    12, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20360C6,    ABISELECT(56,36), //bcp->offset
    47, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20360C9,    ABISELECT(48,32), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20360C8,    ABISELECT(104,68), //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
    4, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20360C10,    ABISELECT(104,68), //bcp->offset
    79, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20360C1[];
extern void _ZN8S20360C43v12Ev();
extern void _ZN8S20360C33v26Ev();
extern void _ZN8S20360C33v27Ev();
extern void _ZN8S20360C33v28Ev();
extern void _ZN8S20360C33v29Ev();
extern void _ZN8S20360C33v30Ev();
extern void _ZN8S20360C33v31Ev();
extern void _ZN8S20360C1D1Ev();
extern void _ZN8S20360C1D0Ev();
extern void _ZN8S20360C12v1Ev();
extern void _ZN8S20360C12v2Ev();
extern void _ZN8S20360C12v3Ev();
extern void _ZN8S20360C12v4Ev();
extern void _ZN8S20360C12v5Ev();
extern void _ZN8S20360C12v6Ev();
extern void _ZN8S20360C53v13Ev();
extern void _ZN8S20360C53v14Ev();
extern void _ZN8S20360C53v15Ev();
extern void _ZN8S20360C83v16Ev();
extern void _ZN8S20360C63v20Ev();
extern void _ZN8S20360C63v21Ev();
extern void _ZN8S20360C63v22Ev();
extern void _ZN8S20360C63v23Ev();
extern void _ZN8S20360C63v24Ev();
extern void _ZN8S20360C63v25Ev();
extern void _ZN8S20360C83v16Ev();
extern void _ZN8S20360C93v32Ev();
extern void _ZN8S20360C93v33Ev();
extern void _ZN8S20360C93v34Ev();
extern void _ZN8S20360C93v35Ev();
extern void _ZN8S20360C93v36Ev();
extern void _ZN8S20360C93v37Ev();
extern void _ZN8S20360C93v38Ev();
extern void _ZN8S20360C83v16Ev();
extern void _ZN8S20360C63v20Ev();
extern void _ZN8S20360C63v21Ev();
extern void _ZN8S20360C63v22Ev();
extern void _ZN8S20360C63v23Ev();
extern void _ZN8S20360C63v24Ev();
extern void _ZN8S20360C63v25Ev();
extern void _ZN8S20360C22v7Ev();
extern void _ZN8S20360C22v8Ev();
extern void _ZN8S20360C22v9Ev();
extern void _ZN8S20360C23v10Ev();
extern void _ZN8S20360C23v11Ev();
extern void _ZN8S20360C83v16Ev();
extern void _ZN8S20360C73v17Ev();
extern void _ZN8S20360C73v18Ev();
extern void _ZN8S20360C73v19Ev();
extern void _ZN8S20360C83v16Ev();
extern void ABISELECT(_ZTv0_n40_N8S20360C1D1Ev,_ZTv0_n20_N8S20360C1D1Ev)();
extern void ABISELECT(_ZThn104_N8S20360C1D1Ev,_ZThn68_N8S20360C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20360C1D0Ev,_ZTv0_n20_N8S20360C1D0Ev)();
extern void ABISELECT(_ZThn104_N8S20360C1D0Ev,_ZThn68_N8S20360C1D0Ev)() __attribute__((weak));
extern void _ZN9S20360C103v39Ev();
static  VTBL_ENTRY vtc_S20360C1[] = {
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(96,64),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20360C1[0]),
  (VTBL_ENTRY)&_ZN8S20360C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20360C33v26Ev,
  (VTBL_ENTRY)&_ZN8S20360C33v27Ev,
  (VTBL_ENTRY)&_ZN8S20360C33v28Ev,
  (VTBL_ENTRY)&_ZN8S20360C33v29Ev,
  (VTBL_ENTRY)&_ZN8S20360C33v30Ev,
  (VTBL_ENTRY)&_ZN8S20360C33v31Ev,
  (VTBL_ENTRY)&_ZN8S20360C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20360C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20360C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20360C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20360C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20360C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20360C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20360C12v6Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20360C1[0]),
  (VTBL_ENTRY)&_ZN8S20360C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20360C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20360C53v15Ev,
  ABISELECT(72,52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20360C1[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v25Ev,
  ABISELECT(48,32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S20360C1[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20360C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20360C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20360C93v34Ev,
  (VTBL_ENTRY)&_ZN8S20360C93v35Ev,
  (VTBL_ENTRY)&_ZN8S20360C93v36Ev,
  (VTBL_ENTRY)&_ZN8S20360C93v37Ev,
  (VTBL_ENTRY)&_ZN8S20360C93v38Ev,
  ABISELECT(40,28),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20360C1[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v25Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI8S20360C1[0]),
  (VTBL_ENTRY)&_ZN8S20360C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20360C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20360C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20360C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20360C23v11Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI8S20360C1[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v19Ev,
  0,
  ABISELECT(-104,-68),
  0,
  0,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20360C1[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20360C1D1Ev,_ZTv0_n20_N8S20360C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20360C1D0Ev,_ZTv0_n20_N8S20360C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20360C103v39Ev,
};
extern VTBL_ENTRY _ZTV8S20360C1[];
extern void _ZN8S20360C43v12Ev();
extern void _ZN8S20360C33v26Ev();
extern void _ZN8S20360C33v27Ev();
extern void _ZN8S20360C33v28Ev();
extern void _ZN8S20360C33v29Ev();
extern void _ZN8S20360C33v30Ev();
extern void _ZN8S20360C33v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20360C3__8S20360C1[] = {
  ABISELECT(96,64),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20360C3[0]),
  (VTBL_ENTRY)&_ZN8S20360C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20360C33v26Ev,
  (VTBL_ENTRY)&_ZN8S20360C33v27Ev,
  (VTBL_ENTRY)&_ZN8S20360C33v28Ev,
  (VTBL_ENTRY)&_ZN8S20360C33v29Ev,
  (VTBL_ENTRY)&_ZN8S20360C33v30Ev,
  (VTBL_ENTRY)&_ZN8S20360C33v31Ev,
};
extern void _ZN8S20360C83v16Ev();
extern void _ZN8S20360C63v20Ev();
extern void _ZN8S20360C63v21Ev();
extern void _ZN8S20360C63v22Ev();
extern void _ZN8S20360C63v23Ev();
extern void _ZN8S20360C63v24Ev();
extern void _ZN8S20360C63v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20360C68S20360C3__8S20360C1[] = {
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20360C6[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v25Ev,
};
extern void _ZN8S20360C83v16Ev();
extern void _ZN8S20360C73v17Ev();
extern void _ZN8S20360C73v18Ev();
extern void _ZN8S20360C73v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20360C7__8S20360C68S20360C3__8S20360C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI8S20360C6[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v19Ev,
};
extern void _ZN8S20360C22v7Ev();
extern void _ZN8S20360C22v8Ev();
extern void _ZN8S20360C22v9Ev();
extern void _ZN8S20360C23v10Ev();
extern void _ZN8S20360C23v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20360C2__8S20360C3__8S20360C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI8S20360C3[0]),
  (VTBL_ENTRY)&_ZN8S20360C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20360C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20360C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20360C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20360C23v11Ev,
};
extern void _ZN8S20360C83v16Ev();
extern void _ZN8S20360C63v20Ev();
extern void _ZN8S20360C63v21Ev();
extern void _ZN8S20360C63v22Ev();
extern void _ZN8S20360C63v23Ev();
extern void _ZN8S20360C63v24Ev();
extern void _ZN8S20360C63v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20360C6__8S20360C3__8S20360C1[] = {
  ABISELECT(72,52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20360C3[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v25Ev,
};
extern void _ZN8S20360C83v16Ev();
extern void _ZN8S20360C73v17Ev();
extern void _ZN8S20360C73v18Ev();
extern void _ZN8S20360C73v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20360C7__8S20360C3__8S20360C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI8S20360C3[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v19Ev,
};
extern void _ZN8S20360C83v16Ev();
extern void _ZN8S20360C93v32Ev();
extern void _ZN8S20360C93v33Ev();
extern void _ZN8S20360C93v34Ev();
extern void _ZN8S20360C93v35Ev();
extern void _ZN8S20360C93v36Ev();
extern void _ZN8S20360C93v37Ev();
extern void _ZN8S20360C93v38Ev();
static  VTBL_ENTRY _tg__ZTV8S20360C9__8S20360C1[] = {
  ABISELECT(48,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20360C9[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20360C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20360C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20360C93v34Ev,
  (VTBL_ENTRY)&_ZN8S20360C93v35Ev,
  (VTBL_ENTRY)&_ZN8S20360C93v36Ev,
  (VTBL_ENTRY)&_ZN8S20360C93v37Ev,
  (VTBL_ENTRY)&_ZN8S20360C93v38Ev,
};
extern void _ZN8S20360C83v16Ev();
extern void _ZN8S20360C63v20Ev();
extern void _ZN8S20360C63v21Ev();
extern void _ZN8S20360C63v22Ev();
extern void _ZN8S20360C63v23Ev();
extern void _ZN8S20360C63v24Ev();
extern void _ZN8S20360C63v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20360C68S20360C9__A1__8S20360C1[] = {
  ABISELECT(40,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20360C6[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v25Ev,
};
extern void _ZN8S20360C83v16Ev();
extern void _ZN8S20360C73v17Ev();
extern void _ZN8S20360C73v18Ev();
extern void _ZN8S20360C73v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20360C7__8S20360C68S20360C9__A1__8S20360C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI8S20360C6[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v19Ev,
};
extern void _ZN8S20360C83v16Ev();
extern void _ZN8S20360C73v17Ev();
extern void _ZN8S20360C73v18Ev();
extern void _ZN8S20360C73v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20360C7__8S20360C9__8S20360C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S20360C9[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20360C73v19Ev,
};
extern void _ZN8S20360C83v16Ev();
extern void _ZN8S20360C63v20Ev();
extern void _ZN8S20360C63v21Ev();
extern void _ZN8S20360C63v22Ev();
extern void _ZN8S20360C63v23Ev();
extern void _ZN8S20360C63v24Ev();
extern void _ZN8S20360C63v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20360C6__8S20360C9__8S20360C1[] = {
  ABISELECT(40,28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20360C9[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20360C63v25Ev,
};
extern void _ZN8S20360C83v16Ev();
extern void _ZN9S20360C10D1Ev();
extern void _ZN9S20360C10D0Ev();
extern void _ZN9S20360C103v39Ev();
static  VTBL_ENTRY _tg__ZTV9S20360C10__8S20360C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20360C10[0]),
  (VTBL_ENTRY)&_ZN8S20360C83v16Ev,
  (VTBL_ENTRY)&_ZN9S20360C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20360C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20360C103v39Ev,
};
static  VTT_ENTRY vtt_S20360C1[] = {
  {&(_ZTV8S20360C1[6]),  6,89},
  {&(_tg__ZTV8S20360C3__8S20360C1[4]),  4,11},
  {&(_tg__ZTV8S20360C68S20360C3__8S20360C1[3]),  3,10},
  {&(_tg__ZTV8S20360C7__8S20360C68S20360C3__8S20360C1[6]),  6,10},
  {&(_tg__ZTV8S20360C2__8S20360C3__8S20360C1[7]),  7,12},
  {&(_tg__ZTV8S20360C6__8S20360C3__8S20360C1[3]),  3,10},
  {&(_tg__ZTV8S20360C7__8S20360C3__8S20360C1[6]),  6,10},
  {&(_tg__ZTV8S20360C9__8S20360C1[3]),  3,11},
  {&(_tg__ZTV8S20360C68S20360C9__A1__8S20360C1[3]),  3,10},
  {&(_tg__ZTV8S20360C7__8S20360C68S20360C9__A1__8S20360C1[6]),  6,10},
  {&(_tg__ZTV8S20360C7__8S20360C9__8S20360C1[6]),  6,10},
  {&(_tg__ZTV8S20360C6__8S20360C9__8S20360C1[3]),  3,10},
  {&(_ZTV8S20360C1[64]),  64,89},
  {&(_ZTV8S20360C1[29]),  29,89},
  {&(_ZTV8S20360C1[75]),  75,89},
  {&(_ZTV8S20360C1[39]),  39,89},
  {&(_ZTV8S20360C1[50]),  50,89},
  {&(_ZTV8S20360C1[85]),  85,89},
  {&(_ZTV8S20360C1[85]),  85,89},
  {&(_tg__ZTV9S20360C10__8S20360C1[4]),  4,8},
  {&(_tg__ZTV9S20360C10__8S20360C1[4]),  4,8},
};
extern VTBL_ENTRY _ZTI8S20360C1[];
extern  VTBL_ENTRY _ZTV8S20360C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20360C1[];
static VTBL_ENTRY alt_thunk_names80[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20360C1D0Ev,_ZTv0_n20_N8S20360C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20360C1D0Ev,_ZThn68_N8S20360C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20360C1D1Ev,_ZTv0_n20_N8S20360C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20360C1D1Ev,_ZThn68_N8S20360C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20360C1 = {  "S20360C1", // class name
  bases_S20360C1, 14,
  &(vtc_S20360C1[0]), // expected_vtbl_contents
  &(vtt_S20360C1[0]), // expected_vtt_contents
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI8S20360C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20360C1),89, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20360C1),21, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names80,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21037C9  : virtual S19905C19 {
  long double s21037c9f0;
  char s21037c9f1;
  short s21037c9f2[4];
  ~S21037C9(); // tgen
  S21037C9(); // tgen
};
//SIG(-1 S21037C9) C1{ VBC2{ vd m} FD Fc Fs[4]}


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

static void Test_S21037C9()
{
  extern Class_Descriptor cd_S21037C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,8)];
    init_test(&cd_S21037C9, buf);
    S21037C9 *dp, &lv = *(dp=new (buf) S21037C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S21037C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21037C9)");
    check_base_class_offset(lv, (S19905C19*), 0, "S21037C9");
    check_field_offset(lv, s21037c9f0, ABISELECT(16,4), "S21037C9.s21037c9f0");
    check_field_offset(lv, s21037c9f1, ABISELECT(32,16), "S21037C9.s21037c9f1");
    check_field_offset(lv, s21037c9f2, ABISELECT(34,18), "S21037C9.s21037c9f2");
    test_class_info(&lv, &cd_S21037C9);
    dp->~S21037C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21037C9(Test_S21037C9, "S21037C9", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S21037C9C1Ev();
extern void _ZN8S21037C9D1Ev();
Name_Map name_map_S21037C9[] = {
  NSPAIR(_ZN8S21037C9C1Ev),
  NSPAIR(_ZN8S21037C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
static Base_Class bases_S21037C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    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 _ZTI8S21037C9[];
extern void _ZN8S21037C9D1Ev();
extern void _ZN8S21037C9D0Ev();
static  VTBL_ENTRY vtc_S21037C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&_ZN8S21037C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21037C9D0Ev,
};
extern VTBL_ENTRY _ZTV8S21037C9[];
static  VTT_ENTRY vtt_S21037C9[] = {
  {&(_ZTV8S21037C9[4]),  4,6},
  {&(_ZTV8S21037C9[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21037C9[];
extern  VTBL_ENTRY _ZTV8S21037C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C9[];
Class_Descriptor cd_S21037C9 = {  "S21037C9", // class name
  bases_S21037C9, 1,
  &(vtc_S21037C9[0]), // expected_vtbl_contents
  &(vtt_S21037C9[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S21037C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21037C9),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21037C9),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21037C8  : virtual S19905C19 , virtual S21037C9 {
  int s21037c8f0;
  virtual  ~S21037C8(); // _ZN8S21037C8D2Ev
  S21037C8(); // tgen
};
//SIG(-1 S21037C8) C1{ VBC2{ vd m} VBC3{ VBC2 FD Fc Fs[4]} vd Fi}


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

static void Test_S21037C8()
{
  extern Class_Descriptor cd_S21037C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,10)];
    init_test(&cd_S21037C8, buf);
    S21037C8 *dp, &lv = *(dp=new (buf) S21037C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S21037C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21037C8)");
    check_base_class_offset(lv, (S19905C19*), 0, "S21037C8");
    check_base_class_offset(lv, (S19905C19*)(S21037C9*), 0, "S21037C8");
    check_base_class_offset(lv, (S21037C9*), ABISELECT(16,8), "S21037C8");
    check_field_offset(lv, s21037c8f0, ABISELECT(8,4), "S21037C8.s21037c8f0");
    test_class_info(&lv, &cd_S21037C8);
    dp->~S21037C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21037C8(Test_S21037C8, "S21037C8", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S21037C8C1Ev();
extern void _ZN8S21037C8D2Ev();
Name_Map name_map_S21037C8[] = {
  NSPAIR(_ZN8S21037C8C1Ev),
  NSPAIR(_ZN8S21037C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S21037C9;
extern VTBL_ENTRY _ZTI8S21037C9[];
extern  VTBL_ENTRY _ZTV8S21037C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C9[];
static Base_Class bases_S21037C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    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_S21037C9,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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 _ZTI8S21037C8[];
extern void _ZN8S21037C8D1Ev();
extern void _ZN8S21037C8D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S21037C8D1Ev,_ZThn8_N8S21037C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S21037C8D0Ev,_ZThn8_N8S21037C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21037C8[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&_ZN8S21037C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21037C8D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern VTBL_ENTRY _ZTV8S21037C8[];
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void _ZN8S21037C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void _ZN8S21037C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C8[] = {
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C9__8S21037C8[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
static  VTT_ENTRY vtt_S21037C8[] = {
  {&(_ZTV8S21037C8[5]),  5,13},
  {&(_ZTV8S21037C8[5]),  5,13},
  {&(_ZTV8S21037C8[11]),  11,13},
  {&(_tg__ZTV8S21037C9__8S21037C8[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S21037C9__8S21037C8[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21037C8[];
extern  VTBL_ENTRY _ZTV8S21037C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C8[];
static VTBL_ENTRY alt_thunk_names81[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S21037C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S21037C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21037C8D0Ev,_ZThn8_N8S21037C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21037C8D1Ev,_ZThn8_N8S21037C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21037C8 = {  "S21037C8", // class name
  bases_S21037C8, 2,
  &(vtc_S21037C8[0]), // expected_vtbl_contents
  &(vtt_S21037C8[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S21037C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21037C8),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21037C8),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names81,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21037C6  : virtual S19905C19 , S21037C8 , S17777C6_nt {
  short s21037c6f0;
  __tsi64 s21037c6f1;
  void *s21037c6f2;
  __tsi64 s21037c6f3;
  virtual  ~S21037C6(); // _ZN8S21037C6D2Ev
  S21037C6(); // tgen
};
//SIG(-1 S21037C6) C1{ VBC2{ vd m} BC3{ VBC2 VBC4{ VBC2 FD Fc Fs[4]} vd Fi} BC5{ m Fp} vd Fs FL Fp FL}


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

static void Test_S21037C6()
{
  extern Class_Descriptor cd_S21037C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,17)];
    init_test(&cd_S21037C6, buf);
    S21037C6 *dp, &lv = *(dp=new (buf) S21037C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S21037C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21037C6)");
    check_base_class_offset(lv, (S19905C19*), 0, "S21037C6");
    check_base_class_offset(lv, (S19905C19*)(S21037C8*), 0, "S21037C6");
    check_base_class_offset(lv, (S19905C19*)(S21037C9*), 0, "S21037C6");
    check_base_class_offset(lv, (S21037C9*)(S21037C8*), ABISELECT(64,36), "S21037C6");
    check_base_class_offset(lv, (S21037C8*), 0, "S21037C6");
    check_base_class_offset(lv, (S17777C6_nt*), ABISELECT(16,8), "S21037C6");
    check_field_offset(lv, s21037c6f0, ABISELECT(24,12), "S21037C6.s21037c6f0");
    check_field_offset(lv, s21037c6f1, ABISELECT(32,16), "S21037C6.s21037c6f1");
    check_field_offset(lv, s21037c6f2, ABISELECT(40,24), "S21037C6.s21037c6f2");
    check_field_offset(lv, s21037c6f3, ABISELECT(48,28), "S21037C6.s21037c6f3");
    test_class_info(&lv, &cd_S21037C6);
    dp->~S21037C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21037C6(Test_S21037C6, "S21037C6", ABISELECT(112,64));

#else // __cplusplus

extern void _ZN8S21037C6C1Ev();
extern void _ZN8S21037C6D2Ev();
Name_Map name_map_S21037C6[] = {
  NSPAIR(_ZN8S21037C6C1Ev),
  NSPAIR(_ZN8S21037C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S21037C9;
extern VTBL_ENTRY _ZTI8S21037C9[];
extern  VTBL_ENTRY _ZTV8S21037C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C9[];
extern Class_Descriptor cd_S21037C8;
extern VTBL_ENTRY _ZTI8S21037C8[];
extern  VTBL_ENTRY _ZTV8S21037C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C8[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
static Base_Class bases_S21037C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21037C9,    ABISELECT(64,36), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S21037C8,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S17777C6_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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21037C6[];
extern void _ZN8S21037C6D1Ev();
extern void _ZN8S21037C6D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S21037C6D1Ev,_ZThn36_N8S21037C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S21037C6D0Ev,_ZThn36_N8S21037C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21037C6[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&_ZN8S21037C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21037C6D0Ev,
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
extern VTBL_ENTRY _ZTV8S21037C6[];
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void _ZN8S21037C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
extern void _ZN8S21037C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C8__8S21037C6[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21037C8D1Ev,_ZThn36_N8S21037C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S21037C8D0Ev,_ZThn36_N8S21037C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C8__8S21037C6[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void _ZN8S21037C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void _ZN8S21037C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C6[] = {
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C9__8S21037C6[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
static  VTT_ENTRY vtt_S21037C6[] = {
  {&(_ZTV8S21037C6[5]),  5,13},
  {&(_tg__ZTV8S21037C8__8S21037C6[5]),  5,7},
  {&(_tg__ZTV8S21037C8__8S21037C6[5]),  5,7},
  {&(_tg__ZTV8S21037C9__8S21037C8__8S21037C6[4]),  4,6},
  {&(_ZTV8S21037C6[5]),  5,13},
  {&(_ZTV8S21037C6[11]),  11,13},
  {&(_tg__ZTV8S21037C9__8S21037C6[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S21037C9__8S21037C6[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21037C6[];
extern  VTBL_ENTRY _ZTV8S21037C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C6[];
static VTBL_ENTRY alt_thunk_names82[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S21037C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S21037C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C8D0Ev,_ZThn36_N8S21037C8D0Ev),
  (VTBL_ENTRY)_ZN8S21037C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C8D1Ev,_ZThn36_N8S21037C8D1Ev),
  (VTBL_ENTRY)_ZN8S21037C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C6D0Ev,_ZThn36_N8S21037C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C6D1Ev,_ZThn36_N8S21037C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21037C6 = {  "S21037C6", // class name
  bases_S21037C6, 4,
  &(vtc_S21037C6[0]), // expected_vtbl_contents
  &(vtt_S21037C6[0]), // expected_vtt_contents
  ABISELECT(112,64), // object size
  NSPAIRA(_ZTI8S21037C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21037C6),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21037C6),8, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names82,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21037C5  : virtual S21037C6 , S17777C6_nt , S19905C19 , S21037C9 {
  int s21037c5f0;
  virtual  ~S21037C5(); // _ZN8S21037C5D2Ev
  S21037C5(); // tgen
};
//SIG(-1 S21037C5) C1{ VBC2{ VBC3{ vd m} BC4{ VBC3 VBC5{ VBC3 FD Fc Fs[4]} vd Fi} BC6{ m Fp} vd Fs FL Fp FL} BC6 BC3 BC5 vd Fi}


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

static void Test_S21037C5()
{
  extern Class_Descriptor cd_S21037C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,27)];
    init_test(&cd_S21037C5, buf);
    S21037C5 *dp, &lv = *(dp=new (buf) S21037C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,104), "sizeof(S21037C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21037C5)");
    check_base_class_offset(lv, (S19905C19*)(S21037C6*), ABISELECT(64,40), "S21037C5");
    check_base_class_offset(lv, (S19905C19*)(S21037C8*)(S21037C6*), ABISELECT(64,40), "S21037C5");
    /*is_ambiguous_... S21037C5::S21037C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C9*), ABISELECT(64,40), "S21037C5");
    /*is_ambiguous_... S21037C5::S21037C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C9*), ABISELECT(64,40), "S21037C5");
    check_base_class_offset(lv, (S21037C9*)(S21037C8*)(S21037C6*), ABISELECT(128,76), "S21037C5");
    check_base_class_offset(lv, (S21037C8*)(S21037C6*), ABISELECT(64,40), "S21037C5");
    check_base_class_offset(lv, (S17777C6_nt*)(S21037C6*), ABISELECT(80,48), "S21037C5");
    check_base_class_offset(lv, (S21037C6*), ABISELECT(64,40), "S21037C5");
    /*is_ambiguous_... S21037C5::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*), ABISELECT(8,4), "S21037C5");
    /*is_ambiguous_... S21037C5::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*), 0, "S21037C5");
    /*is_ambiguous_... S21037C5::S21037C9 */ AMB_check_base_class_offset(lv, (S21037C9*), ABISELECT(16,8), "S21037C5");
    check_field_offset(lv, s21037c5f0, ABISELECT(60,36), "S21037C5.s21037c5f0");
    test_class_info(&lv, &cd_S21037C5);
    dp->~S21037C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21037C5(Test_S21037C5, "S21037C5", ABISELECT(176,104));

#else // __cplusplus

extern void _ZN8S21037C5C1Ev();
extern void _ZN8S21037C5D2Ev();
Name_Map name_map_S21037C5[] = {
  NSPAIR(_ZN8S21037C5C1Ev),
  NSPAIR(_ZN8S21037C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S21037C9;
extern VTBL_ENTRY _ZTI8S21037C9[];
extern  VTBL_ENTRY _ZTV8S21037C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C9[];
extern Class_Descriptor cd_S21037C8;
extern VTBL_ENTRY _ZTI8S21037C8[];
extern  VTBL_ENTRY _ZTV8S21037C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C8[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S21037C6;
extern VTBL_ENTRY _ZTI8S21037C6[];
extern  VTBL_ENTRY _ZTV8S21037C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S21037C9;
extern VTBL_ENTRY _ZTI8S21037C9[];
extern  VTBL_ENTRY _ZTV8S21037C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C9[];
static Base_Class bases_S21037C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    ABISELECT(64,40), //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_S21037C9,    ABISELECT(128,76), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S21037C8,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    4, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(80,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
    4, //immediately_derived
  0, 0},
  {&cd_S21037C6,    ABISELECT(64,40), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //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},
  {&cd_S17777C6_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, 0},
  {&cd_S19905C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S21037C9,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //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 _ZTI8S21037C5[];
extern void _ZN8S21037C5D1Ev();
extern void _ZN8S21037C5D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S21037C5D1Ev,_ZThn8_N8S21037C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev)();
extern void ABISELECT(_ZThn16_N8S21037C5D0Ev,_ZThn8_N8S21037C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev)();
extern void ABISELECT(_ZThn64_N8S21037C5D1Ev,_ZThn40_N8S21037C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev)();
extern void ABISELECT(_ZThn64_N8S21037C5D0Ev,_ZThn40_N8S21037C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev)();
extern void ABISELECT(_ZThn128_N8S21037C5D1Ev,_ZThn76_N8S21037C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev)();
extern void ABISELECT(_ZThn128_N8S21037C5D0Ev,_ZThn76_N8S21037C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21037C5[] = {
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C5[0]),
  (VTBL_ENTRY)&_ZN8S21037C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21037C5D0Ev,
  ABISELECT(48,32),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21037C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev),
  ABISELECT(64,36),
  0,
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S21037C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S21037C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev),
};
extern VTBL_ENTRY _ZTV8S21037C5[];
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void _ZN8S21037C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void _ZN8S21037C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__A__8S21037C5[] = {
  ABISELECT(48,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void ABISELECT(_ZThn48_N8S21037C9D1Ev,_ZThn32_N8S21037C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void ABISELECT(_ZThn48_N8S21037C9D0Ev,_ZThn32_N8S21037C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C9__A__8S21037C5[] = {
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void _ZN8S21037C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
extern void _ZN8S21037C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C6__8S21037C5[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void _ZN8S21037C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
extern void _ZN8S21037C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C88S21037C6__8S21037C5[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21037C8D1Ev,_ZThn36_N8S21037C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S21037C8D0Ev,_ZThn36_N8S21037C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C88S21037C6__8S21037C5[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S21037C6D1Ev,_ZThn36_N8S21037C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S21037C6D0Ev,_ZThn36_N8S21037C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C6__8S21037C5[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void _ZN8S21037C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void _ZN8S21037C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C5[] = {
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C9__8S21037C5[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
static  VTT_ENTRY vtt_S21037C5[] = {
  {&(_ZTV8S21037C5[5]),  5,26},
  {&(_tg__ZTV8S21037C9__A__8S21037C5[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S21037C9__A__8S21037C5[3]),  3,5},
  {&(_ZTV8S21037C5[18]),  18,26},
  {&(_ZTV8S21037C5[18]),  18,26},
  {&(_ZTV8S21037C5[24]),  24,26},
  {&(_ZTV8S21037C5[11]),  11,26},
  {&(_tg__ZTV8S21037C6__8S21037C5[5]),  5,7},
  {&(_tg__ZTV8S21037C88S21037C6__8S21037C5[5]),  5,7},
  {&(_tg__ZTV8S21037C88S21037C6__8S21037C5[5]),  5,7},
  {&(_tg__ZTV8S21037C9__8S21037C88S21037C6__8S21037C5[4]),  4,6},
  {&(_tg__ZTV8S21037C6__8S21037C5[5]),  5,7},
  {&(_tg__ZTV8S21037C9__8S21037C6__8S21037C5[4]),  4,6},
  {&(_tg__ZTV8S21037C9__8S21037C5[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S21037C9__8S21037C5[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21037C5[];
extern  VTBL_ENTRY _ZTV8S21037C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C5[];
static VTBL_ENTRY alt_thunk_names83[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C8D0Ev,_ZThn36_N8S21037C8D0Ev),
  (VTBL_ENTRY)_ZN8S21037C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C8D1Ev,_ZThn36_N8S21037C8D1Ev),
  (VTBL_ENTRY)_ZN8S21037C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C6D0Ev,_ZThn36_N8S21037C6D0Ev),
  (VTBL_ENTRY)_ZN8S21037C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C6D1Ev,_ZThn36_N8S21037C6D1Ev),
  (VTBL_ENTRY)_ZN8S21037C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S21037C9D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21037C9D0Ev,_ZThn32_N8S21037C9D0Ev),
  (VTBL_ENTRY)_ZN8S21037C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S21037C9D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21037C9D1Ev,_ZThn32_N8S21037C9D1Ev),
  (VTBL_ENTRY)_ZN8S21037C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S21037C5D0Ev,_ZThn76_N8S21037C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C5D0Ev,_ZThn40_N8S21037C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21037C5D0Ev,_ZThn8_N8S21037C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S21037C5D1Ev,_ZThn76_N8S21037C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C5D1Ev,_ZThn40_N8S21037C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21037C5D1Ev,_ZThn8_N8S21037C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21037C5 = {  "S21037C5", // class name
  bases_S21037C5, 8,
  &(vtc_S21037C5[0]), // expected_vtbl_contents
  &(vtt_S21037C5[0]), // expected_vtt_contents
  ABISELECT(176,104), // object size
  NSPAIRA(_ZTI8S21037C5),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S21037C5),26, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21037C5),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names83,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21037C3  : virtual S5266C29 , virtual S21037C5 , S21037C9 {
  short s21037c3f0;
  virtual  ~S21037C3(); // _ZN8S21037C3D2Ev
  S21037C3(); // tgen
};
//SIG(-1 S21037C3) C1{ VBC2{ m} VBC3{ VBC4{ VBC5{ vd m} BC6{ VBC5 VBC7{ VBC5 FD Fc Fs[4]} vd Fi} BC8{ m Fp} vd Fs FL Fp FL} BC8 BC5 BC7 vd Fi} BC7 vd Fs}


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

static void Test_S21037C3()
{
  extern Class_Descriptor cd_S21037C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,34)];
    init_test(&cd_S21037C3, buf);
    S21037C3 *dp, &lv = *(dp=new (buf) S21037C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,132), "sizeof(S21037C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21037C3)");
    check_base_class_offset(lv, (S5266C29*), 0, "S21037C3");
    check_base_class_offset(lv, (S19905C19*)(S21037C6*), ABISELECT(112,68), "S21037C3");
    check_base_class_offset(lv, (S19905C19*)(S21037C8*)(S21037C6*), ABISELECT(112,68), "S21037C3");
    /*is_ambiguous_... S21037C3::S21037C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C9*), ABISELECT(112,68), "S21037C3");
    /*is_ambiguous_... S21037C5::S21037C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C9*)(S21037C5*), ABISELECT(112,68), "S21037C3");
    /*is_ambiguous_... S21037C3::S21037C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C9*), ABISELECT(112,68), "S21037C3");
    check_base_class_offset(lv, (S21037C9*)(S21037C8*)(S21037C6*), ABISELECT(176,104), "S21037C3");
    check_base_class_offset(lv, (S21037C8*)(S21037C6*), ABISELECT(112,68), "S21037C3");
    check_base_class_offset(lv, (S17777C6_nt*)(S21037C6*), ABISELECT(128,76), "S21037C3");
    check_base_class_offset(lv, (S21037C6*)(S21037C5*), ABISELECT(112,68), "S21037C3");
    /*is_ambiguous_... S21037C5::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S21037C5*), ABISELECT(56,32), "S21037C3");
    /*is_ambiguous_... S21037C5::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C5*), ABISELECT(48,28), "S21037C3");
    /*is_ambiguous_... S21037C5::S21037C9 */ AMB_check_base_class_offset(lv, (S21037C9*)(S21037C5*), ABISELECT(64,36), "S21037C3");
    check_base_class_offset(lv, (S21037C5*), ABISELECT(48,28), "S21037C3");
    /*is_ambiguous_... S21037C3::S21037C9 */ AMB_check_base_class_offset(lv, (S21037C9*), 0, "S21037C3");
    check_field_offset(lv, s21037c3f0, ABISELECT(42,26), "S21037C3.s21037c3f0");
    test_class_info(&lv, &cd_S21037C3);
    dp->~S21037C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21037C3(Test_S21037C3, "S21037C3", ABISELECT(224,132));

#else // __cplusplus

extern void _ZN8S21037C3C1Ev();
extern void _ZN8S21037C3D2Ev();
Name_Map name_map_S21037C3[] = {
  NSPAIR(_ZN8S21037C3C1Ev),
  NSPAIR(_ZN8S21037C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S21037C9;
extern VTBL_ENTRY _ZTI8S21037C9[];
extern  VTBL_ENTRY _ZTV8S21037C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C9[];
extern Class_Descriptor cd_S21037C8;
extern VTBL_ENTRY _ZTI8S21037C8[];
extern  VTBL_ENTRY _ZTV8S21037C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C8[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S21037C6;
extern VTBL_ENTRY _ZTI8S21037C6[];
extern  VTBL_ENTRY _ZTV8S21037C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S21037C9;
extern VTBL_ENTRY _ZTI8S21037C9[];
extern  VTBL_ENTRY _ZTV8S21037C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C9[];
extern Class_Descriptor cd_S21037C5;
extern VTBL_ENTRY _ZTI8S21037C5[];
extern  VTBL_ENTRY _ZTV8S21037C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C5[];
extern Class_Descriptor cd_S21037C9;
extern VTBL_ENTRY _ZTI8S21037C9[];
extern  VTBL_ENTRY _ZTV8S21037C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C9[];
static Base_Class bases_S21037C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19905C19,    ABISELECT(112,68), //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
    2, //immediately_derived
  0, 1},
  {&cd_S21037C9,    ABISELECT(176,104), //bcp->offset
    31, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21037C8,    ABISELECT(112,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(128,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
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21037C6,    ABISELECT(112,68), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19905C19,    ABISELECT(48,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
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21037C9,    ABISELECT(64,36), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21037C5,    ABISELECT(48,28), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21037C9,    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 _ZTI8S21037C3[];
extern void ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev)();
extern void _ZN8S21037C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev)();
extern void _ZN8S21037C3D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21037C3D1Ev,_ZTv0_n24_N8S21037C3D1Ev)();
extern void ABISELECT(_ZThn48_N8S21037C3D1Ev,_ZThn28_N8S21037C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21037C3D0Ev,_ZTv0_n24_N8S21037C3D0Ev)();
extern void ABISELECT(_ZThn48_N8S21037C3D0Ev,_ZThn28_N8S21037C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S21037C3D1Ev,_ZThn36_N8S21037C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev)();
extern void ABISELECT(_ZThn64_N8S21037C3D0Ev,_ZThn36_N8S21037C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev)();
extern void ABISELECT(_ZThn112_N8S21037C3D1Ev,_ZThn68_N8S21037C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev)();
extern void ABISELECT(_ZThn112_N8S21037C3D0Ev,_ZThn68_N8S21037C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev)();
extern void ABISELECT(_ZThn176_N8S21037C3D1Ev,_ZThn104_N8S21037C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev)();
extern void ABISELECT(_ZThn176_N8S21037C3D0Ev,_ZThn104_N8S21037C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21037C3[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  0,
  ABISELECT(112,68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S21037C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21037C3D1Ev,_ZTv0_n24_N8S21037C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21037C3D0Ev,_ZTv0_n24_N8S21037C3D0Ev),
  ABISELECT(48,32),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21037C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev),
  ABISELECT(64,36),
  0,
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S21037C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI8S21037C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev),
};
extern VTBL_ENTRY _ZTV8S21037C3[];
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void _ZN8S21037C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void _ZN8S21037C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__A__8S21037C3[] = {
  ABISELECT(112,68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void ABISELECT(_ZThn112_N8S21037C9D1Ev,_ZThn68_N8S21037C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void ABISELECT(_ZThn112_N8S21037C9D0Ev,_ZThn68_N8S21037C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C9__A__8S21037C3[] = {
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void _ZN8S21037C5D1Ev();
extern void _ZN8S21037C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21037C5__8S21037C3[] = {
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C5[0]),
  (VTBL_ENTRY)&_ZN8S21037C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21037C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void _ZN8S21037C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void _ZN8S21037C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C98S21037C5__A1__8S21037C3[] = {
  ABISELECT(48,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void ABISELECT(_ZThn48_N8S21037C9D1Ev,_ZThn32_N8S21037C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void ABISELECT(_ZThn48_N8S21037C9D0Ev,_ZThn32_N8S21037C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C98S21037C5__A1__8S21037C3[] = {
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev)();
extern void ABISELECT(_ZThn64_N8S21037C5D1Ev,_ZThn40_N8S21037C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev)();
extern void ABISELECT(_ZThn64_N8S21037C5D0Ev,_ZThn40_N8S21037C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C6__8S21037C5__8S21037C3[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S21037C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev)();
extern void ABISELECT(_ZThn128_N8S21037C5D1Ev,_ZThn76_N8S21037C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev)();
extern void ABISELECT(_ZThn128_N8S21037C5D0Ev,_ZThn76_N8S21037C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C5__8S21037C3[] = {
  ABISELECT(-64,-36),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S21037C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S21037C5D1Ev,_ZThn8_N8S21037C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev)();
extern void ABISELECT(_ZThn16_N8S21037C5D0Ev,_ZThn8_N8S21037C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__A__8S21037C5__8S21037C3[] = {
  ABISELECT(48,32),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21037C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void _ZN8S21037C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
extern void _ZN8S21037C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C6__8S21037C3[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void _ZN8S21037C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
extern void _ZN8S21037C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C88S21037C6__8S21037C3[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21037C8D1Ev,_ZThn36_N8S21037C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S21037C8D0Ev,_ZThn36_N8S21037C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C88S21037C6__8S21037C3[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S21037C6D1Ev,_ZThn36_N8S21037C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S21037C6D0Ev,_ZThn36_N8S21037C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C6__8S21037C3[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void _ZN8S21037C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void _ZN8S21037C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C3[] = {
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C9__8S21037C3[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
static  VTT_ENTRY vtt_S21037C3[] = {
  {&(_ZTV8S21037C3[8]),  8,37},
  {&(_tg__ZTV8S21037C9__A__8S21037C3[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S21037C9__A__8S21037C3[3]),  3,5},
  {&(_ZTV8S21037C3[16]),  16,37},
  {&(_ZTV8S21037C3[29]),  29,37},
  {&(_ZTV8S21037C3[29]),  29,37},
  {&(_ZTV8S21037C3[35]),  35,37},
  {&(_ZTV8S21037C3[22]),  22,37},
  {&(_tg__ZTV8S21037C5__8S21037C3[5]),  5,7},
  {&(_tg__ZTV8S21037C98S21037C5__A1__8S21037C3[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S21037C98S21037C5__A1__8S21037C3[3]),  3,5},
  {&(_tg__ZTV8S21037C6__8S21037C5__8S21037C3[5]),  5,7},
  {&(_tg__ZTV8S21037C6__8S21037C5__8S21037C3[5]),  5,7},
  {&(_tg__ZTV8S21037C9__8S21037C5__8S21037C3[4]),  4,6},
  {&(_tg__ZTV8S21037C9__A__8S21037C5__8S21037C3[4]),  4,6},
  {&(_tg__ZTV8S21037C6__8S21037C3[5]),  5,7},
  {&(_tg__ZTV8S21037C88S21037C6__8S21037C3[5]),  5,7},
  {&(_tg__ZTV8S21037C88S21037C6__8S21037C3[5]),  5,7},
  {&(_tg__ZTV8S21037C9__8S21037C88S21037C6__8S21037C3[4]),  4,6},
  {&(_tg__ZTV8S21037C6__8S21037C3[5]),  5,7},
  {&(_tg__ZTV8S21037C9__8S21037C6__8S21037C3[4]),  4,6},
  {&(_tg__ZTV8S21037C9__8S21037C3[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S21037C9__8S21037C3[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21037C3[];
extern  VTBL_ENTRY _ZTV8S21037C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C3[];
static VTBL_ENTRY alt_thunk_names84[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C8D0Ev,_ZThn36_N8S21037C8D0Ev),
  (VTBL_ENTRY)_ZN8S21037C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C8D1Ev,_ZThn36_N8S21037C8D1Ev),
  (VTBL_ENTRY)_ZN8S21037C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C6D0Ev,_ZThn36_N8S21037C6D0Ev),
  (VTBL_ENTRY)_ZN8S21037C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C6D1Ev,_ZThn36_N8S21037C6D1Ev),
  (VTBL_ENTRY)_ZN8S21037C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21037C5D0Ev,_ZThn8_N8S21037C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S21037C5D0Ev,_ZThn76_N8S21037C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C5D0Ev,_ZThn40_N8S21037C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21037C5D1Ev,_ZThn8_N8S21037C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S21037C5D1Ev,_ZThn76_N8S21037C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C5D1Ev,_ZThn40_N8S21037C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S21037C9D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21037C9D0Ev,_ZThn32_N8S21037C9D0Ev),
  (VTBL_ENTRY)_ZN8S21037C9D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21037C9D0Ev,_ZThn68_N8S21037C9D0Ev),
  (VTBL_ENTRY)_ZN8S21037C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S21037C9D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21037C9D1Ev,_ZThn32_N8S21037C9D1Ev),
  (VTBL_ENTRY)_ZN8S21037C9D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21037C9D1Ev,_ZThn68_N8S21037C9D1Ev),
  (VTBL_ENTRY)_ZN8S21037C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21037C3D0Ev,_ZTv0_n24_N8S21037C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21037C3D0Ev,_ZThn28_N8S21037C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21037C3D1Ev,_ZTv0_n24_N8S21037C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21037C3D1Ev,_ZThn28_N8S21037C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S21037C3D0Ev,_ZThn104_N8S21037C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21037C3D0Ev,_ZThn68_N8S21037C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C3D0Ev,_ZThn36_N8S21037C3D0Ev),
  (VTBL_ENTRY)_ZN8S21037C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S21037C3D1Ev,_ZThn104_N8S21037C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21037C3D1Ev,_ZThn68_N8S21037C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C3D1Ev,_ZThn36_N8S21037C3D1Ev),
  (VTBL_ENTRY)_ZN8S21037C3D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21037C3 = {  "S21037C3", // class name
  bases_S21037C3, 11,
  &(vtc_S21037C3[0]), // expected_vtbl_contents
  &(vtt_S21037C3[0]), // expected_vtt_contents
  ABISELECT(224,132), // object size
  NSPAIRA(_ZTI8S21037C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21037C3),37, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21037C3),23, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names84,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21037C12  : virtual S19905C19 , S21037C9 , virtual S21037C3 , S21037C6 {
  void *s21037c12f0;
  ~S21037C12(); // tgen
  S21037C12(); // tgen
};
//SIG(-1 S21037C12) C1{ VBC2{ vd m} BC3{ VBC2 FD Fc Fs[4]} VBC4{ VBC5{ m} VBC6{ VBC7{ VBC2 BC8{ VBC2 VBC3 vd Fi} BC9{ m Fp} vd Fs FL Fp FL} BC9 BC2 BC3 vd Fi} BC3 vd Fs} BC7 Fp}


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

static void Test_S21037C12()
{
  extern Class_Descriptor cd_S21037C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,51)];
    init_test(&cd_S21037C12, buf);
    S21037C12 *dp, &lv = *(dp=new (buf) S21037C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,200), "sizeof(S21037C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21037C12)");
    /*is_ambiguous_... S21037C12::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*), 0, "S21037C12");
    /*is_ambiguous_... S21037C12::S21037C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C9*), 0, "S21037C12");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C6*), 0, "S21037C12");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C8*)(S21037C6*), 0, "S21037C12");
    /*is_ambiguous_... S21037C12::S21037C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C9*), 0, "S21037C12");
    /*is_ambiguous_... S21037C5::S21037C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C9*)(S21037C5*), 0, "S21037C12");
    /*is_ambiguous_... S21037C3::S21037C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C9*)(S21037C3*), 0, "S21037C12");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C6*), 0, "S21037C12");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C8*)(S21037C6*), 0, "S21037C12");
    /*is_ambiguous_... S21037C12::S21037C9 */ AMB_check_base_class_offset(lv, (S21037C9*), 0, "S21037C12");
    check_base_class_offset(lv, (S5266C29*)(S21037C3*), 0, "S21037C12");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S21037C9*)(S21037C8*)(S21037C6*), ABISELECT(288,172), "S21037C12");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S21037C9*)(S21037C8*)(S21037C6*), ABISELECT(288,172), "S21037C12");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S21037C8*)(S21037C6*), ABISELECT(224,136), "S21037C12");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S21037C6*), ABISELECT(240,144), "S21037C12");
    check_base_class_offset(lv, (S21037C6*)(S21037C5*), ABISELECT(224,136), "S21037C12");
    /*is_ambiguous_... S21037C5::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S21037C5*), ABISELECT(168,100), "S21037C12");
    /*is_ambiguous_... S21037C5::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C5*), ABISELECT(160,96), "S21037C12");
    /*is_ambiguous_... S21037C5::S21037C9 */ AMB_check_base_class_offset(lv, (S21037C9*)(S21037C5*), ABISELECT(176,104), "S21037C12");
    check_base_class_offset(lv, (S21037C5*)(S21037C3*), ABISELECT(160,96), "S21037C12");
    /*is_ambiguous_... S21037C3::S21037C9 */ AMB_check_base_class_offset(lv, (S21037C9*)(S21037C3*), ABISELECT(112,68), "S21037C12");
    check_base_class_offset(lv, (S21037C3*), ABISELECT(112,68), "S21037C12");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S21037C8*)(S21037C6*), ABISELECT(48,28), "S21037C12");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S21037C6*), ABISELECT(64,36), "S21037C12");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S21037C6*), ABISELECT(48,28), "S21037C12");
    check_field_offset(lv, s21037c12f0, ABISELECT(104,64), "S21037C12.s21037c12f0");
    test_class_info(&lv, &cd_S21037C12);
    dp->~S21037C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21037C12(Test_S21037C12, "S21037C12", ABISELECT(336,200));

#else // __cplusplus

extern void _ZN9S21037C12C1Ev();
extern void _ZN9S21037C12D1Ev();
Name_Map name_map_S21037C12[] = {
  NSPAIR(_ZN9S21037C12C1Ev),
  NSPAIR(_ZN9S21037C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S21037C9;
extern VTBL_ENTRY _ZTI8S21037C9[];
extern  VTBL_ENTRY _ZTV8S21037C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C9[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S21037C9;
extern VTBL_ENTRY _ZTI8S21037C9[];
extern  VTBL_ENTRY _ZTV8S21037C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C9[];
extern Class_Descriptor cd_S21037C8;
extern VTBL_ENTRY _ZTI8S21037C8[];
extern  VTBL_ENTRY _ZTV8S21037C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C8[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S21037C6;
extern VTBL_ENTRY _ZTI8S21037C6[];
extern  VTBL_ENTRY _ZTV8S21037C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S21037C9;
extern VTBL_ENTRY _ZTI8S21037C9[];
extern  VTBL_ENTRY _ZTV8S21037C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C9[];
extern Class_Descriptor cd_S21037C5;
extern VTBL_ENTRY _ZTI8S21037C5[];
extern  VTBL_ENTRY _ZTV8S21037C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C5[];
extern Class_Descriptor cd_S21037C9;
extern VTBL_ENTRY _ZTI8S21037C9[];
extern  VTBL_ENTRY _ZTV8S21037C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C9[];
extern Class_Descriptor cd_S21037C3;
extern VTBL_ENTRY _ZTI8S21037C3[];
extern  VTBL_ENTRY _ZTV8S21037C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C3[];
extern Class_Descriptor cd_S21037C8;
extern VTBL_ENTRY _ZTI8S21037C8[];
extern  VTBL_ENTRY _ZTV8S21037C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C8[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S21037C6;
extern VTBL_ENTRY _ZTI8S21037C6[];
extern  VTBL_ENTRY _ZTV8S21037C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C6[];
static Base_Class bases_S21037C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    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
  1, 1},
  {&cd_S21037C9,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S21037C9,    ABISELECT(288,172), //bcp->offset
    49, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S21037C8,    ABISELECT(224,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(240,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21037C6,    ABISELECT(224,136), //bcp->offset
    42, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19905C19,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S21037C9,    ABISELECT(176,104), //bcp->offset
    36, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S21037C5,    ABISELECT(160,96), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S21037C9,    ABISELECT(112,68), //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
    12, //immediately_derived
  0, 0},
  {&cd_S21037C3,    ABISELECT(112,68), //bcp->offset
    18, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21037C8,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S17777C6_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
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S21037C6,    ABISELECT(48,28), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21037C12[];
extern void ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev)();
extern void _ZN9S21037C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev)();
extern void _ZN9S21037C12D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev)();
extern void ABISELECT(_ZThn48_N9S21037C12D1Ev,_ZThn28_N9S21037C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev)();
extern void ABISELECT(_ZThn48_N9S21037C12D0Ev,_ZThn28_N9S21037C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev)();
extern void ABISELECT(_ZThn112_N9S21037C12D1Ev,_ZThn68_N9S21037C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev)();
extern void ABISELECT(_ZThn112_N9S21037C12D0Ev,_ZThn68_N9S21037C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S21037C12D1Ev,_ZTv0_n24_N9S21037C12D1Ev)();
extern void ABISELECT(_ZThn160_N9S21037C12D1Ev,_ZThn96_N9S21037C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S21037C12D0Ev,_ZTv0_n24_N9S21037C12D0Ev)();
extern void ABISELECT(_ZThn160_N9S21037C12D0Ev,_ZThn96_N9S21037C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev)();
extern void ABISELECT(_ZThn176_N9S21037C12D1Ev,_ZThn104_N9S21037C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev)();
extern void ABISELECT(_ZThn176_N9S21037C12D0Ev,_ZThn104_N9S21037C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev)();
extern void ABISELECT(_ZThn224_N9S21037C12D1Ev,_ZThn136_N9S21037C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev)();
extern void ABISELECT(_ZThn224_N9S21037C12D0Ev,_ZThn136_N9S21037C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev)();
extern void ABISELECT(_ZThn288_N9S21037C12D1Ev,_ZThn172_N9S21037C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev)();
extern void ABISELECT(_ZThn288_N9S21037C12D0Ev,_ZThn172_N9S21037C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21037C12[] = {
  ABISELECT(288,172),
  ABISELECT(224,136),
  ABISELECT(160,96),
  0,
  ABISELECT(112,68),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev),
  ABISELECT(240,144),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev),
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev),
  ABISELECT(-160,-96),
  ABISELECT(128,76),
  ABISELECT(-160,-96),
  ABISELECT(64,40),
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S21037C12D1Ev,_ZTv0_n24_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S21037C12D0Ev,_ZTv0_n24_N9S21037C12D0Ev),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev),
  ABISELECT(64,36),
  ABISELECT(-224,-136),
  ABISELECT(-224,-136),
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev),
  ABISELECT(-288,-172),
  ABISELECT(-288,-172),
  ABISELECT(-288,-172),
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S21037C12[];
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void _ZN8S21037C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void _ZN8S21037C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__A__9S21037C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void _ZN8S21037C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
extern void _ZN8S21037C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C6__A__9S21037C12[] = {
  ABISELECT(240,144),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void _ZN8S21037C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
extern void _ZN8S21037C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C88S21037C6__A1__9S21037C12[] = {
  ABISELECT(240,144),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C88S21037C6__A1__9S21037C12[] = {
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void ABISELECT(_ZThn240_N8S21037C8D1Ev,_ZThn144_N8S21037C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
extern void ABISELECT(_ZThn240_N8S21037C8D0Ev,_ZThn144_N8S21037C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C88S21037C6__A1__9S21037C12[] = {
  ABISELECT(-288,-172),
  ABISELECT(-240,-144),
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C6__A__9S21037C12[] = {
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void ABISELECT(_ZThn240_N8S21037C6D1Ev,_ZThn144_N8S21037C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
extern void ABISELECT(_ZThn240_N8S21037C6D0Ev,_ZThn144_N8S21037C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C6__A__9S21037C12[] = {
  ABISELECT(-288,-172),
  ABISELECT(-240,-144),
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev)();
extern void _ZN8S21037C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev)();
extern void _ZN8S21037C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C3__9S21037C12[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void _ZN8S21037C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void _ZN8S21037C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C98S21037C3__A3__9S21037C12[] = {
  ABISELECT(-112,-68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C98S21037C3__A3__9S21037C12[] = {
  ABISELECT(112,68),
  ABISELECT(112,68),
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S21037C3D1Ev,_ZTv0_n24_N8S21037C3D1Ev)();
extern void ABISELECT(_ZThn48_N8S21037C3D1Ev,_ZThn28_N8S21037C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21037C3D0Ev,_ZTv0_n24_N8S21037C3D0Ev)();
extern void ABISELECT(_ZThn48_N8S21037C3D0Ev,_ZThn28_N8S21037C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C5__8S21037C3__9S21037C12[] = {
  ABISELECT(-48,-28),
  ABISELECT(128,76),
  ABISELECT(-160,-96),
  ABISELECT(64,40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S21037C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21037C3D1Ev,_ZTv0_n24_N8S21037C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21037C3D0Ev,_ZTv0_n24_N8S21037C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev)();
extern void ABISELECT(_ZThn112_N8S21037C3D1Ev,_ZThn68_N8S21037C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev)();
extern void ABISELECT(_ZThn112_N8S21037C3D0Ev,_ZThn68_N8S21037C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C6__8S21037C3__9S21037C12[] = {
  ABISELECT(64,36),
  ABISELECT(-224,-136),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S21037C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C3__9S21037C12[] = {
  ABISELECT(112,68),
  ABISELECT(112,68),
  (VTBL_ENTRY)&(_ZTI8S21037C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev)();
extern void ABISELECT(_ZThn176_N8S21037C3D1Ev,_ZThn104_N8S21037C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev)();
extern void ABISELECT(_ZThn176_N8S21037C3D0Ev,_ZThn104_N8S21037C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C3__9S21037C12[] = {
  ABISELECT(-288,-172),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI8S21037C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S21037C3D1Ev,_ZThn36_N8S21037C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev)();
extern void ABISELECT(_ZThn64_N8S21037C3D0Ev,_ZThn36_N8S21037C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C98S21037C5__A1__8S21037C3__9S21037C12[] = {
  ABISELECT(-176,-104),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21037C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev),
};
extern void _ZN8S21037C5D1Ev();
extern void _ZN8S21037C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21037C5__9S21037C12[] = {
  ABISELECT(128,76),
  ABISELECT(-160,-96),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C5[0]),
  (VTBL_ENTRY)&_ZN8S21037C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21037C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void _ZN8S21037C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void _ZN8S21037C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C98S21037C5__A2__9S21037C12[] = {
  ABISELECT(-176,-104),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C98S21037C5__A2__9S21037C12[] = {
  ABISELECT(176,104),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev)();
extern void ABISELECT(_ZThn64_N8S21037C5D1Ev,_ZThn40_N8S21037C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev)();
extern void ABISELECT(_ZThn64_N8S21037C5D0Ev,_ZThn40_N8S21037C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C6__8S21037C5__9S21037C12[] = {
  ABISELECT(64,36),
  ABISELECT(-224,-136),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S21037C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C5__9S21037C12[] = {
  ABISELECT(160,96),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI8S21037C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev)();
extern void ABISELECT(_ZThn128_N8S21037C5D1Ev,_ZThn76_N8S21037C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev)();
extern void ABISELECT(_ZThn128_N8S21037C5D0Ev,_ZThn76_N8S21037C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C5__9S21037C12[] = {
  ABISELECT(-288,-172),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S21037C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S21037C5D1Ev,_ZThn8_N8S21037C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev)();
extern void ABISELECT(_ZThn16_N8S21037C5D0Ev,_ZThn8_N8S21037C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__A__8S21037C5__9S21037C12[] = {
  ABISELECT(-176,-104),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21037C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void _ZN8S21037C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
extern void _ZN8S21037C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C6__9S21037C12[] = {
  ABISELECT(64,36),
  ABISELECT(-224,-136),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void _ZN8S21037C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
extern void _ZN8S21037C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C88S21037C6__9S21037C12[] = {
  ABISELECT(64,36),
  ABISELECT(-224,-136),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C88S21037C6__9S21037C12[] = {
  ABISELECT(224,136),
  ABISELECT(224,136),
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21037C8D1Ev,_ZThn36_N8S21037C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S21037C8D0Ev,_ZThn36_N8S21037C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C88S21037C6__9S21037C12[] = {
  ABISELECT(-288,-172),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C6__9S21037C12[] = {
  ABISELECT(224,136),
  ABISELECT(224,136),
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S21037C6D1Ev,_ZThn36_N8S21037C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S21037C6D0Ev,_ZThn36_N8S21037C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C6__9S21037C12[] = {
  ABISELECT(-288,-172),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void _ZN8S21037C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void _ZN8S21037C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__A1__9S21037C12[] = {
  ABISELECT(-288,-172),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C9__A1__9S21037C12[] = {
  ABISELECT(288,172),
  ABISELECT(288,172),
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
static  VTT_ENTRY vtt_S21037C12[] = {
  {&(_ZTV9S21037C12[9]),  9,55},
  {&(_tg__ZTV8S21037C9__A__9S21037C12[4]),  4,6},
  {&(_tg__ZTV8S21037C9__A__9S21037C12[4]),  4,6},
  {&(_tg__ZTV8S21037C6__A__9S21037C12[5]),  5,7},
  {&(_tg__ZTV8S21037C88S21037C6__A1__9S21037C12[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S21037C88S21037C6__A1__9S21037C12[3]),  3,5},
  {&(_tg__ZTV8S21037C9__8S21037C88S21037C6__A1__9S21037C12[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S21037C6__A__9S21037C12[3]),  3,5},
  {&(_tg__ZTV8S21037C9__8S21037C6__A__9S21037C12[4]),  4,6},
  {&(_ZTV9S21037C12[9]),  9,55},
  {&(_ZTV9S21037C12[26]),  26,55},
  {&(_ZTV9S21037C12[34]),  34,55},
  {&(_ZTV9S21037C12[47]),  47,55},
  {&(_ZTV9S21037C12[53]),  53,55},
  {&(_ZTV9S21037C12[40]),  40,55},
  {&(_ZTV9S21037C12[16]),  16,55},
  {&(_tg__ZTV8S21037C3__9S21037C12[8]),  8,10},
  {&(_tg__ZTV8S21037C98S21037C3__A3__9S21037C12[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S21037C98S21037C3__A3__9S21037C12[3]),  3,5},
  {&(_tg__ZTV8S21037C5__8S21037C3__9S21037C12[6]),  6,8},
  {&(_tg__ZTV8S21037C6__8S21037C3__9S21037C12[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S21037C3__9S21037C12[3]),  3,5},
  {&(_tg__ZTV8S21037C9__8S21037C3__9S21037C12[4]),  4,6},
  {&(_tg__ZTV8S21037C98S21037C5__A1__8S21037C3__9S21037C12[4]),  4,6},
  {&(_tg__ZTV8S21037C5__9S21037C12[5]),  5,7},
  {&(_tg__ZTV8S21037C98S21037C5__A2__9S21037C12[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S21037C98S21037C5__A2__9S21037C12[3]),  3,5},
  {&(_tg__ZTV8S21037C6__8S21037C5__9S21037C12[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S21037C5__9S21037C12[3]),  3,5},
  {&(_tg__ZTV8S21037C9__8S21037C5__9S21037C12[4]),  4,6},
  {&(_tg__ZTV8S21037C9__A__8S21037C5__9S21037C12[4]),  4,6},
  {&(_tg__ZTV8S21037C6__9S21037C12[5]),  5,7},
  {&(_tg__ZTV8S21037C88S21037C6__9S21037C12[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S21037C88S21037C6__9S21037C12[3]),  3,5},
  {&(_tg__ZTV8S21037C9__8S21037C88S21037C6__9S21037C12[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S21037C6__9S21037C12[3]),  3,5},
  {&(_tg__ZTV8S21037C9__8S21037C6__9S21037C12[4]),  4,6},
  {&(_tg__ZTV8S21037C9__A1__9S21037C12[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S21037C9__A1__9S21037C12[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S21037C12[];
extern  VTBL_ENTRY _ZTV9S21037C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21037C12[];
static VTBL_ENTRY alt_thunk_names85[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21037C5D0Ev,_ZThn8_N8S21037C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S21037C5D0Ev,_ZThn76_N8S21037C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C5D0Ev,_ZThn40_N8S21037C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21037C5D1Ev,_ZThn8_N8S21037C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S21037C5D1Ev,_ZThn76_N8S21037C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C5D1Ev,_ZThn40_N8S21037C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21037C3D0Ev,_ZTv0_n24_N8S21037C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21037C3D0Ev,_ZThn28_N8S21037C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21037C3D1Ev,_ZTv0_n24_N8S21037C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21037C3D1Ev,_ZThn28_N8S21037C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C3D0Ev,_ZThn36_N8S21037C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S21037C3D0Ev,_ZThn104_N8S21037C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21037C3D0Ev,_ZThn68_N8S21037C3D0Ev),
  (VTBL_ENTRY)_ZN8S21037C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C3D1Ev,_ZThn36_N8S21037C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S21037C3D1Ev,_ZThn104_N8S21037C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21037C3D1Ev,_ZThn68_N8S21037C3D1Ev),
  (VTBL_ENTRY)_ZN8S21037C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C8D0Ev,_ZThn36_N8S21037C8D0Ev),
  (VTBL_ENTRY)_ZN8S21037C8D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S21037C8D0Ev,_ZThn144_N8S21037C8D0Ev),
  (VTBL_ENTRY)_ZN8S21037C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C8D1Ev,_ZThn36_N8S21037C8D1Ev),
  (VTBL_ENTRY)_ZN8S21037C8D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S21037C8D1Ev,_ZThn144_N8S21037C8D1Ev),
  (VTBL_ENTRY)_ZN8S21037C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C6D0Ev,_ZThn36_N8S21037C6D0Ev),
  (VTBL_ENTRY)_ZN8S21037C6D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S21037C6D0Ev,_ZThn144_N8S21037C6D0Ev),
  (VTBL_ENTRY)_ZN8S21037C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C6D1Ev,_ZThn36_N8S21037C6D1Ev),
  (VTBL_ENTRY)_ZN8S21037C6D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S21037C6D1Ev,_ZThn144_N8S21037C6D1Ev),
  (VTBL_ENTRY)_ZN8S21037C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S21037C9D0Ev,
  (VTBL_ENTRY)_ZN8S21037C9D0Ev,
  (VTBL_ENTRY)_ZN8S21037C9D0Ev,
  (VTBL_ENTRY)_ZN8S21037C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S21037C9D1Ev,
  (VTBL_ENTRY)_ZN8S21037C9D1Ev,
  (VTBL_ENTRY)_ZN8S21037C9D1Ev,
  (VTBL_ENTRY)_ZN8S21037C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S21037C12D0Ev,_ZTv0_n24_N9S21037C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S21037C12D0Ev,_ZThn96_N9S21037C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S21037C12D1Ev,_ZTv0_n24_N9S21037C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S21037C12D1Ev,_ZThn96_N9S21037C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S21037C12D0Ev,_ZThn172_N9S21037C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S21037C12D0Ev,_ZThn136_N9S21037C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S21037C12D0Ev,_ZThn104_N9S21037C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S21037C12D0Ev,_ZThn68_N9S21037C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S21037C12D0Ev,_ZThn28_N9S21037C12D0Ev),
  (VTBL_ENTRY)_ZN9S21037C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S21037C12D1Ev,_ZThn172_N9S21037C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S21037C12D1Ev,_ZThn136_N9S21037C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S21037C12D1Ev,_ZThn104_N9S21037C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S21037C12D1Ev,_ZThn68_N9S21037C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S21037C12D1Ev,_ZThn28_N9S21037C12D1Ev),
  (VTBL_ENTRY)_ZN9S21037C12D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21037C12 = {  "S21037C12", // class name
  bases_S21037C12, 16,
  &(vtc_S21037C12[0]), // expected_vtbl_contents
  &(vtt_S21037C12[0]), // expected_vtt_contents
  ABISELECT(336,200), // object size
  NSPAIRA(_ZTI9S21037C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S21037C12),55, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21037C12),39, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names85,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21037C13  : S5266C26 , virtual S21037C6 , S17777C6_nt , virtual S5266C29 {
  ::S21037C8 s21037c13f0;
  short s21037c13f1;
  virtual  ~S21037C13(); // _ZN9S21037C13D2Ev
  S21037C13(); // tgen
};
//SIG(-1 S21037C13) C1{ BC2{ m} VBC3{ VBC4{ vd m} BC5{ VBC4 VBC6{ VBC4 FD Fc Fs[4]} vd Fi} BC7{ m Fp} vd Fs FL Fp FL} BC7 VBC8{ m} vd FC5 Fs}


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

static void Test_S21037C13()
{
  extern Class_Descriptor cd_S21037C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,29)];
    init_test(&cd_S21037C13, buf);
    S21037C13 *dp, &lv = *(dp=new (buf) S21037C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,112), "sizeof(S21037C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21037C13)");
    check_base_class_offset(lv, (S5266C26*), 0, "S21037C13");
    check_base_class_offset(lv, (S19905C19*)(S21037C6*), 0, "S21037C13");
    check_base_class_offset(lv, (S19905C19*)(S21037C8*)(S21037C6*), 0, "S21037C13");
    check_base_class_offset(lv, (S19905C19*)(S21037C9*), 0, "S21037C13");
    check_base_class_offset(lv, (S21037C9*)(S21037C8*)(S21037C6*), ABISELECT(144,84), "S21037C13");
    check_base_class_offset(lv, (S21037C8*)(S21037C6*), ABISELECT(88,48), "S21037C13");
    check_base_class_offset(lv, (S17777C6_nt*)(S21037C6*), ABISELECT(104,56), "S21037C13");
    check_base_class_offset(lv, (S21037C6*), ABISELECT(88,48), "S21037C13");
    /*is_ambiguous_... S21037C13::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*), ABISELECT(8,4), "S21037C13");
    check_base_class_offset(lv, (S5266C29*), 0, "S21037C13");
    check_field_offset(lv, s21037c13f0, ABISELECT(16,8), "S21037C13.s21037c13f0");
    check_field_offset(lv, s21037c13f1, ABISELECT(80,44), "S21037C13.s21037c13f1");
    test_class_info(&lv, &cd_S21037C13);
    dp->~S21037C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21037C13(Test_S21037C13, "S21037C13", ABISELECT(192,112));

#else // __cplusplus

extern void _ZN9S21037C13C1Ev();
extern void _ZN9S21037C13D2Ev();
Name_Map name_map_S21037C13[] = {
  NSPAIR(_ZN9S21037C13C1Ev),
  NSPAIR(_ZN9S21037C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S21037C9;
extern VTBL_ENTRY _ZTI8S21037C9[];
extern  VTBL_ENTRY _ZTV8S21037C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C9[];
extern Class_Descriptor cd_S21037C8;
extern VTBL_ENTRY _ZTI8S21037C8[];
extern  VTBL_ENTRY _ZTV8S21037C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C8[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S21037C6;
extern VTBL_ENTRY _ZTI8S21037C6[];
extern  VTBL_ENTRY _ZTV8S21037C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
static Base_Class bases_S21037C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19905C19,    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
    2, //immediately_derived
  0, 1},
  {&cd_S21037C9,    ABISELECT(144,84), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21037C8,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(104,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
    5, //immediately_derived
  0, 0},
  {&cd_S21037C6,    ABISELECT(88,48), //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S17777C6_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, 0},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S21037C13[];
extern void _ZN9S21037C13D1Ev();
extern void _ZN9S21037C13D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S21037C13D1Ev,_ZTv0_n12_N9S21037C13D1Ev)();
extern void ABISELECT(_ZThn88_N9S21037C13D1Ev,_ZThn48_N9S21037C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C13D0Ev,_ZTv0_n12_N9S21037C13D0Ev)();
extern void ABISELECT(_ZThn88_N9S21037C13D0Ev,_ZThn48_N9S21037C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C13D1Ev,_ZTv0_n12_N9S21037C13D1Ev)();
extern void ABISELECT(_ZThn144_N9S21037C13D1Ev,_ZThn84_N9S21037C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C13D0Ev,_ZTv0_n12_N9S21037C13D0Ev)();
extern void ABISELECT(_ZThn144_N9S21037C13D0Ev,_ZThn84_N9S21037C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21037C13[] = {
  0,
  ABISELECT(144,84),
  0,
  ABISELECT(88,48),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S21037C13[0]),
  (VTBL_ENTRY)&_ZN9S21037C13D1Ev,
  (VTBL_ENTRY)&_ZN9S21037C13D0Ev,
  ABISELECT(56,36),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI9S21037C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C13D1Ev,_ZTv0_n12_N9S21037C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C13D0Ev,_ZTv0_n12_N9S21037C13D0Ev),
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S21037C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C13D1Ev,_ZTv0_n12_N9S21037C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C13D0Ev,_ZTv0_n12_N9S21037C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S21037C13[];
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void _ZN8S21037C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
extern void _ZN8S21037C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C6__9S21037C13[] = {
  ABISELECT(56,36),
  ABISELECT(-88,-48),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void _ZN8S21037C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
extern void _ZN8S21037C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C88S21037C6__9S21037C13[] = {
  ABISELECT(56,36),
  ABISELECT(-88,-48),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C88S21037C6__9S21037C13[] = {
  ABISELECT(88,48),
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void ABISELECT(_ZThn56_N8S21037C8D1Ev,_ZThn36_N8S21037C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
extern void ABISELECT(_ZThn56_N8S21037C8D0Ev,_ZThn36_N8S21037C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C88S21037C6__9S21037C13[] = {
  ABISELECT(-144,-84),
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C6__9S21037C13[] = {
  ABISELECT(88,48),
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void ABISELECT(_ZThn56_N8S21037C6D1Ev,_ZThn36_N8S21037C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
extern void ABISELECT(_ZThn56_N8S21037C6D0Ev,_ZThn36_N8S21037C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C6__9S21037C13[] = {
  ABISELECT(-144,-84),
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void _ZN8S21037C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void _ZN8S21037C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__9S21037C13[] = {
  ABISELECT(-144,-84),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C9__9S21037C13[] = {
  ABISELECT(144,84),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
static  VTT_ENTRY vtt_S21037C13[] = {
  {&(_ZTV9S21037C13[7]),  7,22},
  {&(_ZTV9S21037C13[14]),  14,22},
  {&(_ZTV9S21037C13[7]),  7,22},
  {&(_ZTV9S21037C13[20]),  20,22},
  {&(_tg__ZTV8S21037C6__9S21037C13[5]),  5,7},
  {&(_tg__ZTV8S21037C88S21037C6__9S21037C13[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S21037C88S21037C6__9S21037C13[3]),  3,5},
  {&(_tg__ZTV8S21037C9__8S21037C88S21037C6__9S21037C13[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S21037C6__9S21037C13[3]),  3,5},
  {&(_tg__ZTV8S21037C9__8S21037C6__9S21037C13[4]),  4,6},
  {&(_tg__ZTV8S21037C9__9S21037C13[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S21037C9__9S21037C13[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S21037C13[];
extern  VTBL_ENTRY _ZTV9S21037C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21037C13[];
static VTBL_ENTRY alt_thunk_names86[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S21037C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S21037C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21037C8D0Ev,_ZThn36_N8S21037C8D0Ev),
  (VTBL_ENTRY)_ZN8S21037C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21037C8D1Ev,_ZThn36_N8S21037C8D1Ev),
  (VTBL_ENTRY)_ZN8S21037C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21037C6D0Ev,_ZThn36_N8S21037C6D0Ev),
  (VTBL_ENTRY)_ZN8S21037C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21037C6D1Ev,_ZThn36_N8S21037C6D1Ev),
  (VTBL_ENTRY)_ZN8S21037C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21037C13D0Ev,_ZTv0_n12_N9S21037C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S21037C13D0Ev,_ZThn84_N9S21037C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S21037C13D0Ev,_ZThn48_N9S21037C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21037C13D1Ev,_ZTv0_n12_N9S21037C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S21037C13D1Ev,_ZThn84_N9S21037C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S21037C13D1Ev,_ZThn48_N9S21037C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21037C13 = {  "S21037C13", // class name
  bases_S21037C13, 8,
  &(vtc_S21037C13[0]), // expected_vtbl_contents
  &(vtt_S21037C13[0]), // expected_vtt_contents
  ABISELECT(192,112), // object size
  NSPAIRA(_ZTI9S21037C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S21037C13),22, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21037C13),12, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names86,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21037C11  : virtual S21037C9 , virtual S21037C12 , virtual S17777C6_nt , S21037C13 {
  int s21037c11f0;
  ::S19905C17_nt s21037c11f1;
  virtual  ~S21037C11(); // _ZN9S21037C11D2Ev
  S21037C11(); // tgen
};
//SIG(-1 S21037C11) C1{ VBC2{ VBC3{ vd m} FD Fc Fs[4]} VBC4{ VBC3 BC2 VBC5{ VBC6{ m} VBC7{ VBC8{ VBC3 BC9{ VBC3 VBC2 vd Fi} BC10{ m Fp} vd Fs FL Fp FL} BC10 BC3 BC2 vd Fi} BC2 vd Fs} BC8 Fp} VBC10 BC11{ BC12{ m} VBC8 BC10 VBC6 vd FC9 Fs} vd Fi FC13{}}


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

static void Test_S21037C11()
{
  extern Class_Descriptor cd_S21037C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,66)];
    init_test(&cd_S21037C11, buf);
    S21037C11 *dp, &lv = *(dp=new (buf) S21037C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,260), "sizeof(S21037C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21037C11)");
    /*is_ambiguous_... S21037C11::S21037C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C9*), ABISELECT(96,56), "S21037C11");
    /*is_ambiguous_... S21037C12::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C12*), ABISELECT(96,56), "S21037C11");
    /*is_ambiguous_... S21037C12::S21037C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C9*)(S21037C12*), ABISELECT(96,56), "S21037C11");
    /*is_ambiguous_... S21037C11::S21037C6 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C6*), ABISELECT(96,56), "S21037C11");
    /*is_ambiguous_... S21037C11::S21037C6 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C8*)(S21037C6*), ABISELECT(96,56), "S21037C11");
    /*is_ambiguous_... S21037C5::S21037C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C9*)(S21037C5*), ABISELECT(96,56), "S21037C11");
    /*is_ambiguous_... S21037C3::S21037C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C9*)(S21037C3*), ABISELECT(96,56), "S21037C11");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C6*)(S21037C12*), ABISELECT(96,56), "S21037C11");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C8*)(S21037C6*)(S21037C12*), ABISELECT(96,56), "S21037C11");
    /*is_ambiguous_... S21037C11::S21037C9 */ AMB_check_base_class_offset(lv, (S21037C9*), ABISELECT(96,56), "S21037C11");
    /*is_ambiguous_... S21037C11::S21037C6 */ AMB_check_base_class_offset(lv, (S21037C9*)(S21037C8*)(S21037C6*), ABISELECT(96,56), "S21037C11");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S21037C9*)(S21037C8*)(S21037C6*)(S21037C12*), ABISELECT(96,56), "S21037C11");
    /*is_ambiguous_... S21037C12::S21037C9 */ AMB_check_base_class_offset(lv, (S21037C9*)(S21037C12*), ABISELECT(144,84), "S21037C11");
    check_base_class_offset(lv, (S5266C29*)(S21037C3*), 0, "S21037C11");
    check_base_class_offset(lv, (S5266C29*)(S21037C13*), 0, "S21037C11");
    /*is_ambiguous_... S21037C11::S21037C6 */ AMB_check_base_class_offset(lv, (S21037C8*)(S21037C6*), ABISELECT(368,220), "S21037C11");
    /*is_ambiguous_... S21037C11::S21037C6 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S21037C6*), ABISELECT(384,228), "S21037C11");
    check_base_class_offset(lv, (S21037C6*)(S21037C5*), ABISELECT(368,220), "S21037C11");
    check_base_class_offset(lv, (S21037C6*)(S21037C13*), ABISELECT(368,220), "S21037C11");
    /*is_ambiguous_... S21037C5::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S21037C5*), ABISELECT(312,184), "S21037C11");
    /*is_ambiguous_... S21037C5::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C5*), ABISELECT(304,180), "S21037C11");
    /*is_ambiguous_... S21037C5::S21037C9 */ AMB_check_base_class_offset(lv, (S21037C9*)(S21037C5*), ABISELECT(320,188), "S21037C11");
    check_base_class_offset(lv, (S21037C5*)(S21037C3*), ABISELECT(304,180), "S21037C11");
    /*is_ambiguous_... S21037C3::S21037C9 */ AMB_check_base_class_offset(lv, (S21037C9*)(S21037C3*), ABISELECT(256,152), "S21037C11");
    check_base_class_offset(lv, (S21037C3*)(S21037C12*), ABISELECT(256,152), "S21037C11");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S21037C8*)(S21037C6*)(S21037C12*), ABISELECT(192,112), "S21037C11");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S21037C6*)(S21037C12*), ABISELECT(208,120), "S21037C11");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S21037C6*)(S21037C12*), ABISELECT(192,112), "S21037C11");
    check_base_class_offset(lv, (S21037C12*), ABISELECT(144,84), "S21037C11");
    /*is_ambiguous_... S21037C11::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*), ABISELECT(424,256), "S21037C11");
    check_base_class_offset(lv, (S5266C26*)(S21037C13*), 0, "S21037C11");
    /*is_ambiguous_... S21037C13::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S21037C13*), ABISELECT(8,4), "S21037C11");
    check_base_class_offset(lv, (S21037C13*), 0, "S21037C11");
    check_field_offset(lv, s21037c11f0, ABISELECT(84,48), "S21037C11.s21037c11f0");
    check_field_offset(lv, s21037c11f1, ABISELECT(88,52), "S21037C11.s21037c11f1");
    test_class_info(&lv, &cd_S21037C11);
    dp->~S21037C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21037C11(Test_S21037C11, "S21037C11", ABISELECT(432,260));

#else // __cplusplus

extern void _ZN9S21037C11C1Ev();
extern void _ZN9S21037C11D2Ev();
Name_Map name_map_S21037C11[] = {
  NSPAIR(_ZN9S21037C11C1Ev),
  NSPAIR(_ZN9S21037C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S21037C9;
extern VTBL_ENTRY _ZTI8S21037C9[];
extern  VTBL_ENTRY _ZTV8S21037C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C9[];
extern Class_Descriptor cd_S21037C9;
extern VTBL_ENTRY _ZTI8S21037C9[];
extern  VTBL_ENTRY _ZTV8S21037C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C9[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S21037C8;
extern VTBL_ENTRY _ZTI8S21037C8[];
extern  VTBL_ENTRY _ZTV8S21037C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C8[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S21037C6;
extern VTBL_ENTRY _ZTI8S21037C6[];
extern  VTBL_ENTRY _ZTV8S21037C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S21037C9;
extern VTBL_ENTRY _ZTI8S21037C9[];
extern  VTBL_ENTRY _ZTV8S21037C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C9[];
extern Class_Descriptor cd_S21037C5;
extern VTBL_ENTRY _ZTI8S21037C5[];
extern  VTBL_ENTRY _ZTV8S21037C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C5[];
extern Class_Descriptor cd_S21037C9;
extern VTBL_ENTRY _ZTI8S21037C9[];
extern  VTBL_ENTRY _ZTV8S21037C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C9[];
extern Class_Descriptor cd_S21037C3;
extern VTBL_ENTRY _ZTI8S21037C3[];
extern  VTBL_ENTRY _ZTV8S21037C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C3[];
extern Class_Descriptor cd_S21037C8;
extern VTBL_ENTRY _ZTI8S21037C8[];
extern  VTBL_ENTRY _ZTV8S21037C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C8[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S21037C6;
extern VTBL_ENTRY _ZTI8S21037C6[];
extern  VTBL_ENTRY _ZTV8S21037C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C6[];
extern Class_Descriptor cd_S21037C12;
extern VTBL_ENTRY _ZTI9S21037C12[];
extern  VTBL_ENTRY _ZTV9S21037C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21037C12[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S21037C13;
extern VTBL_ENTRY _ZTI9S21037C13[];
extern  VTBL_ENTRY _ZTV9S21037C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21037C13[];
static Base_Class bases_S21037C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    ABISELECT(96,56), //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
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S21037C9,    ABISELECT(96,56), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21037C9,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S21037C8,    ABISELECT(368,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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_S17777C6_nt,    ABISELECT(384,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
    6, //immediately_derived
  0, 0},
  {&cd_S21037C6,    ABISELECT(368,220), //bcp->offset
    61, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(312,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
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19905C19,    ABISELECT(304,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
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S21037C9,    ABISELECT(320,188), //bcp->offset
    55, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S21037C5,    ABISELECT(304,180), //bcp->offset
    47, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S21037C9,    ABISELECT(256,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21037C3,    ABISELECT(256,152), //bcp->offset
    37, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S21037C8,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S17777C6_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
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S21037C6,    ABISELECT(192,112), //bcp->offset
    30, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S21037C12,    ABISELECT(144,84), //bcp->offset
    19, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S17777C6_nt,    ABISELECT(424,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S17777C6_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
    20, //immediately_derived
  0, 0},
  {&cd_S21037C13,    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
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21037C11[];
extern void ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev)();
extern void _ZN9S21037C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev)();
extern void _ZN9S21037C11D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev)();
extern void ABISELECT(_ZThn96_N9S21037C11D1Ev,_ZThn56_N9S21037C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev)();
extern void ABISELECT(_ZThn96_N9S21037C11D0Ev,_ZThn56_N9S21037C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev)();
extern void ABISELECT(_ZThn144_N9S21037C11D1Ev,_ZThn84_N9S21037C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev)();
extern void ABISELECT(_ZThn144_N9S21037C11D0Ev,_ZThn84_N9S21037C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev)();
extern void ABISELECT(_ZThn192_N9S21037C11D1Ev,_ZThn112_N9S21037C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev)();
extern void ABISELECT(_ZThn192_N9S21037C11D0Ev,_ZThn112_N9S21037C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev)();
extern void ABISELECT(_ZThn256_N9S21037C11D1Ev,_ZThn152_N9S21037C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev)();
extern void ABISELECT(_ZThn256_N9S21037C11D0Ev,_ZThn152_N9S21037C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S21037C11D1Ev,_ZTv0_n24_N9S21037C11D1Ev)();
extern void ABISELECT(_ZThn304_N9S21037C11D1Ev,_ZThn180_N9S21037C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S21037C11D0Ev,_ZTv0_n24_N9S21037C11D0Ev)();
extern void ABISELECT(_ZThn304_N9S21037C11D0Ev,_ZThn180_N9S21037C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev)();
extern void ABISELECT(_ZThn320_N9S21037C11D1Ev,_ZThn188_N9S21037C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev)();
extern void ABISELECT(_ZThn320_N9S21037C11D0Ev,_ZThn188_N9S21037C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev)();
extern void ABISELECT(_ZThn368_N9S21037C11D1Ev,_ZThn220_N9S21037C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev)();
extern void ABISELECT(_ZThn368_N9S21037C11D0Ev,_ZThn220_N9S21037C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21037C11[] = {
  ABISELECT(424,256),
  ABISELECT(304,180),
  ABISELECT(256,152),
  ABISELECT(144,84),
  0,
  ABISELECT(96,56),
  ABISELECT(96,56),
  ABISELECT(368,220),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S21037C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev),
  0,
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S21037C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(224,136),
  ABISELECT(160,96),
  ABISELECT(-144,-84),
  ABISELECT(112,68),
  ABISELECT(-48,-28),
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S21037C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev),
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI9S21037C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev),
  ABISELECT(-160,-96),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-256,-152),
  ABISELECT(-160,-96),
  ABISELECT(-256,-152),
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI9S21037C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev),
  ABISELECT(-304,-180),
  ABISELECT(-208,-124),
  ABISELECT(-208,-124),
  ABISELECT(64,40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI9S21037C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S21037C11D1Ev,_ZTv0_n24_N9S21037C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S21037C11D0Ev,_ZTv0_n24_N9S21037C11D0Ev),
  ABISELECT(-224,-132),
  ABISELECT(-320,-188),
  ABISELECT(-320,-188),
  (VTBL_ENTRY)&(_ZTI9S21037C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-368,-220),
  ABISELECT(-368,-220),
  (VTBL_ENTRY)&(_ZTI9S21037C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S21037C11[];
extern void ABISELECT(_ZTv0_n24_N9S21037C13D1Ev,_ZTv0_n12_N9S21037C13D1Ev)();
extern void _ZN9S21037C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C13D0Ev,_ZTv0_n12_N9S21037C13D0Ev)();
extern void _ZN9S21037C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21037C13__9S21037C11[] = {
  0,
  ABISELECT(96,56),
  ABISELECT(96,56),
  ABISELECT(368,220),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S21037C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C13D1Ev,_ZTv0_n12_N9S21037C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C13D0Ev,_ZTv0_n12_N9S21037C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C13D1Ev,_ZTv0_n12_N9S21037C13D1Ev)();
extern void ABISELECT(_ZThn368_N9S21037C13D1Ev,_ZThn220_N9S21037C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C13D0Ev,_ZTv0_n12_N9S21037C13D0Ev)();
extern void ABISELECT(_ZThn368_N9S21037C13D0Ev,_ZThn220_N9S21037C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C6__9S21037C13__9S21037C11[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-368,-220),
  ABISELECT(-368,-220),
  (VTBL_ENTRY)&(_ZTI9S21037C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C13D1Ev,_ZTv0_n12_N9S21037C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C13D0Ev,_ZTv0_n12_N9S21037C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C13D1Ev,_ZTv0_n12_N9S21037C13D1Ev)();
extern void ABISELECT(_ZThn96_N9S21037C13D1Ev,_ZThn56_N9S21037C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C13D0Ev,_ZTv0_n12_N9S21037C13D0Ev)();
extern void ABISELECT(_ZThn96_N9S21037C13D0Ev,_ZThn56_N9S21037C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__9S21037C13__9S21037C11[] = {
  0,
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S21037C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C13D1Ev,_ZTv0_n12_N9S21037C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C13D0Ev,_ZTv0_n12_N9S21037C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void _ZN8S21037C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void _ZN8S21037C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__9S21037C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev)();
extern void _ZN9S21037C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev)();
extern void _ZN9S21037C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21037C12__9S21037C11[] = {
  ABISELECT(-48,-28),
  ABISELECT(224,136),
  ABISELECT(160,96),
  ABISELECT(-144,-84),
  ABISELECT(112,68),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void _ZN8S21037C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void _ZN8S21037C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C99S21037C12__A1__9S21037C11[] = {
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C99S21037C12__A1__9S21037C11[] = {
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void _ZN8S21037C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
extern void _ZN8S21037C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C69S21037C12__A1__9S21037C11[] = {
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void _ZN8S21037C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
extern void _ZN8S21037C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C88S21037C69S21037C12__A1__9S21037C11[] = {
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C88S21037C69S21037C12__A1__9S21037C11[] = {
  0,
  ABISELECT(96,56),
  ABISELECT(96,56),
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C69S21037C12__A1__9S21037C11[] = {
  0,
  ABISELECT(96,56),
  ABISELECT(96,56),
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21037C9__A1__9S21037C12__9S21037C11[] = {
  0,
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev)();
extern void ABISELECT(_ZThn112_N9S21037C12D1Ev,_ZThn68_N9S21037C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev)();
extern void ABISELECT(_ZThn112_N9S21037C12D0Ev,_ZThn68_N9S21037C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C3__9S21037C12__9S21037C11[] = {
  ABISELECT(-160,-96),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-256,-152),
  ABISELECT(-160,-96),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S21037C12D1Ev,_ZTv0_n24_N9S21037C12D1Ev)();
extern void ABISELECT(_ZThn160_N9S21037C12D1Ev,_ZThn96_N9S21037C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S21037C12D0Ev,_ZTv0_n24_N9S21037C12D0Ev)();
extern void ABISELECT(_ZThn160_N9S21037C12D0Ev,_ZThn96_N9S21037C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C5__9S21037C12__9S21037C11[] = {
  ABISELECT(-160,-96),
  ABISELECT(-208,-124),
  ABISELECT(-208,-124),
  ABISELECT(64,40),
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S21037C12D1Ev,_ZTv0_n24_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S21037C12D0Ev,_ZTv0_n24_N9S21037C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev)();
extern void ABISELECT(_ZThn224_N9S21037C12D1Ev,_ZThn136_N9S21037C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev)();
extern void ABISELECT(_ZThn224_N9S21037C12D0Ev,_ZThn136_N9S21037C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C6__9S21037C12__9S21037C11[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-224,-136),
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev)();
extern void ABISELECT(_ZThn176_N9S21037C12D1Ev,_ZThn104_N9S21037C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev)();
extern void ABISELECT(_ZThn176_N9S21037C12D0Ev,_ZThn104_N9S21037C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C98S21037C5__A2__9S21037C12__9S21037C11[] = {
  ABISELECT(-224,-132),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev)();
extern void ABISELECT(_ZThn48_N9S21037C12D1Ev,_ZThn28_N9S21037C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev)();
extern void ABISELECT(_ZThn48_N9S21037C12D0Ev,_ZThn28_N9S21037C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C6__A__9S21037C12__9S21037C11[] = {
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev)();
extern void _ZN8S21037C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev)();
extern void _ZN8S21037C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C3__9S21037C11[] = {
  ABISELECT(-160,-96),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-256,-152),
  ABISELECT(-160,-96),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void _ZN8S21037C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void _ZN8S21037C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C98S21037C3__A3__9S21037C11[] = {
  ABISELECT(-160,-96),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C98S21037C3__A3__9S21037C11[] = {
  ABISELECT(160,96),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S21037C3D1Ev,_ZTv0_n24_N8S21037C3D1Ev)();
extern void ABISELECT(_ZThn48_N8S21037C3D1Ev,_ZThn28_N8S21037C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21037C3D0Ev,_ZTv0_n24_N8S21037C3D0Ev)();
extern void ABISELECT(_ZThn48_N8S21037C3D0Ev,_ZThn28_N8S21037C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C5__8S21037C3__9S21037C11[] = {
  ABISELECT(-48,-28),
  ABISELECT(-208,-124),
  ABISELECT(-208,-124),
  ABISELECT(64,40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S21037C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21037C3D1Ev,_ZTv0_n24_N8S21037C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21037C3D0Ev,_ZTv0_n24_N8S21037C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev)();
extern void ABISELECT(_ZThn112_N8S21037C3D1Ev,_ZThn68_N8S21037C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev)();
extern void ABISELECT(_ZThn112_N8S21037C3D0Ev,_ZThn68_N8S21037C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C6__8S21037C3__9S21037C11[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S21037C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C3__9S21037C11[] = {
  0,
  ABISELECT(160,96),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI8S21037C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S21037C3D1Ev,_ZThn36_N8S21037C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev)();
extern void ABISELECT(_ZThn64_N8S21037C3D0Ev,_ZThn36_N8S21037C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C98S21037C5__A1__8S21037C3__9S21037C11[] = {
  ABISELECT(-224,-132),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21037C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev),
};
extern void _ZN8S21037C5D1Ev();
extern void _ZN8S21037C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21037C5__9S21037C11[] = {
  ABISELECT(-208,-124),
  ABISELECT(-208,-124),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C5[0]),
  (VTBL_ENTRY)&_ZN8S21037C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21037C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void _ZN8S21037C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void _ZN8S21037C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C98S21037C5__A2__9S21037C11[] = {
  ABISELECT(-224,-132),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C98S21037C5__A2__9S21037C11[] = {
  ABISELECT(224,132),
  ABISELECT(224,132),
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev)();
extern void ABISELECT(_ZThn64_N8S21037C5D1Ev,_ZThn40_N8S21037C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev)();
extern void ABISELECT(_ZThn64_N8S21037C5D0Ev,_ZThn40_N8S21037C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C6__8S21037C5__9S21037C11[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S21037C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C5__9S21037C11[] = {
  0,
  ABISELECT(208,124),
  ABISELECT(208,124),
  (VTBL_ENTRY)&(_ZTI8S21037C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S21037C5D1Ev,_ZThn8_N8S21037C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev)();
extern void ABISELECT(_ZThn16_N8S21037C5D0Ev,_ZThn8_N8S21037C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__A__8S21037C5__9S21037C11[] = {
  ABISELECT(-224,-132),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21037C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void _ZN8S21037C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
extern void _ZN8S21037C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C6__9S21037C11[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void _ZN8S21037C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
extern void _ZN8S21037C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C88S21037C6__9S21037C11[] = {
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C88S21037C6__9S21037C11[] = {
  0,
  ABISELECT(272,164),
  ABISELECT(272,164),
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C6__9S21037C11[] = {
  0,
  ABISELECT(272,164),
  ABISELECT(272,164),
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
static  VTT_ENTRY vtt_S21037C11[] = {
  {&(_ZTV9S21037C11[11]),  11,68},
  {&(_tg__ZTV9S21037C13__9S21037C11[7]),  7,9},
  {&(_tg__ZTV8S21037C6__9S21037C13__9S21037C11[5]),  5,7},
  {&(_tg__ZTV8S21037C9__9S21037C13__9S21037C11[4]),  4,6},
  {&(_tg__ZTV8S21037C9__9S21037C13__9S21037C11[4]),  4,6},
  {&(_ZTV9S21037C11[17]),  17,68},
  {&(_ZTV9S21037C11[17]),  17,68},
  {&(_ZTV9S21037C11[28]),  28,68},
  {&(_ZTV9S21037C11[45]),  45,68},
  {&(_ZTV9S21037C11[53]),  53,68},
  {&(_ZTV9S21037C11[66]),  66,68},
  {&(_ZTV9S21037C11[59]),  59,68},
  {&(_ZTV9S21037C11[35]),  35,68},
  {&(_tg__ZTV8S21037C9__9S21037C11[4]),  4,6},
  {&(_tg__ZTV8S21037C9__9S21037C11[4]),  4,6},
  {&(_tg__ZTV9S21037C12__9S21037C11[9]),  9,11},
  {&(_tg__ZTV8S21037C99S21037C12__A1__9S21037C11[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S21037C99S21037C12__A1__9S21037C11[3]),  3,5},
  {&(_tg__ZTV8S21037C69S21037C12__A1__9S21037C11[5]),  5,7},
  {&(_tg__ZTV8S21037C88S21037C69S21037C12__A1__9S21037C11[5]),  5,7},
  {&(_tg__ZTV8S21037C9__8S21037C88S21037C69S21037C12__A1__9S21037C11[4]),  4,6},
  {&(_tg__ZTV8S21037C9__8S21037C88S21037C69S21037C12__A1__9S21037C11[4]),  4,6},
  {&(_tg__ZTV8S21037C9__8S21037C69S21037C12__A1__9S21037C11[4]),  4,6},
  {&(_tg__ZTV8S21037C9__8S21037C69S21037C12__A1__9S21037C11[4]),  4,6},
  {&(_tg__ZTV8S21037C9__A1__9S21037C12__9S21037C11[4]),  4,6},
  {&(_tg__ZTV8S21037C3__9S21037C12__9S21037C11[8]),  8,10},
  {&(_tg__ZTV8S21037C5__9S21037C12__9S21037C11[6]),  6,8},
  {&(_tg__ZTV8S21037C6__9S21037C12__9S21037C11[5]),  5,7},
  {&(_tg__ZTV8S21037C9__A1__9S21037C12__9S21037C11[4]),  4,6},
  {&(_tg__ZTV8S21037C98S21037C5__A2__9S21037C12__9S21037C11[4]),  4,6},
  {&(_tg__ZTV8S21037C6__A__9S21037C12__9S21037C11[5]),  5,7},
  {&(_tg__ZTV8S21037C3__9S21037C11[8]),  8,10},
  {&(_tg__ZTV8S21037C98S21037C3__A3__9S21037C11[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S21037C98S21037C3__A3__9S21037C11[3]),  3,5},
  {&(_tg__ZTV8S21037C5__8S21037C3__9S21037C11[6]),  6,8},
  {&(_tg__ZTV8S21037C6__8S21037C3__9S21037C11[5]),  5,7},
  {&(_tg__ZTV8S21037C9__8S21037C3__9S21037C11[4]),  4,6},
  {&(_tg__ZTV8S21037C9__8S21037C3__9S21037C11[4]),  4,6},
  {&(_tg__ZTV8S21037C98S21037C5__A1__8S21037C3__9S21037C11[4]),  4,6},
  {&(_tg__ZTV8S21037C5__9S21037C11[5]),  5,7},
  {&(_tg__ZTV8S21037C98S21037C5__A2__9S21037C11[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S21037C98S21037C5__A2__9S21037C11[3]),  3,5},
  {&(_tg__ZTV8S21037C6__8S21037C5__9S21037C11[5]),  5,7},
  {&(_tg__ZTV8S21037C9__8S21037C5__9S21037C11[4]),  4,6},
  {&(_tg__ZTV8S21037C9__8S21037C5__9S21037C11[4]),  4,6},
  {&(_tg__ZTV8S21037C9__A__8S21037C5__9S21037C11[4]),  4,6},
  {&(_tg__ZTV8S21037C6__9S21037C11[5]),  5,7},
  {&(_tg__ZTV8S21037C88S21037C6__9S21037C11[5]),  5,7},
  {&(_tg__ZTV8S21037C9__8S21037C88S21037C6__9S21037C11[4]),  4,6},
  {&(_tg__ZTV8S21037C9__8S21037C88S21037C6__9S21037C11[4]),  4,6},
  {&(_tg__ZTV8S21037C9__8S21037C6__9S21037C11[4]),  4,6},
  {&(_tg__ZTV8S21037C9__8S21037C6__9S21037C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S21037C11[];
extern  VTBL_ENTRY _ZTV9S21037C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21037C11[];
static VTBL_ENTRY alt_thunk_names87[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21037C5D0Ev,_ZThn8_N8S21037C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C5D0Ev,_ZThn40_N8S21037C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21037C5D1Ev,_ZThn8_N8S21037C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C5D1Ev,_ZThn40_N8S21037C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21037C3D0Ev,_ZTv0_n24_N8S21037C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21037C3D0Ev,_ZThn28_N8S21037C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21037C3D1Ev,_ZTv0_n24_N8S21037C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21037C3D1Ev,_ZThn28_N8S21037C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C3D0Ev,_ZThn36_N8S21037C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21037C3D0Ev,_ZThn68_N8S21037C3D0Ev),
  (VTBL_ENTRY)_ZN8S21037C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C3D1Ev,_ZThn36_N8S21037C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21037C3D1Ev,_ZThn68_N8S21037C3D1Ev),
  (VTBL_ENTRY)_ZN8S21037C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S21037C12D0Ev,_ZTv0_n24_N9S21037C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S21037C12D0Ev,_ZThn96_N9S21037C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S21037C12D1Ev,_ZTv0_n24_N9S21037C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S21037C12D1Ev,_ZThn96_N9S21037C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev), // 
  (VTBL_ENTRY)_ZN8S21037C8D0Ev,
  (VTBL_ENTRY)_ZN8S21037C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev), // 
  (VTBL_ENTRY)_ZN8S21037C8D1Ev,
  (VTBL_ENTRY)_ZN8S21037C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev), // 
  (VTBL_ENTRY)_ZN8S21037C6D0Ev,
  (VTBL_ENTRY)_ZN8S21037C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev), // 
  (VTBL_ENTRY)_ZN8S21037C6D1Ev,
  (VTBL_ENTRY)_ZN8S21037C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S21037C12D0Ev,_ZThn28_N9S21037C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S21037C12D0Ev,_ZThn104_N9S21037C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S21037C12D0Ev,_ZThn136_N9S21037C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S21037C12D0Ev,_ZThn68_N9S21037C12D0Ev),
  (VTBL_ENTRY)_ZN9S21037C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S21037C12D1Ev,_ZThn28_N9S21037C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S21037C12D1Ev,_ZThn104_N9S21037C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S21037C12D1Ev,_ZThn136_N9S21037C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S21037C12D1Ev,_ZThn68_N9S21037C12D1Ev),
  (VTBL_ENTRY)_ZN9S21037C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S21037C9D0Ev,
  (VTBL_ENTRY)_ZN8S21037C9D0Ev,
  (VTBL_ENTRY)_ZN8S21037C9D0Ev,
  (VTBL_ENTRY)_ZN8S21037C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S21037C9D1Ev,
  (VTBL_ENTRY)_ZN8S21037C9D1Ev,
  (VTBL_ENTRY)_ZN8S21037C9D1Ev,
  (VTBL_ENTRY)_ZN8S21037C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21037C13D0Ev,_ZTv0_n12_N9S21037C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S21037C13D0Ev,_ZThn56_N9S21037C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S21037C13D0Ev,_ZThn220_N9S21037C13D0Ev),
  (VTBL_ENTRY)_ZN9S21037C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21037C13D1Ev,_ZTv0_n12_N9S21037C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S21037C13D1Ev,_ZThn56_N9S21037C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S21037C13D1Ev,_ZThn220_N9S21037C13D1Ev),
  (VTBL_ENTRY)_ZN9S21037C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S21037C11D0Ev,_ZTv0_n24_N9S21037C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S21037C11D0Ev,_ZThn180_N9S21037C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S21037C11D1Ev,_ZTv0_n24_N9S21037C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S21037C11D1Ev,_ZThn180_N9S21037C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S21037C11D0Ev,_ZThn220_N9S21037C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S21037C11D0Ev,_ZThn188_N9S21037C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S21037C11D0Ev,_ZThn152_N9S21037C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S21037C11D0Ev,_ZThn112_N9S21037C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S21037C11D0Ev,_ZThn84_N9S21037C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S21037C11D0Ev,_ZThn56_N9S21037C11D0Ev),
  (VTBL_ENTRY)_ZN9S21037C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S21037C11D1Ev,_ZThn220_N9S21037C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S21037C11D1Ev,_ZThn188_N9S21037C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S21037C11D1Ev,_ZThn152_N9S21037C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S21037C11D1Ev,_ZThn112_N9S21037C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S21037C11D1Ev,_ZThn84_N9S21037C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S21037C11D1Ev,_ZThn56_N9S21037C11D1Ev),
  (VTBL_ENTRY)_ZN9S21037C11D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21037C11 = {  "S21037C11", // class name
  bases_S21037C11, 21,
  &(vtc_S21037C11[0]), // expected_vtbl_contents
  &(vtt_S21037C11[0]), // expected_vtt_contents
  ABISELECT(432,260), // object size
  NSPAIRA(_ZTI9S21037C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S21037C11),68, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21037C11),52, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names87,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21037C2  : virtual S21037C3 , S21037C11 , S19905C5_nt {
  int s21037c2f0;
  virtual  ~S21037C2(); // _ZN8S21037C2D2Ev
  S21037C2(); // tgen
};
//SIG(-1 S21037C2) C1{ VBC2{ VBC3{ m} VBC4{ VBC5{ VBC6{ vd m} BC7{ VBC6 VBC8{ VBC6 FD Fc Fs[4]} vd Fi} BC9{ m Fp} vd Fs FL Fp FL} BC9 BC6 BC8 vd Fi} BC8 vd Fs} BC10{ VBC8 VBC11{ VBC6 BC8 VBC2 BC5 Fp} VBC9 BC12{ BC13{ m} VBC5 BC9 VBC3 vd FC7 Fs} vd Fi FC14{}} BC15{ vd m} vd Fi}


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

static void Test_S21037C2()
{
  extern Class_Descriptor cd_S21037C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,68)];
    init_test(&cd_S21037C2, buf);
    S21037C2 *dp, &lv = *(dp=new (buf) S21037C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,268), "sizeof(S21037C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21037C2)");
    check_base_class_offset(lv, (S5266C29*)(S21037C3*), 0, "S21037C2");
    check_base_class_offset(lv, (S5266C29*)(S21037C13*)(S21037C11*), 0, "S21037C2");
    /*is_ambiguous_... S21037C2::S21037C6 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C6*), ABISELECT(224,132), "S21037C2");
    /*is_ambiguous_... S21037C2::S21037C6 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C8*)(S21037C6*), ABISELECT(224,132), "S21037C2");
    /*is_ambiguous_... S21037C2::S21037C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C9*), ABISELECT(224,132), "S21037C2");
    /*is_ambiguous_... S21037C5::S21037C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C9*)(S21037C5*), ABISELECT(224,132), "S21037C2");
    /*is_ambiguous_... S21037C3::S21037C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C9*)(S21037C3*), ABISELECT(224,132), "S21037C2");
    /*is_ambiguous_... S21037C12::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C12*), ABISELECT(224,132), "S21037C2");
    /*is_ambiguous_... S21037C12::S21037C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C9*)(S21037C12*), ABISELECT(224,132), "S21037C2");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C6*)(S21037C12*), ABISELECT(224,132), "S21037C2");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C8*)(S21037C6*)(S21037C12*), ABISELECT(224,132), "S21037C2");
    /*is_ambiguous_... S21037C2::S21037C6 */ AMB_check_base_class_offset(lv, (S21037C9*)(S21037C8*)(S21037C6*), ABISELECT(288,168), "S21037C2");
    /*is_ambiguous_... S21037C11::S21037C9 */ AMB_check_base_class_offset(lv, (S21037C9*)(S21037C11*), ABISELECT(288,168), "S21037C2");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S21037C9*)(S21037C8*)(S21037C6*)(S21037C12*), ABISELECT(288,168), "S21037C2");
    /*is_ambiguous_... S21037C2::S21037C6 */ AMB_check_base_class_offset(lv, (S21037C8*)(S21037C6*), ABISELECT(224,132), "S21037C2");
    /*is_ambiguous_... S21037C2::S21037C6 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S21037C6*), ABISELECT(240,140), "S21037C2");
    check_base_class_offset(lv, (S21037C6*)(S21037C5*), ABISELECT(224,132), "S21037C2");
    check_base_class_offset(lv, (S21037C6*)(S21037C13*)(S21037C11*), ABISELECT(224,132), "S21037C2");
    /*is_ambiguous_... S21037C5::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S21037C5*), ABISELECT(168,96), "S21037C2");
    /*is_ambiguous_... S21037C5::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C5*), ABISELECT(160,92), "S21037C2");
    /*is_ambiguous_... S21037C5::S21037C9 */ AMB_check_base_class_offset(lv, (S21037C9*)(S21037C5*), ABISELECT(176,100), "S21037C2");
    check_base_class_offset(lv, (S21037C5*)(S21037C3*), ABISELECT(160,92), "S21037C2");
    /*is_ambiguous_... S21037C3::S21037C9 */ AMB_check_base_class_offset(lv, (S21037C9*)(S21037C3*), ABISELECT(112,64), "S21037C2");
    check_base_class_offset(lv, (S21037C3*), ABISELECT(112,64), "S21037C2");
    check_base_class_offset(lv, (S21037C3*)(S21037C12*), ABISELECT(112,64), "S21037C2");
    /*is_ambiguous_... S21037C12::S21037C9 */ AMB_check_base_class_offset(lv, (S21037C9*)(S21037C12*), ABISELECT(336,196), "S21037C2");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S21037C8*)(S21037C6*)(S21037C12*), ABISELECT(384,224), "S21037C2");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S21037C6*)(S21037C12*), ABISELECT(400,232), "S21037C2");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S21037C6*)(S21037C12*), ABISELECT(384,224), "S21037C2");
    check_base_class_offset(lv, (S21037C12*)(S21037C11*), ABISELECT(336,196), "S21037C2");
    /*is_ambiguous_... S21037C11::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S21037C11*), ABISELECT(448,264), "S21037C2");
    check_base_class_offset(lv, (S5266C26*)(S21037C13*)(S21037C11*), 0, "S21037C2");
    /*is_ambiguous_... S21037C13::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S21037C13*)(S21037C11*), ABISELECT(8,4), "S21037C2");
    check_base_class_offset(lv, (S21037C13*)(S21037C11*), 0, "S21037C2");
    check_base_class_offset(lv, (S21037C11*), 0, "S21037C2");
    check_base_class_offset(lv, (S19905C5_nt*), ABISELECT(96,56), "S21037C2");
    check_field_offset(lv, s21037c2f0, ABISELECT(104,60), "S21037C2.s21037c2f0");
    test_class_info(&lv, &cd_S21037C2);
    dp->~S21037C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21037C2(Test_S21037C2, "S21037C2", ABISELECT(464,268));

#else // __cplusplus

extern void _ZN8S21037C2C1Ev();
extern void _ZN8S21037C2D2Ev();
Name_Map name_map_S21037C2[] = {
  NSPAIR(_ZN8S21037C2C1Ev),
  NSPAIR(_ZN8S21037C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S21037C9;
extern VTBL_ENTRY _ZTI8S21037C9[];
extern  VTBL_ENTRY _ZTV8S21037C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C9[];
extern Class_Descriptor cd_S21037C8;
extern VTBL_ENTRY _ZTI8S21037C8[];
extern  VTBL_ENTRY _ZTV8S21037C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C8[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S21037C6;
extern VTBL_ENTRY _ZTI8S21037C6[];
extern  VTBL_ENTRY _ZTV8S21037C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S21037C9;
extern VTBL_ENTRY _ZTI8S21037C9[];
extern  VTBL_ENTRY _ZTV8S21037C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C9[];
extern Class_Descriptor cd_S21037C5;
extern VTBL_ENTRY _ZTI8S21037C5[];
extern  VTBL_ENTRY _ZTV8S21037C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C5[];
extern Class_Descriptor cd_S21037C9;
extern VTBL_ENTRY _ZTI8S21037C9[];
extern  VTBL_ENTRY _ZTV8S21037C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C9[];
extern Class_Descriptor cd_S21037C3;
extern VTBL_ENTRY _ZTI8S21037C3[];
extern  VTBL_ENTRY _ZTV8S21037C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C3[];
extern Class_Descriptor cd_S21037C9;
extern VTBL_ENTRY _ZTI8S21037C9[];
extern  VTBL_ENTRY _ZTV8S21037C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C9[];
extern Class_Descriptor cd_S21037C8;
extern VTBL_ENTRY _ZTI8S21037C8[];
extern  VTBL_ENTRY _ZTV8S21037C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C8[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S21037C6;
extern VTBL_ENTRY _ZTI8S21037C6[];
extern  VTBL_ENTRY _ZTV8S21037C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C6[];
extern Class_Descriptor cd_S21037C12;
extern VTBL_ENTRY _ZTI9S21037C12[];
extern  VTBL_ENTRY _ZTV9S21037C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21037C12[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S21037C13;
extern VTBL_ENTRY _ZTI9S21037C13[];
extern  VTBL_ENTRY _ZTV9S21037C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21037C13[];
extern Class_Descriptor cd_S21037C11;
extern VTBL_ENTRY _ZTI9S21037C11[];
extern  VTBL_ENTRY _ZTV9S21037C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21037C11[];
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
static Base_Class bases_S21037C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19905C19,    ABISELECT(224,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S21037C9,    ABISELECT(288,168), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21037C8,    ABISELECT(224,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21037C6,    ABISELECT(224,132), //bcp->offset
    41, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(168,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19905C19,    ABISELECT(160,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
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21037C9,    ABISELECT(176,100), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21037C5,    ABISELECT(160,92), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S21037C9,    ABISELECT(112,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S21037C3,    ABISELECT(112,64), //bcp->offset
    17, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21037C9,    ABISELECT(336,196), //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
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S21037C8,    ABISELECT(384,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(400,232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21037C6,    ABISELECT(384,224), //bcp->offset
    65, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S21037C12,    ABISELECT(336,196), //bcp->offset
    54, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(448,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S17777C6_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
    20, //immediately_derived
  0, 0},
  {&cd_S21037C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S21037C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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_S19905C5_nt,    ABISELECT(96,56), //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
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21037C2[];
extern void ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev)();
extern void _ZN8S21037C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev)();
extern void _ZN8S21037C2D0Ev() __attribute__((weak));
extern void ABISELECT(_ZThn96_N8S21037C2D1Ev,_ZThn56_N8S21037C2D1Ev)();
extern void ABISELECT(_ZThn96_N8S21037C2D0Ev,_ZThn56_N8S21037C2D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev)();
extern void ABISELECT(_ZThn112_N8S21037C2D1Ev,_ZThn64_N8S21037C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev)();
extern void ABISELECT(_ZThn112_N8S21037C2D0Ev,_ZThn64_N8S21037C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21037C2D1Ev,_ZTv0_n24_N8S21037C2D1Ev)();
extern void ABISELECT(_ZThn160_N8S21037C2D1Ev,_ZThn92_N8S21037C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21037C2D0Ev,_ZTv0_n24_N8S21037C2D0Ev)();
extern void ABISELECT(_ZThn160_N8S21037C2D0Ev,_ZThn92_N8S21037C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev)();
extern void ABISELECT(_ZThn176_N8S21037C2D1Ev,_ZThn100_N8S21037C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev)();
extern void ABISELECT(_ZThn176_N8S21037C2D0Ev,_ZThn100_N8S21037C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev)();
extern void ABISELECT(_ZThn224_N8S21037C2D1Ev,_ZThn132_N8S21037C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev)();
extern void ABISELECT(_ZThn224_N8S21037C2D0Ev,_ZThn132_N8S21037C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev)();
extern void ABISELECT(_ZThn288_N8S21037C2D1Ev,_ZThn168_N8S21037C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev)();
extern void ABISELECT(_ZThn288_N8S21037C2D0Ev,_ZThn168_N8S21037C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev)();
extern void ABISELECT(_ZThn336_N8S21037C2D1Ev,_ZThn196_N8S21037C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev)();
extern void ABISELECT(_ZThn336_N8S21037C2D0Ev,_ZThn196_N8S21037C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev)();
extern void ABISELECT(_ZThn384_N8S21037C2D1Ev,_ZThn224_N8S21037C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev)();
extern void ABISELECT(_ZThn384_N8S21037C2D0Ev,_ZThn224_N8S21037C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21037C2[] = {
  ABISELECT(448,264),
  ABISELECT(160,92),
  ABISELECT(112,64),
  ABISELECT(336,196),
  0,
  ABISELECT(288,168),
  ABISELECT(224,132),
  ABISELECT(224,132),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S21037C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S21037C2D1Ev,_ZThn56_N8S21037C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S21037C2D0Ev,_ZThn56_N8S21037C2D0Ev),
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-112,-64),
  ABISELECT(112,68),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI8S21037C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev),
  ABISELECT(-160,-92),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(-160,-92),
  (VTBL_ENTRY)&(_ZTI8S21037C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21037C2D1Ev,_ZTv0_n24_N8S21037C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21037C2D0Ev,_ZTv0_n24_N8S21037C2D0Ev),
  ABISELECT(48,32),
  ABISELECT(-176,-100),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S21037C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev),
  ABISELECT(64,36),
  0,
  ABISELECT(-224,-132),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI8S21037C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-288,-168),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI8S21037C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-112,-64),
  ABISELECT(-176,-104),
  ABISELECT(-336,-196),
  ABISELECT(-224,-132),
  ABISELECT(-112,-64),
  ABISELECT(-336,-196),
  ABISELECT(-336,-196),
  (VTBL_ENTRY)&(_ZTI8S21037C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev),
  ABISELECT(-96,-56),
  ABISELECT(-160,-92),
  ABISELECT(-384,-224),
  ABISELECT(-384,-224),
  (VTBL_ENTRY)&(_ZTI8S21037C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S21037C2[];
extern void ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev)();
extern void _ZN9S21037C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev)();
extern void _ZN9S21037C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21037C11__8S21037C2[] = {
  ABISELECT(448,264),
  ABISELECT(160,92),
  ABISELECT(112,64),
  ABISELECT(336,196),
  0,
  ABISELECT(288,168),
  ABISELECT(224,132),
  ABISELECT(224,132),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S21037C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C13D1Ev,_ZTv0_n12_N9S21037C13D1Ev)();
extern void _ZN9S21037C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C13D0Ev,_ZTv0_n12_N9S21037C13D0Ev)();
extern void _ZN9S21037C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21037C139S21037C11__8S21037C2[] = {
  0,
  ABISELECT(288,168),
  ABISELECT(224,132),
  ABISELECT(224,132),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S21037C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C13D1Ev,_ZTv0_n12_N9S21037C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C13D0Ev,_ZTv0_n12_N9S21037C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C13D1Ev,_ZTv0_n12_N9S21037C13D1Ev)();
extern void ABISELECT(_ZThn224_N9S21037C13D1Ev,_ZThn132_N9S21037C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C13D0Ev,_ZTv0_n12_N9S21037C13D0Ev)();
extern void ABISELECT(_ZThn224_N9S21037C13D0Ev,_ZThn132_N9S21037C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C6__9S21037C139S21037C11__8S21037C2[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(-224,-132),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI9S21037C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C13D1Ev,_ZTv0_n12_N9S21037C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C13D0Ev,_ZTv0_n12_N9S21037C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C13D1Ev,_ZTv0_n12_N9S21037C13D1Ev)();
extern void ABISELECT(_ZThn288_N9S21037C13D1Ev,_ZThn168_N9S21037C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C13D0Ev,_ZTv0_n12_N9S21037C13D0Ev)();
extern void ABISELECT(_ZThn288_N9S21037C13D0Ev,_ZThn168_N9S21037C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__9S21037C139S21037C11__8S21037C2[] = {
  ABISELECT(-64,-36),
  ABISELECT(-288,-168),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI9S21037C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C13D1Ev,_ZTv0_n12_N9S21037C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C13D0Ev,_ZTv0_n12_N9S21037C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev)();
extern void ABISELECT(_ZThn288_N9S21037C11D1Ev,_ZThn168_N9S21037C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev)();
extern void ABISELECT(_ZThn288_N9S21037C11D0Ev,_ZThn168_N9S21037C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__9S21037C11__8S21037C2[] = {
  ABISELECT(-64,-36),
  ABISELECT(-288,-168),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI9S21037C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev)();
extern void ABISELECT(_ZThn224_N9S21037C11D1Ev,_ZThn132_N9S21037C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev)();
extern void ABISELECT(_ZThn224_N9S21037C11D0Ev,_ZThn132_N9S21037C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C6__9S21037C11__8S21037C2[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(-224,-132),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI9S21037C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev)();
extern void ABISELECT(_ZThn336_N9S21037C11D1Ev,_ZThn196_N9S21037C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev)();
extern void ABISELECT(_ZThn336_N9S21037C11D0Ev,_ZThn196_N9S21037C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21037C12__9S21037C11__8S21037C2[] = {
  ABISELECT(-48,-28),
  ABISELECT(-112,-64),
  ABISELECT(-176,-104),
  ABISELECT(-336,-196),
  ABISELECT(-224,-132),
  ABISELECT(-112,-64),
  ABISELECT(-336,-196),
  ABISELECT(-336,-196),
  (VTBL_ENTRY)&(_ZTI9S21037C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev)();
extern void ABISELECT(_ZThn112_N9S21037C11D1Ev,_ZThn64_N9S21037C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev)();
extern void ABISELECT(_ZThn112_N9S21037C11D0Ev,_ZThn64_N9S21037C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C3__9S21037C11__8S21037C2[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-112,-64),
  ABISELECT(112,68),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI9S21037C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S21037C11D1Ev,_ZTv0_n24_N9S21037C11D1Ev)();
extern void ABISELECT(_ZThn160_N9S21037C11D1Ev,_ZThn92_N9S21037C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S21037C11D0Ev,_ZTv0_n24_N9S21037C11D0Ev)();
extern void ABISELECT(_ZThn160_N9S21037C11D0Ev,_ZThn92_N9S21037C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C5__9S21037C11__8S21037C2[] = {
  ABISELECT(-160,-92),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(-160,-92),
  (VTBL_ENTRY)&(_ZTI9S21037C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S21037C11D1Ev,_ZTv0_n24_N9S21037C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S21037C11D0Ev,_ZTv0_n24_N9S21037C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev)();
extern void ABISELECT(_ZThn176_N9S21037C11D1Ev,_ZThn100_N9S21037C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev)();
extern void ABISELECT(_ZThn176_N9S21037C11D0Ev,_ZThn100_N9S21037C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C98S21037C5__A2__9S21037C11__8S21037C2[] = {
  ABISELECT(48,32),
  ABISELECT(-176,-100),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI9S21037C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev)();
extern void ABISELECT(_ZThn384_N9S21037C11D1Ev,_ZThn224_N9S21037C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev)();
extern void ABISELECT(_ZThn384_N9S21037C11D0Ev,_ZThn224_N9S21037C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C69S21037C12__A1__9S21037C11__8S21037C2[] = {
  ABISELECT(-96,-56),
  ABISELECT(-160,-92),
  ABISELECT(-384,-224),
  ABISELECT(-384,-224),
  (VTBL_ENTRY)&(_ZTI9S21037C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev)();
extern void _ZN8S21037C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev)();
extern void _ZN8S21037C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C3__8S21037C2[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-112,-64),
  ABISELECT(112,68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void _ZN8S21037C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void _ZN8S21037C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C98S21037C3__A2__8S21037C2[] = {
  ABISELECT(112,68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void ABISELECT(_ZThn112_N8S21037C9D1Ev,_ZThn68_N8S21037C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void ABISELECT(_ZThn112_N8S21037C9D0Ev,_ZThn68_N8S21037C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C98S21037C3__A2__8S21037C2[] = {
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S21037C3D1Ev,_ZTv0_n24_N8S21037C3D1Ev)();
extern void ABISELECT(_ZThn48_N8S21037C3D1Ev,_ZThn28_N8S21037C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21037C3D0Ev,_ZTv0_n24_N8S21037C3D0Ev)();
extern void ABISELECT(_ZThn48_N8S21037C3D0Ev,_ZThn28_N8S21037C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C5__8S21037C3__8S21037C2[] = {
  ABISELECT(-48,-28),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S21037C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21037C3D1Ev,_ZTv0_n24_N8S21037C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21037C3D0Ev,_ZTv0_n24_N8S21037C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev)();
extern void ABISELECT(_ZThn112_N8S21037C3D1Ev,_ZThn68_N8S21037C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev)();
extern void ABISELECT(_ZThn112_N8S21037C3D0Ev,_ZThn68_N8S21037C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C6__8S21037C3__8S21037C2[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S21037C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev)();
extern void ABISELECT(_ZThn176_N8S21037C3D1Ev,_ZThn104_N8S21037C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev)();
extern void ABISELECT(_ZThn176_N8S21037C3D0Ev,_ZThn104_N8S21037C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C3__8S21037C2[] = {
  ABISELECT(-64,-36),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI8S21037C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S21037C3D1Ev,_ZThn36_N8S21037C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev)();
extern void ABISELECT(_ZThn64_N8S21037C3D0Ev,_ZThn36_N8S21037C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C98S21037C5__A1__8S21037C3__8S21037C2[] = {
  ABISELECT(48,32),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21037C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev),
};
extern void _ZN8S21037C5D1Ev();
extern void _ZN8S21037C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21037C5__8S21037C2[] = {
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C5[0]),
  (VTBL_ENTRY)&_ZN8S21037C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21037C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void _ZN8S21037C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void _ZN8S21037C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C98S21037C5__A1__8S21037C2[] = {
  ABISELECT(48,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void ABISELECT(_ZThn48_N8S21037C9D1Ev,_ZThn32_N8S21037C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void ABISELECT(_ZThn48_N8S21037C9D0Ev,_ZThn32_N8S21037C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C98S21037C5__A1__8S21037C2[] = {
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev)();
extern void ABISELECT(_ZThn64_N8S21037C5D1Ev,_ZThn40_N8S21037C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev)();
extern void ABISELECT(_ZThn64_N8S21037C5D0Ev,_ZThn40_N8S21037C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C6__8S21037C5__8S21037C2[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S21037C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev)();
extern void ABISELECT(_ZThn128_N8S21037C5D1Ev,_ZThn76_N8S21037C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev)();
extern void ABISELECT(_ZThn128_N8S21037C5D0Ev,_ZThn76_N8S21037C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C5__8S21037C2[] = {
  ABISELECT(-64,-36),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S21037C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S21037C5D1Ev,_ZThn8_N8S21037C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev)();
extern void ABISELECT(_ZThn16_N8S21037C5D0Ev,_ZThn8_N8S21037C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__A__8S21037C5__8S21037C2[] = {
  ABISELECT(48,32),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21037C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void _ZN8S21037C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
extern void _ZN8S21037C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C6__8S21037C2[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void _ZN8S21037C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
extern void _ZN8S21037C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C88S21037C6__8S21037C2[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21037C8D1Ev,_ZThn36_N8S21037C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S21037C8D0Ev,_ZThn36_N8S21037C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C88S21037C6__8S21037C2[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S21037C6D1Ev,_ZThn36_N8S21037C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S21037C6D0Ev,_ZThn36_N8S21037C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C6__8S21037C2[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void _ZN8S21037C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void _ZN8S21037C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C2[] = {
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C9__8S21037C2[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev)();
extern void _ZN9S21037C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev)();
extern void _ZN9S21037C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21037C12__8S21037C2[] = {
  ABISELECT(-48,-28),
  ABISELECT(-112,-64),
  ABISELECT(-176,-104),
  ABISELECT(-336,-196),
  ABISELECT(-224,-132),
  ABISELECT(-112,-64),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void _ZN8S21037C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void _ZN8S21037C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C99S21037C12__A3__8S21037C2[] = {
  ABISELECT(-112,-64),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C99S21037C12__A3__8S21037C2[] = {
  ABISELECT(112,64),
  ABISELECT(112,64),
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void _ZN8S21037C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
extern void _ZN8S21037C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C69S21037C12__A1__8S21037C2[] = {
  ABISELECT(-96,-56),
  ABISELECT(-160,-92),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void _ZN8S21037C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
extern void _ZN8S21037C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C88S21037C69S21037C12__A1__8S21037C2[] = {
  ABISELECT(-96,-56),
  ABISELECT(-160,-92),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C88S21037C69S21037C12__A1__8S21037C2[] = {
  ABISELECT(160,92),
  ABISELECT(160,92),
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C88S21037C69S21037C12__A1__8S21037C2[] = {
  ABISELECT(-64,-36),
  ABISELECT(96,56),
  ABISELECT(96,56),
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C69S21037C12__A1__8S21037C2[] = {
  ABISELECT(160,92),
  ABISELECT(160,92),
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C69S21037C12__A1__8S21037C2[] = {
  ABISELECT(-64,-36),
  ABISELECT(96,56),
  ABISELECT(96,56),
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21037C6__9S21037C12__8S21037C2[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(112,64),
  ABISELECT(112,64),
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21037C3__9S21037C12__8S21037C2[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-112,-64),
  ABISELECT(112,68),
  ABISELECT(224,132),
  ABISELECT(224,132),
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S21037C12D1Ev,_ZTv0_n24_N9S21037C12D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S21037C12D0Ev,_ZTv0_n24_N9S21037C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21037C5__9S21037C12__8S21037C2[] = {
  ABISELECT(176,104),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S21037C12D1Ev,_ZTv0_n24_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S21037C12D0Ev,_ZTv0_n24_N9S21037C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21037C9__A1__9S21037C12__8S21037C2[] = {
  ABISELECT(-64,-36),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21037C98S21037C5__A2__9S21037C12__8S21037C2[] = {
  ABISELECT(48,32),
  ABISELECT(160,96),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev)();
extern void ABISELECT(_ZThn48_N9S21037C12D1Ev,_ZThn28_N9S21037C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev)();
extern void ABISELECT(_ZThn48_N9S21037C12D0Ev,_ZThn28_N9S21037C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C6__A__9S21037C12__8S21037C2[] = {
  ABISELECT(-96,-56),
  ABISELECT(-160,-92),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev),
};
static  VTT_ENTRY vtt_S21037C2[] = {
  {&(_ZTV8S21037C2[11]),  11,72},
  {&(_tg__ZTV9S21037C11__8S21037C2[11]),  11,13},
  {&(_tg__ZTV9S21037C139S21037C11__8S21037C2[7]),  7,9},
  {&(_tg__ZTV8S21037C6__9S21037C139S21037C11__8S21037C2[5]),  5,7},
  {&(_tg__ZTV8S21037C6__9S21037C139S21037C11__8S21037C2[5]),  5,7},
  {&(_tg__ZTV8S21037C9__9S21037C139S21037C11__8S21037C2[4]),  4,6},
  {&(_tg__ZTV8S21037C9__9S21037C11__8S21037C2[4]),  4,6},
  {&(_tg__ZTV8S21037C6__9S21037C11__8S21037C2[5]),  5,7},
  {&(_tg__ZTV9S21037C12__9S21037C11__8S21037C2[9]),  9,11},
  {&(_tg__ZTV8S21037C3__9S21037C11__8S21037C2[8]),  8,10},
  {&(_tg__ZTV8S21037C5__9S21037C11__8S21037C2[6]),  6,8},
  {&(_tg__ZTV8S21037C6__9S21037C11__8S21037C2[5]),  5,7},
  {&(_tg__ZTV8S21037C98S21037C5__A2__9S21037C11__8S21037C2[4]),  4,6},
  {&(_tg__ZTV8S21037C69S21037C12__A1__9S21037C11__8S21037C2[5]),  5,7},
  {&(_ZTV8S21037C2[25]),  25,72},
  {&(_ZTV8S21037C2[33]),  33,72},
  {&(_ZTV8S21037C2[46]),  46,72},
  {&(_ZTV8S21037C2[46]),  46,72},
  {&(_ZTV8S21037C2[52]),  52,72},
  {&(_ZTV8S21037C2[39]),  39,72},
  {&(_ZTV8S21037C2[63]),  63,72},
  {&(_ZTV8S21037C2[70]),  70,72},
  {&(_tg__ZTV8S21037C3__8S21037C2[8]),  8,10},
  {&(_tg__ZTV8S21037C98S21037C3__A2__8S21037C2[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S21037C98S21037C3__A2__8S21037C2[3]),  3,5},
  {&(_tg__ZTV8S21037C5__8S21037C3__8S21037C2[6]),  6,8},
  {&(_tg__ZTV8S21037C6__8S21037C3__8S21037C2[5]),  5,7},
  {&(_tg__ZTV8S21037C6__8S21037C3__8S21037C2[5]),  5,7},
  {&(_tg__ZTV8S21037C9__8S21037C3__8S21037C2[4]),  4,6},
  {&(_tg__ZTV8S21037C98S21037C5__A1__8S21037C3__8S21037C2[4]),  4,6},
  {&(_tg__ZTV8S21037C5__8S21037C2[5]),  5,7},
  {&(_tg__ZTV8S21037C98S21037C5__A1__8S21037C2[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S21037C98S21037C5__A1__8S21037C2[3]),  3,5},
  {&(_tg__ZTV8S21037C6__8S21037C5__8S21037C2[5]),  5,7},
  {&(_tg__ZTV8S21037C6__8S21037C5__8S21037C2[5]),  5,7},
  {&(_tg__ZTV8S21037C9__8S21037C5__8S21037C2[4]),  4,6},
  {&(_tg__ZTV8S21037C9__A__8S21037C5__8S21037C2[4]),  4,6},
  {&(_tg__ZTV8S21037C6__8S21037C2[5]),  5,7},
  {&(_tg__ZTV8S21037C88S21037C6__8S21037C2[5]),  5,7},
  {&(_tg__ZTV8S21037C88S21037C6__8S21037C2[5]),  5,7},
  {&(_tg__ZTV8S21037C9__8S21037C88S21037C6__8S21037C2[4]),  4,6},
  {&(_tg__ZTV8S21037C6__8S21037C2[5]),  5,7},
  {&(_tg__ZTV8S21037C9__8S21037C6__8S21037C2[4]),  4,6},
  {&(_tg__ZTV8S21037C9__8S21037C2[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S21037C9__8S21037C2[3]),  3,5},
  {&(_tg__ZTV9S21037C12__8S21037C2[9]),  9,11},
  {&(_tg__ZTV8S21037C99S21037C12__A3__8S21037C2[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S21037C99S21037C12__A3__8S21037C2[3]),  3,5},
  {&(_tg__ZTV8S21037C69S21037C12__A1__8S21037C2[5]),  5,7},
  {&(_tg__ZTV8S21037C88S21037C69S21037C12__A1__8S21037C2[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S21037C88S21037C69S21037C12__A1__8S21037C2[3]),  3,5},
  {&(_tg__ZTV8S21037C9__8S21037C88S21037C69S21037C12__A1__8S21037C2[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S21037C69S21037C12__A1__8S21037C2[3]),  3,5},
  {&(_tg__ZTV8S21037C9__8S21037C69S21037C12__A1__8S21037C2[4]),  4,6},
  {&(_tg__ZTV8S21037C6__9S21037C12__8S21037C2[5]),  5,7},
  {&(_tg__ZTV8S21037C3__9S21037C12__8S21037C2[8]),  8,10},
  {&(_tg__ZTV8S21037C5__9S21037C12__8S21037C2[6]),  6,8},
  {&(_tg__ZTV8S21037C6__9S21037C12__8S21037C2[5]),  5,7},
  {&(_tg__ZTV8S21037C9__A1__9S21037C12__8S21037C2[4]),  4,6},
  {&(_tg__ZTV8S21037C98S21037C5__A2__9S21037C12__8S21037C2[4]),  4,6},
  {&(_tg__ZTV8S21037C6__A__9S21037C12__8S21037C2[5]),  5,7},
};
extern VTBL_ENTRY _ZTI8S21037C2[];
extern  VTBL_ENTRY _ZTV8S21037C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C2[];
static VTBL_ENTRY alt_thunk_names88[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S21037C12D0Ev,_ZThn28_N9S21037C12D0Ev),
  (VTBL_ENTRY)_ZN9S21037C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S21037C12D1Ev,_ZThn28_N9S21037C12D1Ev),
  (VTBL_ENTRY)_ZN9S21037C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev), // 
  (VTBL_ENTRY)_ZN8S21037C8D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C8D0Ev,_ZThn36_N8S21037C8D0Ev),
  (VTBL_ENTRY)_ZN8S21037C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev), // 
  (VTBL_ENTRY)_ZN8S21037C8D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C8D1Ev,_ZThn36_N8S21037C8D1Ev),
  (VTBL_ENTRY)_ZN8S21037C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev), // 
  (VTBL_ENTRY)_ZN8S21037C6D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C6D0Ev,_ZThn36_N8S21037C6D0Ev),
  (VTBL_ENTRY)_ZN8S21037C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev), // 
  (VTBL_ENTRY)_ZN8S21037C6D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C6D1Ev,_ZThn36_N8S21037C6D1Ev),
  (VTBL_ENTRY)_ZN8S21037C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21037C5D0Ev,_ZThn8_N8S21037C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S21037C5D0Ev,_ZThn76_N8S21037C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C5D0Ev,_ZThn40_N8S21037C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21037C5D1Ev,_ZThn8_N8S21037C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S21037C5D1Ev,_ZThn76_N8S21037C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C5D1Ev,_ZThn40_N8S21037C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21037C3D0Ev,_ZTv0_n24_N8S21037C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21037C3D0Ev,_ZThn28_N8S21037C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21037C3D1Ev,_ZTv0_n24_N8S21037C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21037C3D1Ev,_ZThn28_N8S21037C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S21037C9D0Ev,
  (VTBL_ENTRY)_ZN8S21037C9D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21037C9D0Ev,_ZThn32_N8S21037C9D0Ev),
  (VTBL_ENTRY)_ZN8S21037C9D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21037C9D0Ev,_ZThn68_N8S21037C9D0Ev),
  (VTBL_ENTRY)_ZN8S21037C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S21037C9D1Ev,
  (VTBL_ENTRY)_ZN8S21037C9D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21037C9D1Ev,_ZThn32_N8S21037C9D1Ev),
  (VTBL_ENTRY)_ZN8S21037C9D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21037C9D1Ev,_ZThn68_N8S21037C9D1Ev),
  (VTBL_ENTRY)_ZN8S21037C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C3D0Ev,_ZThn36_N8S21037C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S21037C3D0Ev,_ZThn104_N8S21037C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21037C3D0Ev,_ZThn68_N8S21037C3D0Ev),
  (VTBL_ENTRY)_ZN8S21037C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C3D1Ev,_ZThn36_N8S21037C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S21037C3D1Ev,_ZThn104_N8S21037C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21037C3D1Ev,_ZThn68_N8S21037C3D1Ev),
  (VTBL_ENTRY)_ZN8S21037C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S21037C11D0Ev,_ZTv0_n24_N9S21037C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S21037C11D0Ev,_ZThn92_N9S21037C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S21037C11D1Ev,_ZTv0_n24_N9S21037C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S21037C11D1Ev,_ZThn92_N9S21037C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21037C13D0Ev,_ZTv0_n12_N9S21037C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S21037C13D0Ev,_ZThn168_N9S21037C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S21037C13D0Ev,_ZThn132_N9S21037C13D0Ev),
  (VTBL_ENTRY)_ZN9S21037C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21037C13D1Ev,_ZTv0_n12_N9S21037C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S21037C13D1Ev,_ZThn168_N9S21037C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S21037C13D1Ev,_ZThn132_N9S21037C13D1Ev),
  (VTBL_ENTRY)_ZN9S21037C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S21037C11D0Ev,_ZThn224_N9S21037C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S21037C11D0Ev,_ZThn100_N9S21037C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S21037C11D0Ev,_ZThn64_N9S21037C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn336_N9S21037C11D0Ev,_ZThn196_N9S21037C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S21037C11D0Ev,_ZThn132_N9S21037C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S21037C11D0Ev,_ZThn168_N9S21037C11D0Ev),
  (VTBL_ENTRY)_ZN9S21037C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S21037C11D1Ev,_ZThn224_N9S21037C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S21037C11D1Ev,_ZThn100_N9S21037C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S21037C11D1Ev,_ZThn64_N9S21037C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn336_N9S21037C11D1Ev,_ZThn196_N9S21037C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S21037C11D1Ev,_ZThn132_N9S21037C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S21037C11D1Ev,_ZThn168_N9S21037C11D1Ev),
  (VTBL_ENTRY)_ZN9S21037C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21037C2D0Ev,_ZTv0_n24_N8S21037C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S21037C2D0Ev,_ZThn92_N8S21037C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21037C2D1Ev,_ZTv0_n24_N8S21037C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S21037C2D1Ev,_ZThn92_N8S21037C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S21037C2D0Ev,_ZThn224_N8S21037C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S21037C2D0Ev,_ZThn196_N8S21037C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S21037C2D0Ev,_ZThn168_N8S21037C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S21037C2D0Ev,_ZThn132_N8S21037C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S21037C2D0Ev,_ZThn100_N8S21037C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21037C2D0Ev,_ZThn64_N8S21037C2D0Ev),
  (VTBL_ENTRY)_ZN8S21037C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S21037C2D1Ev,_ZThn224_N8S21037C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S21037C2D1Ev,_ZThn196_N8S21037C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S21037C2D1Ev,_ZThn168_N8S21037C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S21037C2D1Ev,_ZThn132_N8S21037C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S21037C2D1Ev,_ZThn100_N8S21037C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21037C2D1Ev,_ZThn64_N8S21037C2D1Ev),
  (VTBL_ENTRY)_ZN8S21037C2D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21037C2 = {  "S21037C2", // class name
  bases_S21037C2, 23,
  &(vtc_S21037C2[0]), // expected_vtbl_contents
  &(vtt_S21037C2[0]), // expected_vtt_contents
  ABISELECT(464,268), // object size
  NSPAIRA(_ZTI8S21037C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21037C2),72, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21037C2),61, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names88,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21037C1  : virtual S21037C2 {
  virtual  ~S21037C1(); // _ZN8S21037C1D2Ev
  S21037C1(); // tgen
};
//SIG(1 S21037C1) C1{ VBC2{ VBC3{ VBC4{ m} VBC5{ VBC6{ VBC7{ vd m} BC8{ VBC7 VBC9{ VBC7 FD Fc Fs[4]} vd Fi} BC10{ m Fp} vd Fs FL Fp FL} BC10 BC7 BC9 vd Fi} BC9 vd Fs} BC11{ VBC9 VBC12{ VBC7 BC9 VBC3 BC6 Fp} VBC10 BC13{ BC14{ m} VBC6 BC10 VBC4 vd FC8 Fs} vd Fi FC15{}} BC16{ vd m} vd Fi} vd}


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

static void Test_S21037C1()
{
  extern Class_Descriptor cd_S21037C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(31,69)];
    init_test(&cd_S21037C1, buf);
    S21037C1 *dp, &lv = *(dp=new (buf) S21037C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(480,272), "sizeof(S21037C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21037C1)");
    check_base_class_offset(lv, (S5266C29*)(S21037C3*), 0, "S21037C1");
    check_base_class_offset(lv, (S5266C29*)(S21037C13*)(S21037C11*)(S21037C2*), 0, "S21037C1");
    /*is_ambiguous_... S21037C1::S21037C6 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C6*), 0, "S21037C1");
    /*is_ambiguous_... S21037C1::S21037C6 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C8*)(S21037C6*), 0, "S21037C1");
    /*is_ambiguous_... S21037C1::S21037C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C9*), 0, "S21037C1");
    /*is_ambiguous_... S21037C5::S21037C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C9*)(S21037C5*), 0, "S21037C1");
    /*is_ambiguous_... S21037C3::S21037C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C9*)(S21037C3*), 0, "S21037C1");
    /*is_ambiguous_... S21037C12::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C12*), 0, "S21037C1");
    /*is_ambiguous_... S21037C12::S21037C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C9*)(S21037C12*), 0, "S21037C1");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C6*)(S21037C12*), 0, "S21037C1");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C8*)(S21037C6*)(S21037C12*), 0, "S21037C1");
    /*is_ambiguous_... S21037C1::S21037C6 */ AMB_check_base_class_offset(lv, (S21037C9*)(S21037C8*)(S21037C6*), ABISELECT(304,172), "S21037C1");
    /*is_ambiguous_... S21037C11::S21037C9 */ AMB_check_base_class_offset(lv, (S21037C9*)(S21037C11*)(S21037C2*), ABISELECT(304,172), "S21037C1");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S21037C9*)(S21037C8*)(S21037C6*)(S21037C12*), ABISELECT(304,172), "S21037C1");
    /*is_ambiguous_... S21037C1::S21037C6 */ AMB_check_base_class_offset(lv, (S21037C8*)(S21037C6*), ABISELECT(240,136), "S21037C1");
    /*is_ambiguous_... S21037C1::S21037C6 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S21037C6*), ABISELECT(256,144), "S21037C1");
    check_base_class_offset(lv, (S21037C6*)(S21037C5*), ABISELECT(240,136), "S21037C1");
    check_base_class_offset(lv, (S21037C6*)(S21037C13*)(S21037C11*)(S21037C2*), ABISELECT(240,136), "S21037C1");
    /*is_ambiguous_... S21037C5::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S21037C5*), ABISELECT(184,100), "S21037C1");
    /*is_ambiguous_... S21037C5::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S21037C5*), ABISELECT(176,96), "S21037C1");
    /*is_ambiguous_... S21037C5::S21037C9 */ AMB_check_base_class_offset(lv, (S21037C9*)(S21037C5*), ABISELECT(192,104), "S21037C1");
    check_base_class_offset(lv, (S21037C5*)(S21037C3*), ABISELECT(176,96), "S21037C1");
    /*is_ambiguous_... S21037C3::S21037C9 */ AMB_check_base_class_offset(lv, (S21037C9*)(S21037C3*), ABISELECT(128,68), "S21037C1");
    check_base_class_offset(lv, (S21037C3*)(S21037C2*), ABISELECT(128,68), "S21037C1");
    check_base_class_offset(lv, (S21037C3*)(S21037C12*), ABISELECT(128,68), "S21037C1");
    /*is_ambiguous_... S21037C12::S21037C9 */ AMB_check_base_class_offset(lv, (S21037C9*)(S21037C12*), ABISELECT(352,200), "S21037C1");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S21037C8*)(S21037C6*)(S21037C12*), ABISELECT(400,228), "S21037C1");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S21037C6*)(S21037C12*), ABISELECT(416,236), "S21037C1");
    /*is_ambiguous_... S21037C12::S21037C6 */ AMB_check_base_class_offset(lv, (S21037C6*)(S21037C12*), ABISELECT(400,228), "S21037C1");
    check_base_class_offset(lv, (S21037C12*)(S21037C11*)(S21037C2*), ABISELECT(352,200), "S21037C1");
    /*is_ambiguous_... S21037C11::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S21037C11*)(S21037C2*), ABISELECT(464,268), "S21037C1");
    check_base_class_offset(lv, (S5266C26*)(S21037C13*)(S21037C11*)(S21037C2*), ABISELECT(16,4), "S21037C1");
    /*is_ambiguous_... S21037C13::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S21037C13*)(S21037C11*)(S21037C2*), ABISELECT(24,8), "S21037C1");
    check_base_class_offset(lv, (S21037C13*)(S21037C11*)(S21037C2*), ABISELECT(16,4), "S21037C1");
    check_base_class_offset(lv, (S21037C11*)(S21037C2*), ABISELECT(16,4), "S21037C1");
    check_base_class_offset(lv, (S19905C5_nt*)(S21037C2*), ABISELECT(112,60), "S21037C1");
    check_base_class_offset(lv, (S21037C2*), ABISELECT(16,4), "S21037C1");
    test_class_info(&lv, &cd_S21037C1);
    dp->~S21037C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21037C1(Test_S21037C1, "S21037C1", ABISELECT(480,272));

#else // __cplusplus

extern void _ZN8S21037C1C1Ev();
extern void _ZN8S21037C1D2Ev();
Name_Map name_map_S21037C1[] = {
  NSPAIR(_ZN8S21037C1C1Ev),
  NSPAIR(_ZN8S21037C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S21037C9;
extern VTBL_ENTRY _ZTI8S21037C9[];
extern  VTBL_ENTRY _ZTV8S21037C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C9[];
extern Class_Descriptor cd_S21037C8;
extern VTBL_ENTRY _ZTI8S21037C8[];
extern  VTBL_ENTRY _ZTV8S21037C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C8[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S21037C6;
extern VTBL_ENTRY _ZTI8S21037C6[];
extern  VTBL_ENTRY _ZTV8S21037C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C6[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S21037C9;
extern VTBL_ENTRY _ZTI8S21037C9[];
extern  VTBL_ENTRY _ZTV8S21037C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C9[];
extern Class_Descriptor cd_S21037C5;
extern VTBL_ENTRY _ZTI8S21037C5[];
extern  VTBL_ENTRY _ZTV8S21037C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C5[];
extern Class_Descriptor cd_S21037C9;
extern VTBL_ENTRY _ZTI8S21037C9[];
extern  VTBL_ENTRY _ZTV8S21037C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C9[];
extern Class_Descriptor cd_S21037C3;
extern VTBL_ENTRY _ZTI8S21037C3[];
extern  VTBL_ENTRY _ZTV8S21037C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C3[];
extern Class_Descriptor cd_S21037C9;
extern VTBL_ENTRY _ZTI8S21037C9[];
extern  VTBL_ENTRY _ZTV8S21037C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C9[];
extern Class_Descriptor cd_S21037C8;
extern VTBL_ENTRY _ZTI8S21037C8[];
extern  VTBL_ENTRY _ZTV8S21037C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C8[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S21037C6;
extern VTBL_ENTRY _ZTI8S21037C6[];
extern  VTBL_ENTRY _ZTV8S21037C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C6[];
extern Class_Descriptor cd_S21037C12;
extern VTBL_ENTRY _ZTI9S21037C12[];
extern  VTBL_ENTRY _ZTV9S21037C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21037C12[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S21037C13;
extern VTBL_ENTRY _ZTI9S21037C13[];
extern  VTBL_ENTRY _ZTV9S21037C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21037C13[];
extern Class_Descriptor cd_S21037C11;
extern VTBL_ENTRY _ZTI9S21037C11[];
extern  VTBL_ENTRY _ZTV9S21037C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21037C11[];
extern Class_Descriptor cd_S19905C5_nt;
extern VTBL_ENTRY _ZTI11S19905C5_nt[];
extern  VTBL_ENTRY _ZTV11S19905C5_nt[];
extern Class_Descriptor cd_S21037C2;
extern VTBL_ENTRY _ZTI8S21037C2[];
extern  VTBL_ENTRY _ZTV8S21037C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C2[];
static Base_Class bases_S21037C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19905C19,    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
    2, //immediately_derived
  0, 1},
  {&cd_S21037C9,    ABISELECT(304,172), //bcp->offset
    62, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21037C8,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(256,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21037C6,    ABISELECT(240,136), //bcp->offset
    55, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(184,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19905C19,    ABISELECT(176,96), //bcp->offset
    -1, //bcp->virtual_function_table_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_S21037C9,    ABISELECT(192,104), //bcp->offset
    49, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21037C5,    ABISELECT(176,96), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S21037C9,    ABISELECT(128,68), //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
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S21037C3,    ABISELECT(128,68), //bcp->offset
    31, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S21037C9,    ABISELECT(352,200), //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
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S21037C8,    ABISELECT(400,228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(416,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
    15, //immediately_derived
  0, 0},
  {&cd_S21037C6,    ABISELECT(400,228), //bcp->offset
    79, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S21037C12,    ABISELECT(352,200), //bcp->offset
    68, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(464,268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S5266C26,    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
    20, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(24,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
    20, //immediately_derived
  0, 0},
  {&cd_S21037C13,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S21037C11,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19905C5_nt,    ABISELECT(112,60), //bcp->offset
    27, //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
    16, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S21037C2,    ABISELECT(16,4), //bcp->offset
    14, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21037C1[];
extern void ABISELECT(_ZTv0_n24_N8S21037C1D1Ev,_ZTv0_n12_N8S21037C1D1Ev)();
extern void _ZN8S21037C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C1D0Ev,_ZTv0_n12_N8S21037C1D0Ev)();
extern void _ZN8S21037C1D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C1D1Ev,_ZTv0_n12_N8S21037C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S21037C1D1Ev,_ZThn4_N8S21037C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C1D0Ev,_ZTv0_n12_N8S21037C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S21037C1D0Ev,_ZThn4_N8S21037C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn96_n24_N8S21037C1D1Ev,_ZTvn56_n12_N8S21037C1D1Ev)();
extern void ABISELECT(_ZTvn96_n24_N8S21037C1D0Ev,_ZTvn56_n12_N8S21037C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C1D1Ev,_ZTv0_n12_N8S21037C1D1Ev)();
extern void ABISELECT(_ZThn128_N8S21037C1D1Ev,_ZThn68_N8S21037C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C1D0Ev,_ZTv0_n12_N8S21037C1D0Ev)();
extern void ABISELECT(_ZThn128_N8S21037C1D0Ev,_ZThn68_N8S21037C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21037C1D1Ev,_ZTv0_n24_N8S21037C1D1Ev)();
extern void ABISELECT(_ZThn176_N8S21037C1D1Ev,_ZThn96_N8S21037C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21037C1D0Ev,_ZTv0_n24_N8S21037C1D0Ev)();
extern void ABISELECT(_ZThn176_N8S21037C1D0Ev,_ZThn96_N8S21037C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C1D1Ev,_ZTv0_n12_N8S21037C1D1Ev)();
extern void ABISELECT(_ZThn192_N8S21037C1D1Ev,_ZThn104_N8S21037C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C1D0Ev,_ZTv0_n12_N8S21037C1D0Ev)();
extern void ABISELECT(_ZThn192_N8S21037C1D0Ev,_ZThn104_N8S21037C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C1D1Ev,_ZTv0_n12_N8S21037C1D1Ev)();
extern void ABISELECT(_ZThn240_N8S21037C1D1Ev,_ZThn136_N8S21037C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C1D0Ev,_ZTv0_n12_N8S21037C1D0Ev)();
extern void ABISELECT(_ZThn240_N8S21037C1D0Ev,_ZThn136_N8S21037C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C1D1Ev,_ZTv0_n12_N8S21037C1D1Ev)();
extern void ABISELECT(_ZThn304_N8S21037C1D1Ev,_ZThn172_N8S21037C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C1D0Ev,_ZTv0_n12_N8S21037C1D0Ev)();
extern void ABISELECT(_ZThn304_N8S21037C1D0Ev,_ZThn172_N8S21037C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C1D1Ev,_ZTv0_n12_N8S21037C1D1Ev)();
extern void ABISELECT(_ZThn352_N8S21037C1D1Ev,_ZThn200_N8S21037C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C1D0Ev,_ZTv0_n12_N8S21037C1D0Ev)();
extern void ABISELECT(_ZThn352_N8S21037C1D0Ev,_ZThn200_N8S21037C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C1D1Ev,_ZTv0_n12_N8S21037C1D1Ev)();
extern void ABISELECT(_ZThn400_N8S21037C1D1Ev,_ZThn228_N8S21037C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C1D0Ev,_ZTv0_n12_N8S21037C1D0Ev)();
extern void ABISELECT(_ZThn400_N8S21037C1D0Ev,_ZThn228_N8S21037C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21037C1[] = {
  ABISELECT(464,268),
  ABISELECT(352,200),
  ABISELECT(304,172),
  0,
  ABISELECT(240,136),
  ABISELECT(176,96),
  0,
  ABISELECT(128,68),
  ABISELECT(16,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C1D1Ev,_ZTv0_n12_N8S21037C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C1D0Ev,_ZTv0_n12_N8S21037C1D0Ev),
  ABISELECT(448,264),
  ABISELECT(160,92),
  ABISELECT(112,64),
  ABISELECT(336,196),
  ABISELECT(-16,-4),
  ABISELECT(288,168),
  ABISELECT(-16,-4),
  ABISELECT(224,132),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S21037C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C1D1Ev,_ZTv0_n12_N8S21037C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C1D0Ev,_ZTv0_n12_N8S21037C1D0Ev),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S21037C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n24_N8S21037C1D1Ev,_ZTvn56_n12_N8S21037C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n24_N8S21037C1D0Ev,_ZTvn56_n12_N8S21037C1D0Ev),
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI8S21037C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C1D1Ev,_ZTv0_n12_N8S21037C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C1D0Ev,_ZTv0_n12_N8S21037C1D0Ev),
  ABISELECT(-176,-96),
  ABISELECT(128,76),
  ABISELECT(-176,-96),
  ABISELECT(64,40),
  ABISELECT(-176,-96),
  (VTBL_ENTRY)&(_ZTI8S21037C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21037C1D1Ev,_ZTv0_n24_N8S21037C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21037C1D0Ev,_ZTv0_n24_N8S21037C1D0Ev),
  ABISELECT(-192,-104),
  ABISELECT(-192,-104),
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI8S21037C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C1D1Ev,_ZTv0_n12_N8S21037C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C1D0Ev,_ZTv0_n12_N8S21037C1D0Ev),
  ABISELECT(64,36),
  ABISELECT(-240,-136),
  ABISELECT(-240,-136),
  ABISELECT(-240,-136),
  (VTBL_ENTRY)&(_ZTI8S21037C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C1D1Ev,_ZTv0_n12_N8S21037C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C1D0Ev,_ZTv0_n12_N8S21037C1D0Ev),
  ABISELECT(-304,-172),
  ABISELECT(-304,-172),
  ABISELECT(-304,-172),
  (VTBL_ENTRY)&(_ZTI8S21037C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C1D1Ev,_ZTv0_n12_N8S21037C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C1D0Ev,_ZTv0_n12_N8S21037C1D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-112,-64),
  ABISELECT(-176,-104),
  ABISELECT(-352,-200),
  ABISELECT(-224,-132),
  ABISELECT(-352,-200),
  ABISELECT(-352,-200),
  ABISELECT(-352,-200),
  (VTBL_ENTRY)&(_ZTI8S21037C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C1D1Ev,_ZTv0_n12_N8S21037C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C1D0Ev,_ZTv0_n12_N8S21037C1D0Ev),
  ABISELECT(-96,-56),
  ABISELECT(-400,-228),
  ABISELECT(-400,-228),
  ABISELECT(-400,-228),
  (VTBL_ENTRY)&(_ZTI8S21037C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C1D1Ev,_ZTv0_n12_N8S21037C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C1D0Ev,_ZTv0_n12_N8S21037C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S21037C1[];
extern void ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev)();
extern void _ZN8S21037C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev)();
extern void _ZN8S21037C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C2__8S21037C1[] = {
  ABISELECT(448,264),
  ABISELECT(160,92),
  ABISELECT(112,64),
  ABISELECT(336,196),
  ABISELECT(-16,-4),
  ABISELECT(288,168),
  ABISELECT(-16,-4),
  ABISELECT(224,132),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev)();
extern void _ZN9S21037C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev)();
extern void _ZN9S21037C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21037C118S21037C2__8S21037C1[] = {
  ABISELECT(448,264),
  ABISELECT(160,92),
  ABISELECT(112,64),
  ABISELECT(336,196),
  ABISELECT(-16,-4),
  ABISELECT(288,168),
  ABISELECT(-16,-4),
  ABISELECT(224,132),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S21037C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C13D1Ev,_ZTv0_n12_N9S21037C13D1Ev)();
extern void _ZN9S21037C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C13D0Ev,_ZTv0_n12_N9S21037C13D0Ev)();
extern void _ZN9S21037C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21037C139S21037C118S21037C2__8S21037C1[] = {
  ABISELECT(-16,-4),
  ABISELECT(288,168),
  ABISELECT(-16,-4),
  ABISELECT(224,132),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S21037C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C13D1Ev,_ZTv0_n12_N9S21037C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C13D0Ev,_ZTv0_n12_N9S21037C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C13D1Ev,_ZTv0_n12_N9S21037C13D1Ev)();
extern void ABISELECT(_ZThn224_N9S21037C13D1Ev,_ZThn132_N9S21037C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C13D0Ev,_ZTv0_n12_N9S21037C13D0Ev)();
extern void ABISELECT(_ZThn224_N9S21037C13D0Ev,_ZThn132_N9S21037C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C6__9S21037C139S21037C118S21037C2__8S21037C1[] = {
  ABISELECT(64,36),
  ABISELECT(-240,-136),
  ABISELECT(-224,-132),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI9S21037C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C13D1Ev,_ZTv0_n12_N9S21037C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C13D0Ev,_ZTv0_n12_N9S21037C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C13D1Ev,_ZTv0_n12_N9S21037C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21037C13D0Ev,_ZTv0_n12_N9S21037C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__9S21037C139S21037C118S21037C2__8S21037C1[] = {
  ABISELECT(16,4),
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI9S21037C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C13D1Ev,_ZTv0_n12_N9S21037C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C13D0Ev,_ZTv0_n12_N9S21037C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C13D1Ev,_ZTv0_n12_N9S21037C13D1Ev)();
extern void ABISELECT(_ZThn288_N9S21037C13D1Ev,_ZThn168_N9S21037C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C13D0Ev,_ZTv0_n12_N9S21037C13D0Ev)();
extern void ABISELECT(_ZThn288_N9S21037C13D0Ev,_ZThn168_N9S21037C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__9S21037C139S21037C118S21037C2__8S21037C1[] = {
  ABISELECT(-304,-172),
  ABISELECT(-288,-168),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI9S21037C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C13D1Ev,_ZTv0_n12_N9S21037C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C13D0Ev,_ZTv0_n12_N9S21037C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev)();
extern void ABISELECT(_ZThn288_N9S21037C11D1Ev,_ZThn168_N9S21037C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev)();
extern void ABISELECT(_ZThn288_N9S21037C11D0Ev,_ZThn168_N9S21037C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__9S21037C118S21037C2__8S21037C1[] = {
  ABISELECT(-304,-172),
  ABISELECT(-288,-168),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI9S21037C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__9S21037C118S21037C2__8S21037C1[] = {
  ABISELECT(16,4),
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI9S21037C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev)();
extern void ABISELECT(_ZThn336_N9S21037C11D1Ev,_ZThn196_N9S21037C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev)();
extern void ABISELECT(_ZThn336_N9S21037C11D0Ev,_ZThn196_N9S21037C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21037C12__9S21037C118S21037C2__8S21037C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-112,-64),
  ABISELECT(-176,-104),
  ABISELECT(-352,-200),
  ABISELECT(-224,-132),
  ABISELECT(-352,-200),
  ABISELECT(-336,-196),
  ABISELECT(-336,-196),
  (VTBL_ENTRY)&(_ZTI9S21037C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev)();
extern void ABISELECT(_ZThn112_N9S21037C11D1Ev,_ZThn64_N9S21037C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev)();
extern void ABISELECT(_ZThn112_N9S21037C11D0Ev,_ZThn64_N9S21037C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C3__9S21037C118S21037C2__8S21037C1[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI9S21037C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S21037C11D1Ev,_ZTv0_n24_N9S21037C11D1Ev)();
extern void ABISELECT(_ZThn160_N9S21037C11D1Ev,_ZThn92_N9S21037C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S21037C11D0Ev,_ZTv0_n24_N9S21037C11D0Ev)();
extern void ABISELECT(_ZThn160_N9S21037C11D0Ev,_ZThn92_N9S21037C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C5__9S21037C118S21037C2__8S21037C1[] = {
  ABISELECT(-160,-92),
  ABISELECT(128,76),
  ABISELECT(-176,-96),
  ABISELECT(64,40),
  ABISELECT(-160,-92),
  (VTBL_ENTRY)&(_ZTI9S21037C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S21037C11D1Ev,_ZTv0_n24_N9S21037C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S21037C11D0Ev,_ZTv0_n24_N9S21037C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev)();
extern void ABISELECT(_ZThn224_N9S21037C11D1Ev,_ZThn132_N9S21037C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev)();
extern void ABISELECT(_ZThn224_N9S21037C11D0Ev,_ZThn132_N9S21037C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C6__9S21037C118S21037C2__8S21037C1[] = {
  ABISELECT(64,36),
  ABISELECT(-240,-136),
  ABISELECT(-224,-132),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI9S21037C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev)();
extern void ABISELECT(_ZThn176_N9S21037C11D1Ev,_ZThn100_N9S21037C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev)();
extern void ABISELECT(_ZThn176_N9S21037C11D0Ev,_ZThn100_N9S21037C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C98S21037C5__A2__9S21037C118S21037C2__8S21037C1[] = {
  ABISELECT(-192,-104),
  ABISELECT(-176,-100),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI9S21037C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev)();
extern void ABISELECT(_ZThn384_N9S21037C11D1Ev,_ZThn224_N9S21037C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev)();
extern void ABISELECT(_ZThn384_N9S21037C11D0Ev,_ZThn224_N9S21037C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C69S21037C12__A1__9S21037C118S21037C2__8S21037C1[] = {
  ABISELECT(-96,-56),
  ABISELECT(-400,-228),
  ABISELECT(-384,-224),
  ABISELECT(-384,-224),
  (VTBL_ENTRY)&(_ZTI9S21037C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev)();
extern void ABISELECT(_ZThn112_N8S21037C2D1Ev,_ZThn64_N8S21037C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev)();
extern void ABISELECT(_ZThn112_N8S21037C2D0Ev,_ZThn64_N8S21037C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C3__8S21037C2__8S21037C1[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI8S21037C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S21037C2D1Ev,_ZTv0_n24_N8S21037C2D1Ev)();
extern void ABISELECT(_ZThn160_N8S21037C2D1Ev,_ZThn92_N8S21037C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21037C2D0Ev,_ZTv0_n24_N8S21037C2D0Ev)();
extern void ABISELECT(_ZThn160_N8S21037C2D0Ev,_ZThn92_N8S21037C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C5__8S21037C2__8S21037C1[] = {
  ABISELECT(-160,-92),
  ABISELECT(128,76),
  ABISELECT(-176,-96),
  ABISELECT(64,40),
  ABISELECT(-160,-92),
  (VTBL_ENTRY)&(_ZTI8S21037C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21037C2D1Ev,_ZTv0_n24_N8S21037C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21037C2D0Ev,_ZTv0_n24_N8S21037C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev)();
extern void ABISELECT(_ZThn224_N8S21037C2D1Ev,_ZThn132_N8S21037C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev)();
extern void ABISELECT(_ZThn224_N8S21037C2D0Ev,_ZThn132_N8S21037C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C6__8S21037C2__8S21037C1[] = {
  ABISELECT(64,36),
  ABISELECT(-240,-136),
  ABISELECT(-224,-132),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI8S21037C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C2__8S21037C1[] = {
  ABISELECT(16,4),
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI8S21037C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev)();
extern void ABISELECT(_ZThn288_N8S21037C2D1Ev,_ZThn168_N8S21037C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev)();
extern void ABISELECT(_ZThn288_N8S21037C2D0Ev,_ZThn168_N8S21037C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C2__8S21037C1[] = {
  ABISELECT(-304,-172),
  ABISELECT(-288,-168),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI8S21037C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev)();
extern void ABISELECT(_ZThn176_N8S21037C2D1Ev,_ZThn100_N8S21037C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev)();
extern void ABISELECT(_ZThn176_N8S21037C2D0Ev,_ZThn100_N8S21037C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C98S21037C5__A1__8S21037C2__8S21037C1[] = {
  ABISELECT(-192,-104),
  ABISELECT(-176,-100),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S21037C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev)();
extern void ABISELECT(_ZThn336_N8S21037C2D1Ev,_ZThn196_N8S21037C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev)();
extern void ABISELECT(_ZThn336_N8S21037C2D0Ev,_ZThn196_N8S21037C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21037C12__8S21037C2__8S21037C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-112,-64),
  ABISELECT(-176,-104),
  ABISELECT(-352,-200),
  ABISELECT(-224,-132),
  ABISELECT(-352,-200),
  ABISELECT(-336,-196),
  ABISELECT(-336,-196),
  (VTBL_ENTRY)&(_ZTI8S21037C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev)();
extern void ABISELECT(_ZThn384_N8S21037C2D1Ev,_ZThn224_N8S21037C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev)();
extern void ABISELECT(_ZThn384_N8S21037C2D0Ev,_ZThn224_N8S21037C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C69S21037C12__A1__8S21037C2__8S21037C1[] = {
  ABISELECT(-96,-56),
  ABISELECT(-400,-228),
  ABISELECT(-384,-224),
  ABISELECT(-384,-224),
  (VTBL_ENTRY)&(_ZTI8S21037C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev)();
extern void _ZN8S21037C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev)();
extern void _ZN8S21037C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C3__8S21037C1[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void _ZN8S21037C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void _ZN8S21037C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C98S21037C3__A2__8S21037C1[] = {
  ABISELECT(-128,-68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C98S21037C3__A2__8S21037C1[] = {
  ABISELECT(128,68),
  ABISELECT(128,68),
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S21037C3D1Ev,_ZTv0_n24_N8S21037C3D1Ev)();
extern void ABISELECT(_ZThn48_N8S21037C3D1Ev,_ZThn28_N8S21037C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21037C3D0Ev,_ZTv0_n24_N8S21037C3D0Ev)();
extern void ABISELECT(_ZThn48_N8S21037C3D0Ev,_ZThn28_N8S21037C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C5__8S21037C3__8S21037C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(128,76),
  ABISELECT(-176,-96),
  ABISELECT(64,40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S21037C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21037C3D1Ev,_ZTv0_n24_N8S21037C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21037C3D0Ev,_ZTv0_n24_N8S21037C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev)();
extern void ABISELECT(_ZThn112_N8S21037C3D1Ev,_ZThn68_N8S21037C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev)();
extern void ABISELECT(_ZThn112_N8S21037C3D0Ev,_ZThn68_N8S21037C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C6__8S21037C3__8S21037C1[] = {
  ABISELECT(64,36),
  ABISELECT(-240,-136),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S21037C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C3__8S21037C1[] = {
  ABISELECT(128,68),
  ABISELECT(128,68),
  (VTBL_ENTRY)&(_ZTI8S21037C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev)();
extern void ABISELECT(_ZThn176_N8S21037C3D1Ev,_ZThn104_N8S21037C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev)();
extern void ABISELECT(_ZThn176_N8S21037C3D0Ev,_ZThn104_N8S21037C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C3__8S21037C1[] = {
  ABISELECT(-304,-172),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI8S21037C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S21037C3D1Ev,_ZThn36_N8S21037C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev)();
extern void ABISELECT(_ZThn64_N8S21037C3D0Ev,_ZThn36_N8S21037C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C98S21037C5__A1__8S21037C3__8S21037C1[] = {
  ABISELECT(-192,-104),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21037C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev),
};
extern void _ZN8S21037C5D1Ev();
extern void _ZN8S21037C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21037C5__8S21037C1[] = {
  ABISELECT(128,76),
  ABISELECT(-176,-96),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C5[0]),
  (VTBL_ENTRY)&_ZN8S21037C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21037C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void _ZN8S21037C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void _ZN8S21037C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C98S21037C5__A1__8S21037C1[] = {
  ABISELECT(-192,-104),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C98S21037C5__A1__8S21037C1[] = {
  ABISELECT(192,104),
  ABISELECT(192,104),
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev)();
extern void ABISELECT(_ZThn64_N8S21037C5D1Ev,_ZThn40_N8S21037C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev)();
extern void ABISELECT(_ZThn64_N8S21037C5D0Ev,_ZThn40_N8S21037C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C6__8S21037C5__8S21037C1[] = {
  ABISELECT(64,36),
  ABISELECT(-240,-136),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S21037C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C5__8S21037C1[] = {
  ABISELECT(176,96),
  ABISELECT(176,96),
  (VTBL_ENTRY)&(_ZTI8S21037C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev)();
extern void ABISELECT(_ZThn128_N8S21037C5D1Ev,_ZThn76_N8S21037C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev)();
extern void ABISELECT(_ZThn128_N8S21037C5D0Ev,_ZThn76_N8S21037C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C5__8S21037C1[] = {
  ABISELECT(-304,-172),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S21037C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S21037C5D1Ev,_ZThn8_N8S21037C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev)();
extern void ABISELECT(_ZThn16_N8S21037C5D0Ev,_ZThn8_N8S21037C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__A__8S21037C5__8S21037C1[] = {
  ABISELECT(-192,-104),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21037C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void _ZN8S21037C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
extern void _ZN8S21037C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C6__8S21037C1[] = {
  ABISELECT(64,36),
  ABISELECT(-240,-136),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void _ZN8S21037C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
extern void _ZN8S21037C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C88S21037C6__8S21037C1[] = {
  ABISELECT(64,36),
  ABISELECT(-240,-136),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C88S21037C6__8S21037C1[] = {
  ABISELECT(240,136),
  ABISELECT(240,136),
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21037C8D1Ev,_ZThn36_N8S21037C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S21037C8D0Ev,_ZThn36_N8S21037C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C88S21037C6__8S21037C1[] = {
  ABISELECT(-304,-172),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C6__8S21037C1[] = {
  ABISELECT(240,136),
  ABISELECT(240,136),
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S21037C6D1Ev,_ZThn36_N8S21037C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S21037C6D0Ev,_ZThn36_N8S21037C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C6__8S21037C1[] = {
  ABISELECT(-304,-172),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void _ZN8S21037C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void _ZN8S21037C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C1[] = {
  ABISELECT(-304,-172),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C9__8S21037C1[] = {
  ABISELECT(304,172),
  ABISELECT(304,172),
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev)();
extern void _ZN9S21037C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev)();
extern void _ZN9S21037C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21037C12__8S21037C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-112,-64),
  ABISELECT(-176,-104),
  ABISELECT(-352,-200),
  ABISELECT(-224,-132),
  ABISELECT(-352,-200),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void _ZN8S21037C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
extern void _ZN8S21037C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C99S21037C12__A3__8S21037C1[] = {
  ABISELECT(-352,-200),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C99S21037C12__A3__8S21037C1[] = {
  ABISELECT(352,200),
  ABISELECT(352,200),
  (VTBL_ENTRY)&(_ZTI8S21037C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void _ZN8S21037C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
extern void _ZN8S21037C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C69S21037C12__A1__8S21037C1[] = {
  ABISELECT(-96,-56),
  ABISELECT(-400,-228),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void _ZN8S21037C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
extern void _ZN8S21037C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C88S21037C69S21037C12__A1__8S21037C1[] = {
  ABISELECT(-96,-56),
  ABISELECT(-400,-228),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C88S21037C69S21037C12__A1__8S21037C1[] = {
  ABISELECT(400,228),
  ABISELECT(400,228),
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C88S21037C69S21037C12__A1__8S21037C1[] = {
  ABISELECT(-304,-172),
  ABISELECT(96,56),
  ABISELECT(96,56),
  (VTBL_ENTRY)&(_ZTI8S21037C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S21037C69S21037C12__A1__8S21037C1[] = {
  ABISELECT(400,228),
  ABISELECT(400,228),
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21037C9__8S21037C69S21037C12__A1__8S21037C1[] = {
  ABISELECT(-304,-172),
  ABISELECT(96,56),
  ABISELECT(96,56),
  (VTBL_ENTRY)&(_ZTI8S21037C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__9S21037C12__8S21037C1[] = {
  ABISELECT(352,200),
  ABISELECT(352,200),
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21037C3__9S21037C12__8S21037C1[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(224,132),
  ABISELECT(224,132),
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S21037C12D1Ev,_ZTv0_n24_N9S21037C12D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S21037C12D0Ev,_ZTv0_n24_N9S21037C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21037C5__9S21037C12__8S21037C1[] = {
  ABISELECT(176,104),
  ABISELECT(128,76),
  ABISELECT(-176,-96),
  ABISELECT(64,40),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S21037C12D1Ev,_ZTv0_n24_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S21037C12D0Ev,_ZTv0_n24_N9S21037C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21037C6__9S21037C12__8S21037C1[] = {
  ABISELECT(64,36),
  ABISELECT(-240,-136),
  ABISELECT(112,64),
  ABISELECT(112,64),
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21037C9__A1__9S21037C12__8S21037C1[] = {
  ABISELECT(-304,-172),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21037C98S21037C5__A2__9S21037C12__8S21037C1[] = {
  ABISELECT(-192,-104),
  ABISELECT(160,96),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev)();
extern void ABISELECT(_ZThn48_N9S21037C12D1Ev,_ZThn28_N9S21037C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev)();
extern void ABISELECT(_ZThn48_N9S21037C12D0Ev,_ZThn28_N9S21037C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21037C6__A__9S21037C12__8S21037C1[] = {
  ABISELECT(-96,-56),
  ABISELECT(-400,-228),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S21037C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev),
};
static  VTT_ENTRY vtt_S21037C1[] = {
  {&(_ZTV8S21037C1[12]),  12,86},
  {&(_ZTV8S21037C1[25]),  25,86},
  {&(_ZTV8S21037C1[39]),  39,86},
  {&(_ZTV8S21037C1[47]),  47,86},
  {&(_ZTV8S21037C1[60]),  60,86},
  {&(_ZTV8S21037C1[12]),  12,86},
  {&(_ZTV8S21037C1[66]),  66,86},
  {&(_ZTV8S21037C1[53]),  53,86},
  {&(_ZTV8S21037C1[77]),  77,86},
  {&(_ZTV8S21037C1[84]),  84,86},
  {&(_ZTV8S21037C1[29]),  29,86},
  {&(_tg__ZTV8S21037C2__8S21037C1[11]),  11,13},
  {&(_tg__ZTV9S21037C118S21037C2__8S21037C1[11]),  11,13},
  {&(_tg__ZTV9S21037C139S21037C118S21037C2__8S21037C1[7]),  7,9},
  {&(_tg__ZTV8S21037C6__9S21037C139S21037C118S21037C2__8S21037C1[5]),  5,7},
  {&(_tg__ZTV9S19905C19__9S21037C139S21037C118S21037C2__8S21037C1[3]),  3,5},
  {&(_tg__ZTV8S21037C9__9S21037C139S21037C118S21037C2__8S21037C1[4]),  4,6},
  {&(_tg__ZTV8S21037C9__9S21037C118S21037C2__8S21037C1[4]),  4,6},
  {&(_tg__ZTV9S19905C19__9S21037C118S21037C2__8S21037C1[3]),  3,5},
  {&(_tg__ZTV9S21037C12__9S21037C118S21037C2__8S21037C1[9]),  9,11},
  {&(_tg__ZTV8S21037C3__9S21037C118S21037C2__8S21037C1[8]),  8,10},
  {&(_tg__ZTV8S21037C5__9S21037C118S21037C2__8S21037C1[6]),  6,8},
  {&(_tg__ZTV8S21037C6__9S21037C118S21037C2__8S21037C1[5]),  5,7},
  {&(_tg__ZTV8S21037C98S21037C5__A2__9S21037C118S21037C2__8S21037C1[4]),  4,6},
  {&(_tg__ZTV8S21037C69S21037C12__A1__9S21037C118S21037C2__8S21037C1[5]),  5,7},
  {&(_tg__ZTV8S21037C3__8S21037C2__8S21037C1[8]),  8,10},
  {&(_tg__ZTV8S21037C5__8S21037C2__8S21037C1[6]),  6,8},
  {&(_tg__ZTV8S21037C6__8S21037C2__8S21037C1[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S21037C2__8S21037C1[3]),  3,5},
  {&(_tg__ZTV8S21037C9__8S21037C2__8S21037C1[4]),  4,6},
  {&(_tg__ZTV8S21037C98S21037C5__A1__8S21037C2__8S21037C1[4]),  4,6},
  {&(_tg__ZTV9S21037C12__8S21037C2__8S21037C1[9]),  9,11},
  {&(_tg__ZTV8S21037C69S21037C12__A1__8S21037C2__8S21037C1[5]),  5,7},
  {&(_tg__ZTV8S21037C3__8S21037C1[8]),  8,10},
  {&(_tg__ZTV8S21037C98S21037C3__A2__8S21037C1[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S21037C98S21037C3__A2__8S21037C1[3]),  3,5},
  {&(_tg__ZTV8S21037C5__8S21037C3__8S21037C1[6]),  6,8},
  {&(_tg__ZTV8S21037C6__8S21037C3__8S21037C1[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S21037C3__8S21037C1[3]),  3,5},
  {&(_tg__ZTV8S21037C9__8S21037C3__8S21037C1[4]),  4,6},
  {&(_tg__ZTV8S21037C98S21037C5__A1__8S21037C3__8S21037C1[4]),  4,6},
  {&(_tg__ZTV8S21037C5__8S21037C1[5]),  5,7},
  {&(_tg__ZTV8S21037C98S21037C5__A1__8S21037C1[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S21037C98S21037C5__A1__8S21037C1[3]),  3,5},
  {&(_tg__ZTV8S21037C6__8S21037C5__8S21037C1[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S21037C5__8S21037C1[3]),  3,5},
  {&(_tg__ZTV8S21037C9__8S21037C5__8S21037C1[4]),  4,6},
  {&(_tg__ZTV8S21037C9__A__8S21037C5__8S21037C1[4]),  4,6},
  {&(_tg__ZTV8S21037C6__8S21037C1[5]),  5,7},
  {&(_tg__ZTV8S21037C88S21037C6__8S21037C1[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S21037C88S21037C6__8S21037C1[3]),  3,5},
  {&(_tg__ZTV8S21037C9__8S21037C88S21037C6__8S21037C1[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S21037C6__8S21037C1[3]),  3,5},
  {&(_tg__ZTV8S21037C9__8S21037C6__8S21037C1[4]),  4,6},
  {&(_tg__ZTV8S21037C9__8S21037C1[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S21037C9__8S21037C1[3]),  3,5},
  {&(_tg__ZTV9S21037C12__8S21037C1[9]),  9,11},
  {&(_tg__ZTV8S21037C99S21037C12__A3__8S21037C1[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S21037C99S21037C12__A3__8S21037C1[3]),  3,5},
  {&(_tg__ZTV8S21037C69S21037C12__A1__8S21037C1[5]),  5,7},
  {&(_tg__ZTV8S21037C88S21037C69S21037C12__A1__8S21037C1[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S21037C88S21037C69S21037C12__A1__8S21037C1[3]),  3,5},
  {&(_tg__ZTV8S21037C9__8S21037C88S21037C69S21037C12__A1__8S21037C1[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S21037C69S21037C12__A1__8S21037C1[3]),  3,5},
  {&(_tg__ZTV8S21037C9__8S21037C69S21037C12__A1__8S21037C1[4]),  4,6},
  {&(_tg__ZTV9S19905C19__9S21037C12__8S21037C1[3]),  3,5},
  {&(_tg__ZTV8S21037C3__9S21037C12__8S21037C1[8]),  8,10},
  {&(_tg__ZTV8S21037C5__9S21037C12__8S21037C1[6]),  6,8},
  {&(_tg__ZTV8S21037C6__9S21037C12__8S21037C1[5]),  5,7},
  {&(_tg__ZTV8S21037C9__A1__9S21037C12__8S21037C1[4]),  4,6},
  {&(_tg__ZTV8S21037C98S21037C5__A2__9S21037C12__8S21037C1[4]),  4,6},
  {&(_tg__ZTV8S21037C6__A__9S21037C12__8S21037C1[5]),  5,7},
};
extern VTBL_ENTRY _ZTI8S21037C1[];
extern  VTBL_ENTRY _ZTV8S21037C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21037C1[];
static VTBL_ENTRY alt_thunk_names89[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21037C12D0Ev,_ZTv0_n12_N9S21037C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S21037C12D0Ev,_ZThn28_N9S21037C12D0Ev),
  (VTBL_ENTRY)_ZN9S21037C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21037C12D1Ev,_ZTv0_n12_N9S21037C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S21037C12D1Ev,_ZThn28_N9S21037C12D1Ev),
  (VTBL_ENTRY)_ZN9S21037C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C8D0Ev,_ZTv0_n12_N8S21037C8D0Ev), // 
  (VTBL_ENTRY)_ZN8S21037C8D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C8D0Ev,_ZThn36_N8S21037C8D0Ev),
  (VTBL_ENTRY)_ZN8S21037C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C8D1Ev,_ZTv0_n12_N8S21037C8D1Ev), // 
  (VTBL_ENTRY)_ZN8S21037C8D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C8D1Ev,_ZThn36_N8S21037C8D1Ev),
  (VTBL_ENTRY)_ZN8S21037C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C6D0Ev,_ZTv0_n12_N8S21037C6D0Ev), // 
  (VTBL_ENTRY)_ZN8S21037C6D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C6D0Ev,_ZThn36_N8S21037C6D0Ev),
  (VTBL_ENTRY)_ZN8S21037C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C6D1Ev,_ZTv0_n12_N8S21037C6D1Ev), // 
  (VTBL_ENTRY)_ZN8S21037C6D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C6D1Ev,_ZThn36_N8S21037C6D1Ev),
  (VTBL_ENTRY)_ZN8S21037C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C5D0Ev,_ZTv0_n12_N8S21037C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21037C5D0Ev,_ZThn8_N8S21037C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S21037C5D0Ev,_ZThn76_N8S21037C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C5D0Ev,_ZThn40_N8S21037C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C5D1Ev,_ZTv0_n12_N8S21037C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21037C5D1Ev,_ZThn8_N8S21037C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S21037C5D1Ev,_ZThn76_N8S21037C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C5D1Ev,_ZThn40_N8S21037C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21037C3D0Ev,_ZTv0_n24_N8S21037C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21037C3D0Ev,_ZThn28_N8S21037C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21037C3D1Ev,_ZTv0_n24_N8S21037C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21037C3D1Ev,_ZThn28_N8S21037C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C9D0Ev,_ZTv0_n12_N8S21037C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S21037C9D0Ev,
  (VTBL_ENTRY)_ZN8S21037C9D0Ev,
  (VTBL_ENTRY)_ZN8S21037C9D0Ev,
  (VTBL_ENTRY)_ZN8S21037C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C9D1Ev,_ZTv0_n12_N8S21037C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S21037C9D1Ev,
  (VTBL_ENTRY)_ZN8S21037C9D1Ev,
  (VTBL_ENTRY)_ZN8S21037C9D1Ev,
  (VTBL_ENTRY)_ZN8S21037C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C3D0Ev,_ZTv0_n12_N8S21037C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C3D0Ev,_ZThn36_N8S21037C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S21037C3D0Ev,_ZThn104_N8S21037C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21037C3D0Ev,_ZThn68_N8S21037C3D0Ev),
  (VTBL_ENTRY)_ZN8S21037C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C3D1Ev,_ZTv0_n12_N8S21037C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21037C3D1Ev,_ZThn36_N8S21037C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S21037C3D1Ev,_ZThn104_N8S21037C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21037C3D1Ev,_ZThn68_N8S21037C3D1Ev),
  (VTBL_ENTRY)_ZN8S21037C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21037C2D0Ev,_ZTv0_n24_N8S21037C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S21037C2D0Ev,_ZThn92_N8S21037C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21037C2D1Ev,_ZTv0_n24_N8S21037C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S21037C2D1Ev,_ZThn92_N8S21037C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S21037C11D0Ev,_ZTv0_n24_N9S21037C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S21037C11D0Ev,_ZThn92_N9S21037C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S21037C11D1Ev,_ZTv0_n24_N9S21037C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S21037C11D1Ev,_ZThn92_N9S21037C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21037C13D0Ev,_ZTv0_n12_N9S21037C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S21037C13D0Ev,_ZThn168_N9S21037C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S21037C13D0Ev,_ZThn132_N9S21037C13D0Ev),
  (VTBL_ENTRY)_ZN9S21037C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21037C13D1Ev,_ZTv0_n12_N9S21037C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S21037C13D1Ev,_ZThn168_N9S21037C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S21037C13D1Ev,_ZThn132_N9S21037C13D1Ev),
  (VTBL_ENTRY)_ZN9S21037C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21037C11D0Ev,_ZTv0_n12_N9S21037C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S21037C11D0Ev,_ZThn224_N9S21037C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S21037C11D0Ev,_ZThn100_N9S21037C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S21037C11D0Ev,_ZThn132_N9S21037C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S21037C11D0Ev,_ZThn64_N9S21037C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn336_N9S21037C11D0Ev,_ZThn196_N9S21037C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S21037C11D0Ev,_ZThn168_N9S21037C11D0Ev),
  (VTBL_ENTRY)_ZN9S21037C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21037C11D1Ev,_ZTv0_n12_N9S21037C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S21037C11D1Ev,_ZThn224_N9S21037C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S21037C11D1Ev,_ZThn100_N9S21037C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S21037C11D1Ev,_ZThn132_N9S21037C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S21037C11D1Ev,_ZThn64_N9S21037C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn336_N9S21037C11D1Ev,_ZThn196_N9S21037C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S21037C11D1Ev,_ZThn168_N9S21037C11D1Ev),
  (VTBL_ENTRY)_ZN9S21037C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C2D0Ev,_ZTv0_n12_N8S21037C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S21037C2D0Ev,_ZThn224_N8S21037C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S21037C2D0Ev,_ZThn196_N8S21037C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S21037C2D0Ev,_ZThn100_N8S21037C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S21037C2D0Ev,_ZThn168_N8S21037C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S21037C2D0Ev,_ZThn132_N8S21037C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21037C2D0Ev,_ZThn64_N8S21037C2D0Ev),
  (VTBL_ENTRY)_ZN8S21037C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C2D1Ev,_ZTv0_n12_N8S21037C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S21037C2D1Ev,_ZThn224_N8S21037C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S21037C2D1Ev,_ZThn196_N8S21037C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S21037C2D1Ev,_ZThn100_N8S21037C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S21037C2D1Ev,_ZThn168_N8S21037C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S21037C2D1Ev,_ZThn132_N8S21037C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21037C2D1Ev,_ZThn64_N8S21037C2D1Ev),
  (VTBL_ENTRY)_ZN8S21037C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21037C1D0Ev,_ZTv0_n24_N8S21037C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S21037C1D0Ev,_ZThn96_N8S21037C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21037C1D1Ev,_ZTv0_n24_N8S21037C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S21037C1D1Ev,_ZThn96_N8S21037C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C1D0Ev,_ZTv0_n12_N8S21037C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N8S21037C1D0Ev,_ZThn228_N8S21037C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S21037C1D0Ev,_ZThn200_N8S21037C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S21037C1D0Ev,_ZThn172_N8S21037C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S21037C1D0Ev,_ZThn136_N8S21037C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S21037C1D0Ev,_ZThn104_N8S21037C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S21037C1D0Ev,_ZThn68_N8S21037C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21037C1D0Ev,_ZThn4_N8S21037C1D0Ev),
  (VTBL_ENTRY)_ZN8S21037C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21037C1D1Ev,_ZTv0_n12_N8S21037C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N8S21037C1D1Ev,_ZThn228_N8S21037C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S21037C1D1Ev,_ZThn200_N8S21037C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S21037C1D1Ev,_ZThn172_N8S21037C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S21037C1D1Ev,_ZThn136_N8S21037C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S21037C1D1Ev,_ZThn104_N8S21037C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S21037C1D1Ev,_ZThn68_N8S21037C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21037C1D1Ev,_ZThn4_N8S21037C1D1Ev),
  (VTBL_ENTRY)_ZN8S21037C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21037C1 = {  "S21037C1", // class name
  bases_S21037C1, 24,
  &(vtc_S21037C1[0]), // expected_vtbl_contents
  &(vtt_S21037C1[0]), // expected_vtt_contents
  ABISELECT(480,272), // object size
  NSPAIRA(_ZTI8S21037C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21037C1),86, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21037C1),72, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names89,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20909C3  {
  virtual void  v7(); // _ZN8S20909C32v7Ev
  virtual void  v8(); // _ZN8S20909C32v8Ev
  virtual void  v9(); // _ZN8S20909C32v9Ev
  virtual void  v10(); // _ZN8S20909C33v10Ev
  virtual void  v11(); // _ZN8S20909C33v11Ev
  virtual void  v12(); // _ZN8S20909C33v12Ev
  virtual void  v13(); // _ZN8S20909C33v13Ev
  virtual void  v14(); // _ZN8S20909C33v14Ev
  virtual void  v15(); // _ZN8S20909C33v15Ev
  ~S20909C3(); // tgen
  S20909C3(); // tgen
};
//SIG(-1 S20909C3) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S20909C3 ::v7(){vfunc_called(this, "_ZN8S20909C32v7Ev");}
void  S20909C3 ::v8(){vfunc_called(this, "_ZN8S20909C32v8Ev");}
void  S20909C3 ::v9(){vfunc_called(this, "_ZN8S20909C32v9Ev");}
void  S20909C3 ::v10(){vfunc_called(this, "_ZN8S20909C33v10Ev");}
void  S20909C3 ::v11(){vfunc_called(this, "_ZN8S20909C33v11Ev");}
void  S20909C3 ::v12(){vfunc_called(this, "_ZN8S20909C33v12Ev");}
void  S20909C3 ::v13(){vfunc_called(this, "_ZN8S20909C33v13Ev");}
void  S20909C3 ::v14(){vfunc_called(this, "_ZN8S20909C33v14Ev");}
void  S20909C3 ::v15(){vfunc_called(this, "_ZN8S20909C33v15Ev");}
S20909C3 ::~S20909C3(){ note_dtor("S20909C3", this);} // tgen
S20909C3 ::S20909C3(){ note_ctor("S20909C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20909C3C1Ev();
extern void _ZN8S20909C3D1Ev();
Name_Map name_map_S20909C3[] = {
  NSPAIR(_ZN8S20909C3C1Ev),
  NSPAIR(_ZN8S20909C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20909C3[];
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
static  VTBL_ENTRY vtc_S20909C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20909C3[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
};
extern VTBL_ENTRY _ZTI8S20909C3[];
extern  VTBL_ENTRY _ZTV8S20909C3[];
Class_Descriptor cd_S20909C3 = {  "S20909C3", // class name
  0,0,//no base classes
  &(vtc_S20909C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20909C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20909C3),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  S20909C6  {
  virtual void  v16(); // _ZN8S20909C63v16Ev
  ~S20909C6(); // tgen
  S20909C6(); // tgen
};
//SIG(-1 S20909C6) C1{ v1}


void  S20909C6 ::v16(){vfunc_called(this, "_ZN8S20909C63v16Ev");}
S20909C6 ::~S20909C6(){ note_dtor("S20909C6", this);} // tgen
S20909C6 ::S20909C6(){ note_ctor("S20909C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20909C6C1Ev();
extern void _ZN8S20909C6D1Ev();
Name_Map name_map_S20909C6[] = {
  NSPAIR(_ZN8S20909C6C1Ev),
  NSPAIR(_ZN8S20909C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20909C6[];
extern void _ZN8S20909C63v16Ev();
static  VTBL_ENTRY vtc_S20909C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20909C6[0]),
  (VTBL_ENTRY)&_ZN8S20909C63v16Ev,
};
extern VTBL_ENTRY _ZTI8S20909C6[];
extern  VTBL_ENTRY _ZTV8S20909C6[];
Class_Descriptor cd_S20909C6 = {  "S20909C6", // class name
  0,0,//no base classes
  &(vtc_S20909C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20909C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20909C6),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  S20909C8  : virtual S20909C3 {
  __tsi64 s20909c8f0;
  virtual void  v17(); // _ZN8S20909C83v17Ev
  virtual void  v18(); // _ZN8S20909C83v18Ev
  virtual void  v19(); // _ZN8S20909C83v19Ev
  virtual void  v20(); // _ZN8S20909C83v20Ev
  ~S20909C8(); // tgen
  S20909C8(); // tgen
};
//SIG(-1 S20909C8) C1{ VBC2{ v5 v6 v7 v8 v9 v10 v11 v12 v13} v1 v2 v3 v4 FL}


void  S20909C8 ::v17(){vfunc_called(this, "_ZN8S20909C83v17Ev");}
void  S20909C8 ::v18(){vfunc_called(this, "_ZN8S20909C83v18Ev");}
void  S20909C8 ::v19(){vfunc_called(this, "_ZN8S20909C83v19Ev");}
void  S20909C8 ::v20(){vfunc_called(this, "_ZN8S20909C83v20Ev");}
S20909C8 ::~S20909C8(){ note_dtor("S20909C8", this);} // tgen
S20909C8 ::S20909C8(){ note_ctor("S20909C8", this);} // tgen

static void Test_S20909C8()
{
  extern Class_Descriptor cd_S20909C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20909C8, buf);
    S20909C8 *dp, &lv = *(dp=new (buf) S20909C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20909C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20909C8)");
    check_base_class_offset(lv, (S20909C3*), 0, "S20909C8");
    check_field_offset(lv, s20909c8f0, ABISELECT(8,4), "S20909C8.s20909c8f0");
    test_class_info(&lv, &cd_S20909C8);
    dp->~S20909C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20909C8(Test_S20909C8, "S20909C8", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S20909C8C1Ev();
extern void _ZN8S20909C8D1Ev();
Name_Map name_map_S20909C8[] = {
  NSPAIR(_ZN8S20909C8C1Ev),
  NSPAIR(_ZN8S20909C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20909C3;
extern VTBL_ENTRY _ZTI8S20909C3[];
extern  VTBL_ENTRY _ZTV8S20909C3[];
static Base_Class bases_S20909C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20909C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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 _ZTI8S20909C8[];
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C83v17Ev();
extern void _ZN8S20909C83v18Ev();
extern void _ZN8S20909C83v19Ev();
extern void _ZN8S20909C83v20Ev();
static  VTBL_ENTRY vtc_S20909C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20909C8[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v19Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v20Ev,
};
extern VTBL_ENTRY _ZTV8S20909C8[];
static  VTT_ENTRY vtt_S20909C8[] = {
  {&(_ZTV8S20909C8[12]),  12,25},
  {&(_ZTV8S20909C8[12]),  12,25},
};
extern VTBL_ENTRY _ZTI8S20909C8[];
extern  VTBL_ENTRY _ZTV8S20909C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20909C8[];
Class_Descriptor cd_S20909C8 = {  "S20909C8", // class name
  bases_S20909C8, 1,
  &(vtc_S20909C8[0]), // expected_vtbl_contents
  &(vtt_S20909C8[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S20909C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20909C8),25, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20909C8),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20909C7  : S20909C3 , S20909C8 {
  virtual void  v21(); // _ZN8S20909C73v21Ev
  virtual void  v22(); // _ZN8S20909C73v22Ev
  ~S20909C7(); // tgen
  S20909C7(); // tgen
};
//SIG(-1 S20909C7) C1{ BC2{ v3 v4 v5 v6 v7 v8 v9 v10 v11} BC3{ VBC2 v12 v13 v14 v15 FL} v1 v2}


void  S20909C7 ::v21(){vfunc_called(this, "_ZN8S20909C73v21Ev");}
void  S20909C7 ::v22(){vfunc_called(this, "_ZN8S20909C73v22Ev");}
S20909C7 ::~S20909C7(){ note_dtor("S20909C7", this);} // tgen
S20909C7 ::S20909C7(){ note_ctor("S20909C7", this);} // tgen

static void Test_S20909C7()
{
  extern Class_Descriptor cd_S20909C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20909C7, buf);
    S20909C7 *dp, &lv = *(dp=new (buf) S20909C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20909C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20909C7)");
    /*is_ambiguous_... S20909C7::S20909C3 */ AMB_check_base_class_offset(lv, (S20909C3*), 0, "S20909C7");
    check_base_class_offset(lv, (S20909C3*)(S20909C8*), ABISELECT(8,4), "S20909C7");
    check_base_class_offset(lv, (S20909C8*), ABISELECT(8,4), "S20909C7");
    test_class_info(&lv, &cd_S20909C7);
    dp->~S20909C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20909C7(Test_S20909C7, "S20909C7", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S20909C7C1Ev();
extern void _ZN8S20909C7D1Ev();
Name_Map name_map_S20909C7[] = {
  NSPAIR(_ZN8S20909C7C1Ev),
  NSPAIR(_ZN8S20909C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20909C3;
extern VTBL_ENTRY _ZTI8S20909C3[];
extern  VTBL_ENTRY _ZTV8S20909C3[];
extern Class_Descriptor cd_S20909C3;
extern VTBL_ENTRY _ZTI8S20909C3[];
extern  VTBL_ENTRY _ZTV8S20909C3[];
extern Class_Descriptor cd_S20909C8;
extern VTBL_ENTRY _ZTI8S20909C8[];
extern  VTBL_ENTRY _ZTV8S20909C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20909C8[];
static Base_Class bases_S20909C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20909C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20909C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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
    2, //immediately_derived
  0, 1},
  {&cd_S20909C8,    ABISELECT(8,4), //bcp->offset
    14, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    4, //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 _ZTI8S20909C7[];
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C73v21Ev();
extern void _ZN8S20909C73v22Ev();
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C83v17Ev();
extern void _ZN8S20909C83v18Ev();
extern void _ZN8S20909C83v19Ev();
extern void _ZN8S20909C83v20Ev();
static  VTBL_ENTRY vtc_S20909C7[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20909C7[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v22Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20909C7[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v19Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v20Ev,
};
extern VTBL_ENTRY _ZTV8S20909C7[];
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C83v17Ev();
extern void _ZN8S20909C83v18Ev();
extern void _ZN8S20909C83v19Ev();
extern void _ZN8S20909C83v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C8__8S20909C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20909C8[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v19Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v20Ev,
};
static  VTT_ENTRY vtt_S20909C7[] = {
  {&(_ZTV8S20909C7[3]),  3,39},
  {&(_tg__ZTV8S20909C8__8S20909C7[12]),  12,25},
  {&(_tg__ZTV8S20909C8__8S20909C7[12]),  12,25},
  {&(_ZTV8S20909C7[26]),  26,39},
  {&(_ZTV8S20909C7[26]),  26,39},
};
extern VTBL_ENTRY _ZTI8S20909C7[];
extern  VTBL_ENTRY _ZTV8S20909C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20909C7[];
Class_Descriptor cd_S20909C7 = {  "S20909C7", // class name
  bases_S20909C7, 3,
  &(vtc_S20909C7[0]), // expected_vtbl_contents
  &(vtt_S20909C7[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S20909C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20909C7),39, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20909C7),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20909C5  : S20909C6 , S20909C7 {
  virtual  ~S20909C5(); // _ZN8S20909C5D2Ev
  virtual void  v23(); // _ZN8S20909C53v23Ev
  virtual void  v24(); // _ZN8S20909C53v24Ev
  S20909C5(); // tgen
};
//SIG(-1 S20909C5) C1{ BC2{ v3} BC3{ BC4{ v4 v5 v6 v7 v8 v9 v10 v11 v12} BC5{ VBC4 v13 v14 v15 v16 FL} v17 v18} vd v1 v2}


 S20909C5 ::~S20909C5(){ note_dtor("S20909C5", this);}
void  S20909C5 ::v23(){vfunc_called(this, "_ZN8S20909C53v23Ev");}
void  S20909C5 ::v24(){vfunc_called(this, "_ZN8S20909C53v24Ev");}
S20909C5 ::S20909C5(){ note_ctor("S20909C5", this);} // tgen

static void Test_S20909C5()
{
  extern Class_Descriptor cd_S20909C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S20909C5, buf);
    S20909C5 *dp, &lv = *(dp=new (buf) S20909C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S20909C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20909C5)");
    check_base_class_offset(lv, (S20909C6*), 0, "S20909C5");
    /*is_ambiguous_... S20909C7::S20909C3 */ AMB_check_base_class_offset(lv, (S20909C3*)(S20909C7*), ABISELECT(8,4), "S20909C5");
    check_base_class_offset(lv, (S20909C3*)(S20909C8*)(S20909C7*), ABISELECT(16,8), "S20909C5");
    check_base_class_offset(lv, (S20909C8*)(S20909C7*), ABISELECT(16,8), "S20909C5");
    check_base_class_offset(lv, (S20909C7*), ABISELECT(8,4), "S20909C5");
    test_class_info(&lv, &cd_S20909C5);
    dp->~S20909C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20909C5(Test_S20909C5, "S20909C5", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S20909C5C1Ev();
extern void _ZN8S20909C5D2Ev();
Name_Map name_map_S20909C5[] = {
  NSPAIR(_ZN8S20909C5C1Ev),
  NSPAIR(_ZN8S20909C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20909C6;
extern VTBL_ENTRY _ZTI8S20909C6[];
extern  VTBL_ENTRY _ZTV8S20909C6[];
extern Class_Descriptor cd_S20909C3;
extern VTBL_ENTRY _ZTI8S20909C3[];
extern  VTBL_ENTRY _ZTV8S20909C3[];
extern Class_Descriptor cd_S20909C3;
extern VTBL_ENTRY _ZTI8S20909C3[];
extern  VTBL_ENTRY _ZTV8S20909C3[];
extern Class_Descriptor cd_S20909C8;
extern VTBL_ENTRY _ZTI8S20909C8[];
extern  VTBL_ENTRY _ZTV8S20909C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20909C8[];
extern Class_Descriptor cd_S20909C7;
extern VTBL_ENTRY _ZTI8S20909C7[];
extern  VTBL_ENTRY _ZTV8S20909C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20909C7[];
static Base_Class bases_S20909C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20909C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20909C3,    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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20909C3,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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_S20909C8,    ABISELECT(16,8), //bcp->offset
    22, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20909C7,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //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 _ZTI8S20909C5[];
extern void _ZN8S20909C63v16Ev();
extern void _ZN8S20909C5D1Ev();
extern void _ZN8S20909C5D0Ev();
extern void _ZN8S20909C53v23Ev();
extern void _ZN8S20909C53v24Ev();
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C73v21Ev();
extern void _ZN8S20909C73v22Ev();
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C83v17Ev();
extern void _ZN8S20909C83v18Ev();
extern void _ZN8S20909C83v19Ev();
extern void _ZN8S20909C83v20Ev();
static  VTBL_ENTRY vtc_S20909C5[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20909C5[0]),
  (VTBL_ENTRY)&_ZN8S20909C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20909C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20909C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20909C53v23Ev,
  (VTBL_ENTRY)&_ZN8S20909C53v24Ev,
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20909C5[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v22Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20909C5[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v19Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v20Ev,
};
extern VTBL_ENTRY _ZTV8S20909C5[];
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C73v21Ev();
extern void _ZN8S20909C73v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C7__8S20909C5[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20909C7[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v22Ev,
};
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C83v17Ev();
extern void _ZN8S20909C83v18Ev();
extern void _ZN8S20909C83v19Ev();
extern void _ZN8S20909C83v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C88S20909C7__8S20909C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20909C8[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v19Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v20Ev,
};
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C83v17Ev();
extern void _ZN8S20909C83v18Ev();
extern void _ZN8S20909C83v19Ev();
extern void _ZN8S20909C83v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C8__8S20909C7__8S20909C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20909C7[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v19Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v20Ev,
};
static  VTT_ENTRY vtt_S20909C5[] = {
  {&(_ZTV8S20909C5[3]),  3,47},
  {&(_tg__ZTV8S20909C7__8S20909C5[3]),  3,14},
  {&(_tg__ZTV8S20909C88S20909C7__8S20909C5[12]),  12,25},
  {&(_tg__ZTV8S20909C88S20909C7__8S20909C5[12]),  12,25},
  {&(_tg__ZTV8S20909C8__8S20909C7__8S20909C5[12]),  12,25},
  {&(_tg__ZTV8S20909C8__8S20909C7__8S20909C5[12]),  12,25},
  {&(_ZTV8S20909C5[11]),  11,47},
  {&(_ZTV8S20909C5[34]),  34,47},
  {&(_ZTV8S20909C5[34]),  34,47},
};
extern VTBL_ENTRY _ZTI8S20909C5[];
extern  VTBL_ENTRY _ZTV8S20909C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20909C5[];
Class_Descriptor cd_S20909C5 = {  "S20909C5", // class name
  bases_S20909C5, 5,
  &(vtc_S20909C5[0]), // expected_vtbl_contents
  &(vtt_S20909C5[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S20909C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20909C5),47, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20909C5),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20909C9  {
  __tsi64 s20909c9f0;
  int s20909c9f1;
  virtual  ~S20909C9(); // _ZN8S20909C9D1Ev
  virtual void  v25(); // _ZN8S20909C93v25Ev
  virtual void  v26(); // _ZN8S20909C93v26Ev
  S20909C9(); // tgen
};
//SIG(-1 S20909C9) C1{ vd v1 v2 FL Fi}


 S20909C9 ::~S20909C9(){ note_dtor("S20909C9", this);}
void  S20909C9 ::v25(){vfunc_called(this, "_ZN8S20909C93v25Ev");}
void  S20909C9 ::v26(){vfunc_called(this, "_ZN8S20909C93v26Ev");}
S20909C9 ::S20909C9(){ note_ctor("S20909C9", this);} // tgen

static void Test_S20909C9()
{
  extern Class_Descriptor cd_S20909C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20909C9, buf);
    S20909C9 *dp, &lv = *(dp=new (buf) S20909C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20909C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20909C9)");
    check_field_offset(lv, s20909c9f0, ABISELECT(8,4), "S20909C9.s20909c9f0");
    check_field_offset(lv, s20909c9f1, ABISELECT(16,12), "S20909C9.s20909c9f1");
    test_class_info(&lv, &cd_S20909C9);
    dp->~S20909C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20909C9(Test_S20909C9, "S20909C9", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S20909C9C1Ev();
extern void _ZN8S20909C9D1Ev();
Name_Map name_map_S20909C9[] = {
  NSPAIR(_ZN8S20909C9C1Ev),
  NSPAIR(_ZN8S20909C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20909C9[];
extern void _ZN8S20909C9D1Ev();
extern void _ZN8S20909C9D0Ev();
extern void _ZN8S20909C93v25Ev();
extern void _ZN8S20909C93v26Ev();
static  VTBL_ENTRY vtc_S20909C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20909C9[0]),
  (VTBL_ENTRY)&_ZN8S20909C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20909C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20909C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20909C93v26Ev,
};
extern VTBL_ENTRY _ZTI8S20909C9[];
extern  VTBL_ENTRY _ZTV8S20909C9[];
Class_Descriptor cd_S20909C9 = {  "S20909C9", // class name
  0,0,//no base classes
  &(vtc_S20909C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S20909C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20909C9),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  S20909C4  : S20909C5 , virtual S20909C9 {
  int s20909c4f0;
  ::S20909C6 s20909c4f1;
  virtual  ~S20909C4(); // _ZN8S20909C4D2Ev
  virtual void  v27(); // _ZN8S20909C43v27Ev
  virtual void  v28(); // _ZN8S20909C43v28Ev
  virtual void  v29(); // _ZN8S20909C43v29Ev
  virtual void  v30(); // _ZN8S20909C43v30Ev
  virtual void  v31(); // _ZN8S20909C43v31Ev
  S20909C4(); // tgen
};
//SIG(-1 S20909C4) C1{ BC2{ BC3{ v6} BC4{ BC5{ v7 v8 v9 v10 v11 v12 v13 v14 v15} BC6{ VBC5 v16 v17 v18 v19 FL} v20 v21} vd v22 v23} VBC7{ vd v24 v25 FL Fi} vd v1 v2 v3 v4 v5 Fi FC3}


 S20909C4 ::~S20909C4(){ note_dtor("S20909C4", this);}
void  S20909C4 ::v27(){vfunc_called(this, "_ZN8S20909C43v27Ev");}
void  S20909C4 ::v28(){vfunc_called(this, "_ZN8S20909C43v28Ev");}
void  S20909C4 ::v29(){vfunc_called(this, "_ZN8S20909C43v29Ev");}
void  S20909C4 ::v30(){vfunc_called(this, "_ZN8S20909C43v30Ev");}
void  S20909C4 ::v31(){vfunc_called(this, "_ZN8S20909C43v31Ev");}
S20909C4 ::S20909C4(){ note_ctor("S20909C4", this);} // tgen

static void Test_S20909C4()
{
  extern Class_Descriptor cd_S20909C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S20909C4, buf);
    S20909C4 *dp, &lv = *(dp=new (buf) S20909C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S20909C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20909C4)");
    check_base_class_offset(lv, (S20909C6*)(S20909C5*), 0, "S20909C4");
    /*is_ambiguous_... S20909C7::S20909C3 */ AMB_check_base_class_offset(lv, (S20909C3*)(S20909C7*)(S20909C5*), ABISELECT(8,4), "S20909C4");
    check_base_class_offset(lv, (S20909C3*)(S20909C8*)(S20909C7*)(S20909C5*), ABISELECT(16,8), "S20909C4");
    check_base_class_offset(lv, (S20909C8*)(S20909C7*)(S20909C5*), ABISELECT(16,8), "S20909C4");
    check_base_class_offset(lv, (S20909C7*)(S20909C5*), ABISELECT(8,4), "S20909C4");
    check_base_class_offset(lv, (S20909C5*), 0, "S20909C4");
    check_base_class_offset(lv, (S20909C9*), ABISELECT(48,28), "S20909C4");
    check_field_offset(lv, s20909c4f0, ABISELECT(32,20), "S20909C4.s20909c4f0");
    check_field_offset(lv, s20909c4f1, ABISELECT(40,24), "S20909C4.s20909c4f1");
    test_class_info(&lv, &cd_S20909C4);
    dp->~S20909C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20909C4(Test_S20909C4, "S20909C4", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN8S20909C4C1Ev();
extern void _ZN8S20909C4D2Ev();
Name_Map name_map_S20909C4[] = {
  NSPAIR(_ZN8S20909C4C1Ev),
  NSPAIR(_ZN8S20909C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20909C6;
extern VTBL_ENTRY _ZTI8S20909C6[];
extern  VTBL_ENTRY _ZTV8S20909C6[];
extern Class_Descriptor cd_S20909C3;
extern VTBL_ENTRY _ZTI8S20909C3[];
extern  VTBL_ENTRY _ZTV8S20909C3[];
extern Class_Descriptor cd_S20909C3;
extern VTBL_ENTRY _ZTI8S20909C3[];
extern  VTBL_ENTRY _ZTV8S20909C3[];
extern Class_Descriptor cd_S20909C8;
extern VTBL_ENTRY _ZTI8S20909C8[];
extern  VTBL_ENTRY _ZTV8S20909C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20909C8[];
extern Class_Descriptor cd_S20909C7;
extern VTBL_ENTRY _ZTI8S20909C7[];
extern  VTBL_ENTRY _ZTV8S20909C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20909C7[];
extern Class_Descriptor cd_S20909C5;
extern VTBL_ENTRY _ZTI8S20909C5[];
extern  VTBL_ENTRY _ZTV8S20909C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20909C5[];
extern Class_Descriptor cd_S20909C9;
extern VTBL_ENTRY _ZTI8S20909C9[];
extern  VTBL_ENTRY _ZTV8S20909C9[];
static Base_Class bases_S20909C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20909C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S20909C3,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20909C3,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20909C8,    ABISELECT(16,8), //bcp->offset
    28, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20909C7,    ABISELECT(8,4), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20909C5,    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_S20909C9,    ABISELECT(48,28), //bcp->offset
    53, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //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 _ZTI8S20909C4[];
extern void _ZN8S20909C63v16Ev();
extern void _ZN8S20909C4D1Ev();
extern void _ZN8S20909C4D0Ev();
extern void _ZN8S20909C53v23Ev();
extern void _ZN8S20909C53v24Ev();
extern void _ZN8S20909C43v27Ev();
extern void _ZN8S20909C43v28Ev();
extern void _ZN8S20909C43v29Ev();
extern void _ZN8S20909C43v30Ev();
extern void _ZN8S20909C43v31Ev();
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C73v21Ev();
extern void _ZN8S20909C73v22Ev();
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C83v17Ev();
extern void _ZN8S20909C83v18Ev();
extern void _ZN8S20909C83v19Ev();
extern void _ZN8S20909C83v20Ev();
extern void ABISELECT(_ZTv0_n24_N8S20909C4D1Ev,_ZTv0_n12_N8S20909C4D1Ev)();
extern void ABISELECT(_ZThn48_N8S20909C4D1Ev,_ZThn28_N8S20909C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20909C4D0Ev,_ZTv0_n12_N8S20909C4D0Ev)();
extern void ABISELECT(_ZThn48_N8S20909C4D0Ev,_ZThn28_N8S20909C4D0Ev)() __attribute__((weak));
extern void _ZN8S20909C93v25Ev();
extern void _ZN8S20909C93v26Ev();
static  VTBL_ENTRY vtc_S20909C4[] = {
  ABISELECT(48,28),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20909C4[0]),
  (VTBL_ENTRY)&_ZN8S20909C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20909C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20909C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20909C53v23Ev,
  (VTBL_ENTRY)&_ZN8S20909C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v31Ev,
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20909C4[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v22Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20909C4[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v19Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v20Ev,
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20909C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20909C4D1Ev,_ZTv0_n12_N8S20909C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20909C4D0Ev,_ZTv0_n12_N8S20909C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20909C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20909C93v26Ev,
};
extern VTBL_ENTRY _ZTV8S20909C4[];
extern void _ZN8S20909C63v16Ev();
extern void _ZN8S20909C5D1Ev();
extern void _ZN8S20909C5D0Ev();
extern void _ZN8S20909C53v23Ev();
extern void _ZN8S20909C53v24Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C5__8S20909C4[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20909C5[0]),
  (VTBL_ENTRY)&_ZN8S20909C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20909C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20909C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20909C53v23Ev,
  (VTBL_ENTRY)&_ZN8S20909C53v24Ev,
};
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C73v21Ev();
extern void _ZN8S20909C73v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C78S20909C5__8S20909C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20909C7[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v22Ev,
};
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C83v17Ev();
extern void _ZN8S20909C83v18Ev();
extern void _ZN8S20909C83v19Ev();
extern void _ZN8S20909C83v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C88S20909C78S20909C5__8S20909C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20909C8[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v19Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v20Ev,
};
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C83v17Ev();
extern void _ZN8S20909C83v18Ev();
extern void _ZN8S20909C83v19Ev();
extern void _ZN8S20909C83v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C8__8S20909C78S20909C5__8S20909C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20909C7[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v19Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v20Ev,
};
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C73v21Ev();
extern void _ZN8S20909C73v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C7__8S20909C5__8S20909C4[] = {
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20909C5[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v22Ev,
};
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C83v17Ev();
extern void _ZN8S20909C83v18Ev();
extern void _ZN8S20909C83v19Ev();
extern void _ZN8S20909C83v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C88S20909C7__8S20909C5__8S20909C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20909C5[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v19Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v20Ev,
};
static  VTT_ENTRY vtt_S20909C4[] = {
  {&(_ZTV8S20909C4[4]),  4,62},
  {&(_tg__ZTV8S20909C5__8S20909C4[3]),  3,8},
  {&(_tg__ZTV8S20909C78S20909C5__8S20909C4[3]),  3,14},
  {&(_tg__ZTV8S20909C88S20909C78S20909C5__8S20909C4[12]),  12,25},
  {&(_tg__ZTV8S20909C88S20909C78S20909C5__8S20909C4[12]),  12,25},
  {&(_tg__ZTV8S20909C8__8S20909C78S20909C5__8S20909C4[12]),  12,25},
  {&(_tg__ZTV8S20909C8__8S20909C78S20909C5__8S20909C4[12]),  12,25},
  {&(_tg__ZTV8S20909C7__8S20909C5__8S20909C4[3]),  3,14},
  {&(_tg__ZTV8S20909C88S20909C7__8S20909C5__8S20909C4[12]),  12,25},
  {&(_tg__ZTV8S20909C88S20909C7__8S20909C5__8S20909C4[12]),  12,25},
  {&(_ZTV8S20909C4[17]),  17,62},
  {&(_ZTV8S20909C4[40]),  40,62},
  {&(_ZTV8S20909C4[40]),  40,62},
  {&(_ZTV8S20909C4[58]),  58,62},
};
extern VTBL_ENTRY _ZTI8S20909C4[];
extern  VTBL_ENTRY _ZTV8S20909C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20909C4[];
static VTBL_ENTRY alt_thunk_names90[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20909C4D0Ev,_ZTv0_n12_N8S20909C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20909C4D0Ev,_ZThn28_N8S20909C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20909C4D1Ev,_ZTv0_n12_N8S20909C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20909C4D1Ev,_ZThn28_N8S20909C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20909C4 = {  "S20909C4", // class name
  bases_S20909C4, 7,
  &(vtc_S20909C4[0]), // expected_vtbl_contents
  &(vtt_S20909C4[0]), // expected_vtt_contents
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI8S20909C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20909C4),62, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20909C4),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names90,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20909C2  : virtual S20909C3 , S20909C4 {
  ::S5266C29 s20909c2f0;
  virtual  ~S20909C2(); // _ZN8S20909C2D2Ev
  virtual void  v32(); // _ZN8S20909C23v32Ev
  virtual void  v33(); // _ZN8S20909C23v33Ev
  S20909C2(); // tgen
};
//SIG(-1 S20909C2) C1{ VBC2{ v3 v4 v5 v6 v7 v8 v9 v10 v11} BC3{ BC4{ BC5{ v12} BC6{ BC2 BC7{ VBC2 v13 v14 v15 v16 FL} v17 v18} vd v19 v20} VBC8{ vd v21 v22 FL Fi} vd v23 v24 v25 v26 v27 Fi FC5} vd v1 v2 FC9{ m}}


 S20909C2 ::~S20909C2(){ note_dtor("S20909C2", this);}
void  S20909C2 ::v32(){vfunc_called(this, "_ZN8S20909C23v32Ev");}
void  S20909C2 ::v33(){vfunc_called(this, "_ZN8S20909C23v33Ev");}
S20909C2 ::S20909C2(){ note_ctor("S20909C2", this);} // tgen

static void Test_S20909C2()
{
  extern Class_Descriptor cd_S20909C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S20909C2, buf);
    S20909C2 *dp, &lv = *(dp=new (buf) S20909C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S20909C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20909C2)");
    /*is_ambiguous_... S20909C2::S20909C3 */ AMB_check_base_class_offset(lv, (S20909C3*), ABISELECT(16,8), "S20909C2");
    check_base_class_offset(lv, (S20909C3*)(S20909C8*)(S20909C7*)(S20909C5*)(S20909C4*), ABISELECT(16,8), "S20909C2");
    check_base_class_offset(lv, (S20909C6*)(S20909C5*)(S20909C4*), 0, "S20909C2");
    /*is_ambiguous_... S20909C7::S20909C3 */ AMB_check_base_class_offset(lv, (S20909C3*)(S20909C7*)(S20909C5*)(S20909C4*), ABISELECT(8,4), "S20909C2");
    check_base_class_offset(lv, (S20909C8*)(S20909C7*)(S20909C5*)(S20909C4*), ABISELECT(16,8), "S20909C2");
    check_base_class_offset(lv, (S20909C7*)(S20909C5*)(S20909C4*), ABISELECT(8,4), "S20909C2");
    check_base_class_offset(lv, (S20909C5*)(S20909C4*), 0, "S20909C2");
    check_base_class_offset(lv, (S20909C9*)(S20909C4*), ABISELECT(56,32), "S20909C2");
    check_base_class_offset(lv, (S20909C4*), 0, "S20909C2");
    check_field_offset(lv, s20909c2f0, ABISELECT(48,28), "S20909C2.s20909c2f0");
    test_class_info(&lv, &cd_S20909C2);
    dp->~S20909C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20909C2(Test_S20909C2, "S20909C2", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN8S20909C2C1Ev();
extern void _ZN8S20909C2D2Ev();
Name_Map name_map_S20909C2[] = {
  NSPAIR(_ZN8S20909C2C1Ev),
  NSPAIR(_ZN8S20909C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20909C3;
extern VTBL_ENTRY _ZTI8S20909C3[];
extern  VTBL_ENTRY _ZTV8S20909C3[];
extern Class_Descriptor cd_S20909C6;
extern VTBL_ENTRY _ZTI8S20909C6[];
extern  VTBL_ENTRY _ZTV8S20909C6[];
extern Class_Descriptor cd_S20909C3;
extern VTBL_ENTRY _ZTI8S20909C3[];
extern  VTBL_ENTRY _ZTV8S20909C3[];
extern Class_Descriptor cd_S20909C8;
extern VTBL_ENTRY _ZTI8S20909C8[];
extern  VTBL_ENTRY _ZTV8S20909C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20909C8[];
extern Class_Descriptor cd_S20909C7;
extern VTBL_ENTRY _ZTI8S20909C7[];
extern  VTBL_ENTRY _ZTV8S20909C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20909C7[];
extern Class_Descriptor cd_S20909C5;
extern VTBL_ENTRY _ZTI8S20909C5[];
extern  VTBL_ENTRY _ZTV8S20909C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20909C5[];
extern Class_Descriptor cd_S20909C9;
extern VTBL_ENTRY _ZTI8S20909C9[];
extern  VTBL_ENTRY _ZTV8S20909C9[];
extern Class_Descriptor cd_S20909C4;
extern VTBL_ENTRY _ZTI8S20909C4[];
extern  VTBL_ENTRY _ZTV8S20909C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20909C4[];
static Base_Class bases_S20909C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20909C3,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20909C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S20909C3,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20909C8,    ABISELECT(16,8), //bcp->offset
    30, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20909C7,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20909C5,    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
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20909C9,    ABISELECT(56,32), //bcp->offset
    55, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20909C4,    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 _ZTI8S20909C2[];
extern void _ZN8S20909C63v16Ev();
extern void _ZN8S20909C2D1Ev();
extern void _ZN8S20909C2D0Ev();
extern void _ZN8S20909C53v23Ev();
extern void _ZN8S20909C53v24Ev();
extern void _ZN8S20909C43v27Ev();
extern void _ZN8S20909C43v28Ev();
extern void _ZN8S20909C43v29Ev();
extern void _ZN8S20909C43v30Ev();
extern void _ZN8S20909C43v31Ev();
extern void _ZN8S20909C23v32Ev();
extern void _ZN8S20909C23v33Ev();
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C73v21Ev();
extern void _ZN8S20909C73v22Ev();
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C83v17Ev();
extern void _ZN8S20909C83v18Ev();
extern void _ZN8S20909C83v19Ev();
extern void _ZN8S20909C83v20Ev();
extern void ABISELECT(_ZTv0_n24_N8S20909C2D1Ev,_ZTv0_n12_N8S20909C2D1Ev)();
extern void ABISELECT(_ZThn56_N8S20909C2D1Ev,_ZThn32_N8S20909C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20909C2D0Ev,_ZTv0_n12_N8S20909C2D0Ev)();
extern void ABISELECT(_ZThn56_N8S20909C2D0Ev,_ZThn32_N8S20909C2D0Ev)() __attribute__((weak));
extern void _ZN8S20909C93v25Ev();
extern void _ZN8S20909C93v26Ev();
static  VTBL_ENTRY vtc_S20909C2[] = {
  ABISELECT(56,32),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20909C2[0]),
  (VTBL_ENTRY)&_ZN8S20909C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20909C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20909C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20909C53v23Ev,
  (VTBL_ENTRY)&_ZN8S20909C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v31Ev,
  (VTBL_ENTRY)&_ZN8S20909C23v32Ev,
  (VTBL_ENTRY)&_ZN8S20909C23v33Ev,
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20909C2[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v22Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20909C2[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v19Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v20Ev,
  0,
  0,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S20909C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20909C2D1Ev,_ZTv0_n12_N8S20909C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20909C2D0Ev,_ZTv0_n12_N8S20909C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20909C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20909C93v26Ev,
};
extern VTBL_ENTRY _ZTV8S20909C2[];
extern void _ZN8S20909C63v16Ev();
extern void _ZN8S20909C4D1Ev();
extern void _ZN8S20909C4D0Ev();
extern void _ZN8S20909C53v23Ev();
extern void _ZN8S20909C53v24Ev();
extern void _ZN8S20909C43v27Ev();
extern void _ZN8S20909C43v28Ev();
extern void _ZN8S20909C43v29Ev();
extern void _ZN8S20909C43v30Ev();
extern void _ZN8S20909C43v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C4__8S20909C2[] = {
  ABISELECT(56,32),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20909C4[0]),
  (VTBL_ENTRY)&_ZN8S20909C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20909C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20909C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20909C53v23Ev,
  (VTBL_ENTRY)&_ZN8S20909C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v31Ev,
};
extern void _ZN8S20909C63v16Ev();
extern void _ZN8S20909C5D1Ev();
extern void _ZN8S20909C5D0Ev();
extern void _ZN8S20909C53v23Ev();
extern void _ZN8S20909C53v24Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C58S20909C4__8S20909C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20909C5[0]),
  (VTBL_ENTRY)&_ZN8S20909C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20909C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20909C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20909C53v23Ev,
  (VTBL_ENTRY)&_ZN8S20909C53v24Ev,
};
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C73v21Ev();
extern void _ZN8S20909C73v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C78S20909C58S20909C4__8S20909C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20909C7[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v22Ev,
};
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C83v17Ev();
extern void _ZN8S20909C83v18Ev();
extern void _ZN8S20909C83v19Ev();
extern void _ZN8S20909C83v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C88S20909C78S20909C58S20909C4__8S20909C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20909C8[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v19Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v20Ev,
};
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C83v17Ev();
extern void _ZN8S20909C83v18Ev();
extern void _ZN8S20909C83v19Ev();
extern void _ZN8S20909C83v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C8__8S20909C78S20909C58S20909C4__8S20909C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20909C7[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v19Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v20Ev,
};
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C73v21Ev();
extern void _ZN8S20909C73v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C7__8S20909C58S20909C4__8S20909C2[] = {
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20909C5[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v22Ev,
};
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C83v17Ev();
extern void _ZN8S20909C83v18Ev();
extern void _ZN8S20909C83v19Ev();
extern void _ZN8S20909C83v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C88S20909C7__8S20909C58S20909C4__8S20909C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20909C5[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v19Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v20Ev,
};
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C73v21Ev();
extern void _ZN8S20909C73v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C78S20909C5__8S20909C4__8S20909C2[] = {
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20909C4[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v22Ev,
};
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C83v17Ev();
extern void _ZN8S20909C83v18Ev();
extern void _ZN8S20909C83v19Ev();
extern void _ZN8S20909C83v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C88S20909C78S20909C5__8S20909C4__8S20909C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20909C4[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v19Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v20Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20909C4D1Ev,_ZTv0_n12_N8S20909C4D1Ev)();
extern void ABISELECT(_ZThn56_N8S20909C4D1Ev,_ZThn32_N8S20909C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20909C4D0Ev,_ZTv0_n12_N8S20909C4D0Ev)();
extern void ABISELECT(_ZThn56_N8S20909C4D0Ev,_ZThn32_N8S20909C4D0Ev)() __attribute__((weak));
extern void _ZN8S20909C93v25Ev();
extern void _ZN8S20909C93v26Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C9__8S20909C4__8S20909C2[] = {
  0,
  0,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S20909C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20909C4D1Ev,_ZTv0_n12_N8S20909C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20909C4D0Ev,_ZTv0_n12_N8S20909C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20909C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20909C93v26Ev,
};
static  VTT_ENTRY vtt_S20909C2[] = {
  {&(_ZTV8S20909C2[4]),  4,64},
  {&(_tg__ZTV8S20909C4__8S20909C2[4]),  4,14},
  {&(_tg__ZTV8S20909C58S20909C4__8S20909C2[3]),  3,8},
  {&(_tg__ZTV8S20909C78S20909C58S20909C4__8S20909C2[3]),  3,14},
  {&(_tg__ZTV8S20909C88S20909C78S20909C58S20909C4__8S20909C2[12]),  12,25},
  {&(_tg__ZTV8S20909C88S20909C78S20909C58S20909C4__8S20909C2[12]),  12,25},
  {&(_tg__ZTV8S20909C8__8S20909C78S20909C58S20909C4__8S20909C2[12]),  12,25},
  {&(_tg__ZTV8S20909C8__8S20909C78S20909C58S20909C4__8S20909C2[12]),  12,25},
  {&(_tg__ZTV8S20909C7__8S20909C58S20909C4__8S20909C2[3]),  3,14},
  {&(_tg__ZTV8S20909C88S20909C7__8S20909C58S20909C4__8S20909C2[12]),  12,25},
  {&(_tg__ZTV8S20909C88S20909C7__8S20909C58S20909C4__8S20909C2[12]),  12,25},
  {&(_tg__ZTV8S20909C78S20909C5__8S20909C4__8S20909C2[3]),  3,14},
  {&(_tg__ZTV8S20909C88S20909C78S20909C5__8S20909C4__8S20909C2[12]),  12,25},
  {&(_tg__ZTV8S20909C88S20909C78S20909C5__8S20909C4__8S20909C2[12]),  12,25},
  {&(_tg__ZTV8S20909C9__8S20909C4__8S20909C2[5]),  5,9},
  {&(_ZTV8S20909C2[42]),  42,64},
  {&(_ZTV8S20909C2[19]),  19,64},
  {&(_ZTV8S20909C2[42]),  42,64},
  {&(_ZTV8S20909C2[60]),  60,64},
};
extern VTBL_ENTRY _ZTI8S20909C2[];
extern  VTBL_ENTRY _ZTV8S20909C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20909C2[];
static VTBL_ENTRY alt_thunk_names91[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20909C4D0Ev,_ZTv0_n12_N8S20909C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20909C4D0Ev,_ZThn32_N8S20909C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20909C4D1Ev,_ZTv0_n12_N8S20909C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20909C4D1Ev,_ZThn32_N8S20909C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20909C2D0Ev,_ZTv0_n12_N8S20909C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20909C2D0Ev,_ZThn32_N8S20909C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20909C2D1Ev,_ZTv0_n12_N8S20909C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20909C2D1Ev,_ZThn32_N8S20909C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20909C2 = {  "S20909C2", // class name
  bases_S20909C2, 8,
  &(vtc_S20909C2[0]), // expected_vtbl_contents
  &(vtt_S20909C2[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI8S20909C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20909C2),64, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20909C2),19, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names91,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20909C11_nt  {
  virtual void  v34(); // _ZN12S20909C11_nt3v34Ev
  virtual void  v35(); // _ZN12S20909C11_nt3v35Ev
  virtual void  v36(); // _ZN12S20909C11_nt3v36Ev
  ~S20909C11_nt(); // tgen
  S20909C11_nt(); // tgen
};
//SIG(-1 S20909C11_nt) C1{ v1 v2 v3}


void  S20909C11_nt ::v34(){vfunc_called(this, "_ZN12S20909C11_nt3v34Ev");}
void  S20909C11_nt ::v35(){vfunc_called(this, "_ZN12S20909C11_nt3v35Ev");}
void  S20909C11_nt ::v36(){vfunc_called(this, "_ZN12S20909C11_nt3v36Ev");}
S20909C11_nt ::~S20909C11_nt(){ note_dtor("S20909C11_nt", this);} // tgen
S20909C11_nt ::S20909C11_nt(){ note_ctor("S20909C11_nt", this);} // tgen

//skip512 S20909C11_nt

#else // __cplusplus

extern void _ZN12S20909C11_ntC1Ev();
extern void _ZN12S20909C11_ntD1Ev();
Name_Map name_map_S20909C11_nt[] = {
  NSPAIR(_ZN12S20909C11_ntC1Ev),
  NSPAIR(_ZN12S20909C11_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI12S20909C11_nt[];
extern void _ZN12S20909C11_nt3v34Ev();
extern void _ZN12S20909C11_nt3v35Ev();
extern void _ZN12S20909C11_nt3v36Ev();
static  VTBL_ENTRY vtc_S20909C11_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S20909C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20909C11_nt3v34Ev,
  (VTBL_ENTRY)&_ZN12S20909C11_nt3v35Ev,
  (VTBL_ENTRY)&_ZN12S20909C11_nt3v36Ev,
};
extern VTBL_ENTRY _ZTI12S20909C11_nt[];
VTBL_ENTRY *P__ZTI12S20909C11_nt = _ZTI12S20909C11_nt; 
extern  VTBL_ENTRY _ZTV12S20909C11_nt[];
Class_Descriptor cd_S20909C11_nt = {  "S20909C11_nt", // class name
  0,0,//no base classes
  &(vtc_S20909C11_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI12S20909C11_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV12S20909C11_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  S20909C1  : virtual S20909C2 , virtual S20909C11_nt {
  virtual void  v1(); // _ZN8S20909C12v1Ev
  virtual void  v2(); // _ZN8S20909C12v2Ev
  virtual void  v3(); // _ZN8S20909C12v3Ev
  virtual void  v4(); // _ZN8S20909C12v4Ev
  virtual void  v5(); // _ZN8S20909C12v5Ev
  virtual void  v6(); // _ZN8S20909C12v6Ev
  ~S20909C1(); // tgen
  S20909C1(); // tgen
};
//SIG(1 S20909C1) C1{ VBC2{ VBC3{ v7 v8 v9 v10 v11 v12 v13 v14 v15} BC4{ BC5{ BC6{ v16} BC7{ BC3 BC8{ VBC3 v17 v18 v19 v20 FL} v21 v22} vd v23 v24} VBC9{ vd v25 v26 FL Fi} vd v27 v28 v29 v30 v31 Fi FC6} vd v32 v33 FC10{ m}} VBC11{ v34 v35 v36} v1 v2 v3 v4 v5 v6}


void  S20909C1 ::v1(){vfunc_called(this, "_ZN8S20909C12v1Ev");}
void  S20909C1 ::v2(){vfunc_called(this, "_ZN8S20909C12v2Ev");}
void  S20909C1 ::v3(){vfunc_called(this, "_ZN8S20909C12v3Ev");}
void  S20909C1 ::v4(){vfunc_called(this, "_ZN8S20909C12v4Ev");}
void  S20909C1 ::v5(){vfunc_called(this, "_ZN8S20909C12v5Ev");}
void  S20909C1 ::v6(){vfunc_called(this, "_ZN8S20909C12v6Ev");}
S20909C1 ::~S20909C1(){ note_dtor("S20909C1", this);} // tgen
S20909C1 ::S20909C1(){ note_ctor("S20909C1", this);} // tgen

static void Test_S20909C1()
{
  extern Class_Descriptor cd_S20909C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S20909C1, buf);
    S20909C1 *dp, &lv = *(dp=new (buf) S20909C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S20909C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20909C1)");
    /*is_ambiguous_... S20909C2::S20909C3 */ AMB_check_base_class_offset(lv, (S20909C3*)(S20909C2*), ABISELECT(24,12), "S20909C1");
    check_base_class_offset(lv, (S20909C3*)(S20909C8*)(S20909C7*)(S20909C5*)(S20909C4*)(S20909C2*), ABISELECT(24,12), "S20909C1");
    check_base_class_offset(lv, (S20909C6*)(S20909C5*)(S20909C4*)(S20909C2*), ABISELECT(8,4), "S20909C1");
    /*is_ambiguous_... S20909C7::S20909C3 */ AMB_check_base_class_offset(lv, (S20909C3*)(S20909C7*)(S20909C5*)(S20909C4*)(S20909C2*), ABISELECT(16,8), "S20909C1");
    check_base_class_offset(lv, (S20909C8*)(S20909C7*)(S20909C5*)(S20909C4*)(S20909C2*), ABISELECT(24,12), "S20909C1");
    check_base_class_offset(lv, (S20909C7*)(S20909C5*)(S20909C4*)(S20909C2*), ABISELECT(16,8), "S20909C1");
    check_base_class_offset(lv, (S20909C5*)(S20909C4*)(S20909C2*), ABISELECT(8,4), "S20909C1");
    check_base_class_offset(lv, (S20909C9*)(S20909C4*)(S20909C2*), ABISELECT(64,36), "S20909C1");
    check_base_class_offset(lv, (S20909C4*)(S20909C2*), ABISELECT(8,4), "S20909C1");
    check_base_class_offset(lv, (S20909C2*), ABISELECT(8,4), "S20909C1");
    check_base_class_offset(lv, (S20909C11_nt*), 0, "S20909C1");
    test_class_info(&lv, &cd_S20909C1);
    dp->~S20909C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20909C1(Test_S20909C1, "S20909C1", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN8S20909C1C1Ev();
extern void _ZN8S20909C1D1Ev();
Name_Map name_map_S20909C1[] = {
  NSPAIR(_ZN8S20909C1C1Ev),
  NSPAIR(_ZN8S20909C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20909C3;
extern VTBL_ENTRY _ZTI8S20909C3[];
extern  VTBL_ENTRY _ZTV8S20909C3[];
extern Class_Descriptor cd_S20909C6;
extern VTBL_ENTRY _ZTI8S20909C6[];
extern  VTBL_ENTRY _ZTV8S20909C6[];
extern Class_Descriptor cd_S20909C3;
extern VTBL_ENTRY _ZTI8S20909C3[];
extern  VTBL_ENTRY _ZTV8S20909C3[];
extern Class_Descriptor cd_S20909C8;
extern VTBL_ENTRY _ZTI8S20909C8[];
extern  VTBL_ENTRY _ZTV8S20909C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20909C8[];
extern Class_Descriptor cd_S20909C7;
extern VTBL_ENTRY _ZTI8S20909C7[];
extern  VTBL_ENTRY _ZTV8S20909C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20909C7[];
extern Class_Descriptor cd_S20909C5;
extern VTBL_ENTRY _ZTI8S20909C5[];
extern  VTBL_ENTRY _ZTV8S20909C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20909C5[];
extern Class_Descriptor cd_S20909C9;
extern VTBL_ENTRY _ZTI8S20909C9[];
extern  VTBL_ENTRY _ZTV8S20909C9[];
extern Class_Descriptor cd_S20909C4;
extern VTBL_ENTRY _ZTI8S20909C4[];
extern  VTBL_ENTRY _ZTV8S20909C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20909C4[];
extern Class_Descriptor cd_S20909C2;
extern VTBL_ENTRY _ZTI8S20909C2[];
extern  VTBL_ENTRY _ZTV8S20909C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20909C2[];
extern Class_Descriptor cd_S20909C11_nt;
extern VTBL_ENTRY _ZTI12S20909C11_nt[];
extern  VTBL_ENTRY _ZTV12S20909C11_nt[];
static Base_Class bases_S20909C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20909C3,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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_S20909C6,    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
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20909C3,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20909C8,    ABISELECT(24,12), //bcp->offset
    76, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20909C7,    ABISELECT(16,8), //bcp->offset
    62, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20909C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20909C9,    ABISELECT(64,36), //bcp->offset
    101, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20909C4,    ABISELECT(8,4), //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
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20909C2,    ABISELECT(8,4), //bcp->offset
    20, //bcp->virtual_function_table_offset
    30, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20909C11_nt,    0, //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
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20909C1[];
extern void _ZN12S20909C11_nt3v34Ev();
extern void _ZN12S20909C11_nt3v35Ev();
extern void _ZN12S20909C11_nt3v36Ev();
extern void _ZN8S20909C12v1Ev();
extern void _ZN8S20909C12v2Ev();
extern void _ZN8S20909C12v3Ev();
extern void _ZN8S20909C12v4Ev();
extern void _ZN8S20909C12v5Ev();
extern void _ZN8S20909C12v6Ev();
extern void _ZN8S20909C1D1Ev();
extern void _ZN8S20909C1D0Ev();
extern void _ZN8S20909C63v16Ev();
extern void ABISELECT(_ZTv0_n48_N8S20909C1D1Ev,_ZTv0_n24_N8S20909C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20909C1D1Ev,_ZThn4_N8S20909C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20909C1D0Ev,_ZTv0_n24_N8S20909C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S20909C1D0Ev,_ZThn4_N8S20909C1D0Ev)() __attribute__((weak));
extern void _ZN8S20909C53v23Ev();
extern void _ZN8S20909C53v24Ev();
extern void _ZN8S20909C43v27Ev();
extern void _ZN8S20909C43v28Ev();
extern void _ZN8S20909C43v29Ev();
extern void _ZN8S20909C43v30Ev();
extern void _ZN8S20909C43v31Ev();
extern void _ZN8S20909C23v32Ev();
extern void _ZN8S20909C23v33Ev();
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C73v21Ev();
extern void _ZN8S20909C73v22Ev();
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C83v17Ev();
extern void _ZN8S20909C83v18Ev();
extern void _ZN8S20909C83v19Ev();
extern void _ZN8S20909C83v20Ev();
extern void ABISELECT(_ZTv0_n24_N8S20909C1D1Ev,_ZTv0_n12_N8S20909C1D1Ev)();
extern void ABISELECT(_ZThn64_N8S20909C1D1Ev,_ZThn36_N8S20909C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20909C1D0Ev,_ZTv0_n12_N8S20909C1D0Ev)();
extern void ABISELECT(_ZThn64_N8S20909C1D0Ev,_ZThn36_N8S20909C1D0Ev)() __attribute__((weak));
extern void _ZN8S20909C93v25Ev();
extern void _ZN8S20909C93v26Ev();
static  VTBL_ENTRY vtc_S20909C1[] = {
  0,
  ABISELECT(64,36),
  ABISELECT(24,12),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20909C1[0]),
  (VTBL_ENTRY)&_ZN12S20909C11_nt3v34Ev,
  (VTBL_ENTRY)&_ZN12S20909C11_nt3v35Ev,
  (VTBL_ENTRY)&_ZN12S20909C11_nt3v36Ev,
  (VTBL_ENTRY)&_ZN8S20909C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20909C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20909C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20909C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20909C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20909C12v6Ev,
  (VTBL_ENTRY)&_ZN8S20909C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20909C1D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  ABISELECT(-8,-4),
  0,
  ABISELECT(56,32),
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20909C1[0]),
  (VTBL_ENTRY)&_ZN8S20909C63v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20909C1D1Ev,_ZTv0_n24_N8S20909C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20909C1D0Ev,_ZTv0_n24_N8S20909C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20909C53v23Ev,
  (VTBL_ENTRY)&_ZN8S20909C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v31Ev,
  (VTBL_ENTRY)&_ZN8S20909C23v32Ev,
  (VTBL_ENTRY)&_ZN8S20909C23v33Ev,
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20909C1[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v22Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20909C1[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v19Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v20Ev,
  0,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20909C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20909C1D1Ev,_ZTv0_n12_N8S20909C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20909C1D0Ev,_ZTv0_n12_N8S20909C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20909C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20909C93v26Ev,
};
extern VTBL_ENTRY _ZTV8S20909C1[];
extern void _ZN8S20909C63v16Ev();
extern void _ZN8S20909C2D1Ev();
extern void _ZN8S20909C2D0Ev();
extern void _ZN8S20909C53v23Ev();
extern void _ZN8S20909C53v24Ev();
extern void _ZN8S20909C43v27Ev();
extern void _ZN8S20909C43v28Ev();
extern void _ZN8S20909C43v29Ev();
extern void _ZN8S20909C43v30Ev();
extern void _ZN8S20909C43v31Ev();
extern void _ZN8S20909C23v32Ev();
extern void _ZN8S20909C23v33Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C2__8S20909C1[] = {
  ABISELECT(56,32),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20909C2[0]),
  (VTBL_ENTRY)&_ZN8S20909C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20909C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20909C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20909C53v23Ev,
  (VTBL_ENTRY)&_ZN8S20909C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v31Ev,
  (VTBL_ENTRY)&_ZN8S20909C23v32Ev,
  (VTBL_ENTRY)&_ZN8S20909C23v33Ev,
};
extern void _ZN8S20909C63v16Ev();
extern void _ZN8S20909C4D1Ev();
extern void _ZN8S20909C4D0Ev();
extern void _ZN8S20909C53v23Ev();
extern void _ZN8S20909C53v24Ev();
extern void _ZN8S20909C43v27Ev();
extern void _ZN8S20909C43v28Ev();
extern void _ZN8S20909C43v29Ev();
extern void _ZN8S20909C43v30Ev();
extern void _ZN8S20909C43v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C48S20909C2__8S20909C1[] = {
  ABISELECT(56,32),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20909C4[0]),
  (VTBL_ENTRY)&_ZN8S20909C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20909C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20909C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20909C53v23Ev,
  (VTBL_ENTRY)&_ZN8S20909C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20909C43v31Ev,
};
extern void _ZN8S20909C63v16Ev();
extern void _ZN8S20909C5D1Ev();
extern void _ZN8S20909C5D0Ev();
extern void _ZN8S20909C53v23Ev();
extern void _ZN8S20909C53v24Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C58S20909C48S20909C2__8S20909C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20909C5[0]),
  (VTBL_ENTRY)&_ZN8S20909C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20909C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20909C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20909C53v23Ev,
  (VTBL_ENTRY)&_ZN8S20909C53v24Ev,
};
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C73v21Ev();
extern void _ZN8S20909C73v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C78S20909C58S20909C48S20909C2__8S20909C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20909C7[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v22Ev,
};
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C83v17Ev();
extern void _ZN8S20909C83v18Ev();
extern void _ZN8S20909C83v19Ev();
extern void _ZN8S20909C83v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C88S20909C78S20909C58S20909C48S20909C2__8S20909C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20909C8[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v19Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v20Ev,
};
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C83v17Ev();
extern void _ZN8S20909C83v18Ev();
extern void _ZN8S20909C83v19Ev();
extern void _ZN8S20909C83v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C8__8S20909C78S20909C58S20909C48S20909C2__8S20909C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20909C7[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v19Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v20Ev,
};
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C73v21Ev();
extern void _ZN8S20909C73v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C7__8S20909C58S20909C48S20909C2__8S20909C1[] = {
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20909C5[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v22Ev,
};
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C83v17Ev();
extern void _ZN8S20909C83v18Ev();
extern void _ZN8S20909C83v19Ev();
extern void _ZN8S20909C83v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C88S20909C7__8S20909C58S20909C48S20909C2__8S20909C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20909C5[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v19Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v20Ev,
};
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C73v21Ev();
extern void _ZN8S20909C73v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C78S20909C5__8S20909C48S20909C2__8S20909C1[] = {
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20909C4[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v22Ev,
};
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C83v17Ev();
extern void _ZN8S20909C83v18Ev();
extern void _ZN8S20909C83v19Ev();
extern void _ZN8S20909C83v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C88S20909C78S20909C5__8S20909C48S20909C2__8S20909C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20909C4[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v19Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v20Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20909C4D1Ev,_ZTv0_n12_N8S20909C4D1Ev)();
extern void ABISELECT(_ZThn56_N8S20909C4D1Ev,_ZThn32_N8S20909C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20909C4D0Ev,_ZTv0_n12_N8S20909C4D0Ev)();
extern void ABISELECT(_ZThn56_N8S20909C4D0Ev,_ZThn32_N8S20909C4D0Ev)() __attribute__((weak));
extern void _ZN8S20909C93v25Ev();
extern void _ZN8S20909C93v26Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C9__8S20909C48S20909C2__8S20909C1[] = {
  0,
  0,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S20909C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20909C4D1Ev,_ZTv0_n12_N8S20909C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20909C4D0Ev,_ZTv0_n12_N8S20909C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20909C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20909C93v26Ev,
};
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C83v17Ev();
extern void _ZN8S20909C83v18Ev();
extern void _ZN8S20909C83v19Ev();
extern void _ZN8S20909C83v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C88S20909C78S20909C58S20909C4__8S20909C2__8S20909C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20909C2[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v19Ev,
  (VTBL_ENTRY)&_ZN8S20909C83v20Ev,
};
extern void _ZN8S20909C32v7Ev();
extern void _ZN8S20909C32v8Ev();
extern void _ZN8S20909C32v9Ev();
extern void _ZN8S20909C33v10Ev();
extern void _ZN8S20909C33v11Ev();
extern void _ZN8S20909C33v12Ev();
extern void _ZN8S20909C33v13Ev();
extern void _ZN8S20909C33v14Ev();
extern void _ZN8S20909C33v15Ev();
extern void _ZN8S20909C73v21Ev();
extern void _ZN8S20909C73v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C78S20909C58S20909C4__8S20909C2__8S20909C1[] = {
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20909C2[0]),
  (VTBL_ENTRY)&_ZN8S20909C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20909C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20909C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20909C73v22Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20909C2D1Ev,_ZTv0_n12_N8S20909C2D1Ev)();
extern void ABISELECT(_ZThn56_N8S20909C2D1Ev,_ZThn32_N8S20909C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20909C2D0Ev,_ZTv0_n12_N8S20909C2D0Ev)();
extern void ABISELECT(_ZThn56_N8S20909C2D0Ev,_ZThn32_N8S20909C2D0Ev)() __attribute__((weak));
extern void _ZN8S20909C93v25Ev();
extern void _ZN8S20909C93v26Ev();
static  VTBL_ENTRY _tg__ZTV8S20909C9__8S20909C2__8S20909C1[] = {
  0,
  0,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S20909C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20909C2D1Ev,_ZTv0_n12_N8S20909C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20909C2D0Ev,_ZTv0_n12_N8S20909C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20909C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20909C93v26Ev,
};
static  VTT_ENTRY vtt_S20909C1[] = {
  {&(_ZTV8S20909C1[9]),  9,110},
  {&(_ZTV8S20909C1[50]),  50,110},
  {&(_ZTV8S20909C1[88]),  88,110},
  {&(_ZTV8S20909C1[65]),  65,110},
  {&(_ZTV8S20909C1[88]),  88,110},
  {&(_ZTV8S20909C1[106]),  106,110},
  {&(_ZTV8S20909C1[9]),  9,110},
  {&(_tg__ZTV8S20909C2__8S20909C1[4]),  4,16},
  {&(_tg__ZTV8S20909C48S20909C2__8S20909C1[4]),  4,14},
  {&(_tg__ZTV8S20909C58S20909C48S20909C2__8S20909C1[3]),  3,8},
  {&(_tg__ZTV8S20909C78S20909C58S20909C48S20909C2__8S20909C1[3]),  3,14},
  {&(_tg__ZTV8S20909C88S20909C78S20909C58S20909C48S20909C2__8S20909C1[12]),  12,25},
  {&(_tg__ZTV8S20909C88S20909C78S20909C58S20909C48S20909C2__8S20909C1[12]),  12,25},
  {&(_tg__ZTV8S20909C8__8S20909C78S20909C58S20909C48S20909C2__8S20909C1[12]),  12,25},
  {&(_tg__ZTV8S20909C8__8S20909C78S20909C58S20909C48S20909C2__8S20909C1[12]),  12,25},
  {&(_tg__ZTV8S20909C7__8S20909C58S20909C48S20909C2__8S20909C1[3]),  3,14},
  {&(_tg__ZTV8S20909C88S20909C7__8S20909C58S20909C48S20909C2__8S20909C1[12]),  12,25},
  {&(_tg__ZTV8S20909C88S20909C7__8S20909C58S20909C48S20909C2__8S20909C1[12]),  12,25},
  {&(_tg__ZTV8S20909C78S20909C5__8S20909C48S20909C2__8S20909C1[3]),  3,14},
  {&(_tg__ZTV8S20909C88S20909C78S20909C5__8S20909C48S20909C2__8S20909C1[12]),  12,25},
  {&(_tg__ZTV8S20909C88S20909C78S20909C5__8S20909C48S20909C2__8S20909C1[12]),  12,25},
  {&(_tg__ZTV8S20909C9__8S20909C48S20909C2__8S20909C1[5]),  5,9},
  {&(_tg__ZTV8S20909C88S20909C78S20909C58S20909C4__8S20909C2__8S20909C1[12]),  12,25},
  {&(_tg__ZTV8S20909C78S20909C58S20909C4__8S20909C2__8S20909C1[3]),  3,14},
  {&(_tg__ZTV8S20909C88S20909C78S20909C58S20909C4__8S20909C2__8S20909C1[12]),  12,25},
  {&(_tg__ZTV8S20909C9__8S20909C2__8S20909C1[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S20909C1[];
extern  VTBL_ENTRY _ZTV8S20909C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20909C1[];
static VTBL_ENTRY alt_thunk_names92[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20909C2D0Ev,_ZTv0_n12_N8S20909C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20909C2D0Ev,_ZThn32_N8S20909C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20909C2D1Ev,_ZTv0_n12_N8S20909C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20909C2D1Ev,_ZThn32_N8S20909C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20909C4D0Ev,_ZTv0_n12_N8S20909C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20909C4D0Ev,_ZThn32_N8S20909C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20909C4D1Ev,_ZTv0_n12_N8S20909C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20909C4D1Ev,_ZThn32_N8S20909C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20909C1D0Ev,_ZTv0_n12_N8S20909C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20909C1D0Ev,_ZThn36_N8S20909C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20909C1D1Ev,_ZTv0_n12_N8S20909C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20909C1D1Ev,_ZThn36_N8S20909C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20909C1D0Ev,_ZTv0_n24_N8S20909C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20909C1D0Ev,_ZThn4_N8S20909C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20909C1D1Ev,_ZTv0_n24_N8S20909C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20909C1D1Ev,_ZThn4_N8S20909C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20909C1 = {  "S20909C1", // class name
  bases_S20909C1, 10,
  &(vtc_S20909C1[0]), // expected_vtbl_contents
  &(vtt_S20909C1[0]), // expected_vtt_contents
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI8S20909C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20909C1),110, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20909C1),26, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names92,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3533C4  {
  virtual void  v7(); // _ZN7S3533C42v7Ev
  virtual void  v8(); // _ZN7S3533C42v8Ev
  virtual void  v9(); // _ZN7S3533C42v9Ev
  virtual void  v10(); // _ZN7S3533C43v10Ev
  virtual void  v11(); // _ZN7S3533C43v11Ev
  virtual void  v12(); // _ZN7S3533C43v12Ev
  virtual void  v13(); // _ZN7S3533C43v13Ev
  virtual void  v14(); // _ZN7S3533C43v14Ev
  virtual void  v15(); // _ZN7S3533C43v15Ev
  ~S3533C4(); // tgen
  S3533C4(); // tgen
};
//SIG(-1 S3533C4) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S3533C4 ::v7(){vfunc_called(this, "_ZN7S3533C42v7Ev");}
void  S3533C4 ::v8(){vfunc_called(this, "_ZN7S3533C42v8Ev");}
void  S3533C4 ::v9(){vfunc_called(this, "_ZN7S3533C42v9Ev");}
void  S3533C4 ::v10(){vfunc_called(this, "_ZN7S3533C43v10Ev");}
void  S3533C4 ::v11(){vfunc_called(this, "_ZN7S3533C43v11Ev");}
void  S3533C4 ::v12(){vfunc_called(this, "_ZN7S3533C43v12Ev");}
void  S3533C4 ::v13(){vfunc_called(this, "_ZN7S3533C43v13Ev");}
void  S3533C4 ::v14(){vfunc_called(this, "_ZN7S3533C43v14Ev");}
void  S3533C4 ::v15(){vfunc_called(this, "_ZN7S3533C43v15Ev");}
S3533C4 ::~S3533C4(){ note_dtor("S3533C4", this);} // tgen
S3533C4 ::S3533C4(){ note_ctor("S3533C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3533C4C1Ev();
extern void _ZN7S3533C4D1Ev();
Name_Map name_map_S3533C4[] = {
  NSPAIR(_ZN7S3533C4C1Ev),
  NSPAIR(_ZN7S3533C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3533C4[];
extern void _ZN7S3533C42v7Ev();
extern void _ZN7S3533C42v8Ev();
extern void _ZN7S3533C42v9Ev();
extern void _ZN7S3533C43v10Ev();
extern void _ZN7S3533C43v11Ev();
extern void _ZN7S3533C43v12Ev();
extern void _ZN7S3533C43v13Ev();
extern void _ZN7S3533C43v14Ev();
extern void _ZN7S3533C43v15Ev();
static  VTBL_ENTRY vtc_S3533C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3533C4[0]),
  (VTBL_ENTRY)&_ZN7S3533C42v7Ev,
  (VTBL_ENTRY)&_ZN7S3533C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3533C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v13Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v15Ev,
};
extern VTBL_ENTRY _ZTI7S3533C4[];
extern  VTBL_ENTRY _ZTV7S3533C4[];
Class_Descriptor cd_S3533C4 = {  "S3533C4", // class name
  0,0,//no base classes
  &(vtc_S3533C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3533C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3533C4),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  S3533C6  {
  int s3533c6f0;
  __tsi64 s3533c6f1;
  virtual  ~S3533C6(); // _ZN7S3533C6D1Ev
  virtual void  v16(); // _ZN7S3533C63v16Ev
  virtual void  v17(); // _ZN7S3533C63v17Ev
  virtual void  v18(); // _ZN7S3533C63v18Ev
  S3533C6(); // tgen
};
//SIG(-1 S3533C6) C1{ vd v1 v2 v3 Fi FL}


 S3533C6 ::~S3533C6(){ note_dtor("S3533C6", this);}
void  S3533C6 ::v16(){vfunc_called(this, "_ZN7S3533C63v16Ev");}
void  S3533C6 ::v17(){vfunc_called(this, "_ZN7S3533C63v17Ev");}
void  S3533C6 ::v18(){vfunc_called(this, "_ZN7S3533C63v18Ev");}
S3533C6 ::S3533C6(){ note_ctor("S3533C6", this);} // tgen

static void Test_S3533C6()
{
  extern Class_Descriptor cd_S3533C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3533C6, buf);
    S3533C6 *dp, &lv = *(dp=new (buf) S3533C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3533C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3533C6)");
    check_field_offset(lv, s3533c6f0, ABISELECT(8,4), "S3533C6.s3533c6f0");
    check_field_offset(lv, s3533c6f1, ABISELECT(16,8), "S3533C6.s3533c6f1");
    test_class_info(&lv, &cd_S3533C6);
    dp->~S3533C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3533C6(Test_S3533C6, "S3533C6", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3533C6C1Ev();
extern void _ZN7S3533C6D1Ev();
Name_Map name_map_S3533C6[] = {
  NSPAIR(_ZN7S3533C6C1Ev),
  NSPAIR(_ZN7S3533C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3533C6[];
extern void _ZN7S3533C6D1Ev();
extern void _ZN7S3533C6D0Ev();
extern void _ZN7S3533C63v16Ev();
extern void _ZN7S3533C63v17Ev();
extern void _ZN7S3533C63v18Ev();
static  VTBL_ENTRY vtc_S3533C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3533C6[0]),
  (VTBL_ENTRY)&_ZN7S3533C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3533C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3533C63v16Ev,
  (VTBL_ENTRY)&_ZN7S3533C63v17Ev,
  (VTBL_ENTRY)&_ZN7S3533C63v18Ev,
};
extern VTBL_ENTRY _ZTI7S3533C6[];
extern  VTBL_ENTRY _ZTV7S3533C6[];
Class_Descriptor cd_S3533C6 = {  "S3533C6", // class name
  0,0,//no base classes
  &(vtc_S3533C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3533C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3533C6),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  S3533C5  : S3533C6 {
  int s3533c5f0;
  ::S3533C6 s3533c5f1;
  virtual  ~S3533C5(); // _ZN7S3533C5D1Ev
  virtual void  v19(); // _ZN7S3533C53v19Ev
  virtual void  v20(); // _ZN7S3533C53v20Ev
  virtual void  v21(); // _ZN7S3533C53v21Ev
  S3533C5(); // tgen
};
//SIG(-1 S3533C5) C1{ BC2{ vd v4 v5 v6 Fi FL} vd v1 v2 v3 Fi FC2}


 S3533C5 ::~S3533C5(){ note_dtor("S3533C5", this);}
void  S3533C5 ::v19(){vfunc_called(this, "_ZN7S3533C53v19Ev");}
void  S3533C5 ::v20(){vfunc_called(this, "_ZN7S3533C53v20Ev");}
void  S3533C5 ::v21(){vfunc_called(this, "_ZN7S3533C53v21Ev");}
S3533C5 ::S3533C5(){ note_ctor("S3533C5", this);} // tgen

static void Test_S3533C5()
{
  extern Class_Descriptor cd_S3533C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S3533C5, buf);
    S3533C5 *dp, &lv = *(dp=new (buf) S3533C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S3533C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3533C5)");
    check_base_class_offset(lv, (S3533C6*), 0, "S3533C5");
    check_field_offset(lv, s3533c5f0, ABISELECT(24,16), "S3533C5.s3533c5f0");
    check_field_offset(lv, s3533c5f1, ABISELECT(32,20), "S3533C5.s3533c5f1");
    test_class_info(&lv, &cd_S3533C5);
    dp->~S3533C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3533C5(Test_S3533C5, "S3533C5", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S3533C5C1Ev();
extern void _ZN7S3533C5D1Ev();
Name_Map name_map_S3533C5[] = {
  NSPAIR(_ZN7S3533C5C1Ev),
  NSPAIR(_ZN7S3533C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3533C6;
extern VTBL_ENTRY _ZTI7S3533C6[];
extern  VTBL_ENTRY _ZTV7S3533C6[];
static Base_Class bases_S3533C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3533C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S3533C5[];
extern void _ZN7S3533C5D1Ev();
extern void _ZN7S3533C5D0Ev();
extern void _ZN7S3533C63v16Ev();
extern void _ZN7S3533C63v17Ev();
extern void _ZN7S3533C63v18Ev();
extern void _ZN7S3533C53v19Ev();
extern void _ZN7S3533C53v20Ev();
extern void _ZN7S3533C53v21Ev();
static  VTBL_ENTRY vtc_S3533C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3533C5[0]),
  (VTBL_ENTRY)&_ZN7S3533C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3533C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3533C63v16Ev,
  (VTBL_ENTRY)&_ZN7S3533C63v17Ev,
  (VTBL_ENTRY)&_ZN7S3533C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3533C53v19Ev,
  (VTBL_ENTRY)&_ZN7S3533C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3533C53v21Ev,
};
extern VTBL_ENTRY _ZTI7S3533C5[];
extern  VTBL_ENTRY _ZTV7S3533C5[];
Class_Descriptor cd_S3533C5 = {  "S3533C5", // class name
  bases_S3533C5, 1,
  &(vtc_S3533C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S3533C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3533C5),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  S3533C3  : virtual S3533C4 , virtual S3533C5 {
  ::S3533C5 s3533c3f0[3];
  int s3533c3f1;
  void *s3533c3f2[8];
  int s3533c3f3;
  long double s3533c3f4[3];
  virtual void  v22(); // _ZN7S3533C33v22Ev
  virtual void  v23(); // _ZN7S3533C33v23Ev
  virtual void  v24(); // _ZN7S3533C33v24Ev
  virtual void  v25(); // _ZN7S3533C33v25Ev
  ~S3533C3(); // tgen
  S3533C3(); // tgen
};
//SIG(-1 S3533C3) C1{ VBC2{ v5 v6 v7 v8 v9 v10 v11 v12 v13} VBC3{ BC4{ vd v14 v15 v16 Fi FL} vd v17 v18 v19 Fi FC4} v1 v2 v3 v4 FC3[3] Fi Fp[8] Fi FD[3]}


void  S3533C3 ::v22(){vfunc_called(this, "_ZN7S3533C33v22Ev");}
void  S3533C3 ::v23(){vfunc_called(this, "_ZN7S3533C33v23Ev");}
void  S3533C3 ::v24(){vfunc_called(this, "_ZN7S3533C33v24Ev");}
void  S3533C3 ::v25(){vfunc_called(this, "_ZN7S3533C33v25Ev");}
S3533C3 ::~S3533C3(){ note_dtor("S3533C3", this);} // tgen
S3533C3 ::S3533C3(){ note_ctor("S3533C3", this);} // tgen

static void Test_S3533C3()
{
  extern Class_Descriptor cd_S3533C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,57)];
    init_test(&cd_S3533C3, buf);
    S3533C3 *dp, &lv = *(dp=new (buf) S3533C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,224), "sizeof(S3533C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3533C3)");
    check_base_class_offset(lv, (S3533C4*), 0, "S3533C3");
    check_base_class_offset(lv, (S3533C6*)(S3533C5*), ABISELECT(304,188), "S3533C3");
    check_base_class_offset(lv, (S3533C5*), ABISELECT(304,188), "S3533C3");
    check_field_offset(lv, s3533c3f0, ABISELECT(8,4), "S3533C3.s3533c3f0");
    check_field_offset(lv, s3533c3f1, ABISELECT(176,112), "S3533C3.s3533c3f1");
    check_field_offset(lv, s3533c3f2, ABISELECT(184,116), "S3533C3.s3533c3f2");
    check_field_offset(lv, s3533c3f3, ABISELECT(248,148), "S3533C3.s3533c3f3");
    check_field_offset(lv, s3533c3f4, ABISELECT(256,152), "S3533C3.s3533c3f4");
    test_class_info(&lv, &cd_S3533C3);
    dp->~S3533C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3533C3(Test_S3533C3, "S3533C3", ABISELECT(368,224));

#else // __cplusplus

extern void _ZN7S3533C3C1Ev();
extern void _ZN7S3533C3D1Ev();
Name_Map name_map_S3533C3[] = {
  NSPAIR(_ZN7S3533C3C1Ev),
  NSPAIR(_ZN7S3533C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3533C4;
extern VTBL_ENTRY _ZTI7S3533C4[];
extern  VTBL_ENTRY _ZTV7S3533C4[];
extern Class_Descriptor cd_S3533C6;
extern VTBL_ENTRY _ZTI7S3533C6[];
extern  VTBL_ENTRY _ZTV7S3533C6[];
extern Class_Descriptor cd_S3533C5;
extern VTBL_ENTRY _ZTI7S3533C5[];
extern  VTBL_ENTRY _ZTV7S3533C5[];
static Base_Class bases_S3533C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3533C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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_S3533C6,    ABISELECT(304,188), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3533C5,    ABISELECT(304,188), //bcp->offset
    28, //bcp->virtual_function_table_offset
    9, //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 _ZTI7S3533C3[];
extern void _ZN7S3533C42v7Ev();
extern void _ZN7S3533C42v8Ev();
extern void _ZN7S3533C42v9Ev();
extern void _ZN7S3533C43v10Ev();
extern void _ZN7S3533C43v11Ev();
extern void _ZN7S3533C43v12Ev();
extern void _ZN7S3533C43v13Ev();
extern void _ZN7S3533C43v14Ev();
extern void _ZN7S3533C43v15Ev();
extern void _ZN7S3533C33v22Ev();
extern void _ZN7S3533C33v23Ev();
extern void _ZN7S3533C33v24Ev();
extern void _ZN7S3533C33v25Ev();
extern void _ZN7S3533C3D1Ev();
extern void _ZN7S3533C3D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S3533C3D1Ev,_ZTv0_n12_N7S3533C3D1Ev)();
extern void ABISELECT(_ZThn304_N7S3533C3D1Ev,_ZThn188_N7S3533C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3533C3D0Ev,_ZTv0_n12_N7S3533C3D0Ev)();
extern void ABISELECT(_ZThn304_N7S3533C3D0Ev,_ZThn188_N7S3533C3D0Ev)() __attribute__((weak));
extern void _ZN7S3533C63v16Ev();
extern void _ZN7S3533C63v17Ev();
extern void _ZN7S3533C63v18Ev();
extern void _ZN7S3533C53v19Ev();
extern void _ZN7S3533C53v20Ev();
extern void _ZN7S3533C53v21Ev();
static  VTBL_ENTRY vtc_S3533C3[] = {
  ABISELECT(304,188),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3533C3[0]),
  (VTBL_ENTRY)&_ZN7S3533C42v7Ev,
  (VTBL_ENTRY)&_ZN7S3533C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3533C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v13Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3533C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3533C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3533C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3533C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3533C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3533C3D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-188),
  ABISELECT(-304,-188),
  (VTBL_ENTRY)&(_ZTI7S3533C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3533C3D1Ev,_ZTv0_n12_N7S3533C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3533C3D0Ev,_ZTv0_n12_N7S3533C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3533C63v16Ev,
  (VTBL_ENTRY)&_ZN7S3533C63v17Ev,
  (VTBL_ENTRY)&_ZN7S3533C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3533C53v19Ev,
  (VTBL_ENTRY)&_ZN7S3533C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3533C53v21Ev,
};
extern VTBL_ENTRY _ZTV7S3533C3[];
static  VTT_ENTRY vtt_S3533C3[] = {
  {&(_ZTV7S3533C3[13]),  13,45},
  {&(_ZTV7S3533C3[13]),  13,45},
  {&(_ZTV7S3533C3[37]),  37,45},
};
extern VTBL_ENTRY _ZTI7S3533C3[];
extern  VTBL_ENTRY _ZTV7S3533C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3533C3[];
static VTBL_ENTRY alt_thunk_names93[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3533C3D0Ev,_ZTv0_n12_N7S3533C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3533C3D0Ev,_ZThn188_N7S3533C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3533C3D1Ev,_ZTv0_n12_N7S3533C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3533C3D1Ev,_ZThn188_N7S3533C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3533C3 = {  "S3533C3", // class name
  bases_S3533C3, 3,
  &(vtc_S3533C3[0]), // expected_vtbl_contents
  &(vtt_S3533C3[0]), // expected_vtt_contents
  ABISELECT(368,224), // object size
  NSPAIRA(_ZTI7S3533C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3533C3),45, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3533C3),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names93,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3533C2  : S3533C3 , S3533C5 {
  int s3533c2f0;
  virtual  ~S3533C2(); // _ZN7S3533C2D2Ev
  virtual void  v26(); // _ZN7S3533C23v26Ev
  virtual void  v27(); // _ZN7S3533C23v27Ev
  virtual void  v28(); // _ZN7S3533C23v28Ev
  virtual void  v29(); // _ZN7S3533C23v29Ev
  virtual void  v30(); // _ZN7S3533C23v30Ev
  virtual void  v31(); // _ZN7S3533C23v31Ev
  virtual void  v32(); // _ZN7S3533C23v32Ev
  virtual void  v33(); // _ZN7S3533C23v33Ev
  virtual void  v34(); // _ZN7S3533C23v34Ev
  S3533C2(); // tgen
};
//SIG(-1 S3533C2) C1{ BC2{ VBC3{ v10 v11 v12 v13 v14 v15 v16 v17 v18} VBC4{ BC5{ vd v19 v20 v21 Fi FL} vd v22 v23 v24 Fi FC5} v25 v26 v27 v28 FC4[3] Fi Fp[8] Fi FD[3]} BC4 vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fi}


 S3533C2 ::~S3533C2(){ note_dtor("S3533C2", this);}
void  S3533C2 ::v26(){vfunc_called(this, "_ZN7S3533C23v26Ev");}
void  S3533C2 ::v27(){vfunc_called(this, "_ZN7S3533C23v27Ev");}
void  S3533C2 ::v28(){vfunc_called(this, "_ZN7S3533C23v28Ev");}
void  S3533C2 ::v29(){vfunc_called(this, "_ZN7S3533C23v29Ev");}
void  S3533C2 ::v30(){vfunc_called(this, "_ZN7S3533C23v30Ev");}
void  S3533C2 ::v31(){vfunc_called(this, "_ZN7S3533C23v31Ev");}
void  S3533C2 ::v32(){vfunc_called(this, "_ZN7S3533C23v32Ev");}
void  S3533C2 ::v33(){vfunc_called(this, "_ZN7S3533C23v33Ev");}
void  S3533C2 ::v34(){vfunc_called(this, "_ZN7S3533C23v34Ev");}
S3533C2 ::S3533C2(){ note_ctor("S3533C2", this);} // tgen

static void Test_S3533C2()
{
  extern Class_Descriptor cd_S3533C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,67)];
    init_test(&cd_S3533C2, buf);
    S3533C2 *dp, &lv = *(dp=new (buf) S3533C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,264), "sizeof(S3533C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3533C2)");
    check_base_class_offset(lv, (S3533C4*)(S3533C3*), 0, "S3533C2");
    /*is_ambiguous_... S3533C2::S3533C5 */ AMB_check_base_class_offset(lv, (S3533C6*)(S3533C5*), ABISELECT(368,228), "S3533C2");
    check_base_class_offset(lv, (S3533C5*)(S3533C3*), ABISELECT(368,228), "S3533C2");
    check_base_class_offset(lv, (S3533C3*), 0, "S3533C2");
    /*is_ambiguous_... S3533C2::S3533C5 */ AMB_check_base_class_offset(lv, (S3533C6*)(S3533C5*), ABISELECT(304,188), "S3533C2");
    /*is_ambiguous_... S3533C2::S3533C5 */ AMB_check_base_class_offset(lv, (S3533C5*), ABISELECT(304,188), "S3533C2");
    check_field_offset(lv, s3533c2f0, ABISELECT(360,224), "S3533C2.s3533c2f0");
    test_class_info(&lv, &cd_S3533C2);
    dp->~S3533C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3533C2(Test_S3533C2, "S3533C2", ABISELECT(432,264));

#else // __cplusplus

extern void _ZN7S3533C2C1Ev();
extern void _ZN7S3533C2D2Ev();
Name_Map name_map_S3533C2[] = {
  NSPAIR(_ZN7S3533C2C1Ev),
  NSPAIR(_ZN7S3533C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3533C4;
extern VTBL_ENTRY _ZTI7S3533C4[];
extern  VTBL_ENTRY _ZTV7S3533C4[];
extern Class_Descriptor cd_S3533C6;
extern VTBL_ENTRY _ZTI7S3533C6[];
extern  VTBL_ENTRY _ZTV7S3533C6[];
extern Class_Descriptor cd_S3533C5;
extern VTBL_ENTRY _ZTI7S3533C5[];
extern  VTBL_ENTRY _ZTV7S3533C5[];
extern Class_Descriptor cd_S3533C3;
extern VTBL_ENTRY _ZTI7S3533C3[];
extern  VTBL_ENTRY _ZTV7S3533C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3533C3[];
extern Class_Descriptor cd_S3533C6;
extern VTBL_ENTRY _ZTI7S3533C6[];
extern  VTBL_ENTRY _ZTV7S3533C6[];
extern Class_Descriptor cd_S3533C5;
extern VTBL_ENTRY _ZTI7S3533C5[];
extern  VTBL_ENTRY _ZTV7S3533C5[];
static Base_Class bases_S3533C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3533C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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
    3, //immediately_derived
  0, 1},
  {&cd_S3533C6,    ABISELECT(368,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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3533C5,    ABISELECT(368,228), //bcp->offset
    47, //bcp->virtual_function_table_offset
    9, //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
    3, //immediately_derived
  0, 1},
  {&cd_S3533C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3533C6,    ABISELECT(304,188), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3533C5,    ABISELECT(304,188), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3533C2[];
extern void _ZN7S3533C42v7Ev();
extern void _ZN7S3533C42v8Ev();
extern void _ZN7S3533C42v9Ev();
extern void _ZN7S3533C43v10Ev();
extern void _ZN7S3533C43v11Ev();
extern void _ZN7S3533C43v12Ev();
extern void _ZN7S3533C43v13Ev();
extern void _ZN7S3533C43v14Ev();
extern void _ZN7S3533C43v15Ev();
extern void _ZN7S3533C33v22Ev();
extern void _ZN7S3533C33v23Ev();
extern void _ZN7S3533C33v24Ev();
extern void _ZN7S3533C33v25Ev();
extern void _ZN7S3533C2D1Ev();
extern void _ZN7S3533C2D0Ev();
extern void _ZN7S3533C23v26Ev();
extern void _ZN7S3533C23v27Ev();
extern void _ZN7S3533C23v28Ev();
extern void _ZN7S3533C23v29Ev();
extern void _ZN7S3533C23v30Ev();
extern void _ZN7S3533C23v31Ev();
extern void _ZN7S3533C23v32Ev();
extern void _ZN7S3533C23v33Ev();
extern void _ZN7S3533C23v34Ev();
extern void ABISELECT(_ZThn304_N7S3533C2D1Ev,_ZThn188_N7S3533C2D1Ev)();
extern void ABISELECT(_ZThn304_N7S3533C2D0Ev,_ZThn188_N7S3533C2D0Ev)();
extern void _ZN7S3533C63v16Ev();
extern void _ZN7S3533C63v17Ev();
extern void _ZN7S3533C63v18Ev();
extern void _ZN7S3533C53v19Ev();
extern void _ZN7S3533C53v20Ev();
extern void _ZN7S3533C53v21Ev();
extern void ABISELECT(_ZTv0_n24_N7S3533C2D1Ev,_ZTv0_n12_N7S3533C2D1Ev)();
extern void ABISELECT(_ZThn368_N7S3533C2D1Ev,_ZThn228_N7S3533C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3533C2D0Ev,_ZTv0_n12_N7S3533C2D0Ev)();
extern void ABISELECT(_ZThn368_N7S3533C2D0Ev,_ZThn228_N7S3533C2D0Ev)() __attribute__((weak));
extern void _ZN7S3533C63v16Ev();
extern void _ZN7S3533C63v17Ev();
extern void _ZN7S3533C63v18Ev();
extern void _ZN7S3533C53v19Ev();
extern void _ZN7S3533C53v20Ev();
extern void _ZN7S3533C53v21Ev();
static  VTBL_ENTRY vtc_S3533C2[] = {
  ABISELECT(368,228),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3533C2[0]),
  (VTBL_ENTRY)&_ZN7S3533C42v7Ev,
  (VTBL_ENTRY)&_ZN7S3533C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3533C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v13Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3533C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3533C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3533C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3533C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3533C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3533C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3533C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3533C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3533C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3533C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3533C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3533C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3533C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3533C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3533C23v34Ev,
  ABISELECT(-304,-188),
  (VTBL_ENTRY)&(_ZTI7S3533C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn304_N7S3533C2D1Ev,_ZThn188_N7S3533C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn304_N7S3533C2D0Ev,_ZThn188_N7S3533C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3533C63v16Ev,
  (VTBL_ENTRY)&_ZN7S3533C63v17Ev,
  (VTBL_ENTRY)&_ZN7S3533C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3533C53v19Ev,
  (VTBL_ENTRY)&_ZN7S3533C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3533C53v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-228),
  ABISELECT(-368,-228),
  (VTBL_ENTRY)&(_ZTI7S3533C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3533C2D1Ev,_ZTv0_n12_N7S3533C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3533C2D0Ev,_ZTv0_n12_N7S3533C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3533C63v16Ev,
  (VTBL_ENTRY)&_ZN7S3533C63v17Ev,
  (VTBL_ENTRY)&_ZN7S3533C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3533C53v19Ev,
  (VTBL_ENTRY)&_ZN7S3533C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3533C53v21Ev,
};
extern VTBL_ENTRY _ZTV7S3533C2[];
extern void _ZN7S3533C42v7Ev();
extern void _ZN7S3533C42v8Ev();
extern void _ZN7S3533C42v9Ev();
extern void _ZN7S3533C43v10Ev();
extern void _ZN7S3533C43v11Ev();
extern void _ZN7S3533C43v12Ev();
extern void _ZN7S3533C43v13Ev();
extern void _ZN7S3533C43v14Ev();
extern void _ZN7S3533C43v15Ev();
extern void _ZN7S3533C33v22Ev();
extern void _ZN7S3533C33v23Ev();
extern void _ZN7S3533C33v24Ev();
extern void _ZN7S3533C33v25Ev();
extern void _ZN7S3533C3D1Ev();
extern void _ZN7S3533C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3533C3__7S3533C2[] = {
  ABISELECT(368,228),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3533C3[0]),
  (VTBL_ENTRY)&_ZN7S3533C42v7Ev,
  (VTBL_ENTRY)&_ZN7S3533C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3533C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v13Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3533C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3533C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3533C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3533C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3533C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3533C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3533C3D1Ev,_ZTv0_n12_N7S3533C3D1Ev)();
extern void ABISELECT(_ZThn368_N7S3533C3D1Ev,_ZThn228_N7S3533C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3533C3D0Ev,_ZTv0_n12_N7S3533C3D0Ev)();
extern void ABISELECT(_ZThn368_N7S3533C3D0Ev,_ZThn228_N7S3533C3D0Ev)() __attribute__((weak));
extern void _ZN7S3533C63v16Ev();
extern void _ZN7S3533C63v17Ev();
extern void _ZN7S3533C63v18Ev();
extern void _ZN7S3533C53v19Ev();
extern void _ZN7S3533C53v20Ev();
extern void _ZN7S3533C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3533C5__7S3533C3__7S3533C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-228),
  ABISELECT(-368,-228),
  (VTBL_ENTRY)&(_ZTI7S3533C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3533C3D1Ev,_ZTv0_n12_N7S3533C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3533C3D0Ev,_ZTv0_n12_N7S3533C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3533C63v16Ev,
  (VTBL_ENTRY)&_ZN7S3533C63v17Ev,
  (VTBL_ENTRY)&_ZN7S3533C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3533C53v19Ev,
  (VTBL_ENTRY)&_ZN7S3533C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3533C53v21Ev,
};
static  VTT_ENTRY vtt_S3533C2[] = {
  {&(_ZTV7S3533C2[13]),  13,64},
  {&(_tg__ZTV7S3533C3__7S3533C2[13]),  13,28},
  {&(_tg__ZTV7S3533C3__7S3533C2[13]),  13,28},
  {&(_tg__ZTV7S3533C5__7S3533C3__7S3533C2[9]),  9,17},
  {&(_ZTV7S3533C2[13]),  13,64},
  {&(_ZTV7S3533C2[56]),  56,64},
};
extern VTBL_ENTRY _ZTI7S3533C2[];
extern  VTBL_ENTRY _ZTV7S3533C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3533C2[];
static VTBL_ENTRY alt_thunk_names94[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3533C3D0Ev,_ZTv0_n12_N7S3533C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S3533C3D0Ev,_ZThn228_N7S3533C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3533C3D1Ev,_ZTv0_n12_N7S3533C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S3533C3D1Ev,_ZThn228_N7S3533C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3533C2D0Ev,_ZTv0_n12_N7S3533C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S3533C2D0Ev,_ZThn228_N7S3533C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3533C2D1Ev,_ZTv0_n12_N7S3533C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S3533C2D1Ev,_ZThn228_N7S3533C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3533C2 = {  "S3533C2", // class name
  bases_S3533C2, 6,
  &(vtc_S3533C2[0]), // expected_vtbl_contents
  &(vtt_S3533C2[0]), // expected_vtt_contents
  ABISELECT(432,264), // object size
  NSPAIRA(_ZTI7S3533C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3533C2),64, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3533C2),6, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names94,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3533C1  : S3533C2 , S3533C6 {
  __tsi64 s3533c1f0[9];
  virtual  ~S3533C1(); // _ZN7S3533C1D2Ev
  virtual void  v1(); // _ZN7S3533C12v1Ev
  virtual void  v2(); // _ZN7S3533C12v2Ev
  virtual void  v3(); // _ZN7S3533C12v3Ev
  virtual void  v4(); // _ZN7S3533C12v4Ev
  virtual void  v5(); // _ZN7S3533C12v5Ev
  virtual void  v6(); // _ZN7S3533C12v6Ev
  S3533C1(); // tgen
};
//SIG(1 S3533C1) C1{ BC2{ BC3{ VBC4{ v7 v8 v9 v10 v11 v12 v13 v14 v15} VBC5{ BC6{ vd v16 v17 v18 Fi FL} vd v19 v20 v21 Fi FC6} v22 v23 v24 v25 FC5[3] Fi Fp[8] Fi FD[3]} BC5 vd v26 v27 v28 v29 v30 v31 v32 v33 v34 Fi} BC6 vd v1 v2 v3 v4 v5 v6 FL[9]}


 S3533C1 ::~S3533C1(){ note_dtor("S3533C1", this);}
void  S3533C1 ::v1(){vfunc_called(this, "_ZN7S3533C12v1Ev");}
void  S3533C1 ::v2(){vfunc_called(this, "_ZN7S3533C12v2Ev");}
void  S3533C1 ::v3(){vfunc_called(this, "_ZN7S3533C12v3Ev");}
void  S3533C1 ::v4(){vfunc_called(this, "_ZN7S3533C12v4Ev");}
void  S3533C1 ::v5(){vfunc_called(this, "_ZN7S3533C12v5Ev");}
void  S3533C1 ::v6(){vfunc_called(this, "_ZN7S3533C12v6Ev");}
S3533C1 ::S3533C1(){ note_ctor("S3533C1", this);} // tgen

static void Test_S3533C1()
{
  extern Class_Descriptor cd_S3533C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(34,89)];
    init_test(&cd_S3533C1, buf);
    S3533C1 *dp, &lv = *(dp=new (buf) S3533C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,352), "sizeof(S3533C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3533C1)");
    check_base_class_offset(lv, (S3533C4*)(S3533C3*)(S3533C2*), 0, "S3533C1");
    /*is_ambiguous_... S3533C1::S3533C5 */ AMB_check_base_class_offset(lv, (S3533C6*)(S3533C5*), ABISELECT(464,316), "S3533C1");
    check_base_class_offset(lv, (S3533C5*)(S3533C3*)(S3533C2*), ABISELECT(464,316), "S3533C1");
    check_base_class_offset(lv, (S3533C3*)(S3533C2*), 0, "S3533C1");
    /*is_ambiguous_... S3533C2::S3533C5 */ AMB_check_base_class_offset(lv, (S3533C6*)(S3533C5*)(S3533C2*), ABISELECT(304,188), "S3533C1");
    /*is_ambiguous_... S3533C2::S3533C5 */ AMB_check_base_class_offset(lv, (S3533C5*)(S3533C2*), ABISELECT(304,188), "S3533C1");
    check_base_class_offset(lv, (S3533C2*), 0, "S3533C1");
    /*is_ambiguous_... S3533C1::S3533C6 */ AMB_check_base_class_offset(lv, (S3533C6*), ABISELECT(368,228), "S3533C1");
    check_field_offset(lv, s3533c1f0, ABISELECT(392,244), "S3533C1.s3533c1f0");
    test_class_info(&lv, &cd_S3533C1);
    dp->~S3533C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3533C1(Test_S3533C1, "S3533C1", ABISELECT(528,352));

#else // __cplusplus

extern void _ZN7S3533C1C1Ev();
extern void _ZN7S3533C1D2Ev();
Name_Map name_map_S3533C1[] = {
  NSPAIR(_ZN7S3533C1C1Ev),
  NSPAIR(_ZN7S3533C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3533C4;
extern VTBL_ENTRY _ZTI7S3533C4[];
extern  VTBL_ENTRY _ZTV7S3533C4[];
extern Class_Descriptor cd_S3533C6;
extern VTBL_ENTRY _ZTI7S3533C6[];
extern  VTBL_ENTRY _ZTV7S3533C6[];
extern Class_Descriptor cd_S3533C5;
extern VTBL_ENTRY _ZTI7S3533C5[];
extern  VTBL_ENTRY _ZTV7S3533C5[];
extern Class_Descriptor cd_S3533C3;
extern VTBL_ENTRY _ZTI7S3533C3[];
extern  VTBL_ENTRY _ZTV7S3533C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3533C3[];
extern Class_Descriptor cd_S3533C6;
extern VTBL_ENTRY _ZTI7S3533C6[];
extern  VTBL_ENTRY _ZTV7S3533C6[];
extern Class_Descriptor cd_S3533C5;
extern VTBL_ENTRY _ZTI7S3533C5[];
extern  VTBL_ENTRY _ZTV7S3533C5[];
extern Class_Descriptor cd_S3533C2;
extern VTBL_ENTRY _ZTI7S3533C2[];
extern  VTBL_ENTRY _ZTV7S3533C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3533C2[];
extern Class_Descriptor cd_S3533C6;
extern VTBL_ENTRY _ZTI7S3533C6[];
extern  VTBL_ENTRY _ZTV7S3533C6[];
static Base_Class bases_S3533C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3533C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3533C6,    ABISELECT(464,316), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3533C5,    ABISELECT(464,316), //bcp->offset
    60, //bcp->virtual_function_table_offset
    9, //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_S3533C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3533C6,    ABISELECT(304,188), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3533C5,    ABISELECT(304,188), //bcp->offset
    43, //bcp->virtual_function_table_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_S3533C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //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_S3533C6,    ABISELECT(368,228), //bcp->offset
    53, //bcp->virtual_function_table_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},
  {0}};
extern VTBL_ENTRY _ZTI7S3533C1[];
extern void _ZN7S3533C42v7Ev();
extern void _ZN7S3533C42v8Ev();
extern void _ZN7S3533C42v9Ev();
extern void _ZN7S3533C43v10Ev();
extern void _ZN7S3533C43v11Ev();
extern void _ZN7S3533C43v12Ev();
extern void _ZN7S3533C43v13Ev();
extern void _ZN7S3533C43v14Ev();
extern void _ZN7S3533C43v15Ev();
extern void _ZN7S3533C33v22Ev();
extern void _ZN7S3533C33v23Ev();
extern void _ZN7S3533C33v24Ev();
extern void _ZN7S3533C33v25Ev();
extern void _ZN7S3533C1D1Ev();
extern void _ZN7S3533C1D0Ev();
extern void _ZN7S3533C23v26Ev();
extern void _ZN7S3533C23v27Ev();
extern void _ZN7S3533C23v28Ev();
extern void _ZN7S3533C23v29Ev();
extern void _ZN7S3533C23v30Ev();
extern void _ZN7S3533C23v31Ev();
extern void _ZN7S3533C23v32Ev();
extern void _ZN7S3533C23v33Ev();
extern void _ZN7S3533C23v34Ev();
extern void _ZN7S3533C12v1Ev();
extern void _ZN7S3533C12v2Ev();
extern void _ZN7S3533C12v3Ev();
extern void _ZN7S3533C12v4Ev();
extern void _ZN7S3533C12v5Ev();
extern void _ZN7S3533C12v6Ev();
extern void ABISELECT(_ZThn304_N7S3533C1D1Ev,_ZThn188_N7S3533C1D1Ev)();
extern void ABISELECT(_ZThn304_N7S3533C1D0Ev,_ZThn188_N7S3533C1D0Ev)();
extern void _ZN7S3533C63v16Ev();
extern void _ZN7S3533C63v17Ev();
extern void _ZN7S3533C63v18Ev();
extern void _ZN7S3533C53v19Ev();
extern void _ZN7S3533C53v20Ev();
extern void _ZN7S3533C53v21Ev();
extern void ABISELECT(_ZThn368_N7S3533C1D1Ev,_ZThn228_N7S3533C1D1Ev)();
extern void ABISELECT(_ZThn368_N7S3533C1D0Ev,_ZThn228_N7S3533C1D0Ev)();
extern void _ZN7S3533C63v16Ev();
extern void _ZN7S3533C63v17Ev();
extern void _ZN7S3533C63v18Ev();
extern void ABISELECT(_ZTv0_n24_N7S3533C1D1Ev,_ZTv0_n12_N7S3533C1D1Ev)();
extern void ABISELECT(_ZThn464_N7S3533C1D1Ev,_ZThn316_N7S3533C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3533C1D0Ev,_ZTv0_n12_N7S3533C1D0Ev)();
extern void ABISELECT(_ZThn464_N7S3533C1D0Ev,_ZThn316_N7S3533C1D0Ev)() __attribute__((weak));
extern void _ZN7S3533C63v16Ev();
extern void _ZN7S3533C63v17Ev();
extern void _ZN7S3533C63v18Ev();
extern void _ZN7S3533C53v19Ev();
extern void _ZN7S3533C53v20Ev();
extern void _ZN7S3533C53v21Ev();
static  VTBL_ENTRY vtc_S3533C1[] = {
  ABISELECT(464,316),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3533C1[0]),
  (VTBL_ENTRY)&_ZN7S3533C42v7Ev,
  (VTBL_ENTRY)&_ZN7S3533C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3533C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v13Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3533C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3533C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3533C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3533C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3533C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3533C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3533C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3533C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3533C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3533C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3533C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3533C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3533C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3533C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3533C23v34Ev,
  (VTBL_ENTRY)&_ZN7S3533C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3533C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3533C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3533C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3533C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3533C12v6Ev,
  ABISELECT(-304,-188),
  (VTBL_ENTRY)&(_ZTI7S3533C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn304_N7S3533C1D1Ev,_ZThn188_N7S3533C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn304_N7S3533C1D0Ev,_ZThn188_N7S3533C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3533C63v16Ev,
  (VTBL_ENTRY)&_ZN7S3533C63v17Ev,
  (VTBL_ENTRY)&_ZN7S3533C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3533C53v19Ev,
  (VTBL_ENTRY)&_ZN7S3533C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3533C53v21Ev,
  ABISELECT(-368,-228),
  (VTBL_ENTRY)&(_ZTI7S3533C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn368_N7S3533C1D1Ev,_ZThn228_N7S3533C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn368_N7S3533C1D0Ev,_ZThn228_N7S3533C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3533C63v16Ev,
  (VTBL_ENTRY)&_ZN7S3533C63v17Ev,
  (VTBL_ENTRY)&_ZN7S3533C63v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-464,-316),
  ABISELECT(-464,-316),
  (VTBL_ENTRY)&(_ZTI7S3533C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3533C1D1Ev,_ZTv0_n12_N7S3533C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3533C1D0Ev,_ZTv0_n12_N7S3533C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3533C63v16Ev,
  (VTBL_ENTRY)&_ZN7S3533C63v17Ev,
  (VTBL_ENTRY)&_ZN7S3533C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3533C53v19Ev,
  (VTBL_ENTRY)&_ZN7S3533C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3533C53v21Ev,
};
extern VTBL_ENTRY _ZTV7S3533C1[];
extern void _ZN7S3533C42v7Ev();
extern void _ZN7S3533C42v8Ev();
extern void _ZN7S3533C42v9Ev();
extern void _ZN7S3533C43v10Ev();
extern void _ZN7S3533C43v11Ev();
extern void _ZN7S3533C43v12Ev();
extern void _ZN7S3533C43v13Ev();
extern void _ZN7S3533C43v14Ev();
extern void _ZN7S3533C43v15Ev();
extern void _ZN7S3533C33v22Ev();
extern void _ZN7S3533C33v23Ev();
extern void _ZN7S3533C33v24Ev();
extern void _ZN7S3533C33v25Ev();
extern void _ZN7S3533C2D1Ev();
extern void _ZN7S3533C2D0Ev();
extern void _ZN7S3533C23v26Ev();
extern void _ZN7S3533C23v27Ev();
extern void _ZN7S3533C23v28Ev();
extern void _ZN7S3533C23v29Ev();
extern void _ZN7S3533C23v30Ev();
extern void _ZN7S3533C23v31Ev();
extern void _ZN7S3533C23v32Ev();
extern void _ZN7S3533C23v33Ev();
extern void _ZN7S3533C23v34Ev();
static  VTBL_ENTRY _tg__ZTV7S3533C2__7S3533C1[] = {
  ABISELECT(464,316),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3533C2[0]),
  (VTBL_ENTRY)&_ZN7S3533C42v7Ev,
  (VTBL_ENTRY)&_ZN7S3533C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3533C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v13Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3533C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3533C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3533C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3533C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3533C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3533C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3533C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3533C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3533C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3533C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3533C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3533C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3533C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3533C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3533C23v34Ev,
};
extern void _ZN7S3533C42v7Ev();
extern void _ZN7S3533C42v8Ev();
extern void _ZN7S3533C42v9Ev();
extern void _ZN7S3533C43v10Ev();
extern void _ZN7S3533C43v11Ev();
extern void _ZN7S3533C43v12Ev();
extern void _ZN7S3533C43v13Ev();
extern void _ZN7S3533C43v14Ev();
extern void _ZN7S3533C43v15Ev();
extern void _ZN7S3533C33v22Ev();
extern void _ZN7S3533C33v23Ev();
extern void _ZN7S3533C33v24Ev();
extern void _ZN7S3533C33v25Ev();
extern void _ZN7S3533C3D1Ev();
extern void _ZN7S3533C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3533C37S3533C2__7S3533C1[] = {
  ABISELECT(464,316),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3533C3[0]),
  (VTBL_ENTRY)&_ZN7S3533C42v7Ev,
  (VTBL_ENTRY)&_ZN7S3533C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3533C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v13Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3533C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3533C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3533C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3533C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3533C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3533C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3533C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3533C3D1Ev,_ZTv0_n12_N7S3533C3D1Ev)();
extern void ABISELECT(_ZThn464_N7S3533C3D1Ev,_ZThn316_N7S3533C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3533C3D0Ev,_ZTv0_n12_N7S3533C3D0Ev)();
extern void ABISELECT(_ZThn464_N7S3533C3D0Ev,_ZThn316_N7S3533C3D0Ev)() __attribute__((weak));
extern void _ZN7S3533C63v16Ev();
extern void _ZN7S3533C63v17Ev();
extern void _ZN7S3533C63v18Ev();
extern void _ZN7S3533C53v19Ev();
extern void _ZN7S3533C53v20Ev();
extern void _ZN7S3533C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3533C5__7S3533C37S3533C2__7S3533C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-464,-316),
  ABISELECT(-464,-316),
  (VTBL_ENTRY)&(_ZTI7S3533C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3533C3D1Ev,_ZTv0_n12_N7S3533C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3533C3D0Ev,_ZTv0_n12_N7S3533C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3533C63v16Ev,
  (VTBL_ENTRY)&_ZN7S3533C63v17Ev,
  (VTBL_ENTRY)&_ZN7S3533C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3533C53v19Ev,
  (VTBL_ENTRY)&_ZN7S3533C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3533C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3533C2D1Ev,_ZTv0_n12_N7S3533C2D1Ev)();
extern void ABISELECT(_ZThn464_N7S3533C2D1Ev,_ZThn316_N7S3533C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3533C2D0Ev,_ZTv0_n12_N7S3533C2D0Ev)();
extern void ABISELECT(_ZThn464_N7S3533C2D0Ev,_ZThn316_N7S3533C2D0Ev)() __attribute__((weak));
extern void _ZN7S3533C63v16Ev();
extern void _ZN7S3533C63v17Ev();
extern void _ZN7S3533C63v18Ev();
extern void _ZN7S3533C53v19Ev();
extern void _ZN7S3533C53v20Ev();
extern void _ZN7S3533C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3533C5__7S3533C2__7S3533C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-464,-316),
  ABISELECT(-464,-316),
  (VTBL_ENTRY)&(_ZTI7S3533C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3533C2D1Ev,_ZTv0_n12_N7S3533C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3533C2D0Ev,_ZTv0_n12_N7S3533C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3533C63v16Ev,
  (VTBL_ENTRY)&_ZN7S3533C63v17Ev,
  (VTBL_ENTRY)&_ZN7S3533C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3533C53v19Ev,
  (VTBL_ENTRY)&_ZN7S3533C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3533C53v21Ev,
};
static  VTT_ENTRY vtt_S3533C1[] = {
  {&(_ZTV7S3533C1[13]),  13,77},
  {&(_tg__ZTV7S3533C2__7S3533C1[13]),  13,37},
  {&(_tg__ZTV7S3533C37S3533C2__7S3533C1[13]),  13,28},
  {&(_tg__ZTV7S3533C37S3533C2__7S3533C1[13]),  13,28},
  {&(_tg__ZTV7S3533C5__7S3533C37S3533C2__7S3533C1[9]),  9,17},
  {&(_tg__ZTV7S3533C2__7S3533C1[13]),  13,37},
  {&(_tg__ZTV7S3533C5__7S3533C2__7S3533C1[9]),  9,17},
  {&(_ZTV7S3533C1[13]),  13,77},
  {&(_ZTV7S3533C1[69]),  69,77},
};
extern VTBL_ENTRY _ZTI7S3533C1[];
extern  VTBL_ENTRY _ZTV7S3533C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3533C1[];
static VTBL_ENTRY alt_thunk_names95[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3533C2D0Ev,_ZTv0_n12_N7S3533C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N7S3533C2D0Ev,_ZThn316_N7S3533C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3533C2D1Ev,_ZTv0_n12_N7S3533C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N7S3533C2D1Ev,_ZThn316_N7S3533C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3533C3D0Ev,_ZTv0_n12_N7S3533C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N7S3533C3D0Ev,_ZThn316_N7S3533C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3533C3D1Ev,_ZTv0_n12_N7S3533C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N7S3533C3D1Ev,_ZThn316_N7S3533C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3533C1D0Ev,_ZTv0_n12_N7S3533C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N7S3533C1D0Ev,_ZThn316_N7S3533C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3533C1D1Ev,_ZTv0_n12_N7S3533C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N7S3533C1D1Ev,_ZThn316_N7S3533C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3533C1 = {  "S3533C1", // class name
  bases_S3533C1, 8,
  &(vtc_S3533C1[0]), // expected_vtbl_contents
  &(vtt_S3533C1[0]), // expected_vtt_contents
  ABISELECT(528,352), // object size
  NSPAIRA(_ZTI7S3533C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3533C1),77, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3533C1),9, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names95,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1708C3  : S1679C4_nt {
  virtual void  v7(); // _ZN7S1708C32v7Ev
  virtual void  v8(); // _ZN7S1708C32v8Ev
  virtual void  v9(); // _ZN7S1708C32v9Ev
  virtual void  v10(); // _ZN7S1708C33v10Ev
  virtual void  v11(); // _ZN7S1708C33v11Ev
  virtual void  v12(); // _ZN7S1708C33v12Ev
  virtual void  v13(); // _ZN7S1708C33v13Ev
  virtual void  v14(); // _ZN7S1708C33v14Ev
  virtual void  v15(); // _ZN7S1708C33v15Ev
  virtual void  v16(); // _ZN7S1708C33v16Ev
  virtual void  v17(); // _ZN7S1708C33v17Ev
  virtual void  v18(); // _ZN7S1708C33v18Ev
  ~S1708C3(); // tgen
  S1708C3(); // tgen
};
//SIG(-1 S1708C3) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S1708C3 ::v7(){vfunc_called(this, "_ZN7S1708C32v7Ev");}
void  S1708C3 ::v8(){vfunc_called(this, "_ZN7S1708C32v8Ev");}
void  S1708C3 ::v9(){vfunc_called(this, "_ZN7S1708C32v9Ev");}
void  S1708C3 ::v10(){vfunc_called(this, "_ZN7S1708C33v10Ev");}
void  S1708C3 ::v11(){vfunc_called(this, "_ZN7S1708C33v11Ev");}
void  S1708C3 ::v12(){vfunc_called(this, "_ZN7S1708C33v12Ev");}
void  S1708C3 ::v13(){vfunc_called(this, "_ZN7S1708C33v13Ev");}
void  S1708C3 ::v14(){vfunc_called(this, "_ZN7S1708C33v14Ev");}
void  S1708C3 ::v15(){vfunc_called(this, "_ZN7S1708C33v15Ev");}
void  S1708C3 ::v16(){vfunc_called(this, "_ZN7S1708C33v16Ev");}
void  S1708C3 ::v17(){vfunc_called(this, "_ZN7S1708C33v17Ev");}
void  S1708C3 ::v18(){vfunc_called(this, "_ZN7S1708C33v18Ev");}
S1708C3 ::~S1708C3(){ note_dtor("S1708C3", this);} // tgen
S1708C3 ::S1708C3(){ note_ctor("S1708C3", this);} // tgen

static void Test_S1708C3()
{
  extern Class_Descriptor cd_S1708C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1708C3, buf);
    S1708C3 *dp, &lv = *(dp=new (buf) S1708C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1708C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1708C3)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S1708C3");
    test_class_info(&lv, &cd_S1708C3);
    dp->~S1708C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1708C3(Test_S1708C3, "S1708C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1708C3C1Ev();
extern void _ZN7S1708C3D1Ev();
Name_Map name_map_S1708C3[] = {
  NSPAIR(_ZN7S1708C3C1Ev),
  NSPAIR(_ZN7S1708C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S1708C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S1708C3[];
extern void _ZN7S1708C3D1Ev();
extern void _ZN7S1708C3D0Ev();
extern void _ZN7S1708C32v7Ev();
extern void _ZN7S1708C32v8Ev();
extern void _ZN7S1708C32v9Ev();
extern void _ZN7S1708C33v10Ev();
extern void _ZN7S1708C33v11Ev();
extern void _ZN7S1708C33v12Ev();
extern void _ZN7S1708C33v13Ev();
extern void _ZN7S1708C33v14Ev();
extern void _ZN7S1708C33v15Ev();
extern void _ZN7S1708C33v16Ev();
extern void _ZN7S1708C33v17Ev();
extern void _ZN7S1708C33v18Ev();
static  VTBL_ENTRY vtc_S1708C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1708C3[0]),
  (VTBL_ENTRY)&_ZN7S1708C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1708C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1708C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1708C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1708C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1708C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1708C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1708C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1708C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1708C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1708C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1708C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1708C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1708C33v18Ev,
};
extern VTBL_ENTRY _ZTI7S1708C3[];
extern  VTBL_ENTRY _ZTV7S1708C3[];
Class_Descriptor cd_S1708C3 = {  "S1708C3", // class name
  bases_S1708C3, 1,
  &(vtc_S1708C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1708C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1708C3),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1708C2  : S1708C3 {
  ::S79C38_nt s1708c2f0;
  ::S5266C36 s1708c2f1;
  ::S1679C8_nt s1708c2f2;
  void *s1708c2f3[4];
  char s1708c2f4;
  __tsi64 s1708c2f5;
  int s1708c2f6;
  virtual  ~S1708C2(); // _ZN7S1708C2D1Ev
  virtual void  v19(); // _ZN7S1708C23v19Ev
  virtual void  v20(); // _ZN7S1708C23v20Ev
  virtual void  v21(); // _ZN7S1708C23v21Ev
  virtual void  v22(); // _ZN7S1708C23v22Ev
  virtual void  v23(); // _ZN7S1708C23v23Ev
  virtual void  v24(); // _ZN7S1708C23v24Ev
  virtual void  v25(); // _ZN7S1708C23v25Ev
  virtual void  v26(); // _ZN7S1708C23v26Ev
  virtual void  v27(); // _ZN7S1708C23v27Ev
  virtual void  v28(); // _ZN7S1708C23v28Ev
  virtual void  v29(); // _ZN7S1708C23v29Ev
  S1708C2(); // tgen
};
//SIG(-1 S1708C2) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 FC4{ m Fp[2]} FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FC8{ m Fp Fi[2] FC6} Fp[2]} Fp[4] Fc FL Fi}


 S1708C2 ::~S1708C2(){ note_dtor("S1708C2", this);}
void  S1708C2 ::v19(){vfunc_called(this, "_ZN7S1708C23v19Ev");}
void  S1708C2 ::v20(){vfunc_called(this, "_ZN7S1708C23v20Ev");}
void  S1708C2 ::v21(){vfunc_called(this, "_ZN7S1708C23v21Ev");}
void  S1708C2 ::v22(){vfunc_called(this, "_ZN7S1708C23v22Ev");}
void  S1708C2 ::v23(){vfunc_called(this, "_ZN7S1708C23v23Ev");}
void  S1708C2 ::v24(){vfunc_called(this, "_ZN7S1708C23v24Ev");}
void  S1708C2 ::v25(){vfunc_called(this, "_ZN7S1708C23v25Ev");}
void  S1708C2 ::v26(){vfunc_called(this, "_ZN7S1708C23v26Ev");}
void  S1708C2 ::v27(){vfunc_called(this, "_ZN7S1708C23v27Ev");}
void  S1708C2 ::v28(){vfunc_called(this, "_ZN7S1708C23v28Ev");}
void  S1708C2 ::v29(){vfunc_called(this, "_ZN7S1708C23v29Ev");}
S1708C2 ::S1708C2(){ note_ctor("S1708C2", this);} // tgen

static void Test_S1708C2()
{
  extern Class_Descriptor cd_S1708C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,23)];
    init_test(&cd_S1708C2, buf);
    S1708C2 *dp, &lv = *(dp=new (buf) S1708C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,88), "sizeof(S1708C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1708C2)");
    check_base_class_offset(lv, (S1679C4_nt*)(S1708C3*), 0, "S1708C2");
    check_base_class_offset(lv, (S1708C3*), 0, "S1708C2");
    check_field_offset(lv, s1708c2f0, ABISELECT(16,8), "S1708C2.s1708c2f0");
    check_field_offset(lv, s1708c2f1, ABISELECT(32,16), "S1708C2.s1708c2f1");
    check_field_offset(lv, s1708c2f2, ABISELECT(56,32), "S1708C2.s1708c2f2");
    check_field_offset(lv, s1708c2f3, ABISELECT(96,56), "S1708C2.s1708c2f3");
    check_field_offset(lv, s1708c2f4, ABISELECT(128,72), "S1708C2.s1708c2f4");
    check_field_offset(lv, s1708c2f5, ABISELECT(136,76), "S1708C2.s1708c2f5");
    check_field_offset(lv, s1708c2f6, ABISELECT(144,84), "S1708C2.s1708c2f6");
    test_class_info(&lv, &cd_S1708C2);
    dp->~S1708C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1708C2(Test_S1708C2, "S1708C2", ABISELECT(152,88));

#else // __cplusplus

extern void _ZN7S1708C2C1Ev();
extern void _ZN7S1708C2D1Ev();
Name_Map name_map_S1708C2[] = {
  NSPAIR(_ZN7S1708C2C1Ev),
  NSPAIR(_ZN7S1708C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S1708C3;
extern VTBL_ENTRY _ZTI7S1708C3[];
extern  VTBL_ENTRY _ZTV7S1708C3[];
static Base_Class bases_S1708C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S1708C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1708C2[];
extern void _ZN7S1708C2D1Ev();
extern void _ZN7S1708C2D0Ev();
extern void _ZN7S1708C32v7Ev();
extern void _ZN7S1708C32v8Ev();
extern void _ZN7S1708C32v9Ev();
extern void _ZN7S1708C33v10Ev();
extern void _ZN7S1708C33v11Ev();
extern void _ZN7S1708C33v12Ev();
extern void _ZN7S1708C33v13Ev();
extern void _ZN7S1708C33v14Ev();
extern void _ZN7S1708C33v15Ev();
extern void _ZN7S1708C33v16Ev();
extern void _ZN7S1708C33v17Ev();
extern void _ZN7S1708C33v18Ev();
extern void _ZN7S1708C23v19Ev();
extern void _ZN7S1708C23v20Ev();
extern void _ZN7S1708C23v21Ev();
extern void _ZN7S1708C23v22Ev();
extern void _ZN7S1708C23v23Ev();
extern void _ZN7S1708C23v24Ev();
extern void _ZN7S1708C23v25Ev();
extern void _ZN7S1708C23v26Ev();
extern void _ZN7S1708C23v27Ev();
extern void _ZN7S1708C23v28Ev();
extern void _ZN7S1708C23v29Ev();
static  VTBL_ENTRY vtc_S1708C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1708C2[0]),
  (VTBL_ENTRY)&_ZN7S1708C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1708C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1708C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1708C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1708C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1708C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1708C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1708C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1708C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1708C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1708C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1708C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1708C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1708C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1708C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1708C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1708C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1708C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1708C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1708C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1708C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1708C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1708C23v27Ev,
  (VTBL_ENTRY)&_ZN7S1708C23v28Ev,
  (VTBL_ENTRY)&_ZN7S1708C23v29Ev,
};
extern VTBL_ENTRY _ZTI7S1708C2[];
extern  VTBL_ENTRY _ZTV7S1708C2[];
Class_Descriptor cd_S1708C2 = {  "S1708C2", // class name
  bases_S1708C2, 2,
  &(vtc_S1708C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,88), // object size
  NSPAIRA(_ZTI7S1708C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1708C2),27, //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  S1708C1  : S1708C2 {
  virtual void  v1(); // _ZN7S1708C12v1Ev
  virtual void  v2(); // _ZN7S1708C12v2Ev
  virtual void  v3(); // _ZN7S1708C12v3Ev
  virtual void  v4(); // _ZN7S1708C12v4Ev
  virtual void  v5(); // _ZN7S1708C12v5Ev
  virtual void  v6(); // _ZN7S1708C12v6Ev
  ~S1708C1(); // tgen
  S1708C1(); // tgen
};
//SIG(1 S1708C1) C1{ BC2{ BC3{ BC4{ vd m Fi} v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18} vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 FC5{ m Fp[2]} FC6{ m Fp Fi[2] FC7{ m}} FC8{ m FC9{ m Fp Fi[2] FC7} Fp[2]} Fp[4] Fc FL Fi} v1 v2 v3 v4 v5 v6}


void  S1708C1 ::v1(){vfunc_called(this, "_ZN7S1708C12v1Ev");}
void  S1708C1 ::v2(){vfunc_called(this, "_ZN7S1708C12v2Ev");}
void  S1708C1 ::v3(){vfunc_called(this, "_ZN7S1708C12v3Ev");}
void  S1708C1 ::v4(){vfunc_called(this, "_ZN7S1708C12v4Ev");}
void  S1708C1 ::v5(){vfunc_called(this, "_ZN7S1708C12v5Ev");}
void  S1708C1 ::v6(){vfunc_called(this, "_ZN7S1708C12v6Ev");}
S1708C1 ::~S1708C1(){ note_dtor("S1708C1", this);} // tgen
S1708C1 ::S1708C1(){ note_ctor("S1708C1", this);} // tgen

static void Test_S1708C1()
{
  extern Class_Descriptor cd_S1708C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,23)];
    init_test(&cd_S1708C1, buf);
    S1708C1 *dp, &lv = *(dp=new (buf) S1708C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,88), "sizeof(S1708C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1708C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S1708C3*)(S1708C2*), 0, "S1708C1");
    check_base_class_offset(lv, (S1708C3*)(S1708C2*), 0, "S1708C1");
    check_base_class_offset(lv, (S1708C2*), 0, "S1708C1");
    test_class_info(&lv, &cd_S1708C1);
    dp->~S1708C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1708C1(Test_S1708C1, "S1708C1", ABISELECT(152,88));

#else // __cplusplus

extern void _ZN7S1708C1C1Ev();
extern void _ZN7S1708C1D1Ev();
Name_Map name_map_S1708C1[] = {
  NSPAIR(_ZN7S1708C1C1Ev),
  NSPAIR(_ZN7S1708C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S1708C3;
extern VTBL_ENTRY _ZTI7S1708C3[];
extern  VTBL_ENTRY _ZTV7S1708C3[];
extern Class_Descriptor cd_S1708C2;
extern VTBL_ENTRY _ZTI7S1708C2[];
extern  VTBL_ENTRY _ZTV7S1708C2[];
static Base_Class bases_S1708C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S1708C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1708C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1708C1[];
extern void _ZN7S1708C1D1Ev();
extern void _ZN7S1708C1D0Ev();
extern void _ZN7S1708C32v7Ev();
extern void _ZN7S1708C32v8Ev();
extern void _ZN7S1708C32v9Ev();
extern void _ZN7S1708C33v10Ev();
extern void _ZN7S1708C33v11Ev();
extern void _ZN7S1708C33v12Ev();
extern void _ZN7S1708C33v13Ev();
extern void _ZN7S1708C33v14Ev();
extern void _ZN7S1708C33v15Ev();
extern void _ZN7S1708C33v16Ev();
extern void _ZN7S1708C33v17Ev();
extern void _ZN7S1708C33v18Ev();
extern void _ZN7S1708C23v19Ev();
extern void _ZN7S1708C23v20Ev();
extern void _ZN7S1708C23v21Ev();
extern void _ZN7S1708C23v22Ev();
extern void _ZN7S1708C23v23Ev();
extern void _ZN7S1708C23v24Ev();
extern void _ZN7S1708C23v25Ev();
extern void _ZN7S1708C23v26Ev();
extern void _ZN7S1708C23v27Ev();
extern void _ZN7S1708C23v28Ev();
extern void _ZN7S1708C23v29Ev();
extern void _ZN7S1708C12v1Ev();
extern void _ZN7S1708C12v2Ev();
extern void _ZN7S1708C12v3Ev();
extern void _ZN7S1708C12v4Ev();
extern void _ZN7S1708C12v5Ev();
extern void _ZN7S1708C12v6Ev();
static  VTBL_ENTRY vtc_S1708C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1708C1[0]),
  (VTBL_ENTRY)&_ZN7S1708C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1708C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1708C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1708C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1708C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1708C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1708C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1708C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1708C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1708C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1708C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1708C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1708C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1708C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1708C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1708C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1708C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1708C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1708C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1708C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1708C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1708C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1708C23v27Ev,
  (VTBL_ENTRY)&_ZN7S1708C23v28Ev,
  (VTBL_ENTRY)&_ZN7S1708C23v29Ev,
  (VTBL_ENTRY)&_ZN7S1708C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1708C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1708C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1708C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1708C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1708C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S1708C1[];
extern  VTBL_ENTRY _ZTV7S1708C1[];
Class_Descriptor cd_S1708C1 = {  "S1708C1", // class name
  bases_S1708C1, 3,
  &(vtc_S1708C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,88), // object size
  NSPAIRA(_ZTI7S1708C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1708C1),33, //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  S1668C3  : S1679C4_nt {
  virtual void  v3(); // _ZN7S1668C32v3Ev
  virtual void  v4(); // _ZN7S1668C32v4Ev
  virtual void  v5(); // _ZN7S1668C32v5Ev
  virtual void  v6(); // _ZN7S1668C32v6Ev
  virtual void  v7(); // _ZN7S1668C32v7Ev
  virtual void  v8(); // _ZN7S1668C32v8Ev
  virtual void  v9(); // _ZN7S1668C32v9Ev
  virtual void  v10(); // _ZN7S1668C33v10Ev
  virtual void  v11(); // _ZN7S1668C33v11Ev
  virtual void  v12(); // _ZN7S1668C33v12Ev
  virtual void  v13(); // _ZN7S1668C33v13Ev
  virtual void  v14(); // _ZN7S1668C33v14Ev
  ~S1668C3(); // tgen
  S1668C3(); // tgen
};
//SIG(-1 S1668C3) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S1668C3 ::v3(){vfunc_called(this, "_ZN7S1668C32v3Ev");}
void  S1668C3 ::v4(){vfunc_called(this, "_ZN7S1668C32v4Ev");}
void  S1668C3 ::v5(){vfunc_called(this, "_ZN7S1668C32v5Ev");}
void  S1668C3 ::v6(){vfunc_called(this, "_ZN7S1668C32v6Ev");}
void  S1668C3 ::v7(){vfunc_called(this, "_ZN7S1668C32v7Ev");}
void  S1668C3 ::v8(){vfunc_called(this, "_ZN7S1668C32v8Ev");}
void  S1668C3 ::v9(){vfunc_called(this, "_ZN7S1668C32v9Ev");}
void  S1668C3 ::v10(){vfunc_called(this, "_ZN7S1668C33v10Ev");}
void  S1668C3 ::v11(){vfunc_called(this, "_ZN7S1668C33v11Ev");}
void  S1668C3 ::v12(){vfunc_called(this, "_ZN7S1668C33v12Ev");}
void  S1668C3 ::v13(){vfunc_called(this, "_ZN7S1668C33v13Ev");}
void  S1668C3 ::v14(){vfunc_called(this, "_ZN7S1668C33v14Ev");}
S1668C3 ::~S1668C3(){ note_dtor("S1668C3", this);} // tgen
S1668C3 ::S1668C3(){ note_ctor("S1668C3", this);} // tgen

static void Test_S1668C3()
{
  extern Class_Descriptor cd_S1668C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1668C3, buf);
    S1668C3 *dp, &lv = *(dp=new (buf) S1668C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1668C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1668C3)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S1668C3");
    test_class_info(&lv, &cd_S1668C3);
    dp->~S1668C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1668C3(Test_S1668C3, "S1668C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1668C3C1Ev();
extern void _ZN7S1668C3D1Ev();
Name_Map name_map_S1668C3[] = {
  NSPAIR(_ZN7S1668C3C1Ev),
  NSPAIR(_ZN7S1668C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S1668C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S1668C3[];
extern void _ZN7S1668C3D1Ev();
extern void _ZN7S1668C3D0Ev();
extern void _ZN7S1668C32v3Ev();
extern void _ZN7S1668C32v4Ev();
extern void _ZN7S1668C32v5Ev();
extern void _ZN7S1668C32v6Ev();
extern void _ZN7S1668C32v7Ev();
extern void _ZN7S1668C32v8Ev();
extern void _ZN7S1668C32v9Ev();
extern void _ZN7S1668C33v10Ev();
extern void _ZN7S1668C33v11Ev();
extern void _ZN7S1668C33v12Ev();
extern void _ZN7S1668C33v13Ev();
extern void _ZN7S1668C33v14Ev();
static  VTBL_ENTRY vtc_S1668C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1668C3[0]),
  (VTBL_ENTRY)&_ZN7S1668C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1668C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1668C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1668C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1668C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1668C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1668C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1668C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1668C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1668C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1668C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1668C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1668C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1668C33v14Ev,
};
extern VTBL_ENTRY _ZTI7S1668C3[];
extern  VTBL_ENTRY _ZTV7S1668C3[];
Class_Descriptor cd_S1668C3 = {  "S1668C3", // class name
  bases_S1668C3, 1,
  &(vtc_S1668C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1668C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1668C3),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1668C2  : S1668C3 {
  ::S79C38_nt s1668c2f0;
  ::S17777C6_nt s1668c2f1;
  ::S1679C8_nt s1668c2f2;
  int s1668c2f3[4];
  ::S4533C11_nt s1668c2f4;
  void *s1668c2f5[4];
  virtual  ~S1668C2(); // _ZN7S1668C2D1Ev
  virtual void  v15(); // _ZN7S1668C23v15Ev
  virtual void  v16(); // _ZN7S1668C23v16Ev
  virtual void  v17(); // _ZN7S1668C23v17Ev
  virtual void  v18(); // _ZN7S1668C23v18Ev
  virtual void  v19(); // _ZN7S1668C23v19Ev
  virtual void  v20(); // _ZN7S1668C23v20Ev
  virtual void  v21(); // _ZN7S1668C23v21Ev
  virtual void  v22(); // _ZN7S1668C23v22Ev
  virtual void  v23(); // _ZN7S1668C23v23Ev
  virtual void  v24(); // _ZN7S1668C23v24Ev
  virtual void  v25(); // _ZN7S1668C23v25Ev
  virtual void  v26(); // _ZN7S1668C23v26Ev
  virtual void  v27(); // _ZN7S1668C23v27Ev
  S1668C2(); // tgen
};
//SIG(-1 S1668C2) C1{ BC2{ BC3{ vd m Fi} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 FC4{ m Fp[2]} FC5{ m Fp} FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]} Fi[4] FC9{ m Fp} Fp[4]}


 S1668C2 ::~S1668C2(){ note_dtor("S1668C2", this);}
void  S1668C2 ::v15(){vfunc_called(this, "_ZN7S1668C23v15Ev");}
void  S1668C2 ::v16(){vfunc_called(this, "_ZN7S1668C23v16Ev");}
void  S1668C2 ::v17(){vfunc_called(this, "_ZN7S1668C23v17Ev");}
void  S1668C2 ::v18(){vfunc_called(this, "_ZN7S1668C23v18Ev");}
void  S1668C2 ::v19(){vfunc_called(this, "_ZN7S1668C23v19Ev");}
void  S1668C2 ::v20(){vfunc_called(this, "_ZN7S1668C23v20Ev");}
void  S1668C2 ::v21(){vfunc_called(this, "_ZN7S1668C23v21Ev");}
void  S1668C2 ::v22(){vfunc_called(this, "_ZN7S1668C23v22Ev");}
void  S1668C2 ::v23(){vfunc_called(this, "_ZN7S1668C23v23Ev");}
void  S1668C2 ::v24(){vfunc_called(this, "_ZN7S1668C23v24Ev");}
void  S1668C2 ::v25(){vfunc_called(this, "_ZN7S1668C23v25Ev");}
void  S1668C2 ::v26(){vfunc_called(this, "_ZN7S1668C23v26Ev");}
void  S1668C2 ::v27(){vfunc_called(this, "_ZN7S1668C23v27Ev");}
S1668C2 ::S1668C2(){ note_ctor("S1668C2", this);} // tgen

static void Test_S1668C2()
{
  extern Class_Descriptor cd_S1668C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,21)];
    init_test(&cd_S1668C2, buf);
    S1668C2 *dp, &lv = *(dp=new (buf) S1668C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,80), "sizeof(S1668C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1668C2)");
    check_base_class_offset(lv, (S1679C4_nt*)(S1668C3*), 0, "S1668C2");
    check_base_class_offset(lv, (S1668C3*), 0, "S1668C2");
    check_field_offset(lv, s1668c2f0, ABISELECT(16,8), "S1668C2.s1668c2f0");
    check_field_offset(lv, s1668c2f1, ABISELECT(32,16), "S1668C2.s1668c2f1");
    check_field_offset(lv, s1668c2f2, ABISELECT(40,20), "S1668C2.s1668c2f2");
    check_field_offset(lv, s1668c2f3, ABISELECT(80,44), "S1668C2.s1668c2f3");
    check_field_offset(lv, s1668c2f4, ABISELECT(96,60), "S1668C2.s1668c2f4");
    check_field_offset(lv, s1668c2f5, ABISELECT(104,64), "S1668C2.s1668c2f5");
    test_class_info(&lv, &cd_S1668C2);
    dp->~S1668C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1668C2(Test_S1668C2, "S1668C2", ABISELECT(136,80));

#else // __cplusplus

extern void _ZN7S1668C2C1Ev();
extern void _ZN7S1668C2D1Ev();
Name_Map name_map_S1668C2[] = {
  NSPAIR(_ZN7S1668C2C1Ev),
  NSPAIR(_ZN7S1668C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S1668C3;
extern VTBL_ENTRY _ZTI7S1668C3[];
extern  VTBL_ENTRY _ZTV7S1668C3[];
static Base_Class bases_S1668C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S1668C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1668C2[];
extern void _ZN7S1668C2D1Ev();
extern void _ZN7S1668C2D0Ev();
extern void _ZN7S1668C32v3Ev();
extern void _ZN7S1668C32v4Ev();
extern void _ZN7S1668C32v5Ev();
extern void _ZN7S1668C32v6Ev();
extern void _ZN7S1668C32v7Ev();
extern void _ZN7S1668C32v8Ev();
extern void _ZN7S1668C32v9Ev();
extern void _ZN7S1668C33v10Ev();
extern void _ZN7S1668C33v11Ev();
extern void _ZN7S1668C33v12Ev();
extern void _ZN7S1668C33v13Ev();
extern void _ZN7S1668C33v14Ev();
extern void _ZN7S1668C23v15Ev();
extern void _ZN7S1668C23v16Ev();
extern void _ZN7S1668C23v17Ev();
extern void _ZN7S1668C23v18Ev();
extern void _ZN7S1668C23v19Ev();
extern void _ZN7S1668C23v20Ev();
extern void _ZN7S1668C23v21Ev();
extern void _ZN7S1668C23v22Ev();
extern void _ZN7S1668C23v23Ev();
extern void _ZN7S1668C23v24Ev();
extern void _ZN7S1668C23v25Ev();
extern void _ZN7S1668C23v26Ev();
extern void _ZN7S1668C23v27Ev();
static  VTBL_ENTRY vtc_S1668C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1668C2[0]),
  (VTBL_ENTRY)&_ZN7S1668C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1668C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1668C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1668C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1668C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1668C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1668C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1668C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1668C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1668C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1668C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1668C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1668C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1668C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1668C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1668C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1668C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1668C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1668C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1668C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1668C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1668C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1668C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1668C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1668C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1668C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1668C23v27Ev,
};
extern VTBL_ENTRY _ZTI7S1668C2[];
extern  VTBL_ENTRY _ZTV7S1668C2[];
Class_Descriptor cd_S1668C2 = {  "S1668C2", // class name
  bases_S1668C2, 2,
  &(vtc_S1668C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,80), // object size
  NSPAIRA(_ZTI7S1668C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1668C2),29, //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  S1668C11_nt  {
  void *s1668c11f0;
  void  mf1668c11(); // _ZN11S1668C11_nt9mf1668c11Ev
};
//SIG(-1 S1668C11_nt) C1{ m Fp}


void  S1668C11_nt ::mf1668c11(){}

//skip512 S1668C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1668C1  : S1668C2 {
  ::S1668C11_nt s1668c1f0;
  virtual void  v1(); // _ZN7S1668C12v1Ev
  virtual void  v2(); // _ZN7S1668C12v2Ev
  ~S1668C1(); // tgen
  S1668C1(); // tgen
};
//SIG(1 S1668C1) C1{ BC2{ BC3{ BC4{ vd m Fi} v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14} vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 FC5{ m Fp[2]} FC6{ m Fp} FC7{ m FC8{ m Fp Fi[2] FC9{ m}} Fp[2]} Fi[4] FC10{ m Fp} Fp[4]} v1 v2 FC11{ m Fp}}


void  S1668C1 ::v1(){vfunc_called(this, "_ZN7S1668C12v1Ev");}
void  S1668C1 ::v2(){vfunc_called(this, "_ZN7S1668C12v2Ev");}
S1668C1 ::~S1668C1(){ note_dtor("S1668C1", this);} // tgen
S1668C1 ::S1668C1(){ note_ctor("S1668C1", this);} // tgen

static void Test_S1668C1()
{
  extern Class_Descriptor cd_S1668C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,22)];
    init_test(&cd_S1668C1, buf);
    S1668C1 *dp, &lv = *(dp=new (buf) S1668C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,84), "sizeof(S1668C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1668C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S1668C3*)(S1668C2*), 0, "S1668C1");
    check_base_class_offset(lv, (S1668C3*)(S1668C2*), 0, "S1668C1");
    check_base_class_offset(lv, (S1668C2*), 0, "S1668C1");
    check_field_offset(lv, s1668c1f0, ABISELECT(136,80), "S1668C1.s1668c1f0");
    test_class_info(&lv, &cd_S1668C1);
    dp->~S1668C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1668C1(Test_S1668C1, "S1668C1", ABISELECT(144,84));

#else // __cplusplus

extern void _ZN7S1668C1C1Ev();
extern void _ZN7S1668C1D1Ev();
Name_Map name_map_S1668C1[] = {
  NSPAIR(_ZN7S1668C1C1Ev),
  NSPAIR(_ZN7S1668C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S1668C3;
extern VTBL_ENTRY _ZTI7S1668C3[];
extern  VTBL_ENTRY _ZTV7S1668C3[];
extern Class_Descriptor cd_S1668C2;
extern VTBL_ENTRY _ZTI7S1668C2[];
extern  VTBL_ENTRY _ZTV7S1668C2[];
static Base_Class bases_S1668C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S1668C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1668C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1668C1[];
extern void _ZN7S1668C1D1Ev();
extern void _ZN7S1668C1D0Ev();
extern void _ZN7S1668C32v3Ev();
extern void _ZN7S1668C32v4Ev();
extern void _ZN7S1668C32v5Ev();
extern void _ZN7S1668C32v6Ev();
extern void _ZN7S1668C32v7Ev();
extern void _ZN7S1668C32v8Ev();
extern void _ZN7S1668C32v9Ev();
extern void _ZN7S1668C33v10Ev();
extern void _ZN7S1668C33v11Ev();
extern void _ZN7S1668C33v12Ev();
extern void _ZN7S1668C33v13Ev();
extern void _ZN7S1668C33v14Ev();
extern void _ZN7S1668C23v15Ev();
extern void _ZN7S1668C23v16Ev();
extern void _ZN7S1668C23v17Ev();
extern void _ZN7S1668C23v18Ev();
extern void _ZN7S1668C23v19Ev();
extern void _ZN7S1668C23v20Ev();
extern void _ZN7S1668C23v21Ev();
extern void _ZN7S1668C23v22Ev();
extern void _ZN7S1668C23v23Ev();
extern void _ZN7S1668C23v24Ev();
extern void _ZN7S1668C23v25Ev();
extern void _ZN7S1668C23v26Ev();
extern void _ZN7S1668C23v27Ev();
extern void _ZN7S1668C12v1Ev();
extern void _ZN7S1668C12v2Ev();
static  VTBL_ENTRY vtc_S1668C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1668C1[0]),
  (VTBL_ENTRY)&_ZN7S1668C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1668C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1668C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1668C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1668C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1668C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1668C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1668C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1668C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1668C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1668C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1668C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1668C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1668C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1668C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1668C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1668C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1668C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1668C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1668C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1668C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1668C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1668C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1668C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1668C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1668C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1668C23v27Ev,
  (VTBL_ENTRY)&_ZN7S1668C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1668C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S1668C1[];
extern  VTBL_ENTRY _ZTV7S1668C1[];
Class_Descriptor cd_S1668C1 = {  "S1668C1", // class name
  bases_S1668C1, 3,
  &(vtc_S1668C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,84), // object size
  NSPAIRA(_ZTI7S1668C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1668C1),31, //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  S1680C3  : S1679C4_nt {
  virtual void  v4(); // _ZN7S1680C32v4Ev
  virtual void  v5(); // _ZN7S1680C32v5Ev
  virtual void  v6(); // _ZN7S1680C32v6Ev
  virtual void  v7(); // _ZN7S1680C32v7Ev
  virtual void  v8(); // _ZN7S1680C32v8Ev
  virtual void  v9(); // _ZN7S1680C32v9Ev
  virtual void  v10(); // _ZN7S1680C33v10Ev
  virtual void  v11(); // _ZN7S1680C33v11Ev
  virtual void  v12(); // _ZN7S1680C33v12Ev
  virtual void  v13(); // _ZN7S1680C33v13Ev
  virtual void  v14(); // _ZN7S1680C33v14Ev
  virtual void  v15(); // _ZN7S1680C33v15Ev
  ~S1680C3(); // tgen
  S1680C3(); // tgen
};
//SIG(-1 S1680C3) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S1680C3 ::v4(){vfunc_called(this, "_ZN7S1680C32v4Ev");}
void  S1680C3 ::v5(){vfunc_called(this, "_ZN7S1680C32v5Ev");}
void  S1680C3 ::v6(){vfunc_called(this, "_ZN7S1680C32v6Ev");}
void  S1680C3 ::v7(){vfunc_called(this, "_ZN7S1680C32v7Ev");}
void  S1680C3 ::v8(){vfunc_called(this, "_ZN7S1680C32v8Ev");}
void  S1680C3 ::v9(){vfunc_called(this, "_ZN7S1680C32v9Ev");}
void  S1680C3 ::v10(){vfunc_called(this, "_ZN7S1680C33v10Ev");}
void  S1680C3 ::v11(){vfunc_called(this, "_ZN7S1680C33v11Ev");}
void  S1680C3 ::v12(){vfunc_called(this, "_ZN7S1680C33v12Ev");}
void  S1680C3 ::v13(){vfunc_called(this, "_ZN7S1680C33v13Ev");}
void  S1680C3 ::v14(){vfunc_called(this, "_ZN7S1680C33v14Ev");}
void  S1680C3 ::v15(){vfunc_called(this, "_ZN7S1680C33v15Ev");}
S1680C3 ::~S1680C3(){ note_dtor("S1680C3", this);} // tgen
S1680C3 ::S1680C3(){ note_ctor("S1680C3", this);} // tgen

static void Test_S1680C3()
{
  extern Class_Descriptor cd_S1680C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1680C3, buf);
    S1680C3 *dp, &lv = *(dp=new (buf) S1680C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1680C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1680C3)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S1680C3");
    test_class_info(&lv, &cd_S1680C3);
    dp->~S1680C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1680C3(Test_S1680C3, "S1680C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1680C3C1Ev();
extern void _ZN7S1680C3D1Ev();
Name_Map name_map_S1680C3[] = {
  NSPAIR(_ZN7S1680C3C1Ev),
  NSPAIR(_ZN7S1680C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S1680C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S1680C3[];
extern void _ZN7S1680C3D1Ev();
extern void _ZN7S1680C3D0Ev();
extern void _ZN7S1680C32v4Ev();
extern void _ZN7S1680C32v5Ev();
extern void _ZN7S1680C32v6Ev();
extern void _ZN7S1680C32v7Ev();
extern void _ZN7S1680C32v8Ev();
extern void _ZN7S1680C32v9Ev();
extern void _ZN7S1680C33v10Ev();
extern void _ZN7S1680C33v11Ev();
extern void _ZN7S1680C33v12Ev();
extern void _ZN7S1680C33v13Ev();
extern void _ZN7S1680C33v14Ev();
extern void _ZN7S1680C33v15Ev();
static  VTBL_ENTRY vtc_S1680C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1680C3[0]),
  (VTBL_ENTRY)&_ZN7S1680C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1680C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1680C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1680C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1680C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1680C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1680C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1680C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1680C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1680C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1680C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1680C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1680C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1680C33v15Ev,
};
extern VTBL_ENTRY _ZTI7S1680C3[];
extern  VTBL_ENTRY _ZTV7S1680C3[];
Class_Descriptor cd_S1680C3 = {  "S1680C3", // class name
  bases_S1680C3, 1,
  &(vtc_S1680C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1680C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1680C3),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1680C2  : S1680C3 {
  ::S79C38_nt s1680c2f0;
  ::S17777C6_nt s1680c2f1;
  ::S1679C8_nt s1680c2f2;
  int s1680c2f3[4];
  ::S4533C11_nt s1680c2f4;
  void *s1680c2f5[4];
  virtual  ~S1680C2(); // _ZN7S1680C2D1Ev
  virtual void  v16(); // _ZN7S1680C23v16Ev
  virtual void  v17(); // _ZN7S1680C23v17Ev
  virtual void  v18(); // _ZN7S1680C23v18Ev
  virtual void  v19(); // _ZN7S1680C23v19Ev
  virtual void  v20(); // _ZN7S1680C23v20Ev
  virtual void  v21(); // _ZN7S1680C23v21Ev
  virtual void  v22(); // _ZN7S1680C23v22Ev
  virtual void  v23(); // _ZN7S1680C23v23Ev
  virtual void  v24(); // _ZN7S1680C23v24Ev
  virtual void  v25(); // _ZN7S1680C23v25Ev
  virtual void  v26(); // _ZN7S1680C23v26Ev
  virtual void  v27(); // _ZN7S1680C23v27Ev
  virtual void  v28(); // _ZN7S1680C23v28Ev
  S1680C2(); // tgen
};
//SIG(-1 S1680C2) C1{ BC2{ BC3{ vd m Fi} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 FC4{ m Fp[2]} FC5{ m Fp} FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]} Fi[4] FC9{ m Fp} Fp[4]}


 S1680C2 ::~S1680C2(){ note_dtor("S1680C2", this);}
void  S1680C2 ::v16(){vfunc_called(this, "_ZN7S1680C23v16Ev");}
void  S1680C2 ::v17(){vfunc_called(this, "_ZN7S1680C23v17Ev");}
void  S1680C2 ::v18(){vfunc_called(this, "_ZN7S1680C23v18Ev");}
void  S1680C2 ::v19(){vfunc_called(this, "_ZN7S1680C23v19Ev");}
void  S1680C2 ::v20(){vfunc_called(this, "_ZN7S1680C23v20Ev");}
void  S1680C2 ::v21(){vfunc_called(this, "_ZN7S1680C23v21Ev");}
void  S1680C2 ::v22(){vfunc_called(this, "_ZN7S1680C23v22Ev");}
void  S1680C2 ::v23(){vfunc_called(this, "_ZN7S1680C23v23Ev");}
void  S1680C2 ::v24(){vfunc_called(this, "_ZN7S1680C23v24Ev");}
void  S1680C2 ::v25(){vfunc_called(this, "_ZN7S1680C23v25Ev");}
void  S1680C2 ::v26(){vfunc_called(this, "_ZN7S1680C23v26Ev");}
void  S1680C2 ::v27(){vfunc_called(this, "_ZN7S1680C23v27Ev");}
void  S1680C2 ::v28(){vfunc_called(this, "_ZN7S1680C23v28Ev");}
S1680C2 ::S1680C2(){ note_ctor("S1680C2", this);} // tgen

static void Test_S1680C2()
{
  extern Class_Descriptor cd_S1680C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,21)];
    init_test(&cd_S1680C2, buf);
    S1680C2 *dp, &lv = *(dp=new (buf) S1680C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,80), "sizeof(S1680C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1680C2)");
    check_base_class_offset(lv, (S1679C4_nt*)(S1680C3*), 0, "S1680C2");
    check_base_class_offset(lv, (S1680C3*), 0, "S1680C2");
    check_field_offset(lv, s1680c2f0, ABISELECT(16,8), "S1680C2.s1680c2f0");
    check_field_offset(lv, s1680c2f1, ABISELECT(32,16), "S1680C2.s1680c2f1");
    check_field_offset(lv, s1680c2f2, ABISELECT(40,20), "S1680C2.s1680c2f2");
    check_field_offset(lv, s1680c2f3, ABISELECT(80,44), "S1680C2.s1680c2f3");
    check_field_offset(lv, s1680c2f4, ABISELECT(96,60), "S1680C2.s1680c2f4");
    check_field_offset(lv, s1680c2f5, ABISELECT(104,64), "S1680C2.s1680c2f5");
    test_class_info(&lv, &cd_S1680C2);
    dp->~S1680C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1680C2(Test_S1680C2, "S1680C2", ABISELECT(136,80));

#else // __cplusplus

extern void _ZN7S1680C2C1Ev();
extern void _ZN7S1680C2D1Ev();
Name_Map name_map_S1680C2[] = {
  NSPAIR(_ZN7S1680C2C1Ev),
  NSPAIR(_ZN7S1680C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S1680C3;
extern VTBL_ENTRY _ZTI7S1680C3[];
extern  VTBL_ENTRY _ZTV7S1680C3[];
static Base_Class bases_S1680C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S1680C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1680C2[];
extern void _ZN7S1680C2D1Ev();
extern void _ZN7S1680C2D0Ev();
extern void _ZN7S1680C32v4Ev();
extern void _ZN7S1680C32v5Ev();
extern void _ZN7S1680C32v6Ev();
extern void _ZN7S1680C32v7Ev();
extern void _ZN7S1680C32v8Ev();
extern void _ZN7S1680C32v9Ev();
extern void _ZN7S1680C33v10Ev();
extern void _ZN7S1680C33v11Ev();
extern void _ZN7S1680C33v12Ev();
extern void _ZN7S1680C33v13Ev();
extern void _ZN7S1680C33v14Ev();
extern void _ZN7S1680C33v15Ev();
extern void _ZN7S1680C23v16Ev();
extern void _ZN7S1680C23v17Ev();
extern void _ZN7S1680C23v18Ev();
extern void _ZN7S1680C23v19Ev();
extern void _ZN7S1680C23v20Ev();
extern void _ZN7S1680C23v21Ev();
extern void _ZN7S1680C23v22Ev();
extern void _ZN7S1680C23v23Ev();
extern void _ZN7S1680C23v24Ev();
extern void _ZN7S1680C23v25Ev();
extern void _ZN7S1680C23v26Ev();
extern void _ZN7S1680C23v27Ev();
extern void _ZN7S1680C23v28Ev();
static  VTBL_ENTRY vtc_S1680C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1680C2[0]),
  (VTBL_ENTRY)&_ZN7S1680C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1680C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1680C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1680C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1680C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1680C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1680C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1680C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1680C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1680C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1680C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1680C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1680C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1680C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1680C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1680C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1680C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1680C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1680C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1680C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1680C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1680C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1680C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1680C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1680C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1680C23v27Ev,
  (VTBL_ENTRY)&_ZN7S1680C23v28Ev,
};
extern VTBL_ENTRY _ZTI7S1680C2[];
extern  VTBL_ENTRY _ZTV7S1680C2[];
Class_Descriptor cd_S1680C2 = {  "S1680C2", // class name
  bases_S1680C2, 2,
  &(vtc_S1680C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,80), // object size
  NSPAIRA(_ZTI7S1680C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1680C2),29, //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  S1680C1  : S1680C2 {
  void *s1680c1f0;
  virtual void  v1(); // _ZN7S1680C12v1Ev
  virtual void  v2(); // _ZN7S1680C12v2Ev
  virtual void  v3(); // _ZN7S1680C12v3Ev
  ~S1680C1(); // tgen
  S1680C1(); // tgen
};
//SIG(1 S1680C1) C1{ BC2{ BC3{ BC4{ vd m Fi} v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15} vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 FC5{ m Fp[2]} FC6{ m Fp} FC7{ m FC8{ m Fp Fi[2] FC9{ m}} Fp[2]} Fi[4] FC10{ m Fp} Fp[4]} v1 v2 v3 Fp}


void  S1680C1 ::v1(){vfunc_called(this, "_ZN7S1680C12v1Ev");}
void  S1680C1 ::v2(){vfunc_called(this, "_ZN7S1680C12v2Ev");}
void  S1680C1 ::v3(){vfunc_called(this, "_ZN7S1680C12v3Ev");}
S1680C1 ::~S1680C1(){ note_dtor("S1680C1", this);} // tgen
S1680C1 ::S1680C1(){ note_ctor("S1680C1", this);} // tgen

static void Test_S1680C1()
{
  extern Class_Descriptor cd_S1680C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,22)];
    init_test(&cd_S1680C1, buf);
    S1680C1 *dp, &lv = *(dp=new (buf) S1680C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,84), "sizeof(S1680C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1680C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S1680C3*)(S1680C2*), 0, "S1680C1");
    check_base_class_offset(lv, (S1680C3*)(S1680C2*), 0, "S1680C1");
    check_base_class_offset(lv, (S1680C2*), 0, "S1680C1");
    check_field_offset(lv, s1680c1f0, ABISELECT(136,80), "S1680C1.s1680c1f0");
    test_class_info(&lv, &cd_S1680C1);
    dp->~S1680C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1680C1(Test_S1680C1, "S1680C1", ABISELECT(144,84));

#else // __cplusplus

extern void _ZN7S1680C1C1Ev();
extern void _ZN7S1680C1D1Ev();
Name_Map name_map_S1680C1[] = {
  NSPAIR(_ZN7S1680C1C1Ev),
  NSPAIR(_ZN7S1680C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S1680C3;
extern VTBL_ENTRY _ZTI7S1680C3[];
extern  VTBL_ENTRY _ZTV7S1680C3[];
extern Class_Descriptor cd_S1680C2;
extern VTBL_ENTRY _ZTI7S1680C2[];
extern  VTBL_ENTRY _ZTV7S1680C2[];
static Base_Class bases_S1680C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S1680C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1680C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1680C1[];
extern void _ZN7S1680C1D1Ev();
extern void _ZN7S1680C1D0Ev();
extern void _ZN7S1680C32v4Ev();
extern void _ZN7S1680C32v5Ev();
extern void _ZN7S1680C32v6Ev();
extern void _ZN7S1680C32v7Ev();
extern void _ZN7S1680C32v8Ev();
extern void _ZN7S1680C32v9Ev();
extern void _ZN7S1680C33v10Ev();
extern void _ZN7S1680C33v11Ev();
extern void _ZN7S1680C33v12Ev();
extern void _ZN7S1680C33v13Ev();
extern void _ZN7S1680C33v14Ev();
extern void _ZN7S1680C33v15Ev();
extern void _ZN7S1680C23v16Ev();
extern void _ZN7S1680C23v17Ev();
extern void _ZN7S1680C23v18Ev();
extern void _ZN7S1680C23v19Ev();
extern void _ZN7S1680C23v20Ev();
extern void _ZN7S1680C23v21Ev();
extern void _ZN7S1680C23v22Ev();
extern void _ZN7S1680C23v23Ev();
extern void _ZN7S1680C23v24Ev();
extern void _ZN7S1680C23v25Ev();
extern void _ZN7S1680C23v26Ev();
extern void _ZN7S1680C23v27Ev();
extern void _ZN7S1680C23v28Ev();
extern void _ZN7S1680C12v1Ev();
extern void _ZN7S1680C12v2Ev();
extern void _ZN7S1680C12v3Ev();
static  VTBL_ENTRY vtc_S1680C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1680C1[0]),
  (VTBL_ENTRY)&_ZN7S1680C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1680C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1680C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1680C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1680C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1680C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1680C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1680C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1680C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1680C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1680C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1680C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1680C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1680C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1680C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1680C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1680C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1680C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1680C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1680C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1680C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1680C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1680C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1680C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1680C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1680C23v27Ev,
  (VTBL_ENTRY)&_ZN7S1680C23v28Ev,
  (VTBL_ENTRY)&_ZN7S1680C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1680C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1680C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1680C1[];
extern  VTBL_ENTRY _ZTV7S1680C1[];
Class_Descriptor cd_S1680C1 = {  "S1680C1", // class name
  bases_S1680C1, 3,
  &(vtc_S1680C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,84), // object size
  NSPAIRA(_ZTI7S1680C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1680C1),32, //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  S1669C3  : S1679C4_nt {
  virtual void  v3(); // _ZN7S1669C32v3Ev
  virtual void  v4(); // _ZN7S1669C32v4Ev
  virtual void  v5(); // _ZN7S1669C32v5Ev
  virtual void  v6(); // _ZN7S1669C32v6Ev
  virtual void  v7(); // _ZN7S1669C32v7Ev
  virtual void  v8(); // _ZN7S1669C32v8Ev
  virtual void  v9(); // _ZN7S1669C32v9Ev
  virtual void  v10(); // _ZN7S1669C33v10Ev
  virtual void  v11(); // _ZN7S1669C33v11Ev
  virtual void  v12(); // _ZN7S1669C33v12Ev
  virtual void  v13(); // _ZN7S1669C33v13Ev
  virtual void  v14(); // _ZN7S1669C33v14Ev
  ~S1669C3(); // tgen
  S1669C3(); // tgen
};
//SIG(-1 S1669C3) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S1669C3 ::v3(){vfunc_called(this, "_ZN7S1669C32v3Ev");}
void  S1669C3 ::v4(){vfunc_called(this, "_ZN7S1669C32v4Ev");}
void  S1669C3 ::v5(){vfunc_called(this, "_ZN7S1669C32v5Ev");}
void  S1669C3 ::v6(){vfunc_called(this, "_ZN7S1669C32v6Ev");}
void  S1669C3 ::v7(){vfunc_called(this, "_ZN7S1669C32v7Ev");}
void  S1669C3 ::v8(){vfunc_called(this, "_ZN7S1669C32v8Ev");}
void  S1669C3 ::v9(){vfunc_called(this, "_ZN7S1669C32v9Ev");}
void  S1669C3 ::v10(){vfunc_called(this, "_ZN7S1669C33v10Ev");}
void  S1669C3 ::v11(){vfunc_called(this, "_ZN7S1669C33v11Ev");}
void  S1669C3 ::v12(){vfunc_called(this, "_ZN7S1669C33v12Ev");}
void  S1669C3 ::v13(){vfunc_called(this, "_ZN7S1669C33v13Ev");}
void  S1669C3 ::v14(){vfunc_called(this, "_ZN7S1669C33v14Ev");}
S1669C3 ::~S1669C3(){ note_dtor("S1669C3", this);} // tgen
S1669C3 ::S1669C3(){ note_ctor("S1669C3", this);} // tgen

static void Test_S1669C3()
{
  extern Class_Descriptor cd_S1669C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1669C3, buf);
    S1669C3 *dp, &lv = *(dp=new (buf) S1669C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1669C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1669C3)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S1669C3");
    test_class_info(&lv, &cd_S1669C3);
    dp->~S1669C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1669C3(Test_S1669C3, "S1669C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1669C3C1Ev();
extern void _ZN7S1669C3D1Ev();
Name_Map name_map_S1669C3[] = {
  NSPAIR(_ZN7S1669C3C1Ev),
  NSPAIR(_ZN7S1669C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S1669C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S1669C3[];
extern void _ZN7S1669C3D1Ev();
extern void _ZN7S1669C3D0Ev();
extern void _ZN7S1669C32v3Ev();
extern void _ZN7S1669C32v4Ev();
extern void _ZN7S1669C32v5Ev();
extern void _ZN7S1669C32v6Ev();
extern void _ZN7S1669C32v7Ev();
extern void _ZN7S1669C32v8Ev();
extern void _ZN7S1669C32v9Ev();
extern void _ZN7S1669C33v10Ev();
extern void _ZN7S1669C33v11Ev();
extern void _ZN7S1669C33v12Ev();
extern void _ZN7S1669C33v13Ev();
extern void _ZN7S1669C33v14Ev();
static  VTBL_ENTRY vtc_S1669C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1669C3[0]),
  (VTBL_ENTRY)&_ZN7S1669C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1669C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1669C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1669C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1669C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1669C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1669C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1669C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1669C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1669C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1669C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1669C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1669C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1669C33v14Ev,
};
extern VTBL_ENTRY _ZTI7S1669C3[];
extern  VTBL_ENTRY _ZTV7S1669C3[];
Class_Descriptor cd_S1669C3 = {  "S1669C3", // class name
  bases_S1669C3, 1,
  &(vtc_S1669C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1669C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1669C3),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1669C2  : S1669C3 {
  ::S79C38_nt s1669c2f0;
  ::S17777C6_nt s1669c2f1;
  ::S1679C8_nt s1669c2f2;
  int s1669c2f3[4];
  ::S4533C11_nt s1669c2f4;
  void *s1669c2f5[4];
  virtual  ~S1669C2(); // _ZN7S1669C2D1Ev
  virtual void  v15(); // _ZN7S1669C23v15Ev
  virtual void  v16(); // _ZN7S1669C23v16Ev
  virtual void  v17(); // _ZN7S1669C23v17Ev
  virtual void  v18(); // _ZN7S1669C23v18Ev
  virtual void  v19(); // _ZN7S1669C23v19Ev
  virtual void  v20(); // _ZN7S1669C23v20Ev
  virtual void  v21(); // _ZN7S1669C23v21Ev
  virtual void  v22(); // _ZN7S1669C23v22Ev
  virtual void  v23(); // _ZN7S1669C23v23Ev
  virtual void  v24(); // _ZN7S1669C23v24Ev
  virtual void  v25(); // _ZN7S1669C23v25Ev
  virtual void  v26(); // _ZN7S1669C23v26Ev
  virtual void  v27(); // _ZN7S1669C23v27Ev
  S1669C2(); // tgen
};
//SIG(-1 S1669C2) C1{ BC2{ BC3{ vd m Fi} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 FC4{ m Fp[2]} FC5{ m Fp} FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]} Fi[4] FC9{ m Fp} Fp[4]}


 S1669C2 ::~S1669C2(){ note_dtor("S1669C2", this);}
void  S1669C2 ::v15(){vfunc_called(this, "_ZN7S1669C23v15Ev");}
void  S1669C2 ::v16(){vfunc_called(this, "_ZN7S1669C23v16Ev");}
void  S1669C2 ::v17(){vfunc_called(this, "_ZN7S1669C23v17Ev");}
void  S1669C2 ::v18(){vfunc_called(this, "_ZN7S1669C23v18Ev");}
void  S1669C2 ::v19(){vfunc_called(this, "_ZN7S1669C23v19Ev");}
void  S1669C2 ::v20(){vfunc_called(this, "_ZN7S1669C23v20Ev");}
void  S1669C2 ::v21(){vfunc_called(this, "_ZN7S1669C23v21Ev");}
void  S1669C2 ::v22(){vfunc_called(this, "_ZN7S1669C23v22Ev");}
void  S1669C2 ::v23(){vfunc_called(this, "_ZN7S1669C23v23Ev");}
void  S1669C2 ::v24(){vfunc_called(this, "_ZN7S1669C23v24Ev");}
void  S1669C2 ::v25(){vfunc_called(this, "_ZN7S1669C23v25Ev");}
void  S1669C2 ::v26(){vfunc_called(this, "_ZN7S1669C23v26Ev");}
void  S1669C2 ::v27(){vfunc_called(this, "_ZN7S1669C23v27Ev");}
S1669C2 ::S1669C2(){ note_ctor("S1669C2", this);} // tgen

static void Test_S1669C2()
{
  extern Class_Descriptor cd_S1669C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,21)];
    init_test(&cd_S1669C2, buf);
    S1669C2 *dp, &lv = *(dp=new (buf) S1669C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,80), "sizeof(S1669C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1669C2)");
    check_base_class_offset(lv, (S1679C4_nt*)(S1669C3*), 0, "S1669C2");
    check_base_class_offset(lv, (S1669C3*), 0, "S1669C2");
    check_field_offset(lv, s1669c2f0, ABISELECT(16,8), "S1669C2.s1669c2f0");
    check_field_offset(lv, s1669c2f1, ABISELECT(32,16), "S1669C2.s1669c2f1");
    check_field_offset(lv, s1669c2f2, ABISELECT(40,20), "S1669C2.s1669c2f2");
    check_field_offset(lv, s1669c2f3, ABISELECT(80,44), "S1669C2.s1669c2f3");
    check_field_offset(lv, s1669c2f4, ABISELECT(96,60), "S1669C2.s1669c2f4");
    check_field_offset(lv, s1669c2f5, ABISELECT(104,64), "S1669C2.s1669c2f5");
    test_class_info(&lv, &cd_S1669C2);
    dp->~S1669C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1669C2(Test_S1669C2, "S1669C2", ABISELECT(136,80));

#else // __cplusplus

extern void _ZN7S1669C2C1Ev();
extern void _ZN7S1669C2D1Ev();
Name_Map name_map_S1669C2[] = {
  NSPAIR(_ZN7S1669C2C1Ev),
  NSPAIR(_ZN7S1669C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S1669C3;
extern VTBL_ENTRY _ZTI7S1669C3[];
extern  VTBL_ENTRY _ZTV7S1669C3[];
static Base_Class bases_S1669C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S1669C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1669C2[];
extern void _ZN7S1669C2D1Ev();
extern void _ZN7S1669C2D0Ev();
extern void _ZN7S1669C32v3Ev();
extern void _ZN7S1669C32v4Ev();
extern void _ZN7S1669C32v5Ev();
extern void _ZN7S1669C32v6Ev();
extern void _ZN7S1669C32v7Ev();
extern void _ZN7S1669C32v8Ev();
extern void _ZN7S1669C32v9Ev();
extern void _ZN7S1669C33v10Ev();
extern void _ZN7S1669C33v11Ev();
extern void _ZN7S1669C33v12Ev();
extern void _ZN7S1669C33v13Ev();
extern void _ZN7S1669C33v14Ev();
extern void _ZN7S1669C23v15Ev();
extern void _ZN7S1669C23v16Ev();
extern void _ZN7S1669C23v17Ev();
extern void _ZN7S1669C23v18Ev();
extern void _ZN7S1669C23v19Ev();
extern void _ZN7S1669C23v20Ev();
extern void _ZN7S1669C23v21Ev();
extern void _ZN7S1669C23v22Ev();
extern void _ZN7S1669C23v23Ev();
extern void _ZN7S1669C23v24Ev();
extern void _ZN7S1669C23v25Ev();
extern void _ZN7S1669C23v26Ev();
extern void _ZN7S1669C23v27Ev();
static  VTBL_ENTRY vtc_S1669C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1669C2[0]),
  (VTBL_ENTRY)&_ZN7S1669C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1669C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1669C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1669C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1669C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1669C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1669C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1669C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1669C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1669C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1669C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1669C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1669C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1669C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1669C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1669C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1669C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1669C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1669C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1669C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1669C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1669C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1669C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1669C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1669C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1669C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1669C23v27Ev,
};
extern VTBL_ENTRY _ZTI7S1669C2[];
extern  VTBL_ENTRY _ZTV7S1669C2[];
Class_Descriptor cd_S1669C2 = {  "S1669C2", // class name
  bases_S1669C2, 2,
  &(vtc_S1669C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,80), // object size
  NSPAIRA(_ZTI7S1669C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1669C2),29, //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  S1669C1  : S1669C2 {
  void *s1669c1f0;
  int s1669c1f1;
  virtual void  v1(); // _ZN7S1669C12v1Ev
  virtual void  v2(); // _ZN7S1669C12v2Ev
  ~S1669C1(); // tgen
  S1669C1(); // tgen
};
//SIG(1 S1669C1) C1{ BC2{ BC3{ BC4{ vd m Fi} v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14} vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 FC5{ m Fp[2]} FC6{ m Fp} FC7{ m FC8{ m Fp Fi[2] FC9{ m}} Fp[2]} Fi[4] FC10{ m Fp} Fp[4]} v1 v2 Fp Fi}


void  S1669C1 ::v1(){vfunc_called(this, "_ZN7S1669C12v1Ev");}
void  S1669C1 ::v2(){vfunc_called(this, "_ZN7S1669C12v2Ev");}
S1669C1 ::~S1669C1(){ note_dtor("S1669C1", this);} // tgen
S1669C1 ::S1669C1(){ note_ctor("S1669C1", this);} // tgen

static void Test_S1669C1()
{
  extern Class_Descriptor cd_S1669C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,23)];
    init_test(&cd_S1669C1, buf);
    S1669C1 *dp, &lv = *(dp=new (buf) S1669C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,88), "sizeof(S1669C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1669C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S1669C3*)(S1669C2*), 0, "S1669C1");
    check_base_class_offset(lv, (S1669C3*)(S1669C2*), 0, "S1669C1");
    check_base_class_offset(lv, (S1669C2*), 0, "S1669C1");
    check_field_offset(lv, s1669c1f0, ABISELECT(136,80), "S1669C1.s1669c1f0");
    check_field_offset(lv, s1669c1f1, ABISELECT(144,84), "S1669C1.s1669c1f1");
    test_class_info(&lv, &cd_S1669C1);
    dp->~S1669C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1669C1(Test_S1669C1, "S1669C1", ABISELECT(152,88));

#else // __cplusplus

extern void _ZN7S1669C1C1Ev();
extern void _ZN7S1669C1D1Ev();
Name_Map name_map_S1669C1[] = {
  NSPAIR(_ZN7S1669C1C1Ev),
  NSPAIR(_ZN7S1669C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S1669C3;
extern VTBL_ENTRY _ZTI7S1669C3[];
extern  VTBL_ENTRY _ZTV7S1669C3[];
extern Class_Descriptor cd_S1669C2;
extern VTBL_ENTRY _ZTI7S1669C2[];
extern  VTBL_ENTRY _ZTV7S1669C2[];
static Base_Class bases_S1669C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S1669C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1669C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1669C1[];
extern void _ZN7S1669C1D1Ev();
extern void _ZN7S1669C1D0Ev();
extern void _ZN7S1669C32v3Ev();
extern void _ZN7S1669C32v4Ev();
extern void _ZN7S1669C32v5Ev();
extern void _ZN7S1669C32v6Ev();
extern void _ZN7S1669C32v7Ev();
extern void _ZN7S1669C32v8Ev();
extern void _ZN7S1669C32v9Ev();
extern void _ZN7S1669C33v10Ev();
extern void _ZN7S1669C33v11Ev();
extern void _ZN7S1669C33v12Ev();
extern void _ZN7S1669C33v13Ev();
extern void _ZN7S1669C33v14Ev();
extern void _ZN7S1669C23v15Ev();
extern void _ZN7S1669C23v16Ev();
extern void _ZN7S1669C23v17Ev();
extern void _ZN7S1669C23v18Ev();
extern void _ZN7S1669C23v19Ev();
extern void _ZN7S1669C23v20Ev();
extern void _ZN7S1669C23v21Ev();
extern void _ZN7S1669C23v22Ev();
extern void _ZN7S1669C23v23Ev();
extern void _ZN7S1669C23v24Ev();
extern void _ZN7S1669C23v25Ev();
extern void _ZN7S1669C23v26Ev();
extern void _ZN7S1669C23v27Ev();
extern void _ZN7S1669C12v1Ev();
extern void _ZN7S1669C12v2Ev();
static  VTBL_ENTRY vtc_S1669C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1669C1[0]),
  (VTBL_ENTRY)&_ZN7S1669C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1669C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1669C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1669C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1669C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1669C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1669C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1669C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1669C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1669C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1669C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1669C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1669C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1669C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1669C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1669C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1669C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1669C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1669C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1669C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1669C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1669C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1669C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1669C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1669C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1669C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1669C23v27Ev,
  (VTBL_ENTRY)&_ZN7S1669C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1669C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S1669C1[];
extern  VTBL_ENTRY _ZTV7S1669C1[];
Class_Descriptor cd_S1669C1 = {  "S1669C1", // class name
  bases_S1669C1, 3,
  &(vtc_S1669C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,88), // object size
  NSPAIRA(_ZTI7S1669C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1669C1),31, //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  S3766C2  : S1679C4_nt {
  virtual void  v9(); // _ZN7S3766C22v9Ev
  virtual void  v10(); // _ZN7S3766C23v10Ev
  virtual void  v11(); // _ZN7S3766C23v11Ev
  virtual void  v12(); // _ZN7S3766C23v12Ev
  virtual void  v13(); // _ZN7S3766C23v13Ev
  virtual void  v14(); // _ZN7S3766C23v14Ev
  virtual void  v15(); // _ZN7S3766C23v15Ev
  virtual void  v16(); // _ZN7S3766C23v16Ev
  virtual void  v17(); // _ZN7S3766C23v17Ev
  virtual void  v18(); // _ZN7S3766C23v18Ev
  virtual void  v19(); // _ZN7S3766C23v19Ev
  virtual void  v20(); // _ZN7S3766C23v20Ev
  ~S3766C2(); // tgen
  S3766C2(); // tgen
};
//SIG(-1 S3766C2) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S3766C2 ::v9(){vfunc_called(this, "_ZN7S3766C22v9Ev");}
void  S3766C2 ::v10(){vfunc_called(this, "_ZN7S3766C23v10Ev");}
void  S3766C2 ::v11(){vfunc_called(this, "_ZN7S3766C23v11Ev");}
void  S3766C2 ::v12(){vfunc_called(this, "_ZN7S3766C23v12Ev");}
void  S3766C2 ::v13(){vfunc_called(this, "_ZN7S3766C23v13Ev");}
void  S3766C2 ::v14(){vfunc_called(this, "_ZN7S3766C23v14Ev");}
void  S3766C2 ::v15(){vfunc_called(this, "_ZN7S3766C23v15Ev");}
void  S3766C2 ::v16(){vfunc_called(this, "_ZN7S3766C23v16Ev");}
void  S3766C2 ::v17(){vfunc_called(this, "_ZN7S3766C23v17Ev");}
void  S3766C2 ::v18(){vfunc_called(this, "_ZN7S3766C23v18Ev");}
void  S3766C2 ::v19(){vfunc_called(this, "_ZN7S3766C23v19Ev");}
void  S3766C2 ::v20(){vfunc_called(this, "_ZN7S3766C23v20Ev");}
S3766C2 ::~S3766C2(){ note_dtor("S3766C2", this);} // tgen
S3766C2 ::S3766C2(){ note_ctor("S3766C2", this);} // tgen

static void Test_S3766C2()
{
  extern Class_Descriptor cd_S3766C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3766C2, buf);
    S3766C2 *dp, &lv = *(dp=new (buf) S3766C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3766C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3766C2)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S3766C2");
    test_class_info(&lv, &cd_S3766C2);
    dp->~S3766C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3766C2(Test_S3766C2, "S3766C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3766C2C1Ev();
extern void _ZN7S3766C2D1Ev();
Name_Map name_map_S3766C2[] = {
  NSPAIR(_ZN7S3766C2C1Ev),
  NSPAIR(_ZN7S3766C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S3766C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S3766C2[];
extern void _ZN7S3766C2D1Ev();
extern void _ZN7S3766C2D0Ev();
extern void _ZN7S3766C22v9Ev();
extern void _ZN7S3766C23v10Ev();
extern void _ZN7S3766C23v11Ev();
extern void _ZN7S3766C23v12Ev();
extern void _ZN7S3766C23v13Ev();
extern void _ZN7S3766C23v14Ev();
extern void _ZN7S3766C23v15Ev();
extern void _ZN7S3766C23v16Ev();
extern void _ZN7S3766C23v17Ev();
extern void _ZN7S3766C23v18Ev();
extern void _ZN7S3766C23v19Ev();
extern void _ZN7S3766C23v20Ev();
static  VTBL_ENTRY vtc_S3766C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3766C2[0]),
  (VTBL_ENTRY)&_ZN7S3766C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3766C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3766C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3766C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3766C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3766C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3766C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3766C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3766C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3766C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3766C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3766C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3766C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3766C23v20Ev,
};
extern VTBL_ENTRY _ZTI7S3766C2[];
extern  VTBL_ENTRY _ZTV7S3766C2[];
Class_Descriptor cd_S3766C2 = {  "S3766C2", // class name
  bases_S3766C2, 1,
  &(vtc_S3766C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3766C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3766C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3766C1  : S3766C2 {
  ::S79C38_nt s3766c1f0;
  ::S5266C19_nt s3766c1f1;
  ::S5266C19_nt s3766c1f2;
  char s3766c1f3;
  ::S5266C36 s3766c1f4;
  ::S5266C36 s3766c1f5;
  ::S5266C36 s3766c1f6;
  ::S1679C8_nt s3766c1f7;
  void *s3766c1f8[2];
  ::S5266C36 s3766c1f9;
  virtual  ~S3766C1(); // _ZN7S3766C1D1Ev
  virtual void  v1(); // _ZN7S3766C12v1Ev
  virtual void  v2(); // _ZN7S3766C12v2Ev
  virtual void  v3(); // _ZN7S3766C12v3Ev
  virtual void  v4(); // _ZN7S3766C12v4Ev
  virtual void  v5(); // _ZN7S3766C12v5Ev
  virtual void  v6(); // _ZN7S3766C12v6Ev
  virtual void  v7(); // _ZN7S3766C12v7Ev
  virtual void  v8(); // _ZN7S3766C12v8Ev
  S3766C1(); // tgen
};
//SIG(1 S3766C1) C1{ BC2{ BC3{ vd m Fi} v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20} vd v1 v2 v3 v4 v5 v6 v7 v8 FC4{ m Fp[2]} FC5{ m Fp Fi FC6{ m}} FC5 Fc FC7{ m Fp Fi[2] FC8{ m}} FC7 FC7 FC9{ m FC10{ m Fp Fi[2] FC8} Fp[2]} Fp[2] FC7}


 S3766C1 ::~S3766C1(){ note_dtor("S3766C1", this);}
void  S3766C1 ::v1(){vfunc_called(this, "_ZN7S3766C12v1Ev");}
void  S3766C1 ::v2(){vfunc_called(this, "_ZN7S3766C12v2Ev");}
void  S3766C1 ::v3(){vfunc_called(this, "_ZN7S3766C12v3Ev");}
void  S3766C1 ::v4(){vfunc_called(this, "_ZN7S3766C12v4Ev");}
void  S3766C1 ::v5(){vfunc_called(this, "_ZN7S3766C12v5Ev");}
void  S3766C1 ::v6(){vfunc_called(this, "_ZN7S3766C12v6Ev");}
void  S3766C1 ::v7(){vfunc_called(this, "_ZN7S3766C12v7Ev");}
void  S3766C1 ::v8(){vfunc_called(this, "_ZN7S3766C12v8Ev");}
S3766C1 ::S3766C1(){ note_ctor("S3766C1", this);} // tgen

static void Test_S3766C1()
{
  extern Class_Descriptor cd_S3766C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,36)];
    init_test(&cd_S3766C1, buf);
    S3766C1 *dp, &lv = *(dp=new (buf) S3766C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,140), "sizeof(S3766C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3766C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S3766C2*), 0, "S3766C1");
    check_base_class_offset(lv, (S3766C2*), 0, "S3766C1");
    check_field_offset(lv, s3766c1f0, ABISELECT(16,8), "S3766C1.s3766c1f0");
    check_field_offset(lv, s3766c1f1, ABISELECT(32,16), "S3766C1.s3766c1f1");
    check_field_offset(lv, s3766c1f2, ABISELECT(48,28), "S3766C1.s3766c1f2");
    check_field_offset(lv, s3766c1f3, ABISELECT(64,40), "S3766C1.s3766c1f3");
    check_field_offset(lv, s3766c1f4, ABISELECT(72,44), "S3766C1.s3766c1f4");
    check_field_offset(lv, s3766c1f5, ABISELECT(96,60), "S3766C1.s3766c1f5");
    check_field_offset(lv, s3766c1f6, ABISELECT(120,76), "S3766C1.s3766c1f6");
    check_field_offset(lv, s3766c1f7, ABISELECT(144,92), "S3766C1.s3766c1f7");
    check_field_offset(lv, s3766c1f8, ABISELECT(184,116), "S3766C1.s3766c1f8");
    check_field_offset(lv, s3766c1f9, ABISELECT(200,124), "S3766C1.s3766c1f9");
    test_class_info(&lv, &cd_S3766C1);
    dp->~S3766C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3766C1(Test_S3766C1, "S3766C1", ABISELECT(224,140));

#else // __cplusplus

extern void _ZN7S3766C1C1Ev();
extern void _ZN7S3766C1D1Ev();
Name_Map name_map_S3766C1[] = {
  NSPAIR(_ZN7S3766C1C1Ev),
  NSPAIR(_ZN7S3766C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S3766C2;
extern VTBL_ENTRY _ZTI7S3766C2[];
extern  VTBL_ENTRY _ZTV7S3766C2[];
static Base_Class bases_S3766C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S3766C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3766C1[];
extern void _ZN7S3766C1D1Ev();
extern void _ZN7S3766C1D0Ev();
extern void _ZN7S3766C22v9Ev();
extern void _ZN7S3766C23v10Ev();
extern void _ZN7S3766C23v11Ev();
extern void _ZN7S3766C23v12Ev();
extern void _ZN7S3766C23v13Ev();
extern void _ZN7S3766C23v14Ev();
extern void _ZN7S3766C23v15Ev();
extern void _ZN7S3766C23v16Ev();
extern void _ZN7S3766C23v17Ev();
extern void _ZN7S3766C23v18Ev();
extern void _ZN7S3766C23v19Ev();
extern void _ZN7S3766C23v20Ev();
extern void _ZN7S3766C12v1Ev();
extern void _ZN7S3766C12v2Ev();
extern void _ZN7S3766C12v3Ev();
extern void _ZN7S3766C12v4Ev();
extern void _ZN7S3766C12v5Ev();
extern void _ZN7S3766C12v6Ev();
extern void _ZN7S3766C12v7Ev();
extern void _ZN7S3766C12v8Ev();
static  VTBL_ENTRY vtc_S3766C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3766C1[0]),
  (VTBL_ENTRY)&_ZN7S3766C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3766C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3766C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3766C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3766C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3766C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3766C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3766C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3766C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3766C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3766C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3766C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3766C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3766C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3766C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3766C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3766C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3766C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3766C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3766C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3766C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3766C12v8Ev,
};
extern VTBL_ENTRY _ZTI7S3766C1[];
extern  VTBL_ENTRY _ZTV7S3766C1[];
Class_Descriptor cd_S3766C1 = {  "S3766C1", // class name
  bases_S3766C1, 2,
  &(vtc_S3766C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,140), // object size
  NSPAIRA(_ZTI7S3766C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3766C1),24, //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  S1663C3  : S1679C4_nt {
  virtual void  v1(); // _ZN7S1663C32v1Ev
  virtual void  v2(); // _ZN7S1663C32v2Ev
  virtual void  v3(); // _ZN7S1663C32v3Ev
  virtual void  v4(); // _ZN7S1663C32v4Ev
  virtual void  v5(); // _ZN7S1663C32v5Ev
  virtual void  v6(); // _ZN7S1663C32v6Ev
  virtual void  v7(); // _ZN7S1663C32v7Ev
  virtual void  v8(); // _ZN7S1663C32v8Ev
  virtual void  v9(); // _ZN7S1663C32v9Ev
  virtual void  v10(); // _ZN7S1663C33v10Ev
  virtual void  v11(); // _ZN7S1663C33v11Ev
  virtual void  v12(); // _ZN7S1663C33v12Ev
  ~S1663C3(); // tgen
  S1663C3(); // tgen
};
//SIG(-1 S1663C3) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S1663C3 ::v1(){vfunc_called(this, "_ZN7S1663C32v1Ev");}
void  S1663C3 ::v2(){vfunc_called(this, "_ZN7S1663C32v2Ev");}
void  S1663C3 ::v3(){vfunc_called(this, "_ZN7S1663C32v3Ev");}
void  S1663C3 ::v4(){vfunc_called(this, "_ZN7S1663C32v4Ev");}
void  S1663C3 ::v5(){vfunc_called(this, "_ZN7S1663C32v5Ev");}
void  S1663C3 ::v6(){vfunc_called(this, "_ZN7S1663C32v6Ev");}
void  S1663C3 ::v7(){vfunc_called(this, "_ZN7S1663C32v7Ev");}
void  S1663C3 ::v8(){vfunc_called(this, "_ZN7S1663C32v8Ev");}
void  S1663C3 ::v9(){vfunc_called(this, "_ZN7S1663C32v9Ev");}
void  S1663C3 ::v10(){vfunc_called(this, "_ZN7S1663C33v10Ev");}
void  S1663C3 ::v11(){vfunc_called(this, "_ZN7S1663C33v11Ev");}
void  S1663C3 ::v12(){vfunc_called(this, "_ZN7S1663C33v12Ev");}
S1663C3 ::~S1663C3(){ note_dtor("S1663C3", this);} // tgen
S1663C3 ::S1663C3(){ note_ctor("S1663C3", this);} // tgen

static void Test_S1663C3()
{
  extern Class_Descriptor cd_S1663C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1663C3, buf);
    S1663C3 *dp, &lv = *(dp=new (buf) S1663C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1663C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1663C3)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S1663C3");
    test_class_info(&lv, &cd_S1663C3);
    dp->~S1663C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1663C3(Test_S1663C3, "S1663C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1663C3C1Ev();
extern void _ZN7S1663C3D1Ev();
Name_Map name_map_S1663C3[] = {
  NSPAIR(_ZN7S1663C3C1Ev),
  NSPAIR(_ZN7S1663C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S1663C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S1663C3[];
extern void _ZN7S1663C3D1Ev();
extern void _ZN7S1663C3D0Ev();
extern void _ZN7S1663C32v1Ev();
extern void _ZN7S1663C32v2Ev();
extern void _ZN7S1663C32v3Ev();
extern void _ZN7S1663C32v4Ev();
extern void _ZN7S1663C32v5Ev();
extern void _ZN7S1663C32v6Ev();
extern void _ZN7S1663C32v7Ev();
extern void _ZN7S1663C32v8Ev();
extern void _ZN7S1663C32v9Ev();
extern void _ZN7S1663C33v10Ev();
extern void _ZN7S1663C33v11Ev();
extern void _ZN7S1663C33v12Ev();
static  VTBL_ENTRY vtc_S1663C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1663C3[0]),
  (VTBL_ENTRY)&_ZN7S1663C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1663C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1663C32v1Ev,
  (VTBL_ENTRY)&_ZN7S1663C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1663C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1663C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1663C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1663C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1663C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1663C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1663C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1663C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1663C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1663C33v12Ev,
};
extern VTBL_ENTRY _ZTI7S1663C3[];
extern  VTBL_ENTRY _ZTV7S1663C3[];
Class_Descriptor cd_S1663C3 = {  "S1663C3", // class name
  bases_S1663C3, 1,
  &(vtc_S1663C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1663C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1663C3),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1663C2  : S1663C3 {
  ::S79C38_nt s1663c2f0;
  ::S5266C36 s1663c2f1;
  ::S1679C8_nt s1663c2f2;
  void *s1663c2f3[4];
  char s1663c2f4;
  __tsi64 s1663c2f5;
  int s1663c2f6;
  virtual  ~S1663C2(); // _ZN7S1663C2D1Ev
  virtual void  v13(); // _ZN7S1663C23v13Ev
  virtual void  v14(); // _ZN7S1663C23v14Ev
  virtual void  v15(); // _ZN7S1663C23v15Ev
  virtual void  v16(); // _ZN7S1663C23v16Ev
  virtual void  v17(); // _ZN7S1663C23v17Ev
  virtual void  v18(); // _ZN7S1663C23v18Ev
  virtual void  v19(); // _ZN7S1663C23v19Ev
  virtual void  v20(); // _ZN7S1663C23v20Ev
  virtual void  v21(); // _ZN7S1663C23v21Ev
  virtual void  v22(); // _ZN7S1663C23v22Ev
  virtual void  v23(); // _ZN7S1663C23v23Ev
  S1663C2(); // tgen
};
//SIG(-1 S1663C2) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 FC4{ m Fp[2]} FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FC8{ m Fp Fi[2] FC6} Fp[2]} Fp[4] Fc FL Fi}


 S1663C2 ::~S1663C2(){ note_dtor("S1663C2", this);}
void  S1663C2 ::v13(){vfunc_called(this, "_ZN7S1663C23v13Ev");}
void  S1663C2 ::v14(){vfunc_called(this, "_ZN7S1663C23v14Ev");}
void  S1663C2 ::v15(){vfunc_called(this, "_ZN7S1663C23v15Ev");}
void  S1663C2 ::v16(){vfunc_called(this, "_ZN7S1663C23v16Ev");}
void  S1663C2 ::v17(){vfunc_called(this, "_ZN7S1663C23v17Ev");}
void  S1663C2 ::v18(){vfunc_called(this, "_ZN7S1663C23v18Ev");}
void  S1663C2 ::v19(){vfunc_called(this, "_ZN7S1663C23v19Ev");}
void  S1663C2 ::v20(){vfunc_called(this, "_ZN7S1663C23v20Ev");}
void  S1663C2 ::v21(){vfunc_called(this, "_ZN7S1663C23v21Ev");}
void  S1663C2 ::v22(){vfunc_called(this, "_ZN7S1663C23v22Ev");}
void  S1663C2 ::v23(){vfunc_called(this, "_ZN7S1663C23v23Ev");}
S1663C2 ::S1663C2(){ note_ctor("S1663C2", this);} // tgen

static void Test_S1663C2()
{
  extern Class_Descriptor cd_S1663C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,23)];
    init_test(&cd_S1663C2, buf);
    S1663C2 *dp, &lv = *(dp=new (buf) S1663C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,88), "sizeof(S1663C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1663C2)");
    check_base_class_offset(lv, (S1679C4_nt*)(S1663C3*), 0, "S1663C2");
    check_base_class_offset(lv, (S1663C3*), 0, "S1663C2");
    check_field_offset(lv, s1663c2f0, ABISELECT(16,8), "S1663C2.s1663c2f0");
    check_field_offset(lv, s1663c2f1, ABISELECT(32,16), "S1663C2.s1663c2f1");
    check_field_offset(lv, s1663c2f2, ABISELECT(56,32), "S1663C2.s1663c2f2");
    check_field_offset(lv, s1663c2f3, ABISELECT(96,56), "S1663C2.s1663c2f3");
    check_field_offset(lv, s1663c2f4, ABISELECT(128,72), "S1663C2.s1663c2f4");
    check_field_offset(lv, s1663c2f5, ABISELECT(136,76), "S1663C2.s1663c2f5");
    check_field_offset(lv, s1663c2f6, ABISELECT(144,84), "S1663C2.s1663c2f6");
    test_class_info(&lv, &cd_S1663C2);
    dp->~S1663C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1663C2(Test_S1663C2, "S1663C2", ABISELECT(152,88));

#else // __cplusplus

extern void _ZN7S1663C2C1Ev();
extern void _ZN7S1663C2D1Ev();
Name_Map name_map_S1663C2[] = {
  NSPAIR(_ZN7S1663C2C1Ev),
  NSPAIR(_ZN7S1663C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S1663C3;
extern VTBL_ENTRY _ZTI7S1663C3[];
extern  VTBL_ENTRY _ZTV7S1663C3[];
static Base_Class bases_S1663C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S1663C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1663C2[];
extern void _ZN7S1663C2D1Ev();
extern void _ZN7S1663C2D0Ev();
extern void _ZN7S1663C32v1Ev();
extern void _ZN7S1663C32v2Ev();
extern void _ZN7S1663C32v3Ev();
extern void _ZN7S1663C32v4Ev();
extern void _ZN7S1663C32v5Ev();
extern void _ZN7S1663C32v6Ev();
extern void _ZN7S1663C32v7Ev();
extern void _ZN7S1663C32v8Ev();
extern void _ZN7S1663C32v9Ev();
extern void _ZN7S1663C33v10Ev();
extern void _ZN7S1663C33v11Ev();
extern void _ZN7S1663C33v12Ev();
extern void _ZN7S1663C23v13Ev();
extern void _ZN7S1663C23v14Ev();
extern void _ZN7S1663C23v15Ev();
extern void _ZN7S1663C23v16Ev();
extern void _ZN7S1663C23v17Ev();
extern void _ZN7S1663C23v18Ev();
extern void _ZN7S1663C23v19Ev();
extern void _ZN7S1663C23v20Ev();
extern void _ZN7S1663C23v21Ev();
extern void _ZN7S1663C23v22Ev();
extern void _ZN7S1663C23v23Ev();
static  VTBL_ENTRY vtc_S1663C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1663C2[0]),
  (VTBL_ENTRY)&_ZN7S1663C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1663C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1663C32v1Ev,
  (VTBL_ENTRY)&_ZN7S1663C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1663C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1663C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1663C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1663C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1663C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1663C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1663C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1663C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1663C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1663C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1663C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1663C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1663C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1663C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1663C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1663C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1663C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1663C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1663C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1663C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1663C23v23Ev,
};
extern VTBL_ENTRY _ZTI7S1663C2[];
extern  VTBL_ENTRY _ZTV7S1663C2[];
Class_Descriptor cd_S1663C2 = {  "S1663C2", // class name
  bases_S1663C2, 2,
  &(vtc_S1663C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,88), // object size
  NSPAIRA(_ZTI7S1663C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1663C2),27, //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  S1663C1  : S1663C2 {
  ::S7719C17_nt s1663c1f0;
  virtual  ~S1663C1(); // _ZN7S1663C1D1Ev
  S1663C1(); // tgen
};
//SIG(1 S1663C1) C1{ BC2{ BC3{ BC4{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 FC5{ m Fp[2]} FC6{ m Fp Fi[2] FC7{ m}} FC8{ m FC9{ m Fp Fi[2] FC7} Fp[2]} Fp[4] Fc FL Fi} vd FC10{ m Fi}}


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

static void Test_S1663C1()
{
  extern Class_Descriptor cd_S1663C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,24)];
    init_test(&cd_S1663C1, buf);
    S1663C1 *dp, &lv = *(dp=new (buf) S1663C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,92), "sizeof(S1663C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1663C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S1663C3*)(S1663C2*), 0, "S1663C1");
    check_base_class_offset(lv, (S1663C3*)(S1663C2*), 0, "S1663C1");
    check_base_class_offset(lv, (S1663C2*), 0, "S1663C1");
    check_field_offset(lv, s1663c1f0, ABISELECT(148,88), "S1663C1.s1663c1f0");
    test_class_info(&lv, &cd_S1663C1);
    dp->~S1663C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1663C1(Test_S1663C1, "S1663C1", ABISELECT(152,92));

#else // __cplusplus

extern void _ZN7S1663C1C1Ev();
extern void _ZN7S1663C1D1Ev();
Name_Map name_map_S1663C1[] = {
  NSPAIR(_ZN7S1663C1C1Ev),
  NSPAIR(_ZN7S1663C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S1663C3;
extern VTBL_ENTRY _ZTI7S1663C3[];
extern  VTBL_ENTRY _ZTV7S1663C3[];
extern Class_Descriptor cd_S1663C2;
extern VTBL_ENTRY _ZTI7S1663C2[];
extern  VTBL_ENTRY _ZTV7S1663C2[];
static Base_Class bases_S1663C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S1663C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1663C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1663C1[];
extern void _ZN7S1663C1D1Ev();
extern void _ZN7S1663C1D0Ev();
extern void _ZN7S1663C32v1Ev();
extern void _ZN7S1663C32v2Ev();
extern void _ZN7S1663C32v3Ev();
extern void _ZN7S1663C32v4Ev();
extern void _ZN7S1663C32v5Ev();
extern void _ZN7S1663C32v6Ev();
extern void _ZN7S1663C32v7Ev();
extern void _ZN7S1663C32v8Ev();
extern void _ZN7S1663C32v9Ev();
extern void _ZN7S1663C33v10Ev();
extern void _ZN7S1663C33v11Ev();
extern void _ZN7S1663C33v12Ev();
extern void _ZN7S1663C23v13Ev();
extern void _ZN7S1663C23v14Ev();
extern void _ZN7S1663C23v15Ev();
extern void _ZN7S1663C23v16Ev();
extern void _ZN7S1663C23v17Ev();
extern void _ZN7S1663C23v18Ev();
extern void _ZN7S1663C23v19Ev();
extern void _ZN7S1663C23v20Ev();
extern void _ZN7S1663C23v21Ev();
extern void _ZN7S1663C23v22Ev();
extern void _ZN7S1663C23v23Ev();
static  VTBL_ENTRY vtc_S1663C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1663C1[0]),
  (VTBL_ENTRY)&_ZN7S1663C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1663C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1663C32v1Ev,
  (VTBL_ENTRY)&_ZN7S1663C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1663C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1663C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1663C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1663C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1663C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1663C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1663C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1663C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1663C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1663C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1663C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1663C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1663C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1663C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1663C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1663C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1663C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1663C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1663C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1663C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1663C23v23Ev,
};
extern VTBL_ENTRY _ZTI7S1663C1[];
extern  VTBL_ENTRY _ZTV7S1663C1[];
Class_Descriptor cd_S1663C1 = {  "S1663C1", // class name
  bases_S1663C1, 3,
  &(vtc_S1663C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,92), // object size
  NSPAIRA(_ZTI7S1663C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1663C1),27, //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  S1670C3  : S1679C4_nt {
  virtual void  v3(); // _ZN7S1670C32v3Ev
  virtual void  v4(); // _ZN7S1670C32v4Ev
  virtual void  v5(); // _ZN7S1670C32v5Ev
  virtual void  v6(); // _ZN7S1670C32v6Ev
  virtual void  v7(); // _ZN7S1670C32v7Ev
  virtual void  v8(); // _ZN7S1670C32v8Ev
  virtual void  v9(); // _ZN7S1670C32v9Ev
  virtual void  v10(); // _ZN7S1670C33v10Ev
  virtual void  v11(); // _ZN7S1670C33v11Ev
  virtual void  v12(); // _ZN7S1670C33v12Ev
  virtual void  v13(); // _ZN7S1670C33v13Ev
  virtual void  v14(); // _ZN7S1670C33v14Ev
  ~S1670C3(); // tgen
  S1670C3(); // tgen
};
//SIG(-1 S1670C3) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S1670C3 ::v3(){vfunc_called(this, "_ZN7S1670C32v3Ev");}
void  S1670C3 ::v4(){vfunc_called(this, "_ZN7S1670C32v4Ev");}
void  S1670C3 ::v5(){vfunc_called(this, "_ZN7S1670C32v5Ev");}
void  S1670C3 ::v6(){vfunc_called(this, "_ZN7S1670C32v6Ev");}
void  S1670C3 ::v7(){vfunc_called(this, "_ZN7S1670C32v7Ev");}
void  S1670C3 ::v8(){vfunc_called(this, "_ZN7S1670C32v8Ev");}
void  S1670C3 ::v9(){vfunc_called(this, "_ZN7S1670C32v9Ev");}
void  S1670C3 ::v10(){vfunc_called(this, "_ZN7S1670C33v10Ev");}
void  S1670C3 ::v11(){vfunc_called(this, "_ZN7S1670C33v11Ev");}
void  S1670C3 ::v12(){vfunc_called(this, "_ZN7S1670C33v12Ev");}
void  S1670C3 ::v13(){vfunc_called(this, "_ZN7S1670C33v13Ev");}
void  S1670C3 ::v14(){vfunc_called(this, "_ZN7S1670C33v14Ev");}
S1670C3 ::~S1670C3(){ note_dtor("S1670C3", this);} // tgen
S1670C3 ::S1670C3(){ note_ctor("S1670C3", this);} // tgen

static void Test_S1670C3()
{
  extern Class_Descriptor cd_S1670C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1670C3, buf);
    S1670C3 *dp, &lv = *(dp=new (buf) S1670C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1670C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1670C3)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S1670C3");
    test_class_info(&lv, &cd_S1670C3);
    dp->~S1670C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1670C3(Test_S1670C3, "S1670C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1670C3C1Ev();
extern void _ZN7S1670C3D1Ev();
Name_Map name_map_S1670C3[] = {
  NSPAIR(_ZN7S1670C3C1Ev),
  NSPAIR(_ZN7S1670C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S1670C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S1670C3[];
extern void _ZN7S1670C3D1Ev();
extern void _ZN7S1670C3D0Ev();
extern void _ZN7S1670C32v3Ev();
extern void _ZN7S1670C32v4Ev();
extern void _ZN7S1670C32v5Ev();
extern void _ZN7S1670C32v6Ev();
extern void _ZN7S1670C32v7Ev();
extern void _ZN7S1670C32v8Ev();
extern void _ZN7S1670C32v9Ev();
extern void _ZN7S1670C33v10Ev();
extern void _ZN7S1670C33v11Ev();
extern void _ZN7S1670C33v12Ev();
extern void _ZN7S1670C33v13Ev();
extern void _ZN7S1670C33v14Ev();
static  VTBL_ENTRY vtc_S1670C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1670C3[0]),
  (VTBL_ENTRY)&_ZN7S1670C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1670C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1670C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1670C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1670C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1670C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1670C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1670C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1670C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1670C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1670C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1670C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1670C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1670C33v14Ev,
};
extern VTBL_ENTRY _ZTI7S1670C3[];
extern  VTBL_ENTRY _ZTV7S1670C3[];
Class_Descriptor cd_S1670C3 = {  "S1670C3", // class name
  bases_S1670C3, 1,
  &(vtc_S1670C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1670C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1670C3),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1670C2  : S1670C3 {
  ::S79C38_nt s1670c2f0;
  ::S17777C6_nt s1670c2f1;
  ::S1679C8_nt s1670c2f2;
  int s1670c2f3[4];
  ::S4533C11_nt s1670c2f4;
  void *s1670c2f5[4];
  virtual  ~S1670C2(); // _ZN7S1670C2D1Ev
  virtual void  v15(); // _ZN7S1670C23v15Ev
  virtual void  v16(); // _ZN7S1670C23v16Ev
  virtual void  v17(); // _ZN7S1670C23v17Ev
  virtual void  v18(); // _ZN7S1670C23v18Ev
  virtual void  v19(); // _ZN7S1670C23v19Ev
  virtual void  v20(); // _ZN7S1670C23v20Ev
  virtual void  v21(); // _ZN7S1670C23v21Ev
  virtual void  v22(); // _ZN7S1670C23v22Ev
  virtual void  v23(); // _ZN7S1670C23v23Ev
  virtual void  v24(); // _ZN7S1670C23v24Ev
  virtual void  v25(); // _ZN7S1670C23v25Ev
  virtual void  v26(); // _ZN7S1670C23v26Ev
  virtual void  v27(); // _ZN7S1670C23v27Ev
  S1670C2(); // tgen
};
//SIG(-1 S1670C2) C1{ BC2{ BC3{ vd m Fi} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 FC4{ m Fp[2]} FC5{ m Fp} FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]} Fi[4] FC9{ m Fp} Fp[4]}


 S1670C2 ::~S1670C2(){ note_dtor("S1670C2", this);}
void  S1670C2 ::v15(){vfunc_called(this, "_ZN7S1670C23v15Ev");}
void  S1670C2 ::v16(){vfunc_called(this, "_ZN7S1670C23v16Ev");}
void  S1670C2 ::v17(){vfunc_called(this, "_ZN7S1670C23v17Ev");}
void  S1670C2 ::v18(){vfunc_called(this, "_ZN7S1670C23v18Ev");}
void  S1670C2 ::v19(){vfunc_called(this, "_ZN7S1670C23v19Ev");}
void  S1670C2 ::v20(){vfunc_called(this, "_ZN7S1670C23v20Ev");}
void  S1670C2 ::v21(){vfunc_called(this, "_ZN7S1670C23v21Ev");}
void  S1670C2 ::v22(){vfunc_called(this, "_ZN7S1670C23v22Ev");}
void  S1670C2 ::v23(){vfunc_called(this, "_ZN7S1670C23v23Ev");}
void  S1670C2 ::v24(){vfunc_called(this, "_ZN7S1670C23v24Ev");}
void  S1670C2 ::v25(){vfunc_called(this, "_ZN7S1670C23v25Ev");}
void  S1670C2 ::v26(){vfunc_called(this, "_ZN7S1670C23v26Ev");}
void  S1670C2 ::v27(){vfunc_called(this, "_ZN7S1670C23v27Ev");}
S1670C2 ::S1670C2(){ note_ctor("S1670C2", this);} // tgen

static void Test_S1670C2()
{
  extern Class_Descriptor cd_S1670C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,21)];
    init_test(&cd_S1670C2, buf);
    S1670C2 *dp, &lv = *(dp=new (buf) S1670C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,80), "sizeof(S1670C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1670C2)");
    check_base_class_offset(lv, (S1679C4_nt*)(S1670C3*), 0, "S1670C2");
    check_base_class_offset(lv, (S1670C3*), 0, "S1670C2");
    check_field_offset(lv, s1670c2f0, ABISELECT(16,8), "S1670C2.s1670c2f0");
    check_field_offset(lv, s1670c2f1, ABISELECT(32,16), "S1670C2.s1670c2f1");
    check_field_offset(lv, s1670c2f2, ABISELECT(40,20), "S1670C2.s1670c2f2");
    check_field_offset(lv, s1670c2f3, ABISELECT(80,44), "S1670C2.s1670c2f3");
    check_field_offset(lv, s1670c2f4, ABISELECT(96,60), "S1670C2.s1670c2f4");
    check_field_offset(lv, s1670c2f5, ABISELECT(104,64), "S1670C2.s1670c2f5");
    test_class_info(&lv, &cd_S1670C2);
    dp->~S1670C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1670C2(Test_S1670C2, "S1670C2", ABISELECT(136,80));

#else // __cplusplus

extern void _ZN7S1670C2C1Ev();
extern void _ZN7S1670C2D1Ev();
Name_Map name_map_S1670C2[] = {
  NSPAIR(_ZN7S1670C2C1Ev),
  NSPAIR(_ZN7S1670C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S1670C3;
extern VTBL_ENTRY _ZTI7S1670C3[];
extern  VTBL_ENTRY _ZTV7S1670C3[];
static Base_Class bases_S1670C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S1670C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1670C2[];
extern void _ZN7S1670C2D1Ev();
extern void _ZN7S1670C2D0Ev();
extern void _ZN7S1670C32v3Ev();
extern void _ZN7S1670C32v4Ev();
extern void _ZN7S1670C32v5Ev();
extern void _ZN7S1670C32v6Ev();
extern void _ZN7S1670C32v7Ev();
extern void _ZN7S1670C32v8Ev();
extern void _ZN7S1670C32v9Ev();
extern void _ZN7S1670C33v10Ev();
extern void _ZN7S1670C33v11Ev();
extern void _ZN7S1670C33v12Ev();
extern void _ZN7S1670C33v13Ev();
extern void _ZN7S1670C33v14Ev();
extern void _ZN7S1670C23v15Ev();
extern void _ZN7S1670C23v16Ev();
extern void _ZN7S1670C23v17Ev();
extern void _ZN7S1670C23v18Ev();
extern void _ZN7S1670C23v19Ev();
extern void _ZN7S1670C23v20Ev();
extern void _ZN7S1670C23v21Ev();
extern void _ZN7S1670C23v22Ev();
extern void _ZN7S1670C23v23Ev();
extern void _ZN7S1670C23v24Ev();
extern void _ZN7S1670C23v25Ev();
extern void _ZN7S1670C23v26Ev();
extern void _ZN7S1670C23v27Ev();
static  VTBL_ENTRY vtc_S1670C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1670C2[0]),
  (VTBL_ENTRY)&_ZN7S1670C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1670C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1670C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1670C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1670C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1670C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1670C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1670C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1670C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1670C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1670C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1670C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1670C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1670C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1670C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1670C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1670C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1670C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1670C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1670C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1670C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1670C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1670C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1670C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1670C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1670C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1670C23v27Ev,
};
extern VTBL_ENTRY _ZTI7S1670C2[];
extern  VTBL_ENTRY _ZTV7S1670C2[];
Class_Descriptor cd_S1670C2 = {  "S1670C2", // class name
  bases_S1670C2, 2,
  &(vtc_S1670C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,80), // object size
  NSPAIRA(_ZTI7S1670C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1670C2),29, //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  S1670C1  : S1670C2 {
  void *s1670c1f0;
  virtual void  v1(); // _ZN7S1670C12v1Ev
  virtual void  v2(); // _ZN7S1670C12v2Ev
  ~S1670C1(); // tgen
  S1670C1(); // tgen
};
//SIG(1 S1670C1) C1{ BC2{ BC3{ BC4{ vd m Fi} v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14} vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 FC5{ m Fp[2]} FC6{ m Fp} FC7{ m FC8{ m Fp Fi[2] FC9{ m}} Fp[2]} Fi[4] FC10{ m Fp} Fp[4]} v1 v2 Fp}


void  S1670C1 ::v1(){vfunc_called(this, "_ZN7S1670C12v1Ev");}
void  S1670C1 ::v2(){vfunc_called(this, "_ZN7S1670C12v2Ev");}
S1670C1 ::~S1670C1(){ note_dtor("S1670C1", this);} // tgen
S1670C1 ::S1670C1(){ note_ctor("S1670C1", this);} // tgen

static void Test_S1670C1()
{
  extern Class_Descriptor cd_S1670C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,22)];
    init_test(&cd_S1670C1, buf);
    S1670C1 *dp, &lv = *(dp=new (buf) S1670C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,84), "sizeof(S1670C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1670C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S1670C3*)(S1670C2*), 0, "S1670C1");
    check_base_class_offset(lv, (S1670C3*)(S1670C2*), 0, "S1670C1");
    check_base_class_offset(lv, (S1670C2*), 0, "S1670C1");
    check_field_offset(lv, s1670c1f0, ABISELECT(136,80), "S1670C1.s1670c1f0");
    test_class_info(&lv, &cd_S1670C1);
    dp->~S1670C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1670C1(Test_S1670C1, "S1670C1", ABISELECT(144,84));

#else // __cplusplus

extern void _ZN7S1670C1C1Ev();
extern void _ZN7S1670C1D1Ev();
Name_Map name_map_S1670C1[] = {
  NSPAIR(_ZN7S1670C1C1Ev),
  NSPAIR(_ZN7S1670C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S1670C3;
extern VTBL_ENTRY _ZTI7S1670C3[];
extern  VTBL_ENTRY _ZTV7S1670C3[];
extern Class_Descriptor cd_S1670C2;
extern VTBL_ENTRY _ZTI7S1670C2[];
extern  VTBL_ENTRY _ZTV7S1670C2[];
static Base_Class bases_S1670C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S1670C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1670C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1670C1[];
extern void _ZN7S1670C1D1Ev();
extern void _ZN7S1670C1D0Ev();
extern void _ZN7S1670C32v3Ev();
extern void _ZN7S1670C32v4Ev();
extern void _ZN7S1670C32v5Ev();
extern void _ZN7S1670C32v6Ev();
extern void _ZN7S1670C32v7Ev();
extern void _ZN7S1670C32v8Ev();
extern void _ZN7S1670C32v9Ev();
extern void _ZN7S1670C33v10Ev();
extern void _ZN7S1670C33v11Ev();
extern void _ZN7S1670C33v12Ev();
extern void _ZN7S1670C33v13Ev();
extern void _ZN7S1670C33v14Ev();
extern void _ZN7S1670C23v15Ev();
extern void _ZN7S1670C23v16Ev();
extern void _ZN7S1670C23v17Ev();
extern void _ZN7S1670C23v18Ev();
extern void _ZN7S1670C23v19Ev();
extern void _ZN7S1670C23v20Ev();
extern void _ZN7S1670C23v21Ev();
extern void _ZN7S1670C23v22Ev();
extern void _ZN7S1670C23v23Ev();
extern void _ZN7S1670C23v24Ev();
extern void _ZN7S1670C23v25Ev();
extern void _ZN7S1670C23v26Ev();
extern void _ZN7S1670C23v27Ev();
extern void _ZN7S1670C12v1Ev();
extern void _ZN7S1670C12v2Ev();
static  VTBL_ENTRY vtc_S1670C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1670C1[0]),
  (VTBL_ENTRY)&_ZN7S1670C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1670C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1670C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1670C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1670C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1670C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1670C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1670C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1670C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1670C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1670C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1670C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1670C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1670C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1670C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1670C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1670C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1670C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1670C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1670C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1670C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1670C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1670C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1670C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1670C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1670C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1670C23v27Ev,
  (VTBL_ENTRY)&_ZN7S1670C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1670C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S1670C1[];
extern  VTBL_ENTRY _ZTV7S1670C1[];
Class_Descriptor cd_S1670C1 = {  "S1670C1", // class name
  bases_S1670C1, 3,
  &(vtc_S1670C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,84), // object size
  NSPAIRA(_ZTI7S1670C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1670C1),31, //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  S1674C3  : S1679C4_nt {
  virtual void  v3(); // _ZN7S1674C32v3Ev
  virtual void  v4(); // _ZN7S1674C32v4Ev
  virtual void  v5(); // _ZN7S1674C32v5Ev
  virtual void  v6(); // _ZN7S1674C32v6Ev
  virtual void  v7(); // _ZN7S1674C32v7Ev
  virtual void  v8(); // _ZN7S1674C32v8Ev
  virtual void  v9(); // _ZN7S1674C32v9Ev
  virtual void  v10(); // _ZN7S1674C33v10Ev
  virtual void  v11(); // _ZN7S1674C33v11Ev
  virtual void  v12(); // _ZN7S1674C33v12Ev
  virtual void  v13(); // _ZN7S1674C33v13Ev
  virtual void  v14(); // _ZN7S1674C33v14Ev
  ~S1674C3(); // tgen
  S1674C3(); // tgen
};
//SIG(-1 S1674C3) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S1674C3 ::v3(){vfunc_called(this, "_ZN7S1674C32v3Ev");}
void  S1674C3 ::v4(){vfunc_called(this, "_ZN7S1674C32v4Ev");}
void  S1674C3 ::v5(){vfunc_called(this, "_ZN7S1674C32v5Ev");}
void  S1674C3 ::v6(){vfunc_called(this, "_ZN7S1674C32v6Ev");}
void  S1674C3 ::v7(){vfunc_called(this, "_ZN7S1674C32v7Ev");}
void  S1674C3 ::v8(){vfunc_called(this, "_ZN7S1674C32v8Ev");}
void  S1674C3 ::v9(){vfunc_called(this, "_ZN7S1674C32v9Ev");}
void  S1674C3 ::v10(){vfunc_called(this, "_ZN7S1674C33v10Ev");}
void  S1674C3 ::v11(){vfunc_called(this, "_ZN7S1674C33v11Ev");}
void  S1674C3 ::v12(){vfunc_called(this, "_ZN7S1674C33v12Ev");}
void  S1674C3 ::v13(){vfunc_called(this, "_ZN7S1674C33v13Ev");}
void  S1674C3 ::v14(){vfunc_called(this, "_ZN7S1674C33v14Ev");}
S1674C3 ::~S1674C3(){ note_dtor("S1674C3", this);} // tgen
S1674C3 ::S1674C3(){ note_ctor("S1674C3", this);} // tgen

static void Test_S1674C3()
{
  extern Class_Descriptor cd_S1674C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1674C3, buf);
    S1674C3 *dp, &lv = *(dp=new (buf) S1674C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1674C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1674C3)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S1674C3");
    test_class_info(&lv, &cd_S1674C3);
    dp->~S1674C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1674C3(Test_S1674C3, "S1674C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1674C3C1Ev();
extern void _ZN7S1674C3D1Ev();
Name_Map name_map_S1674C3[] = {
  NSPAIR(_ZN7S1674C3C1Ev),
  NSPAIR(_ZN7S1674C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S1674C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S1674C3[];
extern void _ZN7S1674C3D1Ev();
extern void _ZN7S1674C3D0Ev();
extern void _ZN7S1674C32v3Ev();
extern void _ZN7S1674C32v4Ev();
extern void _ZN7S1674C32v5Ev();
extern void _ZN7S1674C32v6Ev();
extern void _ZN7S1674C32v7Ev();
extern void _ZN7S1674C32v8Ev();
extern void _ZN7S1674C32v9Ev();
extern void _ZN7S1674C33v10Ev();
extern void _ZN7S1674C33v11Ev();
extern void _ZN7S1674C33v12Ev();
extern void _ZN7S1674C33v13Ev();
extern void _ZN7S1674C33v14Ev();
static  VTBL_ENTRY vtc_S1674C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1674C3[0]),
  (VTBL_ENTRY)&_ZN7S1674C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1674C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1674C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1674C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1674C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1674C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1674C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1674C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1674C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1674C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1674C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1674C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1674C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1674C33v14Ev,
};
extern VTBL_ENTRY _ZTI7S1674C3[];
extern  VTBL_ENTRY _ZTV7S1674C3[];
Class_Descriptor cd_S1674C3 = {  "S1674C3", // class name
  bases_S1674C3, 1,
  &(vtc_S1674C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1674C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1674C3),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1674C2  : S1674C3 {
  ::S79C38_nt s1674c2f0;
  ::S17777C6_nt s1674c2f1;
  ::S1679C8_nt s1674c2f2;
  int s1674c2f3[4];
  ::S4533C11_nt s1674c2f4;
  void *s1674c2f5[4];
  virtual  ~S1674C2(); // _ZN7S1674C2D1Ev
  virtual void  v15(); // _ZN7S1674C23v15Ev
  virtual void  v16(); // _ZN7S1674C23v16Ev
  virtual void  v17(); // _ZN7S1674C23v17Ev
  virtual void  v18(); // _ZN7S1674C23v18Ev
  virtual void  v19(); // _ZN7S1674C23v19Ev
  virtual void  v20(); // _ZN7S1674C23v20Ev
  virtual void  v21(); // _ZN7S1674C23v21Ev
  virtual void  v22(); // _ZN7S1674C23v22Ev
  virtual void  v23(); // _ZN7S1674C23v23Ev
  virtual void  v24(); // _ZN7S1674C23v24Ev
  virtual void  v25(); // _ZN7S1674C23v25Ev
  virtual void  v26(); // _ZN7S1674C23v26Ev
  virtual void  v27(); // _ZN7S1674C23v27Ev
  S1674C2(); // tgen
};
//SIG(-1 S1674C2) C1{ BC2{ BC3{ vd m Fi} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 FC4{ m Fp[2]} FC5{ m Fp} FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]} Fi[4] FC9{ m Fp} Fp[4]}


 S1674C2 ::~S1674C2(){ note_dtor("S1674C2", this);}
void  S1674C2 ::v15(){vfunc_called(this, "_ZN7S1674C23v15Ev");}
void  S1674C2 ::v16(){vfunc_called(this, "_ZN7S1674C23v16Ev");}
void  S1674C2 ::v17(){vfunc_called(this, "_ZN7S1674C23v17Ev");}
void  S1674C2 ::v18(){vfunc_called(this, "_ZN7S1674C23v18Ev");}
void  S1674C2 ::v19(){vfunc_called(this, "_ZN7S1674C23v19Ev");}
void  S1674C2 ::v20(){vfunc_called(this, "_ZN7S1674C23v20Ev");}
void  S1674C2 ::v21(){vfunc_called(this, "_ZN7S1674C23v21Ev");}
void  S1674C2 ::v22(){vfunc_called(this, "_ZN7S1674C23v22Ev");}
void  S1674C2 ::v23(){vfunc_called(this, "_ZN7S1674C23v23Ev");}
void  S1674C2 ::v24(){vfunc_called(this, "_ZN7S1674C23v24Ev");}
void  S1674C2 ::v25(){vfunc_called(this, "_ZN7S1674C23v25Ev");}
void  S1674C2 ::v26(){vfunc_called(this, "_ZN7S1674C23v26Ev");}
void  S1674C2 ::v27(){vfunc_called(this, "_ZN7S1674C23v27Ev");}
S1674C2 ::S1674C2(){ note_ctor("S1674C2", this);} // tgen

static void Test_S1674C2()
{
  extern Class_Descriptor cd_S1674C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,21)];
    init_test(&cd_S1674C2, buf);
    S1674C2 *dp, &lv = *(dp=new (buf) S1674C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,80), "sizeof(S1674C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1674C2)");
    check_base_class_offset(lv, (S1679C4_nt*)(S1674C3*), 0, "S1674C2");
    check_base_class_offset(lv, (S1674C3*), 0, "S1674C2");
    check_field_offset(lv, s1674c2f0, ABISELECT(16,8), "S1674C2.s1674c2f0");
    check_field_offset(lv, s1674c2f1, ABISELECT(32,16), "S1674C2.s1674c2f1");
    check_field_offset(lv, s1674c2f2, ABISELECT(40,20), "S1674C2.s1674c2f2");
    check_field_offset(lv, s1674c2f3, ABISELECT(80,44), "S1674C2.s1674c2f3");
    check_field_offset(lv, s1674c2f4, ABISELECT(96,60), "S1674C2.s1674c2f4");
    check_field_offset(lv, s1674c2f5, ABISELECT(104,64), "S1674C2.s1674c2f5");
    test_class_info(&lv, &cd_S1674C2);
    dp->~S1674C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1674C2(Test_S1674C2, "S1674C2", ABISELECT(136,80));

#else // __cplusplus

extern void _ZN7S1674C2C1Ev();
extern void _ZN7S1674C2D1Ev();
Name_Map name_map_S1674C2[] = {
  NSPAIR(_ZN7S1674C2C1Ev),
  NSPAIR(_ZN7S1674C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S1674C3;
extern VTBL_ENTRY _ZTI7S1674C3[];
extern  VTBL_ENTRY _ZTV7S1674C3[];
static Base_Class bases_S1674C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S1674C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1674C2[];
extern void _ZN7S1674C2D1Ev();
extern void _ZN7S1674C2D0Ev();
extern void _ZN7S1674C32v3Ev();
extern void _ZN7S1674C32v4Ev();
extern void _ZN7S1674C32v5Ev();
extern void _ZN7S1674C32v6Ev();
extern void _ZN7S1674C32v7Ev();
extern void _ZN7S1674C32v8Ev();
extern void _ZN7S1674C32v9Ev();
extern void _ZN7S1674C33v10Ev();
extern void _ZN7S1674C33v11Ev();
extern void _ZN7S1674C33v12Ev();
extern void _ZN7S1674C33v13Ev();
extern void _ZN7S1674C33v14Ev();
extern void _ZN7S1674C23v15Ev();
extern void _ZN7S1674C23v16Ev();
extern void _ZN7S1674C23v17Ev();
extern void _ZN7S1674C23v18Ev();
extern void _ZN7S1674C23v19Ev();
extern void _ZN7S1674C23v20Ev();
extern void _ZN7S1674C23v21Ev();
extern void _ZN7S1674C23v22Ev();
extern void _ZN7S1674C23v23Ev();
extern void _ZN7S1674C23v24Ev();
extern void _ZN7S1674C23v25Ev();
extern void _ZN7S1674C23v26Ev();
extern void _ZN7S1674C23v27Ev();
static  VTBL_ENTRY vtc_S1674C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1674C2[0]),
  (VTBL_ENTRY)&_ZN7S1674C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1674C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1674C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1674C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1674C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1674C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1674C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1674C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1674C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1674C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1674C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1674C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1674C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1674C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1674C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1674C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1674C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1674C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1674C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1674C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1674C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1674C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1674C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1674C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1674C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1674C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1674C23v27Ev,
};
extern VTBL_ENTRY _ZTI7S1674C2[];
extern  VTBL_ENTRY _ZTV7S1674C2[];
Class_Descriptor cd_S1674C2 = {  "S1674C2", // class name
  bases_S1674C2, 2,
  &(vtc_S1674C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,80), // object size
  NSPAIRA(_ZTI7S1674C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1674C2),29, //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  S1674C1  : S1674C2 {
  virtual void  v1(); // _ZN7S1674C12v1Ev
  virtual void  v2(); // _ZN7S1674C12v2Ev
  ~S1674C1(); // tgen
  S1674C1(); // tgen
};
//SIG(1 S1674C1) C1{ BC2{ BC3{ BC4{ vd m Fi} v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14} vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 FC5{ m Fp[2]} FC6{ m Fp} FC7{ m FC8{ m Fp Fi[2] FC9{ m}} Fp[2]} Fi[4] FC10{ m Fp} Fp[4]} v1 v2}


void  S1674C1 ::v1(){vfunc_called(this, "_ZN7S1674C12v1Ev");}
void  S1674C1 ::v2(){vfunc_called(this, "_ZN7S1674C12v2Ev");}
S1674C1 ::~S1674C1(){ note_dtor("S1674C1", this);} // tgen
S1674C1 ::S1674C1(){ note_ctor("S1674C1", this);} // tgen

static void Test_S1674C1()
{
  extern Class_Descriptor cd_S1674C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,21)];
    init_test(&cd_S1674C1, buf);
    S1674C1 *dp, &lv = *(dp=new (buf) S1674C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,80), "sizeof(S1674C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1674C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S1674C3*)(S1674C2*), 0, "S1674C1");
    check_base_class_offset(lv, (S1674C3*)(S1674C2*), 0, "S1674C1");
    check_base_class_offset(lv, (S1674C2*), 0, "S1674C1");
    test_class_info(&lv, &cd_S1674C1);
    dp->~S1674C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1674C1(Test_S1674C1, "S1674C1", ABISELECT(136,80));

#else // __cplusplus

extern void _ZN7S1674C1C1Ev();
extern void _ZN7S1674C1D1Ev();
Name_Map name_map_S1674C1[] = {
  NSPAIR(_ZN7S1674C1C1Ev),
  NSPAIR(_ZN7S1674C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S1674C3;
extern VTBL_ENTRY _ZTI7S1674C3[];
extern  VTBL_ENTRY _ZTV7S1674C3[];
extern Class_Descriptor cd_S1674C2;
extern VTBL_ENTRY _ZTI7S1674C2[];
extern  VTBL_ENTRY _ZTV7S1674C2[];
static Base_Class bases_S1674C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S1674C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1674C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1674C1[];
extern void _ZN7S1674C1D1Ev();
extern void _ZN7S1674C1D0Ev();
extern void _ZN7S1674C32v3Ev();
extern void _ZN7S1674C32v4Ev();
extern void _ZN7S1674C32v5Ev();
extern void _ZN7S1674C32v6Ev();
extern void _ZN7S1674C32v7Ev();
extern void _ZN7S1674C32v8Ev();
extern void _ZN7S1674C32v9Ev();
extern void _ZN7S1674C33v10Ev();
extern void _ZN7S1674C33v11Ev();
extern void _ZN7S1674C33v12Ev();
extern void _ZN7S1674C33v13Ev();
extern void _ZN7S1674C33v14Ev();
extern void _ZN7S1674C23v15Ev();
extern void _ZN7S1674C23v16Ev();
extern void _ZN7S1674C23v17Ev();
extern void _ZN7S1674C23v18Ev();
extern void _ZN7S1674C23v19Ev();
extern void _ZN7S1674C23v20Ev();
extern void _ZN7S1674C23v21Ev();
extern void _ZN7S1674C23v22Ev();
extern void _ZN7S1674C23v23Ev();
extern void _ZN7S1674C23v24Ev();
extern void _ZN7S1674C23v25Ev();
extern void _ZN7S1674C23v26Ev();
extern void _ZN7S1674C23v27Ev();
extern void _ZN7S1674C12v1Ev();
extern void _ZN7S1674C12v2Ev();
static  VTBL_ENTRY vtc_S1674C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1674C1[0]),
  (VTBL_ENTRY)&_ZN7S1674C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1674C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1674C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1674C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1674C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1674C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1674C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1674C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1674C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1674C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1674C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1674C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1674C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1674C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1674C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1674C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1674C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1674C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1674C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1674C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1674C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1674C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1674C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1674C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1674C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1674C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1674C23v27Ev,
  (VTBL_ENTRY)&_ZN7S1674C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1674C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S1674C1[];
extern  VTBL_ENTRY _ZTV7S1674C1[];
Class_Descriptor cd_S1674C1 = {  "S1674C1", // class name
  bases_S1674C1, 3,
  &(vtc_S1674C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,80), // object size
  NSPAIRA(_ZTI7S1674C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1674C1),31, //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  S2820C9  : S7719C4_nt , S5266C26 , virtual S5266C22 {
  ~S2820C9(); // tgen
  S2820C9(); // tgen
};
//SIG(-1 S2820C9) C1{ BC2{ m Fc} BC3{ m} VBC4{ m}}


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

static void Test_S2820C9()
{
  extern Class_Descriptor cd_S2820C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2820C9, buf);
    S2820C9 *dp, &lv = *(dp=new (buf) S2820C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2820C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2820C9)");
    check_base_class_offset(lv, (S7719C4_nt*), ABISELECT(8,4), "S2820C9");
    check_base_class_offset(lv, (S5266C26*), 0, "S2820C9");
    check_base_class_offset(lv, (S5266C22*), 0, "S2820C9");
    test_class_info(&lv, &cd_S2820C9);
    dp->~S2820C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2820C9(Test_S2820C9, "S2820C9", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S2820C9C1Ev();
extern void _ZN7S2820C9D1Ev();
Name_Map name_map_S2820C9[] = {
  NSPAIR(_ZN7S2820C9C1Ev),
  NSPAIR(_ZN7S2820C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
static Base_Class bases_S2820C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7719C4_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, 0},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C22,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2820C9[];
static  VTBL_ENTRY vtc_S2820C9[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2820C9[0]),
};
extern VTBL_ENTRY _ZTV7S2820C9[];
static  VTT_ENTRY vtt_S2820C9[] = {
  {&(_ZTV7S2820C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2820C9[];
extern  VTBL_ENTRY _ZTV7S2820C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2820C9[];
Class_Descriptor cd_S2820C9 = {  "S2820C9", // class name
  bases_S2820C9, 3,
  &(vtc_S2820C9[0]), // expected_vtbl_contents
  &(vtt_S2820C9[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S2820C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2820C9),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2820C9),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  S2820C11  : S5266C26 , S7719C4_nt {
};
//SIG(-1 S2820C11) C1{ BC2{ m} BC3{ m Fc}}



static void Test_S2820C11()
{
  extern Class_Descriptor cd_S2820C11;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S2820C11, buf);
    S2820C11 &lv = *(new (buf) S2820C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S2820C11)");
    check2(__alignof__(lv), 1, "__alignof__(S2820C11)");
    check_base_class_offset(lv, (S5266C26*), 0, "S2820C11");
    check_base_class_offset(lv, (S7719C4_nt*), 0, "S2820C11");
    test_class_info(&lv, &cd_S2820C11);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2820C11(Test_S2820C11, "S2820C11", 1);

#else // __cplusplus

extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
static Base_Class bases_S2820C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7719C4_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 _ZTI8S2820C11[];
Class_Descriptor cd_S2820C11 = {  "S2820C11", // class name
  bases_S2820C11, 2,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S2820C11),ABISELECT(56,32), //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  S2820C10  : S2820C11 , S5266C26 , S2820C9 {
  __tsi64 s2820c10f0;
  ~S2820C10(); // tgen
  S2820C10(); // tgen
};
//SIG(-1 S2820C10) C1{ BC2{ BC3{ m} BC4{ m Fc}} BC3 BC5{ BC4 BC3 VBC6{ m}} FL}


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

static void Test_S2820C10()
{
  extern Class_Descriptor cd_S2820C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S2820C10, buf);
    S2820C10 *dp, &lv = *(dp=new (buf) S2820C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S2820C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2820C10)");
    check_base_class_offset(lv, (S5266C26*)(S2820C11*), ABISELECT(9,5), "S2820C10");
    check_base_class_offset(lv, (S7719C4_nt*)(S2820C11*), ABISELECT(9,5), "S2820C10");
    check_base_class_offset(lv, (S2820C11*), ABISELECT(9,5), "S2820C10");
    /*is_ambiguous_... S2820C10::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*), ABISELECT(10,6), "S2820C10");
    check_base_class_offset(lv, (S7719C4_nt*)(S2820C9*), ABISELECT(8,4), "S2820C10");
    check_base_class_offset(lv, (S5266C26*)(S2820C9*), 0, "S2820C10");
    check_base_class_offset(lv, (S5266C22*)(S2820C9*), 0, "S2820C10");
    check_base_class_offset(lv, (S2820C9*), 0, "S2820C10");
    check_field_offset(lv, s2820c10f0, ABISELECT(16,8), "S2820C10.s2820c10f0");
    test_class_info(&lv, &cd_S2820C10);
    dp->~S2820C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2820C10(Test_S2820C10, "S2820C10", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S2820C10C1Ev();
extern void _ZN8S2820C10D1Ev();
Name_Map name_map_S2820C10[] = {
  NSPAIR(_ZN8S2820C10C1Ev),
  NSPAIR(_ZN8S2820C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S2820C11;
extern VTBL_ENTRY _ZTI8S2820C11[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
extern Class_Descriptor cd_S2820C9;
extern VTBL_ENTRY _ZTI7S2820C9[];
extern  VTBL_ENTRY _ZTV7S2820C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2820C9[];
static Base_Class bases_S2820C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C26,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2820C11,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C26,    ABISELECT(10,6), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7719C4_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
    7, //immediately_derived
  0, 0},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C22,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S2820C9,    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 _ZTI8S2820C10[];
static  VTBL_ENTRY vtc_S2820C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C10[0]),
};
extern VTBL_ENTRY _ZTV8S2820C10[];
static  VTBL_ENTRY _tg__ZTV7S2820C9__8S2820C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2820C9[0]),
};
static  VTT_ENTRY vtt_S2820C10[] = {
  {&(_ZTV8S2820C10[3]),  3,3},
  {&(_tg__ZTV7S2820C9__8S2820C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S2820C10[];
extern  VTBL_ENTRY _ZTV8S2820C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C10[];
Class_Descriptor cd_S2820C10 = {  "S2820C10", // class name
  bases_S2820C10, 8,
  &(vtc_S2820C10[0]), // expected_vtbl_contents
  &(vtt_S2820C10[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S2820C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S2820C10),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2820C10),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2820C13  : S5266C26 , S5266C22 , virtual S7719C4_nt {
  ::S5266C22 s2820c13f0;
  ~S2820C13(); // tgen
  S2820C13(); // tgen
};
//SIG(-1 S2820C13) C1{ BC2{ m} BC3{ m} VBC4{ m Fc} FC3}


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

static void Test_S2820C13()
{
  extern Class_Descriptor cd_S2820C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2820C13, buf);
    S2820C13 *dp, &lv = *(dp=new (buf) S2820C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2820C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2820C13)");
    check_base_class_offset(lv, (S5266C26*), 0, "S2820C13");
    check_base_class_offset(lv, (S5266C22*), 0, "S2820C13");
    check_base_class_offset(lv, (S7719C4_nt*), ABISELECT(9,5), "S2820C13");
    check_field_offset(lv, s2820c13f0, ABISELECT(8,4), "S2820C13.s2820c13f0");
    test_class_info(&lv, &cd_S2820C13);
    dp->~S2820C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2820C13(Test_S2820C13, "S2820C13", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S2820C13C1Ev();
extern void _ZN8S2820C13D1Ev();
Name_Map name_map_S2820C13[] = {
  NSPAIR(_ZN8S2820C13C1Ev),
  NSPAIR(_ZN8S2820C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
static Base_Class bases_S2820C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C22,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7719C4_nt,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S2820C13[];
static  VTBL_ENTRY vtc_S2820C13[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C13[0]),
};
extern VTBL_ENTRY _ZTV8S2820C13[];
static  VTT_ENTRY vtt_S2820C13[] = {
  {&(_ZTV8S2820C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S2820C13[];
extern  VTBL_ENTRY _ZTV8S2820C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C13[];
Class_Descriptor cd_S2820C13 = {  "S2820C13", // class name
  bases_S2820C13, 3,
  &(vtc_S2820C13[0]), // expected_vtbl_contents
  &(vtt_S2820C13[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S2820C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S2820C13),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2820C13),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  S2820C12  : virtual S7719C4_nt , S5266C22 , S2820C11 , virtual S2820C13 {
  ~S2820C12(); // tgen
  S2820C12(); // tgen
};
//SIG(-1 S2820C12) C1{ VBC2{ m Fc} BC3{ m} BC4{ BC5{ m} BC2} VBC6{ BC5 BC3 VBC2 FC3}}


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

static void Test_S2820C12()
{
  extern Class_Descriptor cd_S2820C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S2820C12, buf);
    S2820C12 *dp, &lv = *(dp=new (buf) S2820C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S2820C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2820C12)");
    /*is_ambiguous_... S2820C12::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*), ABISELECT(9,5), "S2820C12");
    check_base_class_offset(lv, (S7719C4_nt*)(S2820C13*), ABISELECT(9,5), "S2820C12");
    /*is_ambiguous_... S2820C12::S5266C22 */ AMB_check_base_class_offset(lv, (S5266C22*), 0, "S2820C12");
    check_base_class_offset(lv, (S5266C26*)(S2820C11*), ABISELECT(8,4), "S2820C12");
    check_base_class_offset(lv, (S7719C4_nt*)(S2820C11*), ABISELECT(8,4), "S2820C12");
    check_base_class_offset(lv, (S2820C11*), ABISELECT(8,4), "S2820C12");
    check_base_class_offset(lv, (S5266C26*)(S2820C13*), ABISELECT(16,8), "S2820C12");
    check_base_class_offset(lv, (S5266C22*)(S2820C13*), ABISELECT(16,8), "S2820C12");
    check_base_class_offset(lv, (S2820C13*), ABISELECT(16,8), "S2820C12");
    test_class_info(&lv, &cd_S2820C12);
    dp->~S2820C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2820C12(Test_S2820C12, "S2820C12", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S2820C12C1Ev();
extern void _ZN8S2820C12D1Ev();
Name_Map name_map_S2820C12[] = {
  NSPAIR(_ZN8S2820C12C1Ev),
  NSPAIR(_ZN8S2820C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S2820C11;
extern VTBL_ENTRY _ZTI8S2820C11[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
extern Class_Descriptor cd_S2820C13;
extern VTBL_ENTRY _ZTI8S2820C13[];
extern  VTBL_ENTRY _ZTV8S2820C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C13[];
static Base_Class bases_S2820C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7719C4_nt,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C22,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C26,    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
    4, //immediately_derived
  0, 0},
  {&cd_S7719C4_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
    4, //immediately_derived
  0, 0},
  {&cd_S2820C11,    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},
  {&cd_S5266C26,    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
    7, //immediately_derived
  0, 0},
  {&cd_S5266C22,    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
    7, //immediately_derived
  0, 0},
  {&cd_S2820C13,    ABISELECT(16,8), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //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 _ZTI8S2820C12[];
static  VTBL_ENTRY vtc_S2820C12[] = {
  ABISELECT(16,8),
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C12[0]),
  ABISELECT(-7,-3),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2820C12[0]),
};
extern VTBL_ENTRY _ZTV8S2820C12[];
static  VTBL_ENTRY _tg__ZTV8S2820C13__8S2820C12[] = {
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C13[0]),
};
static  VTT_ENTRY vtt_S2820C12[] = {
  {&(_ZTV8S2820C12[4]),  4,7},
  {&(_ZTV8S2820C12[7]),  7,7},
  {&(_tg__ZTV8S2820C13__8S2820C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S2820C12[];
extern  VTBL_ENTRY _ZTV8S2820C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C12[];
Class_Descriptor cd_S2820C12 = {  "S2820C12", // class name
  bases_S2820C12, 8,
  &(vtc_S2820C12[0]), // expected_vtbl_contents
  &(vtt_S2820C12[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S2820C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S2820C12),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2820C12),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  S2820C7  : virtual S5266C22 , virtual S2820C9 , virtual S2820C10 , S2820C12 , virtual S5266C26 {
  __tsi64 s2820c7f0[2];
  ~S2820C7(); // tgen
  S2820C7(); // tgen
};
//SIG(-1 S2820C7) C1{ VBC2{ m} VBC3{ BC4{ m Fc} BC5{ m} VBC2} VBC6{ BC7{ BC5 BC4} BC5 BC3 FL} BC8{ VBC4 BC2 BC7 VBC9{ BC5 BC2 VBC4 FC2}} VBC5 FL[2]}


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

static void Test_S2820C7()
{
  extern Class_Descriptor cd_S2820C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S2820C7, buf);
    S2820C7 *dp, &lv = *(dp=new (buf) S2820C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S2820C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2820C7)");
    /*is_ambiguous_... S2820C7::S5266C22 */ AMB_check_base_class_offset(lv, (S5266C22*), ABISELECT(32,24), "S2820C7");
    /*is_ambiguous_... S2820C7::S2820C9 */ AMB_check_base_class_offset(lv, (S5266C22*)(S2820C9*), ABISELECT(32,24), "S2820C7");
    check_base_class_offset(lv, (S5266C22*)(S2820C9*)(S2820C10*), ABISELECT(32,24), "S2820C7");
    /*is_ambiguous_... S2820C7::S2820C9 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C9*), ABISELECT(40,28), "S2820C7");
    /*is_ambiguous_... S2820C7::S2820C9 */ AMB_check_base_class_offset(lv, (S5266C26*)(S2820C9*), ABISELECT(32,24), "S2820C7");
    /*is_ambiguous_... S2820C7::S2820C9 */ AMB_check_base_class_offset(lv, (S2820C9*), ABISELECT(32,24), "S2820C7");
    check_base_class_offset(lv, (S5266C26*)(S2820C11*)(S2820C10*), ABISELECT(57,37), "S2820C7");
    check_base_class_offset(lv, (S7719C4_nt*)(S2820C11*)(S2820C10*), ABISELECT(57,37), "S2820C7");
    check_base_class_offset(lv, (S2820C11*)(S2820C10*), ABISELECT(57,37), "S2820C7");
    /*is_ambiguous_... S2820C10::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S2820C10*), ABISELECT(58,38), "S2820C7");
    check_base_class_offset(lv, (S7719C4_nt*)(S2820C9*)(S2820C10*), ABISELECT(56,36), "S2820C7");
    check_base_class_offset(lv, (S5266C26*)(S2820C9*)(S2820C10*), ABISELECT(48,32), "S2820C7");
    check_base_class_offset(lv, (S2820C9*)(S2820C10*), ABISELECT(48,32), "S2820C7");
    check_base_class_offset(lv, (S2820C10*), ABISELECT(48,32), "S2820C7");
    /*is_ambiguous_... S2820C12::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C12*), ABISELECT(72,48), "S2820C7");
    check_base_class_offset(lv, (S7719C4_nt*)(S2820C13*), ABISELECT(72,48), "S2820C7");
    /*is_ambiguous_... S2820C12::S5266C22 */ AMB_check_base_class_offset(lv, (S5266C22*)(S2820C12*), 0, "S2820C7");
    check_base_class_offset(lv, (S5266C26*)(S2820C11*)(S2820C12*), ABISELECT(8,4), "S2820C7");
    check_base_class_offset(lv, (S7719C4_nt*)(S2820C11*)(S2820C12*), ABISELECT(8,4), "S2820C7");
    check_base_class_offset(lv, (S2820C11*)(S2820C12*), ABISELECT(8,4), "S2820C7");
    check_base_class_offset(lv, (S5266C26*)(S2820C13*), ABISELECT(80,52), "S2820C7");
    check_base_class_offset(lv, (S5266C22*)(S2820C13*), ABISELECT(80,52), "S2820C7");
    check_base_class_offset(lv, (S2820C13*)(S2820C12*), ABISELECT(80,52), "S2820C7");
    check_base_class_offset(lv, (S2820C12*), 0, "S2820C7");
    /*is_ambiguous_... S2820C7::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*), 0, "S2820C7");
    check_field_offset(lv, s2820c7f0, ABISELECT(16,8), "S2820C7.s2820c7f0");
    test_class_info(&lv, &cd_S2820C7);
    dp->~S2820C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2820C7(Test_S2820C7, "S2820C7", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S2820C7C1Ev();
extern void _ZN7S2820C7D1Ev();
Name_Map name_map_S2820C7[] = {
  NSPAIR(_ZN7S2820C7C1Ev),
  NSPAIR(_ZN7S2820C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S2820C9;
extern VTBL_ENTRY _ZTI7S2820C9[];
extern  VTBL_ENTRY _ZTV7S2820C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2820C9[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S2820C11;
extern VTBL_ENTRY _ZTI8S2820C11[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S2820C9;
extern VTBL_ENTRY _ZTI7S2820C9[];
extern  VTBL_ENTRY _ZTV7S2820C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2820C9[];
extern Class_Descriptor cd_S2820C10;
extern VTBL_ENTRY _ZTI8S2820C10[];
extern  VTBL_ENTRY _ZTV8S2820C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C10[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S2820C11;
extern VTBL_ENTRY _ZTI8S2820C11[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
extern Class_Descriptor cd_S2820C13;
extern VTBL_ENTRY _ZTI8S2820C13[];
extern  VTBL_ENTRY _ZTV8S2820C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C13[];
extern Class_Descriptor cd_S2820C12;
extern VTBL_ENTRY _ZTI8S2820C12[];
extern  VTBL_ENTRY _ZTV8S2820C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C12[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
static Base_Class bases_S2820C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C22,    ABISELECT(32,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, 1},
  {&cd_S7719C4_nt,    ABISELECT(40,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
    3, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(32,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
    3, //immediately_derived
  0, 0},
  {&cd_S2820C9,    ABISELECT(32,24), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5266C26,    ABISELECT(57,37), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(57,37), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2820C11,    ABISELECT(57,37), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    ABISELECT(58,38), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(56,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
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2820C9,    ABISELECT(48,32), //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
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2820C10,    ABISELECT(48,32), //bcp->offset
    11, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7719C4_nt,    ABISELECT(72,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
    19, //immediately_derived
  0, 1},
  {&cd_S5266C22,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    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
    16, //immediately_derived
  0, 0},
  {&cd_S7719C4_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
    16, //immediately_derived
  0, 0},
  {&cd_S2820C11,    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
    20, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(80,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
    19, //immediately_derived
  0, 0},
  {&cd_S5266C22,    ABISELECT(80,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
    19, //immediately_derived
  0, 0},
  {&cd_S2820C13,    ABISELECT(80,52), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S2820C12,    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_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2820C7[];
static  VTBL_ENTRY vtc_S2820C7[] = {
  0,
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(32,24),
  ABISELECT(80,52),
  ABISELECT(72,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S2820C7[0]),
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S2820C7[0]),
  ABISELECT(-16,-8),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S2820C7[0]),
  ABISELECT(-8,-4),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI7S2820C7[0]),
};
extern VTBL_ENTRY _ZTV7S2820C7[];
static  VTBL_ENTRY _tg__ZTV8S2820C12__7S2820C7[] = {
  ABISELECT(80,52),
  ABISELECT(72,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C13__8S2820C12__7S2820C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S2820C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2820C9__7S2820C7[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2820C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C10__7S2820C7[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2820C98S2820C10__A1__7S2820C7[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2820C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C13__7S2820C7[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C13[0]),
};
static  VTT_ENTRY vtt_S2820C7[] = {
  {&(_ZTV7S2820C7[8]),  8,17},
  {&(_tg__ZTV8S2820C12__7S2820C7[4]),  4,4},
  {&(_tg__ZTV8S2820C13__8S2820C12__7S2820C7[3]),  3,3},
  {&(_ZTV7S2820C7[11]),  11,17},
  {&(_ZTV7S2820C7[14]),  14,17},
  {&(_ZTV7S2820C7[17]),  17,17},
  {&(_tg__ZTV7S2820C9__7S2820C7[3]),  3,3},
  {&(_tg__ZTV8S2820C10__7S2820C7[3]),  3,3},
  {&(_tg__ZTV7S2820C98S2820C10__A1__7S2820C7[3]),  3,3},
  {&(_tg__ZTV8S2820C13__7S2820C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2820C7[];
extern  VTBL_ENTRY _ZTV7S2820C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2820C7[];
Class_Descriptor cd_S2820C7 = {  "S2820C7", // class name
  bases_S2820C7, 22,
  &(vtc_S2820C7[0]), // expected_vtbl_contents
  &(vtt_S2820C7[0]), // expected_vtt_contents
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S2820C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S2820C7),17, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2820C7),10, //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  S2820C5  : virtual S7719C4_nt , virtual S2820C7 , S2820C12 {
  int s2820c5f0;
  virtual  ~S2820C5(); // _ZN7S2820C5D2Ev
  S2820C5(); // tgen
};
//SIG(-1 S2820C5) C1{ VBC2{ m Fc} VBC3{ VBC4{ m} VBC5{ BC2 BC6{ m} VBC4} VBC7{ BC8{ BC6 BC2} BC6 BC5 FL} BC9{ VBC2 BC4 BC8 VBC10{ BC6 BC4 VBC2 FC4}} VBC6 FL[2]} BC9 vd Fi}


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

static void Test_S2820C5()
{
  extern Class_Descriptor cd_S2820C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S2820C5, buf);
    S2820C5 *dp, &lv = *(dp=new (buf) S2820C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S2820C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2820C5)");
    /*is_ambiguous_... S2820C5::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*), ABISELECT(16,12), "S2820C5");
    /*is_ambiguous_... S2820C12::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C12*)(S2820C7*), ABISELECT(16,12), "S2820C5");
    check_base_class_offset(lv, (S7719C4_nt*)(S2820C13*), ABISELECT(16,12), "S2820C5");
    /*is_ambiguous_... S2820C5::S2820C12 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C12*), ABISELECT(16,12), "S2820C5");
    /*is_ambiguous_... S2820C7::S5266C22 */ AMB_check_base_class_offset(lv, (S5266C22*)(S2820C7*), ABISELECT(56,40), "S2820C5");
    /*is_ambiguous_... S2820C5::S2820C9 */ AMB_check_base_class_offset(lv, (S5266C22*)(S2820C9*), ABISELECT(56,40), "S2820C5");
    check_base_class_offset(lv, (S5266C22*)(S2820C9*)(S2820C10*), ABISELECT(56,40), "S2820C5");
    /*is_ambiguous_... S2820C5::S2820C9 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C9*), ABISELECT(64,44), "S2820C5");
    /*is_ambiguous_... S2820C5::S2820C9 */ AMB_check_base_class_offset(lv, (S5266C26*)(S2820C9*), ABISELECT(56,40), "S2820C5");
    /*is_ambiguous_... S2820C7::S2820C9 */ AMB_check_base_class_offset(lv, (S2820C9*)(S2820C7*), ABISELECT(56,40), "S2820C5");
    check_base_class_offset(lv, (S5266C26*)(S2820C11*)(S2820C10*), ABISELECT(81,53), "S2820C5");
    check_base_class_offset(lv, (S7719C4_nt*)(S2820C11*)(S2820C10*), ABISELECT(81,53), "S2820C5");
    check_base_class_offset(lv, (S2820C11*)(S2820C10*), ABISELECT(81,53), "S2820C5");
    /*is_ambiguous_... S2820C10::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S2820C10*), ABISELECT(82,54), "S2820C5");
    check_base_class_offset(lv, (S7719C4_nt*)(S2820C9*)(S2820C10*), ABISELECT(80,52), "S2820C5");
    check_base_class_offset(lv, (S5266C26*)(S2820C9*)(S2820C10*), ABISELECT(72,48), "S2820C5");
    check_base_class_offset(lv, (S2820C9*)(S2820C10*), ABISELECT(72,48), "S2820C5");
    check_base_class_offset(lv, (S2820C10*)(S2820C7*), ABISELECT(72,48), "S2820C5");
    /*is_ambiguous_... S2820C12::S5266C22 */ AMB_check_base_class_offset(lv, (S5266C22*)(S2820C12*)(S2820C7*), ABISELECT(24,16), "S2820C5");
    check_base_class_offset(lv, (S5266C26*)(S2820C11*)(S2820C12*)(S2820C7*), ABISELECT(32,20), "S2820C5");
    check_base_class_offset(lv, (S7719C4_nt*)(S2820C11*)(S2820C12*)(S2820C7*), ABISELECT(32,20), "S2820C5");
    check_base_class_offset(lv, (S2820C11*)(S2820C12*)(S2820C7*), ABISELECT(32,20), "S2820C5");
    check_base_class_offset(lv, (S5266C26*)(S2820C13*), ABISELECT(96,64), "S2820C5");
    check_base_class_offset(lv, (S5266C22*)(S2820C13*), ABISELECT(96,64), "S2820C5");
    check_base_class_offset(lv, (S2820C13*)(S2820C12*)(S2820C7*), ABISELECT(96,64), "S2820C5");
    /*is_ambiguous_... S2820C5::S2820C12 */ AMB_check_base_class_offset(lv, (S2820C13*)(S2820C12*), ABISELECT(96,64), "S2820C5");
    check_base_class_offset(lv, (S2820C12*)(S2820C7*), ABISELECT(24,16), "S2820C5");
    /*is_ambiguous_... S2820C7::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S2820C7*), 0, "S2820C5");
    check_base_class_offset(lv, (S2820C7*), ABISELECT(24,16), "S2820C5");
    /*is_ambiguous_... S2820C5::S2820C12 */ AMB_check_base_class_offset(lv, (S5266C22*)(S2820C12*), 0, "S2820C5");
    /*is_ambiguous_... S2820C5::S2820C12 */ AMB_check_base_class_offset(lv, (S5266C26*)(S2820C11*)(S2820C12*), ABISELECT(8,4), "S2820C5");
    /*is_ambiguous_... S2820C5::S2820C12 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C11*)(S2820C12*), ABISELECT(8,4), "S2820C5");
    /*is_ambiguous_... S2820C5::S2820C12 */ AMB_check_base_class_offset(lv, (S2820C11*)(S2820C12*), ABISELECT(8,4), "S2820C5");
    /*is_ambiguous_... S2820C5::S2820C12 */ AMB_check_base_class_offset(lv, (S2820C12*), 0, "S2820C5");
    check_field_offset(lv, s2820c5f0, ABISELECT(12,8), "S2820C5.s2820c5f0");
    test_class_info(&lv, &cd_S2820C5);
    dp->~S2820C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2820C5(Test_S2820C5, "S2820C5", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN7S2820C5C1Ev();
extern void _ZN7S2820C5D2Ev();
Name_Map name_map_S2820C5[] = {
  NSPAIR(_ZN7S2820C5C1Ev),
  NSPAIR(_ZN7S2820C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S2820C9;
extern VTBL_ENTRY _ZTI7S2820C9[];
extern  VTBL_ENTRY _ZTV7S2820C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2820C9[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S2820C11;
extern VTBL_ENTRY _ZTI8S2820C11[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S2820C9;
extern VTBL_ENTRY _ZTI7S2820C9[];
extern  VTBL_ENTRY _ZTV7S2820C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2820C9[];
extern Class_Descriptor cd_S2820C10;
extern VTBL_ENTRY _ZTI8S2820C10[];
extern  VTBL_ENTRY _ZTV8S2820C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C10[];
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S2820C11;
extern VTBL_ENTRY _ZTI8S2820C11[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
extern Class_Descriptor cd_S2820C13;
extern VTBL_ENTRY _ZTI8S2820C13[];
extern  VTBL_ENTRY _ZTV8S2820C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C13[];
extern Class_Descriptor cd_S2820C12;
extern VTBL_ENTRY _ZTI8S2820C12[];
extern  VTBL_ENTRY _ZTV8S2820C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C12[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S2820C7;
extern VTBL_ENTRY _ZTI7S2820C7[];
extern  VTBL_ENTRY _ZTV7S2820C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2820C7[];
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S2820C11;
extern VTBL_ENTRY _ZTI8S2820C11[];
extern Class_Descriptor cd_S2820C12;
extern VTBL_ENTRY _ZTI8S2820C12[];
extern  VTBL_ENTRY _ZTV8S2820C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C12[];
static Base_Class bases_S2820C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7719C4_nt,    ABISELECT(16,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, 1},
  {&cd_S5266C22,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7719C4_nt,    ABISELECT(64,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
    4, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2820C9,    ABISELECT(56,40), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S5266C26,    ABISELECT(81,53), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(81,53), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2820C11,    ABISELECT(81,53), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    ABISELECT(82,54), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(80,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
    11, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(72,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_S2820C9,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2820C10,    ABISELECT(72,48), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S5266C22,    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
    20, //immediately_derived
  0, 0},
  {&cd_S5266C26,    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
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7719C4_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
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2820C11,    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
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(96,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
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S5266C22,    ABISELECT(96,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
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S2820C13,    ABISELECT(96,64), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S2820C12,    ABISELECT(24,16), //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
    5, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S2820C7,    ABISELECT(24,16), //bcp->offset
    11, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5266C22,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S5266C26,    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
    26, //immediately_derived
  0, 0},
  {&cd_S7719C4_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
    26, //immediately_derived
  0, 0},
  {&cd_S2820C11,    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
    27, //immediately_derived
  0, 0},
  {&cd_S2820C12,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2820C5[];
extern void _ZN7S2820C5D1Ev();
extern void _ZN7S2820C5D0Ev();
static  VTBL_ENTRY vtc_S2820C5[] = {
  0,
  ABISELECT(72,48),
  ABISELECT(56,40),
  ABISELECT(56,40),
  ABISELECT(24,16),
  ABISELECT(96,64),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S2820C5[0]),
  (VTBL_ENTRY)&_ZN7S2820C5D1Ev,
  (VTBL_ENTRY)&_ZN7S2820C5D0Ev,
  ABISELECT(-24,-16),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(32,24),
  ABISELECT(72,48),
  ABISELECT(-8,-4),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S2820C5[0]),
  0,
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI7S2820C5[0]),
  ABISELECT(-16,-8),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S2820C5[0]),
  ABISELECT(-80,-52),
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI7S2820C5[0]),
};
extern VTBL_ENTRY _ZTV7S2820C5[];
static  VTBL_ENTRY _tg__ZTV8S2820C12__A1__7S2820C5[] = {
  ABISELECT(96,64),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C13__8S2820C12__A1__7S2820C5[] = {
  ABISELECT(-80,-52),
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI8S2820C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2820C7__7S2820C5[] = {
  ABISELECT(-24,-16),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(32,24),
  ABISELECT(72,48),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2820C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C127S2820C7__7S2820C5[] = {
  ABISELECT(72,48),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C13__8S2820C127S2820C7__7S2820C5[] = {
  ABISELECT(-80,-52),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S2820C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2820C9__7S2820C7__7S2820C5[] = {
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S2820C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C10__7S2820C7__7S2820C5[] = {
  ABISELECT(-16,-8),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S2820C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C13__7S2820C7__7S2820C5[] = {
  ABISELECT(-80,-52),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S2820C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2820C9__7S2820C5[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2820C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C10__7S2820C5[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2820C98S2820C10__A1__7S2820C5[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2820C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C13__7S2820C5[] = {
  ABISELECT(-80,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C13[0]),
};
static  VTT_ENTRY vtt_S2820C5[] = {
  {&(_ZTV7S2820C5[9]),  9,28},
  {&(_tg__ZTV8S2820C12__A1__7S2820C5[4]),  4,4},
  {&(_tg__ZTV8S2820C13__8S2820C12__A1__7S2820C5[3]),  3,3},
  {&(_ZTV7S2820C5[19]),  19,28},
  {&(_ZTV7S2820C5[22]),  22,28},
  {&(_ZTV7S2820C5[25]),  25,28},
  {&(_ZTV7S2820C5[28]),  28,28},
  {&(_tg__ZTV7S2820C7__7S2820C5[8]),  8,8},
  {&(_tg__ZTV8S2820C127S2820C7__7S2820C5[4]),  4,4},
  {&(_tg__ZTV8S2820C13__8S2820C127S2820C7__7S2820C5[3]),  3,3},
  {&(_tg__ZTV7S2820C9__7S2820C7__7S2820C5[3]),  3,3},
  {&(_tg__ZTV8S2820C10__7S2820C7__7S2820C5[3]),  3,3},
  {&(_tg__ZTV8S2820C13__7S2820C7__7S2820C5[3]),  3,3},
  {&(_tg__ZTV7S2820C9__7S2820C5[3]),  3,3},
  {&(_tg__ZTV8S2820C10__7S2820C5[3]),  3,3},
  {&(_tg__ZTV7S2820C98S2820C10__A1__7S2820C5[3]),  3,3},
  {&(_tg__ZTV8S2820C13__7S2820C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2820C5[];
extern  VTBL_ENTRY _ZTV7S2820C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2820C5[];
Class_Descriptor cd_S2820C5 = {  "S2820C5", // class name
  bases_S2820C5, 28,
  &(vtc_S2820C5[0]), // expected_vtbl_contents
  &(vtt_S2820C5[0]), // expected_vtt_contents
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI7S2820C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2820C5),28, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2820C5),17, //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  S2820C2  : S5266C29 , S5266C26 , S2820C5 {
  int s2820c2f0:7;
  ~S2820C2(); // tgen
  S2820C2(); // tgen
};
//SIG(-1 S2820C2) C1{ BC2{ m} BC3{ m} BC4{ VBC5{ m Fc} VBC6{ VBC7{ m} VBC8{ BC5 BC3 VBC7} VBC9{ BC10{ BC3 BC5} BC3 BC8 FL} BC11{ VBC5 BC7 BC10 VBC12{ BC3 BC7 VBC5 FC7}} VBC3 FL[2]} BC11 vd Fi} Fi:7}


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

static void Test_S2820C2()
{
  extern Class_Descriptor cd_S2820C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S2820C2, buf);
    S2820C2 *dp, &lv = *(dp=new (buf) S2820C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S2820C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2820C2)");
    check_base_class_offset(lv, (S5266C29*), 0, "S2820C2");
    /*is_ambiguous_... S2820C2::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*), 0, "S2820C2");
    /*is_ambiguous_... S2820C5::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C5*), ABISELECT(17,13), "S2820C2");
    /*is_ambiguous_... S2820C12::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C12*)(S2820C7*), ABISELECT(17,13), "S2820C2");
    check_base_class_offset(lv, (S7719C4_nt*)(S2820C13*), ABISELECT(17,13), "S2820C2");
    /*is_ambiguous_... S2820C5::S2820C12 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C12*)(S2820C5*), ABISELECT(17,13), "S2820C2");
    /*is_ambiguous_... S2820C7::S5266C22 */ AMB_check_base_class_offset(lv, (S5266C22*)(S2820C7*), ABISELECT(56,40), "S2820C2");
    /*is_ambiguous_... S2820C2::S2820C9 */ AMB_check_base_class_offset(lv, (S5266C22*)(S2820C9*), ABISELECT(56,40), "S2820C2");
    check_base_class_offset(lv, (S5266C22*)(S2820C9*)(S2820C10*), ABISELECT(56,40), "S2820C2");
    /*is_ambiguous_... S2820C2::S2820C9 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C9*), ABISELECT(64,44), "S2820C2");
    /*is_ambiguous_... S2820C2::S2820C9 */ AMB_check_base_class_offset(lv, (S5266C26*)(S2820C9*), ABISELECT(56,40), "S2820C2");
    /*is_ambiguous_... S2820C7::S2820C9 */ AMB_check_base_class_offset(lv, (S2820C9*)(S2820C7*), ABISELECT(56,40), "S2820C2");
    check_base_class_offset(lv, (S5266C26*)(S2820C11*)(S2820C10*), ABISELECT(81,53), "S2820C2");
    check_base_class_offset(lv, (S7719C4_nt*)(S2820C11*)(S2820C10*), ABISELECT(81,53), "S2820C2");
    check_base_class_offset(lv, (S2820C11*)(S2820C10*), ABISELECT(81,53), "S2820C2");
    /*is_ambiguous_... S2820C10::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S2820C10*), ABISELECT(82,54), "S2820C2");
    check_base_class_offset(lv, (S7719C4_nt*)(S2820C9*)(S2820C10*), ABISELECT(80,52), "S2820C2");
    check_base_class_offset(lv, (S5266C26*)(S2820C9*)(S2820C10*), ABISELECT(72,48), "S2820C2");
    check_base_class_offset(lv, (S2820C9*)(S2820C10*), ABISELECT(72,48), "S2820C2");
    check_base_class_offset(lv, (S2820C10*)(S2820C7*), ABISELECT(72,48), "S2820C2");
    /*is_ambiguous_... S2820C12::S5266C22 */ AMB_check_base_class_offset(lv, (S5266C22*)(S2820C12*)(S2820C7*), ABISELECT(24,16), "S2820C2");
    check_base_class_offset(lv, (S5266C26*)(S2820C11*)(S2820C12*)(S2820C7*), ABISELECT(32,20), "S2820C2");
    check_base_class_offset(lv, (S7719C4_nt*)(S2820C11*)(S2820C12*)(S2820C7*), ABISELECT(32,20), "S2820C2");
    check_base_class_offset(lv, (S2820C11*)(S2820C12*)(S2820C7*), ABISELECT(32,20), "S2820C2");
    check_base_class_offset(lv, (S5266C26*)(S2820C13*), ABISELECT(96,64), "S2820C2");
    check_base_class_offset(lv, (S5266C22*)(S2820C13*), ABISELECT(96,64), "S2820C2");
    check_base_class_offset(lv, (S2820C13*)(S2820C12*)(S2820C7*), ABISELECT(96,64), "S2820C2");
    /*is_ambiguous_... S2820C5::S2820C12 */ AMB_check_base_class_offset(lv, (S2820C13*)(S2820C12*)(S2820C5*), ABISELECT(96,64), "S2820C2");
    check_base_class_offset(lv, (S2820C12*)(S2820C7*), ABISELECT(24,16), "S2820C2");
    /*is_ambiguous_... S2820C7::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S2820C7*), ABISELECT(105,69), "S2820C2");
    check_base_class_offset(lv, (S2820C7*)(S2820C5*), ABISELECT(24,16), "S2820C2");
    /*is_ambiguous_... S2820C5::S2820C12 */ AMB_check_base_class_offset(lv, (S5266C22*)(S2820C12*)(S2820C5*), 0, "S2820C2");
    /*is_ambiguous_... S2820C5::S2820C12 */ AMB_check_base_class_offset(lv, (S5266C26*)(S2820C11*)(S2820C12*)(S2820C5*), ABISELECT(8,4), "S2820C2");
    /*is_ambiguous_... S2820C5::S2820C12 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C11*)(S2820C12*)(S2820C5*), ABISELECT(8,4), "S2820C2");
    /*is_ambiguous_... S2820C5::S2820C12 */ AMB_check_base_class_offset(lv, (S2820C11*)(S2820C12*)(S2820C5*), ABISELECT(8,4), "S2820C2");
    /*is_ambiguous_... S2820C5::S2820C12 */ AMB_check_base_class_offset(lv, (S2820C12*)(S2820C5*), 0, "S2820C2");
    check_base_class_offset(lv, (S2820C5*), 0, "S2820C2");
    set_bf_and_test(lv, s2820c2f0, ABISELECT(16,12), 0, 7, 1, "S2820C2");
    set_bf_and_test(lv, s2820c2f0, ABISELECT(16,12), 0, 7, hide_sll(1LL<<6), "S2820C2");
    test_class_info(&lv, &cd_S2820C2);
    dp->~S2820C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2820C2(Test_S2820C2, "S2820C2", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN7S2820C2C1Ev();
extern void _ZN7S2820C2D1Ev();
Name_Map name_map_S2820C2[] = {
  NSPAIR(_ZN7S2820C2C1Ev),
  NSPAIR(_ZN7S2820C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S2820C9;
extern VTBL_ENTRY _ZTI7S2820C9[];
extern  VTBL_ENTRY _ZTV7S2820C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2820C9[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S2820C11;
extern VTBL_ENTRY _ZTI8S2820C11[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S2820C9;
extern VTBL_ENTRY _ZTI7S2820C9[];
extern  VTBL_ENTRY _ZTV7S2820C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2820C9[];
extern Class_Descriptor cd_S2820C10;
extern VTBL_ENTRY _ZTI8S2820C10[];
extern  VTBL_ENTRY _ZTV8S2820C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C10[];
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S2820C11;
extern VTBL_ENTRY _ZTI8S2820C11[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
extern Class_Descriptor cd_S2820C13;
extern VTBL_ENTRY _ZTI8S2820C13[];
extern  VTBL_ENTRY _ZTV8S2820C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C13[];
extern Class_Descriptor cd_S2820C12;
extern VTBL_ENTRY _ZTI8S2820C12[];
extern  VTBL_ENTRY _ZTV8S2820C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C12[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S2820C7;
extern VTBL_ENTRY _ZTI7S2820C7[];
extern  VTBL_ENTRY _ZTV7S2820C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2820C7[];
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S2820C11;
extern VTBL_ENTRY _ZTI8S2820C11[];
extern Class_Descriptor cd_S2820C12;
extern VTBL_ENTRY _ZTI8S2820C12[];
extern  VTBL_ENTRY _ZTV8S2820C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C12[];
extern Class_Descriptor cd_S2820C5;
extern VTBL_ENTRY _ZTI7S2820C5[];
extern  VTBL_ENTRY _ZTV7S2820C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2820C5[];
static Base_Class bases_S2820C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7719C4_nt,    ABISELECT(17,13), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S5266C22,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7719C4_nt,    ABISELECT(64,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
    6, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2820C9,    ABISELECT(56,40), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S5266C26,    ABISELECT(81,53), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(81,53), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2820C11,    ABISELECT(81,53), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    ABISELECT(82,54), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(80,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
    13, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(72,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
    13, //immediately_derived
  0, 0},
  {&cd_S2820C9,    ABISELECT(72,48), //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
    2, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2820C10,    ABISELECT(72,48), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S5266C22,    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
    22, //immediately_derived
  0, 0},
  {&cd_S5266C26,    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
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7719C4_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
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S2820C11,    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
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(96,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
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5266C22,    ABISELECT(96,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
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2820C13,    ABISELECT(96,64), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S2820C12,    ABISELECT(24,16), //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
    5, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(105,69), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S2820C7,    ABISELECT(24,16), //bcp->offset
    11, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S5266C22,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    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
    28, //immediately_derived
  0, 0},
  {&cd_S7719C4_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
    28, //immediately_derived
  0, 0},
  {&cd_S2820C11,    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
    29, //immediately_derived
  0, 0},
  {&cd_S2820C12,    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
    30, //immediately_derived
  0, 0},
  {&cd_S2820C5,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2820C2[];
extern void _ZN7S2820C2D1Ev();
extern void _ZN7S2820C2D0Ev();
static  VTBL_ENTRY vtc_S2820C2[] = {
  ABISELECT(105,69),
  ABISELECT(72,48),
  ABISELECT(56,40),
  ABISELECT(56,40),
  ABISELECT(24,16),
  ABISELECT(96,64),
  ABISELECT(17,13),
  0,
  (VTBL_ENTRY)&(_ZTI7S2820C2[0]),
  (VTBL_ENTRY)&_ZN7S2820C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2820C2D0Ev,
  ABISELECT(81,53),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(32,24),
  ABISELECT(72,48),
  ABISELECT(-7,-3),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S2820C2[0]),
  0,
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI7S2820C2[0]),
  ABISELECT(-16,-8),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S2820C2[0]),
  ABISELECT(-79,-51),
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI7S2820C2[0]),
};
extern VTBL_ENTRY _ZTV7S2820C2[];
extern void _ZN7S2820C5D1Ev();
extern void _ZN7S2820C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2820C5__7S2820C2[] = {
  ABISELECT(105,69),
  ABISELECT(72,48),
  ABISELECT(56,40),
  ABISELECT(56,40),
  ABISELECT(24,16),
  ABISELECT(96,64),
  ABISELECT(17,13),
  0,
  (VTBL_ENTRY)&(_ZTI7S2820C5[0]),
  (VTBL_ENTRY)&_ZN7S2820C5D1Ev,
  (VTBL_ENTRY)&_ZN7S2820C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S2820C127S2820C5__A1__7S2820C2[] = {
  ABISELECT(96,64),
  ABISELECT(17,13),
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C13__8S2820C127S2820C5__A1__7S2820C2[] = {
  ABISELECT(-79,-51),
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI8S2820C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2820C7__7S2820C5__7S2820C2[] = {
  ABISELECT(81,53),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(32,24),
  ABISELECT(72,48),
  ABISELECT(-7,-3),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S2820C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2820C9__7S2820C5__7S2820C2[] = {
  0,
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI7S2820C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C10__7S2820C5__7S2820C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S2820C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C13__7S2820C5__7S2820C2[] = {
  ABISELECT(-79,-51),
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI7S2820C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2820C7__7S2820C2[] = {
  ABISELECT(81,53),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(32,24),
  ABISELECT(72,48),
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI7S2820C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C127S2820C7__7S2820C2[] = {
  ABISELECT(72,48),
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C13__8S2820C127S2820C7__7S2820C2[] = {
  ABISELECT(-79,-51),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S2820C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2820C9__7S2820C7__7S2820C2[] = {
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S2820C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C10__7S2820C7__7S2820C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S2820C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C13__7S2820C7__7S2820C2[] = {
  ABISELECT(-79,-51),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S2820C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2820C9__7S2820C2[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2820C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C10__7S2820C2[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2820C98S2820C10__A1__7S2820C2[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2820C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C13__7S2820C2[] = {
  ABISELECT(-79,-51),
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C13[0]),
};
static  VTT_ENTRY vtt_S2820C2[] = {
  {&(_ZTV7S2820C2[9]),  9,28},
  {&(_tg__ZTV7S2820C5__7S2820C2[9]),  9,11},
  {&(_tg__ZTV8S2820C127S2820C5__A1__7S2820C2[4]),  4,4},
  {&(_tg__ZTV8S2820C13__8S2820C127S2820C5__A1__7S2820C2[3]),  3,3},
  {&(_tg__ZTV7S2820C7__7S2820C5__7S2820C2[8]),  8,8},
  {&(_tg__ZTV7S2820C9__7S2820C5__7S2820C2[3]),  3,3},
  {&(_tg__ZTV8S2820C10__7S2820C5__7S2820C2[3]),  3,3},
  {&(_tg__ZTV8S2820C13__7S2820C5__7S2820C2[3]),  3,3},
  {&(_ZTV7S2820C2[19]),  19,28},
  {&(_ZTV7S2820C2[22]),  22,28},
  {&(_ZTV7S2820C2[25]),  25,28},
  {&(_ZTV7S2820C2[28]),  28,28},
  {&(_tg__ZTV7S2820C7__7S2820C2[8]),  8,8},
  {&(_tg__ZTV8S2820C127S2820C7__7S2820C2[4]),  4,4},
  {&(_tg__ZTV8S2820C13__8S2820C127S2820C7__7S2820C2[3]),  3,3},
  {&(_tg__ZTV7S2820C9__7S2820C7__7S2820C2[3]),  3,3},
  {&(_tg__ZTV8S2820C10__7S2820C7__7S2820C2[3]),  3,3},
  {&(_tg__ZTV8S2820C13__7S2820C7__7S2820C2[3]),  3,3},
  {&(_tg__ZTV7S2820C9__7S2820C2[3]),  3,3},
  {&(_tg__ZTV8S2820C10__7S2820C2[3]),  3,3},
  {&(_tg__ZTV7S2820C98S2820C10__A1__7S2820C2[3]),  3,3},
  {&(_tg__ZTV8S2820C13__7S2820C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2820C2[];
extern  VTBL_ENTRY _ZTV7S2820C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2820C2[];
Class_Descriptor cd_S2820C2 = {  "S2820C2", // class name
  bases_S2820C2, 31,
  &(vtc_S2820C2[0]), // expected_vtbl_contents
  &(vtt_S2820C2[0]), // expected_vtt_contents
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI7S2820C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2820C2),28, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2820C2),22, //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  S2820C14  : virtual S2820C12 , virtual S2820C9 , S2820C13 , virtual S2820C7 {
  ~S2820C14(); // tgen
  S2820C14(); // tgen
};
//SIG(-1 S2820C14) C1{ VBC2{ VBC3{ m Fc} BC4{ m} BC5{ BC6{ m} BC3} VBC7{ BC6 BC4 VBC3 FC4}} VBC8{ BC3 BC6 VBC4} BC7 VBC9{ VBC4 VBC8 VBC10{ BC5 BC6 BC8 FL} BC2 VBC6 FL[2]}}


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

static void Test_S2820C14()
{
  extern Class_Descriptor cd_S2820C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,20)];
    init_test(&cd_S2820C14, buf);
    S2820C14 *dp, &lv = *(dp=new (buf) S2820C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,76), "sizeof(S2820C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2820C14)");
    /*is_ambiguous_... S2820C14::S2820C12 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C12*), ABISELECT(25,13), "S2820C14");
    /*is_ambiguous_... S2820C14::S2820C13 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C13*), ABISELECT(25,13), "S2820C14");
    /*is_ambiguous_... S2820C14::S2820C13 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C13*), ABISELECT(25,13), "S2820C14");
    /*is_ambiguous_... S2820C12::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C12*)(S2820C7*), ABISELECT(25,13), "S2820C14");
    /*is_ambiguous_... S2820C14::S2820C12 */ AMB_check_base_class_offset(lv, (S5266C22*)(S2820C12*), ABISELECT(16,8), "S2820C14");
    /*is_ambiguous_... S2820C14::S2820C12 */ AMB_check_base_class_offset(lv, (S5266C26*)(S2820C11*)(S2820C12*), ABISELECT(24,12), "S2820C14");
    /*is_ambiguous_... S2820C14::S2820C12 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C11*)(S2820C12*), ABISELECT(24,12), "S2820C14");
    /*is_ambiguous_... S2820C14::S2820C12 */ AMB_check_base_class_offset(lv, (S2820C11*)(S2820C12*), ABISELECT(24,12), "S2820C14");
    /*is_ambiguous_... S2820C14::S2820C13 */ AMB_check_base_class_offset(lv, (S5266C26*)(S2820C13*), ABISELECT(32,16), "S2820C14");
    /*is_ambiguous_... S2820C14::S2820C13 */ AMB_check_base_class_offset(lv, (S5266C22*)(S2820C13*), ABISELECT(32,16), "S2820C14");
    /*is_ambiguous_... S2820C14::S2820C12 */ AMB_check_base_class_offset(lv, (S2820C13*)(S2820C12*), ABISELECT(32,16), "S2820C14");
    check_base_class_offset(lv, (S2820C13*)(S2820C12*)(S2820C7*), ABISELECT(32,16), "S2820C14");
    /*is_ambiguous_... S2820C14::S2820C12 */ AMB_check_base_class_offset(lv, (S2820C12*), ABISELECT(16,8), "S2820C14");
    /*is_ambiguous_... S2820C14::S2820C9 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C9*), ABISELECT(56,28), "S2820C14");
    /*is_ambiguous_... S2820C14::S2820C9 */ AMB_check_base_class_offset(lv, (S5266C26*)(S2820C9*), ABISELECT(48,24), "S2820C14");
    /*is_ambiguous_... S2820C14::S2820C9 */ AMB_check_base_class_offset(lv, (S5266C22*)(S2820C9*), ABISELECT(57,29), "S2820C14");
    /*is_ambiguous_... S2820C7::S5266C22 */ AMB_check_base_class_offset(lv, (S5266C22*)(S2820C7*), ABISELECT(57,29), "S2820C14");
    check_base_class_offset(lv, (S5266C22*)(S2820C9*)(S2820C10*), ABISELECT(57,29), "S2820C14");
    /*is_ambiguous_... S2820C14::S2820C9 */ AMB_check_base_class_offset(lv, (S2820C9*), ABISELECT(48,24), "S2820C14");
    /*is_ambiguous_... S2820C7::S2820C9 */ AMB_check_base_class_offset(lv, (S2820C9*)(S2820C7*), ABISELECT(48,24), "S2820C14");
    /*is_ambiguous_... S2820C14::S2820C13 */ AMB_check_base_class_offset(lv, (S5266C26*)(S2820C13*), 0, "S2820C14");
    /*is_ambiguous_... S2820C14::S2820C13 */ AMB_check_base_class_offset(lv, (S5266C22*)(S2820C13*), 0, "S2820C14");
    /*is_ambiguous_... S2820C14::S2820C13 */ AMB_check_base_class_offset(lv, (S2820C13*), 0, "S2820C14");
    check_base_class_offset(lv, (S5266C26*)(S2820C11*)(S2820C10*), ABISELECT(105,61), "S2820C14");
    check_base_class_offset(lv, (S7719C4_nt*)(S2820C11*)(S2820C10*), ABISELECT(105,61), "S2820C14");
    check_base_class_offset(lv, (S2820C11*)(S2820C10*), ABISELECT(105,61), "S2820C14");
    /*is_ambiguous_... S2820C10::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S2820C10*), ABISELECT(106,62), "S2820C14");
    check_base_class_offset(lv, (S7719C4_nt*)(S2820C9*)(S2820C10*), ABISELECT(104,60), "S2820C14");
    check_base_class_offset(lv, (S5266C26*)(S2820C9*)(S2820C10*), ABISELECT(96,56), "S2820C14");
    check_base_class_offset(lv, (S2820C9*)(S2820C10*), ABISELECT(96,56), "S2820C14");
    check_base_class_offset(lv, (S2820C10*)(S2820C7*), ABISELECT(96,56), "S2820C14");
    /*is_ambiguous_... S2820C12::S5266C22 */ AMB_check_base_class_offset(lv, (S5266C22*)(S2820C12*)(S2820C7*), ABISELECT(64,32), "S2820C14");
    check_base_class_offset(lv, (S5266C26*)(S2820C11*)(S2820C12*)(S2820C7*), ABISELECT(72,36), "S2820C14");
    check_base_class_offset(lv, (S7719C4_nt*)(S2820C11*)(S2820C12*)(S2820C7*), ABISELECT(72,36), "S2820C14");
    check_base_class_offset(lv, (S2820C11*)(S2820C12*)(S2820C7*), ABISELECT(72,36), "S2820C14");
    check_base_class_offset(lv, (S2820C12*)(S2820C7*), ABISELECT(64,32), "S2820C14");
    /*is_ambiguous_... S2820C7::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S2820C7*), ABISELECT(120,72), "S2820C14");
    check_base_class_offset(lv, (S2820C7*), ABISELECT(64,32), "S2820C14");
    test_class_info(&lv, &cd_S2820C14);
    dp->~S2820C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2820C14(Test_S2820C14, "S2820C14", ABISELECT(128,76));

#else // __cplusplus

extern void _ZN8S2820C14C1Ev();
extern void _ZN8S2820C14D1Ev();
Name_Map name_map_S2820C14[] = {
  NSPAIR(_ZN8S2820C14C1Ev),
  NSPAIR(_ZN8S2820C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S2820C11;
extern VTBL_ENTRY _ZTI8S2820C11[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
extern Class_Descriptor cd_S2820C13;
extern VTBL_ENTRY _ZTI8S2820C13[];
extern  VTBL_ENTRY _ZTV8S2820C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C13[];
extern Class_Descriptor cd_S2820C12;
extern VTBL_ENTRY _ZTI8S2820C12[];
extern  VTBL_ENTRY _ZTV8S2820C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C12[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
extern Class_Descriptor cd_S2820C9;
extern VTBL_ENTRY _ZTI7S2820C9[];
extern  VTBL_ENTRY _ZTV7S2820C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2820C9[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
extern Class_Descriptor cd_S2820C13;
extern VTBL_ENTRY _ZTI8S2820C13[];
extern  VTBL_ENTRY _ZTV8S2820C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C13[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S2820C11;
extern VTBL_ENTRY _ZTI8S2820C11[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S2820C9;
extern VTBL_ENTRY _ZTI7S2820C9[];
extern  VTBL_ENTRY _ZTV7S2820C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2820C9[];
extern Class_Descriptor cd_S2820C10;
extern VTBL_ENTRY _ZTI8S2820C10[];
extern  VTBL_ENTRY _ZTV8S2820C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C10[];
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S2820C11;
extern VTBL_ENTRY _ZTI8S2820C11[];
extern Class_Descriptor cd_S2820C12;
extern VTBL_ENTRY _ZTI8S2820C12[];
extern  VTBL_ENTRY _ZTV8S2820C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C12[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S2820C7;
extern VTBL_ENTRY _ZTI7S2820C7[];
extern  VTBL_ENTRY _ZTV7S2820C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2820C7[];
static Base_Class bases_S2820C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7719C4_nt,    ABISELECT(25,13), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S5266C22,    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
    8, //immediately_derived
  0, 0},
  {&cd_S5266C26,    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
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7719C4_nt,    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
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2820C11,    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
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S5266C26,    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
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S5266C22,    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
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2820C13,    ABISELECT(32,16), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2820C12,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //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_S7719C4_nt,    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
    12, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(48,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
    12, //immediately_derived
  0, 0},
  {&cd_S5266C22,    ABISELECT(57,29), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S2820C9,    ABISELECT(48,24), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C22,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2820C13,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5266C26,    ABISELECT(105,61), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(105,61), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2820C11,    ABISELECT(105,61), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    ABISELECT(106,62), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(104,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
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(96,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
    22, //immediately_derived
  0, 0},
  {&cd_S2820C9,    ABISELECT(96,56), //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
    4, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2820C10,    ABISELECT(96,56), //bcp->offset
    28, //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
    5, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S5266C22,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    ABISELECT(72,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
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7719C4_nt,    ABISELECT(72,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
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S2820C11,    ABISELECT(72,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
    -1, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S2820C12,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(120,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
    -1, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S2820C7,    ABISELECT(64,32), //bcp->offset
    20, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //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 _ZTI8S2820C14[];
static  VTBL_ENTRY vtc_S2820C14[] = {
  ABISELECT(120,72),
  ABISELECT(96,56),
  ABISELECT(64,32),
  ABISELECT(57,29),
  ABISELECT(48,24),
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C14[0]),
  ABISELECT(16,8),
  ABISELECT(9,5),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2820C14[0]),
  ABISELECT(-7,-3),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S2820C14[0]),
  ABISELECT(9,5),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S2820C14[0]),
  ABISELECT(56,40),
  ABISELECT(32,24),
  ABISELECT(-16,-8),
  ABISELECT(-7,-3),
  ABISELECT(-32,-16),
  ABISELECT(-39,-19),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S2820C14[0]),
  ABISELECT(-39,-27),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S2820C14[0]),
};
extern VTBL_ENTRY _ZTV8S2820C14[];
static  VTBL_ENTRY _tg__ZTV8S2820C13__A__8S2820C14[] = {
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C12__8S2820C14[] = {
  ABISELECT(16,8),
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C13__8S2820C12__8S2820C14[] = {
  ABISELECT(-7,-3),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2820C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C13__8S2820C14[] = {
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2820C9__8S2820C14[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI7S2820C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2820C7__8S2820C14[] = {
  ABISELECT(56,40),
  ABISELECT(32,24),
  ABISELECT(-16,-8),
  ABISELECT(-7,-3),
  ABISELECT(-32,-16),
  ABISELECT(-39,-19),
  0,
  (VTBL_ENTRY)&(_ZTI7S2820C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C127S2820C7__A1__8S2820C14[] = {
  ABISELECT(-32,-16),
  ABISELECT(-39,-19),
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C13__8S2820C127S2820C7__A1__8S2820C14[] = {
  ABISELECT(-7,-3),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S2820C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2820C9__7S2820C7__8S2820C14[] = {
  ABISELECT(9,5),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S2820C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C10__7S2820C7__8S2820C14[] = {
  ABISELECT(-39,-27),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S2820C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C13__7S2820C7__8S2820C14[] = {
  ABISELECT(-7,-3),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S2820C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C10__8S2820C14[] = {
  ABISELECT(-39,-27),
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2820C98S2820C10__A1__8S2820C14[] = {
  ABISELECT(-39,-27),
  0,
  (VTBL_ENTRY)&(_ZTI7S2820C9[0]),
};
static  VTT_ENTRY vtt_S2820C14[] = {
  {&(_ZTV8S2820C14[10]),  10,31},
  {&(_tg__ZTV8S2820C13__A__8S2820C14[3]),  3,3},
  {&(_ZTV8S2820C14[14]),  14,31},
  {&(_ZTV8S2820C14[17]),  17,31},
  {&(_ZTV8S2820C14[20]),  20,31},
  {&(_ZTV8S2820C14[28]),  28,31},
  {&(_ZTV8S2820C14[31]),  31,31},
  {&(_tg__ZTV8S2820C12__8S2820C14[4]),  4,4},
  {&(_tg__ZTV8S2820C13__8S2820C12__8S2820C14[3]),  3,3},
  {&(_tg__ZTV8S2820C13__8S2820C14[3]),  3,3},
  {&(_tg__ZTV7S2820C9__8S2820C14[3]),  3,3},
  {&(_tg__ZTV7S2820C7__8S2820C14[8]),  8,8},
  {&(_tg__ZTV8S2820C127S2820C7__A1__8S2820C14[4]),  4,4},
  {&(_tg__ZTV8S2820C13__8S2820C127S2820C7__A1__8S2820C14[3]),  3,3},
  {&(_tg__ZTV7S2820C9__7S2820C7__8S2820C14[3]),  3,3},
  {&(_tg__ZTV8S2820C10__7S2820C7__8S2820C14[3]),  3,3},
  {&(_tg__ZTV8S2820C13__7S2820C7__8S2820C14[3]),  3,3},
  {&(_tg__ZTV8S2820C10__8S2820C14[3]),  3,3},
  {&(_tg__ZTV7S2820C98S2820C10__A1__8S2820C14[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S2820C14[];
extern  VTBL_ENTRY _ZTV8S2820C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C14[];
Class_Descriptor cd_S2820C14 = {  "S2820C14", // class name
  bases_S2820C14, 31,
  &(vtc_S2820C14[0]), // expected_vtbl_contents
  &(vtt_S2820C14[0]), // expected_vtt_contents
  ABISELECT(128,76), // object size
  NSPAIRA(_ZTI8S2820C14),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S2820C14),31, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2820C14),19, //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  S2820C1  : S2820C2 , S2820C14 , S2820C5 {
  long double s2820c1f0;
  virtual  ~S2820C1(); // _ZN7S2820C1D2Ev
  S2820C1(); // tgen
};
//SIG(1 S2820C1) C1{ BC2{ BC3{ m} BC4{ m} BC5{ VBC6{ m Fc} VBC7{ VBC8{ m} VBC9{ BC6 BC4 VBC8} VBC10{ BC11{ BC4 BC6} BC4 BC9 FL} BC12{ VBC6 BC8 BC11 VBC13{ BC4 BC8 VBC6 FC8}} VBC4 FL[2]} BC12 vd Fi} Fi:7} BC14{ VBC12 VBC9 BC13 VBC7} BC5 vd FD}


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

static void Test_S2820C1()
{
  extern Class_Descriptor cd_S2820C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,30)];
    init_test(&cd_S2820C1, buf);
    S2820C1 *dp, &lv = *(dp=new (buf) S2820C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,116), "sizeof(S2820C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2820C1)");
    check_base_class_offset(lv, (S5266C29*)(S2820C2*), 0, "S2820C1");
    /*is_ambiguous_... S2820C2::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S2820C2*), 0, "S2820C1");
    /*is_ambiguous_... S2820C5::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C5*)(S2820C2*), ABISELECT(80,48), "S2820C1");
    /*is_ambiguous_... S2820C12::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C12*)(S2820C7*), ABISELECT(80,48), "S2820C1");
    /*is_ambiguous_... S2820C1::S2820C13 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C13*), ABISELECT(80,48), "S2820C1");
    /*is_ambiguous_... S2820C5::S2820C12 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C12*)(S2820C5*)(S2820C2*), ABISELECT(80,48), "S2820C1");
    /*is_ambiguous_... S2820C1::S2820C12 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C12*), ABISELECT(80,48), "S2820C1");
    /*is_ambiguous_... S2820C14::S2820C13 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C13*)(S2820C14*), ABISELECT(80,48), "S2820C1");
    /*is_ambiguous_... S2820C1::S2820C5 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C5*), ABISELECT(80,48), "S2820C1");
    /*is_ambiguous_... S2820C1::S2820C5 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C12*)(S2820C5*), ABISELECT(80,48), "S2820C1");
    /*is_ambiguous_... S2820C7::S5266C22 */ AMB_check_base_class_offset(lv, (S5266C22*)(S2820C7*), ABISELECT(120,76), "S2820C1");
    /*is_ambiguous_... S2820C1::S2820C9 */ AMB_check_base_class_offset(lv, (S5266C22*)(S2820C9*), ABISELECT(120,76), "S2820C1");
    check_base_class_offset(lv, (S5266C22*)(S2820C9*)(S2820C10*), ABISELECT(120,76), "S2820C1");
    /*is_ambiguous_... S2820C1::S2820C9 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C9*), ABISELECT(128,80), "S2820C1");
    /*is_ambiguous_... S2820C1::S2820C9 */ AMB_check_base_class_offset(lv, (S5266C26*)(S2820C9*), ABISELECT(120,76), "S2820C1");
    /*is_ambiguous_... S2820C7::S2820C9 */ AMB_check_base_class_offset(lv, (S2820C9*)(S2820C7*), ABISELECT(120,76), "S2820C1");
    /*is_ambiguous_... S2820C14::S2820C9 */ AMB_check_base_class_offset(lv, (S2820C9*)(S2820C14*), ABISELECT(120,76), "S2820C1");
    check_base_class_offset(lv, (S5266C26*)(S2820C11*)(S2820C10*), ABISELECT(145,89), "S2820C1");
    check_base_class_offset(lv, (S7719C4_nt*)(S2820C11*)(S2820C10*), ABISELECT(145,89), "S2820C1");
    check_base_class_offset(lv, (S2820C11*)(S2820C10*), ABISELECT(145,89), "S2820C1");
    /*is_ambiguous_... S2820C10::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S2820C10*), ABISELECT(146,90), "S2820C1");
    check_base_class_offset(lv, (S7719C4_nt*)(S2820C9*)(S2820C10*), ABISELECT(144,88), "S2820C1");
    check_base_class_offset(lv, (S5266C26*)(S2820C9*)(S2820C10*), ABISELECT(136,84), "S2820C1");
    check_base_class_offset(lv, (S2820C9*)(S2820C10*), ABISELECT(136,84), "S2820C1");
    check_base_class_offset(lv, (S2820C10*)(S2820C7*), ABISELECT(136,84), "S2820C1");
    /*is_ambiguous_... S2820C12::S5266C22 */ AMB_check_base_class_offset(lv, (S5266C22*)(S2820C12*)(S2820C7*), ABISELECT(88,52), "S2820C1");
    check_base_class_offset(lv, (S5266C26*)(S2820C11*)(S2820C12*)(S2820C7*), ABISELECT(96,56), "S2820C1");
    check_base_class_offset(lv, (S7719C4_nt*)(S2820C11*)(S2820C12*)(S2820C7*), ABISELECT(96,56), "S2820C1");
    check_base_class_offset(lv, (S2820C11*)(S2820C12*)(S2820C7*), ABISELECT(96,56), "S2820C1");
    /*is_ambiguous_... S2820C1::S2820C13 */ AMB_check_base_class_offset(lv, (S5266C26*)(S2820C13*), ABISELECT(160,100), "S2820C1");
    /*is_ambiguous_... S2820C1::S2820C13 */ AMB_check_base_class_offset(lv, (S5266C22*)(S2820C13*), ABISELECT(160,100), "S2820C1");
    check_base_class_offset(lv, (S2820C13*)(S2820C12*)(S2820C7*), ABISELECT(160,100), "S2820C1");
    /*is_ambiguous_... S2820C5::S2820C12 */ AMB_check_base_class_offset(lv, (S2820C13*)(S2820C12*)(S2820C5*)(S2820C2*), ABISELECT(160,100), "S2820C1");
    /*is_ambiguous_... S2820C1::S2820C12 */ AMB_check_base_class_offset(lv, (S2820C13*)(S2820C12*), ABISELECT(160,100), "S2820C1");
    /*is_ambiguous_... S2820C1::S2820C5 */ AMB_check_base_class_offset(lv, (S2820C13*)(S2820C12*)(S2820C5*), ABISELECT(160,100), "S2820C1");
    check_base_class_offset(lv, (S2820C12*)(S2820C7*), ABISELECT(88,52), "S2820C1");
    /*is_ambiguous_... S2820C7::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S2820C7*), ABISELECT(169,105), "S2820C1");
    check_base_class_offset(lv, (S2820C7*)(S2820C5*)(S2820C2*), ABISELECT(88,52), "S2820C1");
    check_base_class_offset(lv, (S2820C7*)(S2820C14*), ABISELECT(88,52), "S2820C1");
    /*is_ambiguous_... S2820C1::S2820C5 */ AMB_check_base_class_offset(lv, (S2820C7*)(S2820C5*), ABISELECT(88,52), "S2820C1");
    /*is_ambiguous_... S2820C5::S2820C12 */ AMB_check_base_class_offset(lv, (S5266C22*)(S2820C12*)(S2820C5*)(S2820C2*), 0, "S2820C1");
    /*is_ambiguous_... S2820C5::S2820C12 */ AMB_check_base_class_offset(lv, (S5266C26*)(S2820C11*)(S2820C12*)(S2820C5*)(S2820C2*), ABISELECT(8,4), "S2820C1");
    /*is_ambiguous_... S2820C5::S2820C12 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C11*)(S2820C12*)(S2820C5*)(S2820C2*), ABISELECT(8,4), "S2820C1");
    /*is_ambiguous_... S2820C5::S2820C12 */ AMB_check_base_class_offset(lv, (S2820C11*)(S2820C12*)(S2820C5*)(S2820C2*), ABISELECT(8,4), "S2820C1");
    /*is_ambiguous_... S2820C5::S2820C12 */ AMB_check_base_class_offset(lv, (S2820C12*)(S2820C5*)(S2820C2*), 0, "S2820C1");
    check_base_class_offset(lv, (S2820C5*)(S2820C2*), 0, "S2820C1");
    check_base_class_offset(lv, (S2820C2*), 0, "S2820C1");
    /*is_ambiguous_... S2820C1::S2820C12 */ AMB_check_base_class_offset(lv, (S5266C22*)(S2820C12*), ABISELECT(176,108), "S2820C1");
    /*is_ambiguous_... S2820C1::S2820C12 */ AMB_check_base_class_offset(lv, (S5266C26*)(S2820C11*)(S2820C12*), ABISELECT(184,112), "S2820C1");
    /*is_ambiguous_... S2820C1::S2820C12 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C11*)(S2820C12*), ABISELECT(184,112), "S2820C1");
    /*is_ambiguous_... S2820C1::S2820C12 */ AMB_check_base_class_offset(lv, (S2820C11*)(S2820C12*), ABISELECT(184,112), "S2820C1");
    /*is_ambiguous_... S2820C14::S2820C12 */ AMB_check_base_class_offset(lv, (S2820C12*)(S2820C14*), ABISELECT(176,108), "S2820C1");
    /*is_ambiguous_... S2820C14::S2820C13 */ AMB_check_base_class_offset(lv, (S5266C26*)(S2820C13*)(S2820C14*), ABISELECT(24,16), "S2820C1");
    /*is_ambiguous_... S2820C14::S2820C13 */ AMB_check_base_class_offset(lv, (S5266C22*)(S2820C13*)(S2820C14*), ABISELECT(24,16), "S2820C1");
    /*is_ambiguous_... S2820C14::S2820C13 */ AMB_check_base_class_offset(lv, (S2820C13*)(S2820C14*), ABISELECT(24,16), "S2820C1");
    check_base_class_offset(lv, (S2820C14*), ABISELECT(24,16), "S2820C1");
    /*is_ambiguous_... S2820C1::S2820C5 */ AMB_check_base_class_offset(lv, (S5266C22*)(S2820C12*)(S2820C5*), ABISELECT(40,24), "S2820C1");
    /*is_ambiguous_... S2820C1::S2820C5 */ AMB_check_base_class_offset(lv, (S5266C26*)(S2820C11*)(S2820C12*)(S2820C5*), ABISELECT(48,28), "S2820C1");
    /*is_ambiguous_... S2820C1::S2820C5 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S2820C11*)(S2820C12*)(S2820C5*), ABISELECT(48,28), "S2820C1");
    /*is_ambiguous_... S2820C1::S2820C5 */ AMB_check_base_class_offset(lv, (S2820C11*)(S2820C12*)(S2820C5*), ABISELECT(48,28), "S2820C1");
    /*is_ambiguous_... S2820C1::S2820C5 */ AMB_check_base_class_offset(lv, (S2820C12*)(S2820C5*), ABISELECT(40,24), "S2820C1");
    /*is_ambiguous_... S2820C1::S2820C5 */ AMB_check_base_class_offset(lv, (S2820C5*), ABISELECT(40,24), "S2820C1");
    check_field_offset(lv, s2820c1f0, ABISELECT(64,36), "S2820C1.s2820c1f0");
    test_class_info(&lv, &cd_S2820C1);
    dp->~S2820C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2820C1(Test_S2820C1, "S2820C1", ABISELECT(192,116));

#else // __cplusplus

extern void _ZN7S2820C1C1Ev();
extern void _ZN7S2820C1D2Ev();
Name_Map name_map_S2820C1[] = {
  NSPAIR(_ZN7S2820C1C1Ev),
  NSPAIR(_ZN7S2820C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S2820C9;
extern VTBL_ENTRY _ZTI7S2820C9[];
extern  VTBL_ENTRY _ZTV7S2820C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2820C9[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S2820C11;
extern VTBL_ENTRY _ZTI8S2820C11[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S2820C9;
extern VTBL_ENTRY _ZTI7S2820C9[];
extern  VTBL_ENTRY _ZTV7S2820C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2820C9[];
extern Class_Descriptor cd_S2820C10;
extern VTBL_ENTRY _ZTI8S2820C10[];
extern  VTBL_ENTRY _ZTV8S2820C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C10[];
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S2820C11;
extern VTBL_ENTRY _ZTI8S2820C11[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
extern Class_Descriptor cd_S2820C13;
extern VTBL_ENTRY _ZTI8S2820C13[];
extern  VTBL_ENTRY _ZTV8S2820C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C13[];
extern Class_Descriptor cd_S2820C12;
extern VTBL_ENTRY _ZTI8S2820C12[];
extern  VTBL_ENTRY _ZTV8S2820C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C12[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S2820C7;
extern VTBL_ENTRY _ZTI7S2820C7[];
extern  VTBL_ENTRY _ZTV7S2820C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2820C7[];
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S2820C11;
extern VTBL_ENTRY _ZTI8S2820C11[];
extern Class_Descriptor cd_S2820C12;
extern VTBL_ENTRY _ZTI8S2820C12[];
extern  VTBL_ENTRY _ZTV8S2820C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C12[];
extern Class_Descriptor cd_S2820C5;
extern VTBL_ENTRY _ZTI7S2820C5[];
extern  VTBL_ENTRY _ZTV7S2820C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2820C5[];
extern Class_Descriptor cd_S2820C2;
extern VTBL_ENTRY _ZTI7S2820C2[];
extern  VTBL_ENTRY _ZTV7S2820C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2820C2[];
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S2820C11;
extern VTBL_ENTRY _ZTI8S2820C11[];
extern Class_Descriptor cd_S2820C12;
extern VTBL_ENTRY _ZTI8S2820C12[];
extern  VTBL_ENTRY _ZTV8S2820C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C12[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
extern Class_Descriptor cd_S2820C13;
extern VTBL_ENTRY _ZTI8S2820C13[];
extern  VTBL_ENTRY _ZTV8S2820C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C13[];
extern Class_Descriptor cd_S2820C14;
extern VTBL_ENTRY _ZTI8S2820C14[];
extern  VTBL_ENTRY _ZTV8S2820C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C14[];
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S2820C11;
extern VTBL_ENTRY _ZTI8S2820C11[];
extern Class_Descriptor cd_S2820C12;
extern VTBL_ENTRY _ZTI8S2820C12[];
extern  VTBL_ENTRY _ZTV8S2820C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2820C12[];
extern Class_Descriptor cd_S2820C5;
extern VTBL_ENTRY _ZTI7S2820C5[];
extern  VTBL_ENTRY _ZTV7S2820C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2820C5[];
static Base_Class bases_S2820C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(80,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
    21, //immediately_derived
  0, 1},
  {&cd_S5266C22,    ABISELECT(120,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
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7719C4_nt,    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
    6, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(120,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
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2820C9,    ABISELECT(120,76), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S5266C26,    ABISELECT(145,89), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(145,89), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2820C11,    ABISELECT(145,89), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    ABISELECT(146,90), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(144,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    ABISELECT(136,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
    13, //immediately_derived
  0, 0},
  {&cd_S2820C9,    ABISELECT(136,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2820C10,    ABISELECT(136,84), //bcp->offset
    44, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S5266C22,    ABISELECT(88,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
    22, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(96,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
    18, //immediately_derived
  0, 0},
  {&cd_S7719C4_nt,    ABISELECT(96,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
    18, //immediately_derived
  0, 0},
  {&cd_S2820C11,    ABISELECT(96,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
    22, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(160,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C22,    ABISELECT(160,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2820C13,    ABISELECT(160,100), //bcp->offset
    47, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S2820C12,    ABISELECT(88,52), //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
    5, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(169,105), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S2820C7,    ABISELECT(88,52), //bcp->offset
    33, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S5266C22,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    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
    28, //immediately_derived
  0, 0},
  {&cd_S7719C4_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
    28, //immediately_derived
  0, 0},
  {&cd_S2820C11,    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
    29, //immediately_derived
  0, 0},
  {&cd_S2820C12,    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
    8, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S2820C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //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
    31, //immediately_derived
  0, 0},
  {&cd_S2820C2,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5266C22,    ABISELECT(176,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    ABISELECT(184,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
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S7719C4_nt,    ABISELECT(184,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
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S2820C11,    ABISELECT(184,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
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S2820C12,    ABISELECT(176,108), //bcp->offset
    50, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    40, //immediately_derived
  0, 1},
  {&cd_S5266C26,    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
    39, //immediately_derived
  0, 0},
  {&cd_S5266C22,    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
    39, //immediately_derived
  0, 0},
  {&cd_S2820C13,    ABISELECT(24,16), //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
    11, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S2820C14,    ABISELECT(24,16), //bcp->offset
    12, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5266C22,    ABISELECT(40,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
    45, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(48,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
    44, //immediately_derived
  0, 0},
  {&cd_S7719C4_nt,    ABISELECT(48,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
    44, //immediately_derived
  0, 0},
  {&cd_S2820C11,    ABISELECT(48,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
    45, //immediately_derived
  0, 0},
  {&cd_S2820C12,    ABISELECT(40,24), //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
    13, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S2820C5,    ABISELECT(40,24), //bcp->offset
    22, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2820C1[];
extern void _ZN7S2820C1D1Ev();
extern void _ZN7S2820C1D0Ev();
extern void ABISELECT(_ZThn40_N7S2820C1D1Ev,_ZThn24_N7S2820C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2820C1D0Ev,_ZThn24_N7S2820C1D0Ev)();
static  VTBL_ENTRY vtc_S2820C1[] = {
  ABISELECT(176,108),
  ABISELECT(169,105),
  ABISELECT(136,84),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(88,52),
  ABISELECT(160,100),
  ABISELECT(80,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S2820C1[0]),
  (VTBL_ENTRY)&_ZN7S2820C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2820C1D0Ev,
  ABISELECT(145,89),
  ABISELECT(112,68),
  ABISELECT(64,36),
  ABISELECT(96,60),
  ABISELECT(96,60),
  ABISELECT(136,84),
  ABISELECT(152,92),
  ABISELECT(56,32),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S2820C1[0]),
  ABISELECT(129,81),
  ABISELECT(96,60),
  ABISELECT(80,52),
  ABISELECT(80,52),
  ABISELECT(48,28),
  ABISELECT(120,76),
  ABISELECT(40,24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S2820C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2820C1D1Ev,_ZThn24_N7S2820C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2820C1D0Ev,_ZThn24_N7S2820C1D0Ev),
  ABISELECT(81,53),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(32,24),
  ABISELECT(72,48),
  ABISELECT(-8,-4),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI7S2820C1[0]),
  0,
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI7S2820C1[0]),
  ABISELECT(-16,-8),
  ABISELECT(-136,-84),
  (VTBL_ENTRY)&(_ZTI7S2820C1[0]),
  ABISELECT(-80,-52),
  ABISELECT(-160,-100),
  (VTBL_ENTRY)&(_ZTI7S2820C1[0]),
  ABISELECT(-16,-8),
  ABISELECT(-96,-60),
  ABISELECT(-176,-108),
  (VTBL_ENTRY)&(_ZTI7S2820C1[0]),
};
extern VTBL_ENTRY _ZTV7S2820C1[];
extern void _ZN7S2820C2D1Ev();
extern void _ZN7S2820C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2820C2__7S2820C1[] = {
  ABISELECT(169,105),
  ABISELECT(136,84),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(88,52),
  ABISELECT(160,100),
  ABISELECT(80,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S2820C2[0]),
  (VTBL_ENTRY)&_ZN7S2820C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2820C2D0Ev,
};
extern void _ZN7S2820C5D1Ev();
extern void _ZN7S2820C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2820C57S2820C2__7S2820C1[] = {
  ABISELECT(169,105),
  ABISELECT(136,84),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(88,52),
  ABISELECT(160,100),
  ABISELECT(80,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S2820C5[0]),
  (VTBL_ENTRY)&_ZN7S2820C5D1Ev,
  (VTBL_ENTRY)&_ZN7S2820C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S2820C127S2820C57S2820C2__A1__7S2820C1[] = {
  ABISELECT(160,100),
  ABISELECT(80,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C13__8S2820C127S2820C57S2820C2__A1__7S2820C1[] = {
  ABISELECT(-80,-52),
  ABISELECT(-160,-100),
  (VTBL_ENTRY)&(_ZTI8S2820C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2820C7__7S2820C57S2820C2__7S2820C1[] = {
  ABISELECT(81,53),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(32,24),
  ABISELECT(72,48),
  ABISELECT(-8,-4),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI7S2820C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2820C9__7S2820C57S2820C2__7S2820C1[] = {
  0,
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI7S2820C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C10__7S2820C57S2820C2__7S2820C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-136,-84),
  (VTBL_ENTRY)&(_ZTI7S2820C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C13__7S2820C57S2820C2__7S2820C1[] = {
  ABISELECT(-80,-52),
  ABISELECT(-160,-100),
  (VTBL_ENTRY)&(_ZTI7S2820C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2820C7__7S2820C2__7S2820C1[] = {
  ABISELECT(81,53),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(32,24),
  ABISELECT(72,48),
  ABISELECT(-8,-4),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI7S2820C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2820C9__7S2820C2__7S2820C1[] = {
  0,
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI7S2820C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C10__7S2820C2__7S2820C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-136,-84),
  (VTBL_ENTRY)&(_ZTI7S2820C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C13__7S2820C2__7S2820C1[] = {
  ABISELECT(-80,-52),
  ABISELECT(-160,-100),
  (VTBL_ENTRY)&(_ZTI7S2820C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C14__7S2820C1[] = {
  ABISELECT(145,89),
  ABISELECT(112,68),
  ABISELECT(64,36),
  ABISELECT(96,60),
  ABISELECT(96,60),
  ABISELECT(136,84),
  ABISELECT(152,92),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C138S2820C14__A1__7S2820C1[] = {
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C12__8S2820C14__7S2820C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-96,-60),
  ABISELECT(-152,-92),
  (VTBL_ENTRY)&(_ZTI8S2820C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C13__8S2820C14__7S2820C1[] = {
  ABISELECT(-80,-52),
  ABISELECT(-136,-84),
  (VTBL_ENTRY)&(_ZTI8S2820C14[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2820C9__8S2820C14__7S2820C1[] = {
  0,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI8S2820C14[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2820C7__8S2820C14__7S2820C1[] = {
  ABISELECT(81,53),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(32,24),
  ABISELECT(72,48),
  ABISELECT(-8,-4),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S2820C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C10__8S2820C14__7S2820C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S2820C14[0]),
};
extern void _ZN7S2820C5D1Ev();
extern void _ZN7S2820C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2820C5__A1__7S2820C1[] = {
  ABISELECT(129,81),
  ABISELECT(96,60),
  ABISELECT(80,52),
  ABISELECT(80,52),
  ABISELECT(48,28),
  ABISELECT(120,76),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S2820C5[0]),
  (VTBL_ENTRY)&_ZN7S2820C5D1Ev,
  (VTBL_ENTRY)&_ZN7S2820C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S2820C127S2820C5__A3__7S2820C1[] = {
  ABISELECT(120,76),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C13__8S2820C127S2820C5__A3__7S2820C1[] = {
  ABISELECT(-80,-52),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S2820C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2820C7__7S2820C5__A1__7S2820C1[] = {
  ABISELECT(81,53),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(32,24),
  ABISELECT(72,48),
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S2820C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2820C9__7S2820C5__A1__7S2820C1[] = {
  0,
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI7S2820C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C10__7S2820C5__A1__7S2820C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S2820C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C13__7S2820C5__A1__7S2820C1[] = {
  ABISELECT(-80,-52),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI7S2820C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2820C7__7S2820C1[] = {
  ABISELECT(81,53),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(32,24),
  ABISELECT(72,48),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2820C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C127S2820C7__7S2820C1[] = {
  ABISELECT(72,48),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C13__8S2820C127S2820C7__7S2820C1[] = {
  ABISELECT(-80,-52),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S2820C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2820C9__7S2820C7__7S2820C1[] = {
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S2820C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C10__7S2820C7__7S2820C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S2820C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C13__7S2820C7__7S2820C1[] = {
  ABISELECT(-80,-52),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S2820C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2820C9__7S2820C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2820C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C10__7S2820C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2820C98S2820C10__A1__7S2820C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2820C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C13__7S2820C1[] = {
  ABISELECT(-80,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C12__A2__7S2820C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-96,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S2820C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2820C13__8S2820C12__A2__7S2820C1[] = {
  ABISELECT(-80,-52),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S2820C12[0]),
};
static  VTT_ENTRY vtt_S2820C1[] = {
  {&(_ZTV7S2820C1[10]),  10,54},
  {&(_tg__ZTV7S2820C2__7S2820C1[9]),  9,11},
  {&(_tg__ZTV7S2820C57S2820C2__7S2820C1[9]),  9,11},
  {&(_tg__ZTV8S2820C127S2820C57S2820C2__A1__7S2820C1[4]),  4,4},
  {&(_tg__ZTV8S2820C13__8S2820C127S2820C57S2820C2__A1__7S2820C1[3]),  3,3},
  {&(_tg__ZTV7S2820C7__7S2820C57S2820C2__7S2820C1[8]),  8,8},
  {&(_tg__ZTV7S2820C9__7S2820C57S2820C2__7S2820C1[3]),  3,3},
  {&(_tg__ZTV8S2820C10__7S2820C57S2820C2__7S2820C1[3]),  3,3},
  {&(_tg__ZTV8S2820C13__7S2820C57S2820C2__7S2820C1[3]),  3,3},
  {&(_tg__ZTV7S2820C7__7S2820C2__7S2820C1[8]),  8,8},
  {&(_tg__ZTV7S2820C9__7S2820C2__7S2820C1[3]),  3,3},
  {&(_tg__ZTV8S2820C10__7S2820C2__7S2820C1[3]),  3,3},
  {&(_tg__ZTV8S2820C13__7S2820C2__7S2820C1[3]),  3,3},
  {&(_tg__ZTV8S2820C14__7S2820C1[10]),  10,10},
  {&(_tg__ZTV8S2820C138S2820C14__A1__7S2820C1[3]),  3,3},
  {&(_tg__ZTV8S2820C12__8S2820C14__7S2820C1[4]),  4,4},
  {&(_tg__ZTV8S2820C13__8S2820C14__7S2820C1[3]),  3,3},
  {&(_tg__ZTV7S2820C9__8S2820C14__7S2820C1[3]),  3,3},
  {&(_tg__ZTV7S2820C7__8S2820C14__7S2820C1[8]),  8,8},
  {&(_tg__ZTV8S2820C10__8S2820C14__7S2820C1[3]),  3,3},
  {&(_tg__ZTV7S2820C5__A1__7S2820C1[9]),  9,11},
  {&(_tg__ZTV8S2820C127S2820C5__A3__7S2820C1[4]),  4,4},
  {&(_tg__ZTV8S2820C13__8S2820C127S2820C5__A3__7S2820C1[3]),  3,3},
  {&(_tg__ZTV7S2820C7__7S2820C5__A1__7S2820C1[8]),  8,8},
  {&(_tg__ZTV7S2820C9__7S2820C5__A1__7S2820C1[3]),  3,3},
  {&(_tg__ZTV8S2820C10__7S2820C5__A1__7S2820C1[3]),  3,3},
  {&(_tg__ZTV8S2820C13__7S2820C5__A1__7S2820C1[3]),  3,3},
  {&(_ZTV7S2820C1[41]),  41,54},
  {&(_ZTV7S2820C1[44]),  44,54},
  {&(_ZTV7S2820C1[47]),  47,54},
  {&(_ZTV7S2820C1[50]),  50,54},
  {&(_ZTV7S2820C1[22]),  22,54},
  {&(_ZTV7S2820C1[54]),  54,54},
  {&(_ZTV7S2820C1[31]),  31,54},
  {&(_tg__ZTV7S2820C7__7S2820C1[8]),  8,8},
  {&(_tg__ZTV8S2820C127S2820C7__7S2820C1[4]),  4,4},
  {&(_tg__ZTV8S2820C13__8S2820C127S2820C7__7S2820C1[3]),  3,3},
  {&(_tg__ZTV7S2820C9__7S2820C7__7S2820C1[3]),  3,3},
  {&(_tg__ZTV8S2820C10__7S2820C7__7S2820C1[3]),  3,3},
  {&(_tg__ZTV8S2820C13__7S2820C7__7S2820C1[3]),  3,3},
  {&(_tg__ZTV7S2820C9__7S2820C1[3]),  3,3},
  {&(_tg__ZTV8S2820C10__7S2820C1[3]),  3,3},
  {&(_tg__ZTV7S2820C98S2820C10__A1__7S2820C1[3]),  3,3},
  {&(_tg__ZTV8S2820C13__7S2820C1[3]),  3,3},
  {&(_tg__ZTV8S2820C12__A2__7S2820C1[4]),  4,4},
  {&(_tg__ZTV8S2820C13__8S2820C12__A2__7S2820C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2820C1[];
extern  VTBL_ENTRY _ZTV7S2820C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2820C1[];
Class_Descriptor cd_S2820C1 = {  "S2820C1", // class name
  bases_S2820C1, 47,
  &(vtc_S2820C1[0]), // expected_vtbl_contents
  &(vtt_S2820C1[0]), // expected_vtt_contents
  ABISELECT(192,116), // object size
  NSPAIRA(_ZTI7S2820C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2820C1),54, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2820C1),46, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3765C2  : S1679C4_nt {
  virtual void  v9(); // _ZN7S3765C22v9Ev
  virtual void  v10(); // _ZN7S3765C23v10Ev
  virtual void  v11(); // _ZN7S3765C23v11Ev
  virtual void  v12(); // _ZN7S3765C23v12Ev
  virtual void  v13(); // _ZN7S3765C23v13Ev
  virtual void  v14(); // _ZN7S3765C23v14Ev
  virtual void  v15(); // _ZN7S3765C23v15Ev
  virtual void  v16(); // _ZN7S3765C23v16Ev
  virtual void  v17(); // _ZN7S3765C23v17Ev
  virtual void  v18(); // _ZN7S3765C23v18Ev
  virtual void  v19(); // _ZN7S3765C23v19Ev
  virtual void  v20(); // _ZN7S3765C23v20Ev
  ~S3765C2(); // tgen
  S3765C2(); // tgen
};
//SIG(-1 S3765C2) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S3765C2 ::v9(){vfunc_called(this, "_ZN7S3765C22v9Ev");}
void  S3765C2 ::v10(){vfunc_called(this, "_ZN7S3765C23v10Ev");}
void  S3765C2 ::v11(){vfunc_called(this, "_ZN7S3765C23v11Ev");}
void  S3765C2 ::v12(){vfunc_called(this, "_ZN7S3765C23v12Ev");}
void  S3765C2 ::v13(){vfunc_called(this, "_ZN7S3765C23v13Ev");}
void  S3765C2 ::v14(){vfunc_called(this, "_ZN7S3765C23v14Ev");}
void  S3765C2 ::v15(){vfunc_called(this, "_ZN7S3765C23v15Ev");}
void  S3765C2 ::v16(){vfunc_called(this, "_ZN7S3765C23v16Ev");}
void  S3765C2 ::v17(){vfunc_called(this, "_ZN7S3765C23v17Ev");}
void  S3765C2 ::v18(){vfunc_called(this, "_ZN7S3765C23v18Ev");}
void  S3765C2 ::v19(){vfunc_called(this, "_ZN7S3765C23v19Ev");}
void  S3765C2 ::v20(){vfunc_called(this, "_ZN7S3765C23v20Ev");}
S3765C2 ::~S3765C2(){ note_dtor("S3765C2", this);} // tgen
S3765C2 ::S3765C2(){ note_ctor("S3765C2", this);} // tgen

static void Test_S3765C2()
{
  extern Class_Descriptor cd_S3765C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3765C2, buf);
    S3765C2 *dp, &lv = *(dp=new (buf) S3765C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3765C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3765C2)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S3765C2");
    test_class_info(&lv, &cd_S3765C2);
    dp->~S3765C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3765C2(Test_S3765C2, "S3765C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3765C2C1Ev();
extern void _ZN7S3765C2D1Ev();
Name_Map name_map_S3765C2[] = {
  NSPAIR(_ZN7S3765C2C1Ev),
  NSPAIR(_ZN7S3765C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S3765C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S3765C2[];
extern void _ZN7S3765C2D1Ev();
extern void _ZN7S3765C2D0Ev();
extern void _ZN7S3765C22v9Ev();
extern void _ZN7S3765C23v10Ev();
extern void _ZN7S3765C23v11Ev();
extern void _ZN7S3765C23v12Ev();
extern void _ZN7S3765C23v13Ev();
extern void _ZN7S3765C23v14Ev();
extern void _ZN7S3765C23v15Ev();
extern void _ZN7S3765C23v16Ev();
extern void _ZN7S3765C23v17Ev();
extern void _ZN7S3765C23v18Ev();
extern void _ZN7S3765C23v19Ev();
extern void _ZN7S3765C23v20Ev();
static  VTBL_ENTRY vtc_S3765C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3765C2[0]),
  (VTBL_ENTRY)&_ZN7S3765C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3765C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3765C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3765C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3765C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3765C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3765C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3765C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3765C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3765C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3765C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3765C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3765C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3765C23v20Ev,
};
extern VTBL_ENTRY _ZTI7S3765C2[];
extern  VTBL_ENTRY _ZTV7S3765C2[];
Class_Descriptor cd_S3765C2 = {  "S3765C2", // class name
  bases_S3765C2, 1,
  &(vtc_S3765C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3765C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3765C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3765C5_nt  {
  void *s3765c5f0[2];
  void  mf3765c5(); // _ZN10S3765C5_nt8mf3765c5Ev
};
//SIG(-1 S3765C5_nt) C1{ m Fp[2]}


void  S3765C5_nt ::mf3765c5(){}

//skip512 S3765C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3765C1  : S3765C2 {
  ::S79C38_nt s3765c1f0;
  ::S3765C5_nt s3765c1f1;
  ::S3765C5_nt s3765c1f2;
  ::S1679C8_nt s3765c1f3;
  int s3765c1f4[3];
  void *s3765c1f5[2];
  int s3765c1f6;
  __tsi64 s3765c1f7[3];
  virtual  ~S3765C1(); // _ZN7S3765C1D1Ev
  virtual void  v1(); // _ZN7S3765C12v1Ev
  virtual void  v2(); // _ZN7S3765C12v2Ev
  virtual void  v3(); // _ZN7S3765C12v3Ev
  virtual void  v4(); // _ZN7S3765C12v4Ev
  virtual void  v5(); // _ZN7S3765C12v5Ev
  virtual void  v6(); // _ZN7S3765C12v6Ev
  virtual void  v7(); // _ZN7S3765C12v7Ev
  virtual void  v8(); // _ZN7S3765C12v8Ev
  S3765C1(); // tgen
};
//SIG(1 S3765C1) C1{ BC2{ BC3{ vd m Fi} v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20} vd v1 v2 v3 v4 v5 v6 v7 v8 FC4{ m Fp[2]} FC5{ m Fp[2]} FC5 FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]} Fi[3] Fp[2] Fi FL[3]}


 S3765C1 ::~S3765C1(){ note_dtor("S3765C1", this);}
void  S3765C1 ::v1(){vfunc_called(this, "_ZN7S3765C12v1Ev");}
void  S3765C1 ::v2(){vfunc_called(this, "_ZN7S3765C12v2Ev");}
void  S3765C1 ::v3(){vfunc_called(this, "_ZN7S3765C12v3Ev");}
void  S3765C1 ::v4(){vfunc_called(this, "_ZN7S3765C12v4Ev");}
void  S3765C1 ::v5(){vfunc_called(this, "_ZN7S3765C12v5Ev");}
void  S3765C1 ::v6(){vfunc_called(this, "_ZN7S3765C12v6Ev");}
void  S3765C1 ::v7(){vfunc_called(this, "_ZN7S3765C12v7Ev");}
void  S3765C1 ::v8(){vfunc_called(this, "_ZN7S3765C12v8Ev");}
S3765C1 ::S3765C1(){ note_ctor("S3765C1", this);} // tgen

static void Test_S3765C1()
{
  extern Class_Descriptor cd_S3765C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,27)];
    init_test(&cd_S3765C1, buf);
    S3765C1 *dp, &lv = *(dp=new (buf) S3765C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,104), "sizeof(S3765C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3765C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S3765C2*), 0, "S3765C1");
    check_base_class_offset(lv, (S3765C2*), 0, "S3765C1");
    check_field_offset(lv, s3765c1f0, ABISELECT(16,8), "S3765C1.s3765c1f0");
    check_field_offset(lv, s3765c1f1, ABISELECT(32,16), "S3765C1.s3765c1f1");
    check_field_offset(lv, s3765c1f2, ABISELECT(48,24), "S3765C1.s3765c1f2");
    check_field_offset(lv, s3765c1f3, ABISELECT(64,32), "S3765C1.s3765c1f3");
    check_field_offset(lv, s3765c1f4, ABISELECT(104,56), "S3765C1.s3765c1f4");
    check_field_offset(lv, s3765c1f5, ABISELECT(120,68), "S3765C1.s3765c1f5");
    check_field_offset(lv, s3765c1f6, ABISELECT(136,76), "S3765C1.s3765c1f6");
    check_field_offset(lv, s3765c1f7, ABISELECT(144,80), "S3765C1.s3765c1f7");
    test_class_info(&lv, &cd_S3765C1);
    dp->~S3765C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3765C1(Test_S3765C1, "S3765C1", ABISELECT(168,104));

#else // __cplusplus

extern void _ZN7S3765C1C1Ev();
extern void _ZN7S3765C1D1Ev();
Name_Map name_map_S3765C1[] = {
  NSPAIR(_ZN7S3765C1C1Ev),
  NSPAIR(_ZN7S3765C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S3765C2;
extern VTBL_ENTRY _ZTI7S3765C2[];
extern  VTBL_ENTRY _ZTV7S3765C2[];
static Base_Class bases_S3765C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S3765C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3765C1[];
extern void _ZN7S3765C1D1Ev();
extern void _ZN7S3765C1D0Ev();
extern void _ZN7S3765C22v9Ev();
extern void _ZN7S3765C23v10Ev();
extern void _ZN7S3765C23v11Ev();
extern void _ZN7S3765C23v12Ev();
extern void _ZN7S3765C23v13Ev();
extern void _ZN7S3765C23v14Ev();
extern void _ZN7S3765C23v15Ev();
extern void _ZN7S3765C23v16Ev();
extern void _ZN7S3765C23v17Ev();
extern void _ZN7S3765C23v18Ev();
extern void _ZN7S3765C23v19Ev();
extern void _ZN7S3765C23v20Ev();
extern void _ZN7S3765C12v1Ev();
extern void _ZN7S3765C12v2Ev();
extern void _ZN7S3765C12v3Ev();
extern void _ZN7S3765C12v4Ev();
extern void _ZN7S3765C12v5Ev();
extern void _ZN7S3765C12v6Ev();
extern void _ZN7S3765C12v7Ev();
extern void _ZN7S3765C12v8Ev();
static  VTBL_ENTRY vtc_S3765C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3765C1[0]),
  (VTBL_ENTRY)&_ZN7S3765C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3765C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3765C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3765C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3765C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3765C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3765C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3765C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3765C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3765C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3765C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3765C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3765C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3765C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3765C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3765C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3765C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3765C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3765C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3765C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3765C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3765C12v8Ev,
};
extern VTBL_ENTRY _ZTI7S3765C1[];
extern  VTBL_ENTRY _ZTV7S3765C1[];
Class_Descriptor cd_S3765C1 = {  "S3765C1", // class name
  bases_S3765C1, 2,
  &(vtc_S3765C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,104), // object size
  NSPAIRA(_ZTI7S3765C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3765C1),24, //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  S19371C3  {
  int s19371c3f0;
  __tsi64 s19371c3f1;
  virtual  ~S19371C3(); // _ZN8S19371C3D1Ev
  virtual void  v5(); // _ZN8S19371C32v5Ev
  virtual void  v6(); // _ZN8S19371C32v6Ev
  virtual void  v7(); // _ZN8S19371C32v7Ev
  S19371C3(); // tgen
};
//SIG(-1 S19371C3) C1{ vd v1 v2 v3 Fi FL}


 S19371C3 ::~S19371C3(){ note_dtor("S19371C3", this);}
void  S19371C3 ::v5(){vfunc_called(this, "_ZN8S19371C32v5Ev");}
void  S19371C3 ::v6(){vfunc_called(this, "_ZN8S19371C32v6Ev");}
void  S19371C3 ::v7(){vfunc_called(this, "_ZN8S19371C32v7Ev");}
S19371C3 ::S19371C3(){ note_ctor("S19371C3", this);} // tgen

static void Test_S19371C3()
{
  extern Class_Descriptor cd_S19371C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S19371C3, buf);
    S19371C3 *dp, &lv = *(dp=new (buf) S19371C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S19371C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19371C3)");
    check_field_offset(lv, s19371c3f0, ABISELECT(8,4), "S19371C3.s19371c3f0");
    check_field_offset(lv, s19371c3f1, ABISELECT(16,8), "S19371C3.s19371c3f1");
    test_class_info(&lv, &cd_S19371C3);
    dp->~S19371C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19371C3(Test_S19371C3, "S19371C3", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S19371C3C1Ev();
extern void _ZN8S19371C3D1Ev();
Name_Map name_map_S19371C3[] = {
  NSPAIR(_ZN8S19371C3C1Ev),
  NSPAIR(_ZN8S19371C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19371C3[];
extern void _ZN8S19371C3D1Ev();
extern void _ZN8S19371C3D0Ev();
extern void _ZN8S19371C32v5Ev();
extern void _ZN8S19371C32v6Ev();
extern void _ZN8S19371C32v7Ev();
static  VTBL_ENTRY vtc_S19371C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19371C3[0]),
  (VTBL_ENTRY)&_ZN8S19371C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19371C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19371C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19371C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19371C32v7Ev,
};
extern VTBL_ENTRY _ZTI8S19371C3[];
extern  VTBL_ENTRY _ZTV8S19371C3[];
Class_Descriptor cd_S19371C3 = {  "S19371C3", // class name
  0,0,//no base classes
  &(vtc_S19371C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S19371C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19371C3),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  S19371C2  : S19371C3 {
  int s19371c2f0;
  ::S19371C3 s19371c2f1;
  virtual  ~S19371C2(); // _ZN8S19371C2D1Ev
  virtual void  v8(); // _ZN8S19371C22v8Ev
  virtual void  v9(); // _ZN8S19371C22v9Ev
  virtual void  v10(); // _ZN8S19371C23v10Ev
  S19371C2(); // tgen
};
//SIG(-1 S19371C2) C1{ BC2{ vd v4 v5 v6 Fi FL} vd v1 v2 v3 Fi FC2}


 S19371C2 ::~S19371C2(){ note_dtor("S19371C2", this);}
void  S19371C2 ::v8(){vfunc_called(this, "_ZN8S19371C22v8Ev");}
void  S19371C2 ::v9(){vfunc_called(this, "_ZN8S19371C22v9Ev");}
void  S19371C2 ::v10(){vfunc_called(this, "_ZN8S19371C23v10Ev");}
S19371C2 ::S19371C2(){ note_ctor("S19371C2", this);} // tgen

static void Test_S19371C2()
{
  extern Class_Descriptor cd_S19371C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S19371C2, buf);
    S19371C2 *dp, &lv = *(dp=new (buf) S19371C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S19371C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19371C2)");
    check_base_class_offset(lv, (S19371C3*), 0, "S19371C2");
    check_field_offset(lv, s19371c2f0, ABISELECT(24,16), "S19371C2.s19371c2f0");
    check_field_offset(lv, s19371c2f1, ABISELECT(32,20), "S19371C2.s19371c2f1");
    test_class_info(&lv, &cd_S19371C2);
    dp->~S19371C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19371C2(Test_S19371C2, "S19371C2", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN8S19371C2C1Ev();
extern void _ZN8S19371C2D1Ev();
Name_Map name_map_S19371C2[] = {
  NSPAIR(_ZN8S19371C2C1Ev),
  NSPAIR(_ZN8S19371C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19371C3;
extern VTBL_ENTRY _ZTI8S19371C3[];
extern  VTBL_ENTRY _ZTV8S19371C3[];
static Base_Class bases_S19371C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19371C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S19371C2[];
extern void _ZN8S19371C2D1Ev();
extern void _ZN8S19371C2D0Ev();
extern void _ZN8S19371C32v5Ev();
extern void _ZN8S19371C32v6Ev();
extern void _ZN8S19371C32v7Ev();
extern void _ZN8S19371C22v8Ev();
extern void _ZN8S19371C22v9Ev();
extern void _ZN8S19371C23v10Ev();
static  VTBL_ENTRY vtc_S19371C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19371C2[0]),
  (VTBL_ENTRY)&_ZN8S19371C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19371C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19371C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19371C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19371C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19371C22v8Ev,
  (VTBL_ENTRY)&_ZN8S19371C22v9Ev,
  (VTBL_ENTRY)&_ZN8S19371C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S19371C2[];
extern  VTBL_ENTRY _ZTV8S19371C2[];
Class_Descriptor cd_S19371C2 = {  "S19371C2", // class name
  bases_S19371C2, 1,
  &(vtc_S19371C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI8S19371C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19371C2),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  S19371C6  {
  virtual void  v11(); // _ZN8S19371C63v11Ev
  virtual void  v12(); // _ZN8S19371C63v12Ev
  virtual void  v13(); // _ZN8S19371C63v13Ev
  virtual void  v14(); // _ZN8S19371C63v14Ev
  virtual void  v15(); // _ZN8S19371C63v15Ev
  virtual void  v16(); // _ZN8S19371C63v16Ev
  virtual void  v17(); // _ZN8S19371C63v17Ev
  virtual void  v18(); // _ZN8S19371C63v18Ev
  virtual void  v19(); // _ZN8S19371C63v19Ev
  ~S19371C6(); // tgen
  S19371C6(); // tgen
};
//SIG(-1 S19371C6) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S19371C6 ::v11(){vfunc_called(this, "_ZN8S19371C63v11Ev");}
void  S19371C6 ::v12(){vfunc_called(this, "_ZN8S19371C63v12Ev");}
void  S19371C6 ::v13(){vfunc_called(this, "_ZN8S19371C63v13Ev");}
void  S19371C6 ::v14(){vfunc_called(this, "_ZN8S19371C63v14Ev");}
void  S19371C6 ::v15(){vfunc_called(this, "_ZN8S19371C63v15Ev");}
void  S19371C6 ::v16(){vfunc_called(this, "_ZN8S19371C63v16Ev");}
void  S19371C6 ::v17(){vfunc_called(this, "_ZN8S19371C63v17Ev");}
void  S19371C6 ::v18(){vfunc_called(this, "_ZN8S19371C63v18Ev");}
void  S19371C6 ::v19(){vfunc_called(this, "_ZN8S19371C63v19Ev");}
S19371C6 ::~S19371C6(){ note_dtor("S19371C6", this);} // tgen
S19371C6 ::S19371C6(){ note_ctor("S19371C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19371C6C1Ev();
extern void _ZN8S19371C6D1Ev();
Name_Map name_map_S19371C6[] = {
  NSPAIR(_ZN8S19371C6C1Ev),
  NSPAIR(_ZN8S19371C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19371C6[];
extern void _ZN8S19371C63v11Ev();
extern void _ZN8S19371C63v12Ev();
extern void _ZN8S19371C63v13Ev();
extern void _ZN8S19371C63v14Ev();
extern void _ZN8S19371C63v15Ev();
extern void _ZN8S19371C63v16Ev();
extern void _ZN8S19371C63v17Ev();
extern void _ZN8S19371C63v18Ev();
extern void _ZN8S19371C63v19Ev();
static  VTBL_ENTRY vtc_S19371C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19371C6[0]),
  (VTBL_ENTRY)&_ZN8S19371C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v13Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v14Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v16Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v19Ev,
};
extern VTBL_ENTRY _ZTI8S19371C6[];
extern  VTBL_ENTRY _ZTV8S19371C6[];
Class_Descriptor cd_S19371C6 = {  "S19371C6", // class name
  0,0,//no base classes
  &(vtc_S19371C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19371C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19371C6),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  S19371C5  : virtual S19371C6 , virtual S19371C2 {
  ::S19371C2 s19371c5f0[3];
  int s19371c5f1;
  void *s19371c5f2[8];
  int s19371c5f3;
  long double s19371c5f4[3];
  virtual void  v20(); // _ZN8S19371C53v20Ev
  virtual void  v21(); // _ZN8S19371C53v21Ev
  virtual void  v22(); // _ZN8S19371C53v22Ev
  virtual void  v23(); // _ZN8S19371C53v23Ev
  ~S19371C5(); // tgen
  S19371C5(); // tgen
};
//SIG(-1 S19371C5) C1{ VBC2{ v5 v6 v7 v8 v9 v10 v11 v12 v13} VBC3{ BC4{ vd v14 v15 v16 Fi FL} vd v17 v18 v19 Fi FC4} v1 v2 v3 v4 FC3[3] Fi Fp[8] Fi FD[3]}


void  S19371C5 ::v20(){vfunc_called(this, "_ZN8S19371C53v20Ev");}
void  S19371C5 ::v21(){vfunc_called(this, "_ZN8S19371C53v21Ev");}
void  S19371C5 ::v22(){vfunc_called(this, "_ZN8S19371C53v22Ev");}
void  S19371C5 ::v23(){vfunc_called(this, "_ZN8S19371C53v23Ev");}
S19371C5 ::~S19371C5(){ note_dtor("S19371C5", this);} // tgen
S19371C5 ::S19371C5(){ note_ctor("S19371C5", this);} // tgen

static void Test_S19371C5()
{
  extern Class_Descriptor cd_S19371C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,57)];
    init_test(&cd_S19371C5, buf);
    S19371C5 *dp, &lv = *(dp=new (buf) S19371C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,224), "sizeof(S19371C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19371C5)");
    check_base_class_offset(lv, (S19371C6*), 0, "S19371C5");
    check_base_class_offset(lv, (S19371C3*)(S19371C2*), ABISELECT(304,188), "S19371C5");
    check_base_class_offset(lv, (S19371C2*), ABISELECT(304,188), "S19371C5");
    check_field_offset(lv, s19371c5f0, ABISELECT(8,4), "S19371C5.s19371c5f0");
    check_field_offset(lv, s19371c5f1, ABISELECT(176,112), "S19371C5.s19371c5f1");
    check_field_offset(lv, s19371c5f2, ABISELECT(184,116), "S19371C5.s19371c5f2");
    check_field_offset(lv, s19371c5f3, ABISELECT(248,148), "S19371C5.s19371c5f3");
    check_field_offset(lv, s19371c5f4, ABISELECT(256,152), "S19371C5.s19371c5f4");
    test_class_info(&lv, &cd_S19371C5);
    dp->~S19371C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19371C5(Test_S19371C5, "S19371C5", ABISELECT(368,224));

#else // __cplusplus

extern void _ZN8S19371C5C1Ev();
extern void _ZN8S19371C5D1Ev();
Name_Map name_map_S19371C5[] = {
  NSPAIR(_ZN8S19371C5C1Ev),
  NSPAIR(_ZN8S19371C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19371C6;
extern VTBL_ENTRY _ZTI8S19371C6[];
extern  VTBL_ENTRY _ZTV8S19371C6[];
extern Class_Descriptor cd_S19371C3;
extern VTBL_ENTRY _ZTI8S19371C3[];
extern  VTBL_ENTRY _ZTV8S19371C3[];
extern Class_Descriptor cd_S19371C2;
extern VTBL_ENTRY _ZTI8S19371C2[];
extern  VTBL_ENTRY _ZTV8S19371C2[];
static Base_Class bases_S19371C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19371C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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_S19371C3,    ABISELECT(304,188), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19371C2,    ABISELECT(304,188), //bcp->offset
    28, //bcp->virtual_function_table_offset
    9, //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 _ZTI8S19371C5[];
extern void _ZN8S19371C63v11Ev();
extern void _ZN8S19371C63v12Ev();
extern void _ZN8S19371C63v13Ev();
extern void _ZN8S19371C63v14Ev();
extern void _ZN8S19371C63v15Ev();
extern void _ZN8S19371C63v16Ev();
extern void _ZN8S19371C63v17Ev();
extern void _ZN8S19371C63v18Ev();
extern void _ZN8S19371C63v19Ev();
extern void _ZN8S19371C53v20Ev();
extern void _ZN8S19371C53v21Ev();
extern void _ZN8S19371C53v22Ev();
extern void _ZN8S19371C53v23Ev();
extern void _ZN8S19371C5D1Ev();
extern void _ZN8S19371C5D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19371C5D1Ev,_ZTv0_n12_N8S19371C5D1Ev)();
extern void ABISELECT(_ZThn304_N8S19371C5D1Ev,_ZThn188_N8S19371C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19371C5D0Ev,_ZTv0_n12_N8S19371C5D0Ev)();
extern void ABISELECT(_ZThn304_N8S19371C5D0Ev,_ZThn188_N8S19371C5D0Ev)() __attribute__((weak));
extern void _ZN8S19371C32v5Ev();
extern void _ZN8S19371C32v6Ev();
extern void _ZN8S19371C32v7Ev();
extern void _ZN8S19371C22v8Ev();
extern void _ZN8S19371C22v9Ev();
extern void _ZN8S19371C23v10Ev();
static  VTBL_ENTRY vtc_S19371C5[] = {
  ABISELECT(304,188),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19371C5[0]),
  (VTBL_ENTRY)&_ZN8S19371C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v13Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v14Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v16Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v19Ev,
  (VTBL_ENTRY)&_ZN8S19371C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19371C53v21Ev,
  (VTBL_ENTRY)&_ZN8S19371C53v22Ev,
  (VTBL_ENTRY)&_ZN8S19371C53v23Ev,
  (VTBL_ENTRY)&_ZN8S19371C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19371C5D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-188),
  ABISELECT(-304,-188),
  (VTBL_ENTRY)&(_ZTI8S19371C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19371C5D1Ev,_ZTv0_n12_N8S19371C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19371C5D0Ev,_ZTv0_n12_N8S19371C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19371C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19371C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19371C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19371C22v8Ev,
  (VTBL_ENTRY)&_ZN8S19371C22v9Ev,
  (VTBL_ENTRY)&_ZN8S19371C23v10Ev,
};
extern VTBL_ENTRY _ZTV8S19371C5[];
static  VTT_ENTRY vtt_S19371C5[] = {
  {&(_ZTV8S19371C5[13]),  13,45},
  {&(_ZTV8S19371C5[13]),  13,45},
  {&(_ZTV8S19371C5[37]),  37,45},
};
extern VTBL_ENTRY _ZTI8S19371C5[];
extern  VTBL_ENTRY _ZTV8S19371C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19371C5[];
static VTBL_ENTRY alt_thunk_names96[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19371C5D0Ev,_ZTv0_n12_N8S19371C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19371C5D0Ev,_ZThn188_N8S19371C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19371C5D1Ev,_ZTv0_n12_N8S19371C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19371C5D1Ev,_ZThn188_N8S19371C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19371C5 = {  "S19371C5", // class name
  bases_S19371C5, 3,
  &(vtc_S19371C5[0]), // expected_vtbl_contents
  &(vtt_S19371C5[0]), // expected_vtt_contents
  ABISELECT(368,224), // object size
  NSPAIRA(_ZTI8S19371C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19371C5),45, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19371C5),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names96,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19371C4  : S19371C5 {
  virtual void  v24(); // _ZN8S19371C43v24Ev
  virtual void  v25(); // _ZN8S19371C43v25Ev
  ~S19371C4(); // tgen
  S19371C4(); // tgen
};
//SIG(-1 S19371C4) C1{ BC2{ VBC3{ v3 v4 v5 v6 v7 v8 v9 v10 v11} VBC4{ BC5{ vd v12 v13 v14 Fi FL} vd v15 v16 v17 Fi FC5} v18 v19 v20 v21 FC4[3] Fi Fp[8] Fi FD[3]} v1 v2}


void  S19371C4 ::v24(){vfunc_called(this, "_ZN8S19371C43v24Ev");}
void  S19371C4 ::v25(){vfunc_called(this, "_ZN8S19371C43v25Ev");}
S19371C4 ::~S19371C4(){ note_dtor("S19371C4", this);} // tgen
S19371C4 ::S19371C4(){ note_ctor("S19371C4", this);} // tgen

static void Test_S19371C4()
{
  extern Class_Descriptor cd_S19371C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,57)];
    init_test(&cd_S19371C4, buf);
    S19371C4 *dp, &lv = *(dp=new (buf) S19371C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,224), "sizeof(S19371C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19371C4)");
    check_base_class_offset(lv, (S19371C6*)(S19371C5*), 0, "S19371C4");
    check_base_class_offset(lv, (S19371C3*)(S19371C2*), ABISELECT(304,188), "S19371C4");
    check_base_class_offset(lv, (S19371C2*)(S19371C5*), ABISELECT(304,188), "S19371C4");
    check_base_class_offset(lv, (S19371C5*), 0, "S19371C4");
    test_class_info(&lv, &cd_S19371C4);
    dp->~S19371C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19371C4(Test_S19371C4, "S19371C4", ABISELECT(368,224));

#else // __cplusplus

extern void _ZN8S19371C4C1Ev();
extern void _ZN8S19371C4D1Ev();
Name_Map name_map_S19371C4[] = {
  NSPAIR(_ZN8S19371C4C1Ev),
  NSPAIR(_ZN8S19371C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19371C6;
extern VTBL_ENTRY _ZTI8S19371C6[];
extern  VTBL_ENTRY _ZTV8S19371C6[];
extern Class_Descriptor cd_S19371C3;
extern VTBL_ENTRY _ZTI8S19371C3[];
extern  VTBL_ENTRY _ZTV8S19371C3[];
extern Class_Descriptor cd_S19371C2;
extern VTBL_ENTRY _ZTI8S19371C2[];
extern  VTBL_ENTRY _ZTV8S19371C2[];
extern Class_Descriptor cd_S19371C5;
extern VTBL_ENTRY _ZTI8S19371C5[];
extern  VTBL_ENTRY _ZTV8S19371C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19371C5[];
static Base_Class bases_S19371C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19371C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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
    3, //immediately_derived
  0, 1},
  {&cd_S19371C3,    ABISELECT(304,188), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19371C2,    ABISELECT(304,188), //bcp->offset
    30, //bcp->virtual_function_table_offset
    9, //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
    3, //immediately_derived
  0, 1},
  {&cd_S19371C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19371C4[];
extern void _ZN8S19371C63v11Ev();
extern void _ZN8S19371C63v12Ev();
extern void _ZN8S19371C63v13Ev();
extern void _ZN8S19371C63v14Ev();
extern void _ZN8S19371C63v15Ev();
extern void _ZN8S19371C63v16Ev();
extern void _ZN8S19371C63v17Ev();
extern void _ZN8S19371C63v18Ev();
extern void _ZN8S19371C63v19Ev();
extern void _ZN8S19371C53v20Ev();
extern void _ZN8S19371C53v21Ev();
extern void _ZN8S19371C53v22Ev();
extern void _ZN8S19371C53v23Ev();
extern void _ZN8S19371C4D1Ev();
extern void _ZN8S19371C4D0Ev();
extern void _ZN8S19371C43v24Ev();
extern void _ZN8S19371C43v25Ev();
extern void ABISELECT(_ZTv0_n24_N8S19371C4D1Ev,_ZTv0_n12_N8S19371C4D1Ev)();
extern void ABISELECT(_ZThn304_N8S19371C4D1Ev,_ZThn188_N8S19371C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19371C4D0Ev,_ZTv0_n12_N8S19371C4D0Ev)();
extern void ABISELECT(_ZThn304_N8S19371C4D0Ev,_ZThn188_N8S19371C4D0Ev)() __attribute__((weak));
extern void _ZN8S19371C32v5Ev();
extern void _ZN8S19371C32v6Ev();
extern void _ZN8S19371C32v7Ev();
extern void _ZN8S19371C22v8Ev();
extern void _ZN8S19371C22v9Ev();
extern void _ZN8S19371C23v10Ev();
static  VTBL_ENTRY vtc_S19371C4[] = {
  ABISELECT(304,188),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19371C4[0]),
  (VTBL_ENTRY)&_ZN8S19371C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v13Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v14Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v16Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v19Ev,
  (VTBL_ENTRY)&_ZN8S19371C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19371C53v21Ev,
  (VTBL_ENTRY)&_ZN8S19371C53v22Ev,
  (VTBL_ENTRY)&_ZN8S19371C53v23Ev,
  (VTBL_ENTRY)&_ZN8S19371C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19371C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19371C43v24Ev,
  (VTBL_ENTRY)&_ZN8S19371C43v25Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-188),
  ABISELECT(-304,-188),
  (VTBL_ENTRY)&(_ZTI8S19371C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19371C4D1Ev,_ZTv0_n12_N8S19371C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19371C4D0Ev,_ZTv0_n12_N8S19371C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19371C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19371C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19371C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19371C22v8Ev,
  (VTBL_ENTRY)&_ZN8S19371C22v9Ev,
  (VTBL_ENTRY)&_ZN8S19371C23v10Ev,
};
extern VTBL_ENTRY _ZTV8S19371C4[];
extern void _ZN8S19371C63v11Ev();
extern void _ZN8S19371C63v12Ev();
extern void _ZN8S19371C63v13Ev();
extern void _ZN8S19371C63v14Ev();
extern void _ZN8S19371C63v15Ev();
extern void _ZN8S19371C63v16Ev();
extern void _ZN8S19371C63v17Ev();
extern void _ZN8S19371C63v18Ev();
extern void _ZN8S19371C63v19Ev();
extern void _ZN8S19371C53v20Ev();
extern void _ZN8S19371C53v21Ev();
extern void _ZN8S19371C53v22Ev();
extern void _ZN8S19371C53v23Ev();
extern void _ZN8S19371C5D1Ev();
extern void _ZN8S19371C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19371C5__8S19371C4[] = {
  ABISELECT(304,188),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19371C5[0]),
  (VTBL_ENTRY)&_ZN8S19371C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v13Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v14Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v16Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v19Ev,
  (VTBL_ENTRY)&_ZN8S19371C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19371C53v21Ev,
  (VTBL_ENTRY)&_ZN8S19371C53v22Ev,
  (VTBL_ENTRY)&_ZN8S19371C53v23Ev,
  (VTBL_ENTRY)&_ZN8S19371C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19371C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19371C5D1Ev,_ZTv0_n12_N8S19371C5D1Ev)();
extern void ABISELECT(_ZThn304_N8S19371C5D1Ev,_ZThn188_N8S19371C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19371C5D0Ev,_ZTv0_n12_N8S19371C5D0Ev)();
extern void ABISELECT(_ZThn304_N8S19371C5D0Ev,_ZThn188_N8S19371C5D0Ev)() __attribute__((weak));
extern void _ZN8S19371C32v5Ev();
extern void _ZN8S19371C32v6Ev();
extern void _ZN8S19371C32v7Ev();
extern void _ZN8S19371C22v8Ev();
extern void _ZN8S19371C22v9Ev();
extern void _ZN8S19371C23v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19371C2__8S19371C5__8S19371C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-188),
  ABISELECT(-304,-188),
  (VTBL_ENTRY)&(_ZTI8S19371C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19371C5D1Ev,_ZTv0_n12_N8S19371C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19371C5D0Ev,_ZTv0_n12_N8S19371C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19371C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19371C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19371C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19371C22v8Ev,
  (VTBL_ENTRY)&_ZN8S19371C22v9Ev,
  (VTBL_ENTRY)&_ZN8S19371C23v10Ev,
};
static  VTT_ENTRY vtt_S19371C4[] = {
  {&(_ZTV8S19371C4[13]),  13,47},
  {&(_tg__ZTV8S19371C5__8S19371C4[13]),  13,28},
  {&(_tg__ZTV8S19371C5__8S19371C4[13]),  13,28},
  {&(_tg__ZTV8S19371C2__8S19371C5__8S19371C4[9]),  9,17},
  {&(_ZTV8S19371C4[13]),  13,47},
  {&(_ZTV8S19371C4[39]),  39,47},
};
extern VTBL_ENTRY _ZTI8S19371C4[];
extern  VTBL_ENTRY _ZTV8S19371C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19371C4[];
static VTBL_ENTRY alt_thunk_names97[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19371C5D0Ev,_ZTv0_n12_N8S19371C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19371C5D0Ev,_ZThn188_N8S19371C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19371C5D1Ev,_ZTv0_n12_N8S19371C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19371C5D1Ev,_ZThn188_N8S19371C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19371C4D0Ev,_ZTv0_n12_N8S19371C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19371C4D0Ev,_ZThn188_N8S19371C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19371C4D1Ev,_ZTv0_n12_N8S19371C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19371C4D1Ev,_ZThn188_N8S19371C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19371C4 = {  "S19371C4", // class name
  bases_S19371C4, 4,
  &(vtc_S19371C4[0]), // expected_vtbl_contents
  &(vtt_S19371C4[0]), // expected_vtt_contents
  ABISELECT(368,224), // object size
  NSPAIRA(_ZTI8S19371C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19371C4),47, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19371C4),6, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names97,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19371C1  : virtual S19371C2 , S19371C4 {
  int s19371c1f0[9];
  void *s19371c1f1;
  virtual  ~S19371C1(); // _ZN8S19371C1D2Ev
  virtual void  v1(); // _ZN8S19371C12v1Ev
  virtual void  v2(); // _ZN8S19371C12v2Ev
  virtual void  v3(); // _ZN8S19371C12v3Ev
  virtual void  v4(); // _ZN8S19371C12v4Ev
  S19371C1(); // tgen
};
//SIG(1 S19371C1) C1{ VBC2{ BC3{ vd v5 v6 v7 Fi FL} vd v8 v9 v10 Fi FC3} BC4{ BC5{ VBC6{ v11 v12 v13 v14 v15 v16 v17 v18 v19} VBC2 v20 v21 v22 v23 FC2[3] Fi Fp[8] Fi FD[3]} v24 v25} vd v1 v2 v3 v4 Fi[9] Fp}


 S19371C1 ::~S19371C1(){ note_dtor("S19371C1", this);}
void  S19371C1 ::v1(){vfunc_called(this, "_ZN8S19371C12v1Ev");}
void  S19371C1 ::v2(){vfunc_called(this, "_ZN8S19371C12v2Ev");}
void  S19371C1 ::v3(){vfunc_called(this, "_ZN8S19371C12v3Ev");}
void  S19371C1 ::v4(){vfunc_called(this, "_ZN8S19371C12v4Ev");}
S19371C1 ::S19371C1(){ note_ctor("S19371C1", this);} // tgen

static void Test_S19371C1()
{
  extern Class_Descriptor cd_S19371C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(27,67)];
    init_test(&cd_S19371C1, buf);
    S19371C1 *dp, &lv = *(dp=new (buf) S19371C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,264), "sizeof(S19371C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19371C1)");
    check_base_class_offset(lv, (S19371C3*)(S19371C2*), ABISELECT(352,228), "S19371C1");
    check_base_class_offset(lv, (S19371C2*), ABISELECT(352,228), "S19371C1");
    check_base_class_offset(lv, (S19371C2*)(S19371C5*)(S19371C4*), ABISELECT(352,228), "S19371C1");
    check_base_class_offset(lv, (S19371C6*)(S19371C5*)(S19371C4*), 0, "S19371C1");
    check_base_class_offset(lv, (S19371C5*)(S19371C4*), 0, "S19371C1");
    check_base_class_offset(lv, (S19371C4*), 0, "S19371C1");
    check_field_offset(lv, s19371c1f0, ABISELECT(304,188), "S19371C1.s19371c1f0");
    check_field_offset(lv, s19371c1f1, ABISELECT(344,224), "S19371C1.s19371c1f1");
    test_class_info(&lv, &cd_S19371C1);
    dp->~S19371C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19371C1(Test_S19371C1, "S19371C1", ABISELECT(416,264));

#else // __cplusplus

extern void _ZN8S19371C1C1Ev();
extern void _ZN8S19371C1D2Ev();
Name_Map name_map_S19371C1[] = {
  NSPAIR(_ZN8S19371C1C1Ev),
  NSPAIR(_ZN8S19371C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19371C3;
extern VTBL_ENTRY _ZTI8S19371C3[];
extern  VTBL_ENTRY _ZTV8S19371C3[];
extern Class_Descriptor cd_S19371C2;
extern VTBL_ENTRY _ZTI8S19371C2[];
extern  VTBL_ENTRY _ZTV8S19371C2[];
extern Class_Descriptor cd_S19371C6;
extern VTBL_ENTRY _ZTI8S19371C6[];
extern  VTBL_ENTRY _ZTV8S19371C6[];
extern Class_Descriptor cd_S19371C5;
extern VTBL_ENTRY _ZTI8S19371C5[];
extern  VTBL_ENTRY _ZTV8S19371C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19371C5[];
extern Class_Descriptor cd_S19371C4;
extern VTBL_ENTRY _ZTI8S19371C4[];
extern  VTBL_ENTRY _ZTV8S19371C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19371C4[];
static Base_Class bases_S19371C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19371C3,    ABISELECT(352,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
  0, 0},
  {&cd_S19371C2,    ABISELECT(352,228), //bcp->offset
    34, //bcp->virtual_function_table_offset
    9, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S19371C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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_S19371C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19371C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //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 _ZTI8S19371C1[];
extern void _ZN8S19371C63v11Ev();
extern void _ZN8S19371C63v12Ev();
extern void _ZN8S19371C63v13Ev();
extern void _ZN8S19371C63v14Ev();
extern void _ZN8S19371C63v15Ev();
extern void _ZN8S19371C63v16Ev();
extern void _ZN8S19371C63v17Ev();
extern void _ZN8S19371C63v18Ev();
extern void _ZN8S19371C63v19Ev();
extern void _ZN8S19371C53v20Ev();
extern void _ZN8S19371C53v21Ev();
extern void _ZN8S19371C53v22Ev();
extern void _ZN8S19371C53v23Ev();
extern void _ZN8S19371C1D1Ev();
extern void _ZN8S19371C1D0Ev();
extern void _ZN8S19371C43v24Ev();
extern void _ZN8S19371C43v25Ev();
extern void _ZN8S19371C12v1Ev();
extern void _ZN8S19371C12v2Ev();
extern void _ZN8S19371C12v3Ev();
extern void _ZN8S19371C12v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S19371C1D1Ev,_ZTv0_n12_N8S19371C1D1Ev)();
extern void ABISELECT(_ZThn352_N8S19371C1D1Ev,_ZThn228_N8S19371C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19371C1D0Ev,_ZTv0_n12_N8S19371C1D0Ev)();
extern void ABISELECT(_ZThn352_N8S19371C1D0Ev,_ZThn228_N8S19371C1D0Ev)() __attribute__((weak));
extern void _ZN8S19371C32v5Ev();
extern void _ZN8S19371C32v6Ev();
extern void _ZN8S19371C32v7Ev();
extern void _ZN8S19371C22v8Ev();
extern void _ZN8S19371C22v9Ev();
extern void _ZN8S19371C23v10Ev();
static  VTBL_ENTRY vtc_S19371C1[] = {
  ABISELECT(352,228),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19371C1[0]),
  (VTBL_ENTRY)&_ZN8S19371C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v13Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v14Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v16Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v19Ev,
  (VTBL_ENTRY)&_ZN8S19371C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19371C53v21Ev,
  (VTBL_ENTRY)&_ZN8S19371C53v22Ev,
  (VTBL_ENTRY)&_ZN8S19371C53v23Ev,
  (VTBL_ENTRY)&_ZN8S19371C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19371C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19371C43v24Ev,
  (VTBL_ENTRY)&_ZN8S19371C43v25Ev,
  (VTBL_ENTRY)&_ZN8S19371C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19371C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19371C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19371C12v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-352,-228),
  ABISELECT(-352,-228),
  (VTBL_ENTRY)&(_ZTI8S19371C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19371C1D1Ev,_ZTv0_n12_N8S19371C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19371C1D0Ev,_ZTv0_n12_N8S19371C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19371C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19371C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19371C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19371C22v8Ev,
  (VTBL_ENTRY)&_ZN8S19371C22v9Ev,
  (VTBL_ENTRY)&_ZN8S19371C23v10Ev,
};
extern VTBL_ENTRY _ZTV8S19371C1[];
extern void _ZN8S19371C63v11Ev();
extern void _ZN8S19371C63v12Ev();
extern void _ZN8S19371C63v13Ev();
extern void _ZN8S19371C63v14Ev();
extern void _ZN8S19371C63v15Ev();
extern void _ZN8S19371C63v16Ev();
extern void _ZN8S19371C63v17Ev();
extern void _ZN8S19371C63v18Ev();
extern void _ZN8S19371C63v19Ev();
extern void _ZN8S19371C53v20Ev();
extern void _ZN8S19371C53v21Ev();
extern void _ZN8S19371C53v22Ev();
extern void _ZN8S19371C53v23Ev();
extern void _ZN8S19371C4D1Ev();
extern void _ZN8S19371C4D0Ev();
extern void _ZN8S19371C43v24Ev();
extern void _ZN8S19371C43v25Ev();
static  VTBL_ENTRY _tg__ZTV8S19371C4__8S19371C1[] = {
  ABISELECT(352,228),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19371C4[0]),
  (VTBL_ENTRY)&_ZN8S19371C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v13Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v14Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v16Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v19Ev,
  (VTBL_ENTRY)&_ZN8S19371C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19371C53v21Ev,
  (VTBL_ENTRY)&_ZN8S19371C53v22Ev,
  (VTBL_ENTRY)&_ZN8S19371C53v23Ev,
  (VTBL_ENTRY)&_ZN8S19371C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19371C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19371C43v24Ev,
  (VTBL_ENTRY)&_ZN8S19371C43v25Ev,
};
extern void _ZN8S19371C63v11Ev();
extern void _ZN8S19371C63v12Ev();
extern void _ZN8S19371C63v13Ev();
extern void _ZN8S19371C63v14Ev();
extern void _ZN8S19371C63v15Ev();
extern void _ZN8S19371C63v16Ev();
extern void _ZN8S19371C63v17Ev();
extern void _ZN8S19371C63v18Ev();
extern void _ZN8S19371C63v19Ev();
extern void _ZN8S19371C53v20Ev();
extern void _ZN8S19371C53v21Ev();
extern void _ZN8S19371C53v22Ev();
extern void _ZN8S19371C53v23Ev();
extern void _ZN8S19371C5D1Ev();
extern void _ZN8S19371C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19371C58S19371C4__8S19371C1[] = {
  ABISELECT(352,228),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19371C5[0]),
  (VTBL_ENTRY)&_ZN8S19371C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v13Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v14Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v16Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19371C63v19Ev,
  (VTBL_ENTRY)&_ZN8S19371C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19371C53v21Ev,
  (VTBL_ENTRY)&_ZN8S19371C53v22Ev,
  (VTBL_ENTRY)&_ZN8S19371C53v23Ev,
  (VTBL_ENTRY)&_ZN8S19371C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19371C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19371C5D1Ev,_ZTv0_n12_N8S19371C5D1Ev)();
extern void ABISELECT(_ZThn352_N8S19371C5D1Ev,_ZThn228_N8S19371C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19371C5D0Ev,_ZTv0_n12_N8S19371C5D0Ev)();
extern void ABISELECT(_ZThn352_N8S19371C5D0Ev,_ZThn228_N8S19371C5D0Ev)() __attribute__((weak));
extern void _ZN8S19371C32v5Ev();
extern void _ZN8S19371C32v6Ev();
extern void _ZN8S19371C32v7Ev();
extern void _ZN8S19371C22v8Ev();
extern void _ZN8S19371C22v9Ev();
extern void _ZN8S19371C23v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19371C2__8S19371C58S19371C4__8S19371C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-352,-228),
  ABISELECT(-352,-228),
  (VTBL_ENTRY)&(_ZTI8S19371C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19371C5D1Ev,_ZTv0_n12_N8S19371C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19371C5D0Ev,_ZTv0_n12_N8S19371C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19371C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19371C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19371C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19371C22v8Ev,
  (VTBL_ENTRY)&_ZN8S19371C22v9Ev,
  (VTBL_ENTRY)&_ZN8S19371C23v10Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19371C4D1Ev,_ZTv0_n12_N8S19371C4D1Ev)();
extern void ABISELECT(_ZThn352_N8S19371C4D1Ev,_ZThn228_N8S19371C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19371C4D0Ev,_ZTv0_n12_N8S19371C4D0Ev)();
extern void ABISELECT(_ZThn352_N8S19371C4D0Ev,_ZThn228_N8S19371C4D0Ev)() __attribute__((weak));
extern void _ZN8S19371C32v5Ev();
extern void _ZN8S19371C32v6Ev();
extern void _ZN8S19371C32v7Ev();
extern void _ZN8S19371C22v8Ev();
extern void _ZN8S19371C22v9Ev();
extern void _ZN8S19371C23v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19371C2__8S19371C4__8S19371C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-352,-228),
  ABISELECT(-352,-228),
  (VTBL_ENTRY)&(_ZTI8S19371C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19371C4D1Ev,_ZTv0_n12_N8S19371C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19371C4D0Ev,_ZTv0_n12_N8S19371C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19371C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19371C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19371C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19371C22v8Ev,
  (VTBL_ENTRY)&_ZN8S19371C22v9Ev,
  (VTBL_ENTRY)&_ZN8S19371C23v10Ev,
};
static  VTT_ENTRY vtt_S19371C1[] = {
  {&(_ZTV8S19371C1[13]),  13,51},
  {&(_tg__ZTV8S19371C4__8S19371C1[13]),  13,30},
  {&(_tg__ZTV8S19371C58S19371C4__8S19371C1[13]),  13,28},
  {&(_tg__ZTV8S19371C58S19371C4__8S19371C1[13]),  13,28},
  {&(_tg__ZTV8S19371C2__8S19371C58S19371C4__8S19371C1[9]),  9,17},
  {&(_tg__ZTV8S19371C4__8S19371C1[13]),  13,30},
  {&(_tg__ZTV8S19371C2__8S19371C4__8S19371C1[9]),  9,17},
  {&(_ZTV8S19371C1[43]),  43,51},
  {&(_ZTV8S19371C1[13]),  13,51},
};
extern VTBL_ENTRY _ZTI8S19371C1[];
extern  VTBL_ENTRY _ZTV8S19371C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19371C1[];
static VTBL_ENTRY alt_thunk_names98[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19371C4D0Ev,_ZTv0_n12_N8S19371C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19371C4D0Ev,_ZThn228_N8S19371C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19371C4D1Ev,_ZTv0_n12_N8S19371C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19371C4D1Ev,_ZThn228_N8S19371C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19371C5D0Ev,_ZTv0_n12_N8S19371C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19371C5D0Ev,_ZThn228_N8S19371C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19371C5D1Ev,_ZTv0_n12_N8S19371C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19371C5D1Ev,_ZThn228_N8S19371C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19371C1D0Ev,_ZTv0_n12_N8S19371C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19371C1D0Ev,_ZThn228_N8S19371C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19371C1D1Ev,_ZTv0_n12_N8S19371C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19371C1D1Ev,_ZThn228_N8S19371C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19371C1 = {  "S19371C1", // class name
  bases_S19371C1, 5,
  &(vtc_S19371C1[0]), // expected_vtbl_contents
  &(vtt_S19371C1[0]), // expected_vtt_contents
  ABISELECT(416,264), // object size
  NSPAIRA(_ZTI8S19371C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19371C1),51, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19371C1),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names98,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3753C2  : S1679C4_nt {
  virtual void  v8(); // _ZN7S3753C22v8Ev
  virtual void  v9(); // _ZN7S3753C22v9Ev
  virtual void  v10(); // _ZN7S3753C23v10Ev
  virtual void  v11(); // _ZN7S3753C23v11Ev
  virtual void  v12(); // _ZN7S3753C23v12Ev
  virtual void  v13(); // _ZN7S3753C23v13Ev
  virtual void  v14(); // _ZN7S3753C23v14Ev
  virtual void  v15(); // _ZN7S3753C23v15Ev
  virtual void  v16(); // _ZN7S3753C23v16Ev
  virtual void  v17(); // _ZN7S3753C23v17Ev
  virtual void  v18(); // _ZN7S3753C23v18Ev
  virtual void  v19(); // _ZN7S3753C23v19Ev
  ~S3753C2(); // tgen
  S3753C2(); // tgen
};
//SIG(-1 S3753C2) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S3753C2 ::v8(){vfunc_called(this, "_ZN7S3753C22v8Ev");}
void  S3753C2 ::v9(){vfunc_called(this, "_ZN7S3753C22v9Ev");}
void  S3753C2 ::v10(){vfunc_called(this, "_ZN7S3753C23v10Ev");}
void  S3753C2 ::v11(){vfunc_called(this, "_ZN7S3753C23v11Ev");}
void  S3753C2 ::v12(){vfunc_called(this, "_ZN7S3753C23v12Ev");}
void  S3753C2 ::v13(){vfunc_called(this, "_ZN7S3753C23v13Ev");}
void  S3753C2 ::v14(){vfunc_called(this, "_ZN7S3753C23v14Ev");}
void  S3753C2 ::v15(){vfunc_called(this, "_ZN7S3753C23v15Ev");}
void  S3753C2 ::v16(){vfunc_called(this, "_ZN7S3753C23v16Ev");}
void  S3753C2 ::v17(){vfunc_called(this, "_ZN7S3753C23v17Ev");}
void  S3753C2 ::v18(){vfunc_called(this, "_ZN7S3753C23v18Ev");}
void  S3753C2 ::v19(){vfunc_called(this, "_ZN7S3753C23v19Ev");}
S3753C2 ::~S3753C2(){ note_dtor("S3753C2", this);} // tgen
S3753C2 ::S3753C2(){ note_ctor("S3753C2", this);} // tgen

static void Test_S3753C2()
{
  extern Class_Descriptor cd_S3753C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3753C2, buf);
    S3753C2 *dp, &lv = *(dp=new (buf) S3753C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3753C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3753C2)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S3753C2");
    test_class_info(&lv, &cd_S3753C2);
    dp->~S3753C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3753C2(Test_S3753C2, "S3753C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3753C2C1Ev();
extern void _ZN7S3753C2D1Ev();
Name_Map name_map_S3753C2[] = {
  NSPAIR(_ZN7S3753C2C1Ev),
  NSPAIR(_ZN7S3753C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S3753C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S3753C2[];
extern void _ZN7S3753C2D1Ev();
extern void _ZN7S3753C2D0Ev();
extern void _ZN7S3753C22v8Ev();
extern void _ZN7S3753C22v9Ev();
extern void _ZN7S3753C23v10Ev();
extern void _ZN7S3753C23v11Ev();
extern void _ZN7S3753C23v12Ev();
extern void _ZN7S3753C23v13Ev();
extern void _ZN7S3753C23v14Ev();
extern void _ZN7S3753C23v15Ev();
extern void _ZN7S3753C23v16Ev();
extern void _ZN7S3753C23v17Ev();
extern void _ZN7S3753C23v18Ev();
extern void _ZN7S3753C23v19Ev();
static  VTBL_ENTRY vtc_S3753C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3753C2[0]),
  (VTBL_ENTRY)&_ZN7S3753C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3753C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3753C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3753C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3753C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3753C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3753C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3753C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3753C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3753C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3753C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3753C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3753C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3753C23v19Ev,
};
extern VTBL_ENTRY _ZTI7S3753C2[];
extern  VTBL_ENTRY _ZTV7S3753C2[];
Class_Descriptor cd_S3753C2 = {  "S3753C2", // class name
  bases_S3753C2, 1,
  &(vtc_S3753C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3753C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3753C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3753C1  : S3753C2 {
  ::S3765C5_nt s3753c1f0;
  ::S17777C6_nt s3753c1f1;
  ::S79C38_nt s3753c1f2;
  ::S1679C8_nt s3753c1f3;
  int s3753c1f4[3];
  ::S4533C11_nt s3753c1f5;
  void *s3753c1f6;
  virtual  ~S3753C1(); // _ZN7S3753C1D1Ev
  virtual void  v1(); // _ZN7S3753C12v1Ev
  virtual void  v2(); // _ZN7S3753C12v2Ev
  virtual void  v3(); // _ZN7S3753C12v3Ev
  virtual void  v4(); // _ZN7S3753C12v4Ev
  virtual void  v5(); // _ZN7S3753C12v5Ev
  virtual void  v6(); // _ZN7S3753C12v6Ev
  virtual void  v7(); // _ZN7S3753C12v7Ev
  S3753C1(); // tgen
};
//SIG(1 S3753C1) C1{ BC2{ BC3{ vd m Fi} v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19} vd v1 v2 v3 v4 v5 v6 v7 FC4{ m Fp[2]} FC5{ m Fp} FC6{ m Fp[2]} FC7{ m FC8{ m Fp Fi[2] FC9{ m}} Fp[2]} Fi[3] FC10{ m Fp} Fp}


 S3753C1 ::~S3753C1(){ note_dtor("S3753C1", this);}
void  S3753C1 ::v1(){vfunc_called(this, "_ZN7S3753C12v1Ev");}
void  S3753C1 ::v2(){vfunc_called(this, "_ZN7S3753C12v2Ev");}
void  S3753C1 ::v3(){vfunc_called(this, "_ZN7S3753C12v3Ev");}
void  S3753C1 ::v4(){vfunc_called(this, "_ZN7S3753C12v4Ev");}
void  S3753C1 ::v5(){vfunc_called(this, "_ZN7S3753C12v5Ev");}
void  S3753C1 ::v6(){vfunc_called(this, "_ZN7S3753C12v6Ev");}
void  S3753C1 ::v7(){vfunc_called(this, "_ZN7S3753C12v7Ev");}
S3753C1 ::S3753C1(){ note_ctor("S3753C1", this);} // tgen

static void Test_S3753C1()
{
  extern Class_Descriptor cd_S3753C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,19)];
    init_test(&cd_S3753C1, buf);
    S3753C1 *dp, &lv = *(dp=new (buf) S3753C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,72), "sizeof(S3753C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3753C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S3753C2*), 0, "S3753C1");
    check_base_class_offset(lv, (S3753C2*), 0, "S3753C1");
    check_field_offset(lv, s3753c1f0, ABISELECT(16,8), "S3753C1.s3753c1f0");
    check_field_offset(lv, s3753c1f1, ABISELECT(32,16), "S3753C1.s3753c1f1");
    check_field_offset(lv, s3753c1f2, ABISELECT(40,20), "S3753C1.s3753c1f2");
    check_field_offset(lv, s3753c1f3, ABISELECT(56,28), "S3753C1.s3753c1f3");
    check_field_offset(lv, s3753c1f4, ABISELECT(96,52), "S3753C1.s3753c1f4");
    check_field_offset(lv, s3753c1f5, ABISELECT(112,64), "S3753C1.s3753c1f5");
    check_field_offset(lv, s3753c1f6, ABISELECT(120,68), "S3753C1.s3753c1f6");
    test_class_info(&lv, &cd_S3753C1);
    dp->~S3753C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3753C1(Test_S3753C1, "S3753C1", ABISELECT(128,72));

#else // __cplusplus

extern void _ZN7S3753C1C1Ev();
extern void _ZN7S3753C1D1Ev();
Name_Map name_map_S3753C1[] = {
  NSPAIR(_ZN7S3753C1C1Ev),
  NSPAIR(_ZN7S3753C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S3753C2;
extern VTBL_ENTRY _ZTI7S3753C2[];
extern  VTBL_ENTRY _ZTV7S3753C2[];
static Base_Class bases_S3753C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S3753C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3753C1[];
extern void _ZN7S3753C1D1Ev();
extern void _ZN7S3753C1D0Ev();
extern void _ZN7S3753C22v8Ev();
extern void _ZN7S3753C22v9Ev();
extern void _ZN7S3753C23v10Ev();
extern void _ZN7S3753C23v11Ev();
extern void _ZN7S3753C23v12Ev();
extern void _ZN7S3753C23v13Ev();
extern void _ZN7S3753C23v14Ev();
extern void _ZN7S3753C23v15Ev();
extern void _ZN7S3753C23v16Ev();
extern void _ZN7S3753C23v17Ev();
extern void _ZN7S3753C23v18Ev();
extern void _ZN7S3753C23v19Ev();
extern void _ZN7S3753C12v1Ev();
extern void _ZN7S3753C12v2Ev();
extern void _ZN7S3753C12v3Ev();
extern void _ZN7S3753C12v4Ev();
extern void _ZN7S3753C12v5Ev();
extern void _ZN7S3753C12v6Ev();
extern void _ZN7S3753C12v7Ev();
static  VTBL_ENTRY vtc_S3753C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3753C1[0]),
  (VTBL_ENTRY)&_ZN7S3753C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3753C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3753C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3753C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3753C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3753C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3753C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3753C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3753C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3753C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3753C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3753C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3753C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3753C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3753C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3753C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3753C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3753C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3753C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3753C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3753C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S3753C1[];
extern  VTBL_ENTRY _ZTV7S3753C1[];
Class_Descriptor cd_S3753C1 = {  "S3753C1", // class name
  bases_S3753C1, 2,
  &(vtc_S3753C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,72), // object size
  NSPAIRA(_ZTI7S3753C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3753C1),23, //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  S3767C2  : S1679C4_nt {
  virtual void  v9(); // _ZN7S3767C22v9Ev
  virtual void  v10(); // _ZN7S3767C23v10Ev
  virtual void  v11(); // _ZN7S3767C23v11Ev
  virtual void  v12(); // _ZN7S3767C23v12Ev
  virtual void  v13(); // _ZN7S3767C23v13Ev
  virtual void  v14(); // _ZN7S3767C23v14Ev
  virtual void  v15(); // _ZN7S3767C23v15Ev
  virtual void  v16(); // _ZN7S3767C23v16Ev
  virtual void  v17(); // _ZN7S3767C23v17Ev
  virtual void  v18(); // _ZN7S3767C23v18Ev
  virtual void  v19(); // _ZN7S3767C23v19Ev
  virtual void  v20(); // _ZN7S3767C23v20Ev
  ~S3767C2(); // tgen
  S3767C2(); // tgen
};
//SIG(-1 S3767C2) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S3767C2 ::v9(){vfunc_called(this, "_ZN7S3767C22v9Ev");}
void  S3767C2 ::v10(){vfunc_called(this, "_ZN7S3767C23v10Ev");}
void  S3767C2 ::v11(){vfunc_called(this, "_ZN7S3767C23v11Ev");}
void  S3767C2 ::v12(){vfunc_called(this, "_ZN7S3767C23v12Ev");}
void  S3767C2 ::v13(){vfunc_called(this, "_ZN7S3767C23v13Ev");}
void  S3767C2 ::v14(){vfunc_called(this, "_ZN7S3767C23v14Ev");}
void  S3767C2 ::v15(){vfunc_called(this, "_ZN7S3767C23v15Ev");}
void  S3767C2 ::v16(){vfunc_called(this, "_ZN7S3767C23v16Ev");}
void  S3767C2 ::v17(){vfunc_called(this, "_ZN7S3767C23v17Ev");}
void  S3767C2 ::v18(){vfunc_called(this, "_ZN7S3767C23v18Ev");}
void  S3767C2 ::v19(){vfunc_called(this, "_ZN7S3767C23v19Ev");}
void  S3767C2 ::v20(){vfunc_called(this, "_ZN7S3767C23v20Ev");}
S3767C2 ::~S3767C2(){ note_dtor("S3767C2", this);} // tgen
S3767C2 ::S3767C2(){ note_ctor("S3767C2", this);} // tgen

static void Test_S3767C2()
{
  extern Class_Descriptor cd_S3767C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3767C2, buf);
    S3767C2 *dp, &lv = *(dp=new (buf) S3767C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3767C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3767C2)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S3767C2");
    test_class_info(&lv, &cd_S3767C2);
    dp->~S3767C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3767C2(Test_S3767C2, "S3767C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3767C2C1Ev();
extern void _ZN7S3767C2D1Ev();
Name_Map name_map_S3767C2[] = {
  NSPAIR(_ZN7S3767C2C1Ev),
  NSPAIR(_ZN7S3767C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S3767C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S3767C2[];
extern void _ZN7S3767C2D1Ev();
extern void _ZN7S3767C2D0Ev();
extern void _ZN7S3767C22v9Ev();
extern void _ZN7S3767C23v10Ev();
extern void _ZN7S3767C23v11Ev();
extern void _ZN7S3767C23v12Ev();
extern void _ZN7S3767C23v13Ev();
extern void _ZN7S3767C23v14Ev();
extern void _ZN7S3767C23v15Ev();
extern void _ZN7S3767C23v16Ev();
extern void _ZN7S3767C23v17Ev();
extern void _ZN7S3767C23v18Ev();
extern void _ZN7S3767C23v19Ev();
extern void _ZN7S3767C23v20Ev();
static  VTBL_ENTRY vtc_S3767C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3767C2[0]),
  (VTBL_ENTRY)&_ZN7S3767C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3767C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3767C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3767C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3767C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3767C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3767C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3767C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3767C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3767C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3767C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3767C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3767C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3767C23v20Ev,
};
extern VTBL_ENTRY _ZTI7S3767C2[];
extern  VTBL_ENTRY _ZTV7S3767C2[];
Class_Descriptor cd_S3767C2 = {  "S3767C2", // class name
  bases_S3767C2, 1,
  &(vtc_S3767C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3767C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3767C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3767C1  : S3767C2 {
  ::S3765C5_nt s3767c1f0;
  ::S5266C36 s3767c1f1;
  char s3767c1f2;
  ::S1679C8_nt s3767c1f3;
  void *s3767c1f4[2];
  virtual  ~S3767C1(); // _ZN7S3767C1D1Ev
  virtual void  v1(); // _ZN7S3767C12v1Ev
  virtual void  v2(); // _ZN7S3767C12v2Ev
  virtual void  v3(); // _ZN7S3767C12v3Ev
  virtual void  v4(); // _ZN7S3767C12v4Ev
  virtual void  v5(); // _ZN7S3767C12v5Ev
  virtual void  v6(); // _ZN7S3767C12v6Ev
  virtual void  v7(); // _ZN7S3767C12v7Ev
  virtual void  v8(); // _ZN7S3767C12v8Ev
  S3767C1(); // tgen
};
//SIG(1 S3767C1) C1{ BC2{ BC3{ vd m Fi} v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20} vd v1 v2 v3 v4 v5 v6 v7 v8 FC4{ m Fp[2]} FC5{ m Fp Fi[2] FC6{ m}} Fc FC7{ m FC8{ m Fp Fi[2] FC6} Fp[2]} Fp[2]}


 S3767C1 ::~S3767C1(){ note_dtor("S3767C1", this);}
void  S3767C1 ::v1(){vfunc_called(this, "_ZN7S3767C12v1Ev");}
void  S3767C1 ::v2(){vfunc_called(this, "_ZN7S3767C12v2Ev");}
void  S3767C1 ::v3(){vfunc_called(this, "_ZN7S3767C12v3Ev");}
void  S3767C1 ::v4(){vfunc_called(this, "_ZN7S3767C12v4Ev");}
void  S3767C1 ::v5(){vfunc_called(this, "_ZN7S3767C12v5Ev");}
void  S3767C1 ::v6(){vfunc_called(this, "_ZN7S3767C12v6Ev");}
void  S3767C1 ::v7(){vfunc_called(this, "_ZN7S3767C12v7Ev");}
void  S3767C1 ::v8(){vfunc_called(this, "_ZN7S3767C12v8Ev");}
S3767C1 ::S3767C1(){ note_ctor("S3767C1", this);} // tgen

static void Test_S3767C1()
{
  extern Class_Descriptor cd_S3767C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,18)];
    init_test(&cd_S3767C1, buf);
    S3767C1 *dp, &lv = *(dp=new (buf) S3767C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,68), "sizeof(S3767C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3767C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S3767C2*), 0, "S3767C1");
    check_base_class_offset(lv, (S3767C2*), 0, "S3767C1");
    check_field_offset(lv, s3767c1f0, ABISELECT(16,8), "S3767C1.s3767c1f0");
    check_field_offset(lv, s3767c1f1, ABISELECT(32,16), "S3767C1.s3767c1f1");
    check_field_offset(lv, s3767c1f2, ABISELECT(56,32), "S3767C1.s3767c1f2");
    check_field_offset(lv, s3767c1f3, ABISELECT(64,36), "S3767C1.s3767c1f3");
    check_field_offset(lv, s3767c1f4, ABISELECT(104,60), "S3767C1.s3767c1f4");
    test_class_info(&lv, &cd_S3767C1);
    dp->~S3767C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3767C1(Test_S3767C1, "S3767C1", ABISELECT(120,68));

#else // __cplusplus

extern void _ZN7S3767C1C1Ev();
extern void _ZN7S3767C1D1Ev();
Name_Map name_map_S3767C1[] = {
  NSPAIR(_ZN7S3767C1C1Ev),
  NSPAIR(_ZN7S3767C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S3767C2;
extern VTBL_ENTRY _ZTI7S3767C2[];
extern  VTBL_ENTRY _ZTV7S3767C2[];
static Base_Class bases_S3767C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S3767C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3767C1[];
extern void _ZN7S3767C1D1Ev();
extern void _ZN7S3767C1D0Ev();
extern void _ZN7S3767C22v9Ev();
extern void _ZN7S3767C23v10Ev();
extern void _ZN7S3767C23v11Ev();
extern void _ZN7S3767C23v12Ev();
extern void _ZN7S3767C23v13Ev();
extern void _ZN7S3767C23v14Ev();
extern void _ZN7S3767C23v15Ev();
extern void _ZN7S3767C23v16Ev();
extern void _ZN7S3767C23v17Ev();
extern void _ZN7S3767C23v18Ev();
extern void _ZN7S3767C23v19Ev();
extern void _ZN7S3767C23v20Ev();
extern void _ZN7S3767C12v1Ev();
extern void _ZN7S3767C12v2Ev();
extern void _ZN7S3767C12v3Ev();
extern void _ZN7S3767C12v4Ev();
extern void _ZN7S3767C12v5Ev();
extern void _ZN7S3767C12v6Ev();
extern void _ZN7S3767C12v7Ev();
extern void _ZN7S3767C12v8Ev();
static  VTBL_ENTRY vtc_S3767C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3767C1[0]),
  (VTBL_ENTRY)&_ZN7S3767C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3767C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3767C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3767C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3767C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3767C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3767C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3767C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3767C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3767C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3767C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3767C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3767C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3767C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3767C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3767C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3767C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3767C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3767C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3767C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3767C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3767C12v8Ev,
};
extern VTBL_ENTRY _ZTI7S3767C1[];
extern  VTBL_ENTRY _ZTV7S3767C1[];
Class_Descriptor cd_S3767C1 = {  "S3767C1", // class name
  bases_S3767C1, 2,
  &(vtc_S3767C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,68), // object size
  NSPAIRA(_ZTI7S3767C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3767C1),24, //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  S7310C4  {
  virtual void  v2(); // _ZN7S7310C42v2Ev
  ~S7310C4(); // tgen
  S7310C4(); // tgen
};
//SIG(-1 S7310C4) C1{ v1}


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

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

#else // __cplusplus

extern void _ZN7S7310C4C1Ev();
extern void _ZN7S7310C4D1Ev();
Name_Map name_map_S7310C4[] = {
  NSPAIR(_ZN7S7310C4C1Ev),
  NSPAIR(_ZN7S7310C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7310C4[];
extern void _ZN7S7310C42v2Ev();
static  VTBL_ENTRY vtc_S7310C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7310C4[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
};
extern VTBL_ENTRY _ZTI7S7310C4[];
extern  VTBL_ENTRY _ZTV7S7310C4[];
Class_Descriptor cd_S7310C4 = {  "S7310C4", // class name
  0,0,//no base classes
  &(vtc_S7310C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7310C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7310C4),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  S7310C5  : S7310C4 {
  virtual void  v3(); // _ZN7S7310C52v3Ev
  virtual void  v4(); // _ZN7S7310C52v4Ev
  virtual void  v5(); // _ZN7S7310C52v5Ev
  ~S7310C5(); // tgen
  S7310C5(); // tgen
};
//SIG(-1 S7310C5) C1{ BC2{ v4} v1 v2 v3}


void  S7310C5 ::v3(){vfunc_called(this, "_ZN7S7310C52v3Ev");}
void  S7310C5 ::v4(){vfunc_called(this, "_ZN7S7310C52v4Ev");}
void  S7310C5 ::v5(){vfunc_called(this, "_ZN7S7310C52v5Ev");}
S7310C5 ::~S7310C5(){ note_dtor("S7310C5", this);} // tgen
S7310C5 ::S7310C5(){ note_ctor("S7310C5", this);} // tgen

static void Test_S7310C5()
{
  extern Class_Descriptor cd_S7310C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7310C5, buf);
    S7310C5 *dp, &lv = *(dp=new (buf) S7310C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7310C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7310C5)");
    check_base_class_offset(lv, (S7310C4*), 0, "S7310C5");
    test_class_info(&lv, &cd_S7310C5);
    dp->~S7310C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7310C5(Test_S7310C5, "S7310C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7310C5C1Ev();
extern void _ZN7S7310C5D1Ev();
Name_Map name_map_S7310C5[] = {
  NSPAIR(_ZN7S7310C5C1Ev),
  NSPAIR(_ZN7S7310C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7310C4;
extern VTBL_ENTRY _ZTI7S7310C4[];
extern  VTBL_ENTRY _ZTV7S7310C4[];
static Base_Class bases_S7310C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7310C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S7310C5[];
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C52v3Ev();
extern void _ZN7S7310C52v4Ev();
extern void _ZN7S7310C52v5Ev();
static  VTBL_ENTRY vtc_S7310C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7310C5[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v5Ev,
};
extern VTBL_ENTRY _ZTI7S7310C5[];
extern  VTBL_ENTRY _ZTV7S7310C5[];
Class_Descriptor cd_S7310C5 = {  "S7310C5", // class name
  bases_S7310C5, 1,
  &(vtc_S7310C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7310C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7310C5),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  S7310C6  : virtual S7310C5 , S7310C4 {
  int s7310c6f0;
  virtual void  v6(); // _ZN7S7310C62v6Ev
  virtual void  v7(); // _ZN7S7310C62v7Ev
  virtual void  v8(); // _ZN7S7310C62v8Ev
  virtual void  v9(); // _ZN7S7310C62v9Ev
  virtual void  v10(); // _ZN7S7310C63v10Ev
  virtual void  v11(); // _ZN7S7310C63v11Ev
  ~S7310C6(); // tgen
  S7310C6(); // tgen
};
//SIG(-1 S7310C6) C1{ VBC2{ BC3{ v7} v8 v9 v10} BC3 v1 v2 v3 v4 v5 v6 Fi}


void  S7310C6 ::v6(){vfunc_called(this, "_ZN7S7310C62v6Ev");}
void  S7310C6 ::v7(){vfunc_called(this, "_ZN7S7310C62v7Ev");}
void  S7310C6 ::v8(){vfunc_called(this, "_ZN7S7310C62v8Ev");}
void  S7310C6 ::v9(){vfunc_called(this, "_ZN7S7310C62v9Ev");}
void  S7310C6 ::v10(){vfunc_called(this, "_ZN7S7310C63v10Ev");}
void  S7310C6 ::v11(){vfunc_called(this, "_ZN7S7310C63v11Ev");}
S7310C6 ::~S7310C6(){ note_dtor("S7310C6", this);} // tgen
S7310C6 ::S7310C6(){ note_ctor("S7310C6", this);} // tgen

static void Test_S7310C6()
{
  extern Class_Descriptor cd_S7310C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7310C6, buf);
    S7310C6 *dp, &lv = *(dp=new (buf) S7310C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7310C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7310C6)");
    check_base_class_offset(lv, (S7310C4*)(S7310C5*), ABISELECT(16,8), "S7310C6");
    check_base_class_offset(lv, (S7310C5*), ABISELECT(16,8), "S7310C6");
    /*is_ambiguous_... S7310C6::S7310C4 */ AMB_check_base_class_offset(lv, (S7310C4*), 0, "S7310C6");
    check_field_offset(lv, s7310c6f0, ABISELECT(8,4), "S7310C6.s7310c6f0");
    test_class_info(&lv, &cd_S7310C6);
    dp->~S7310C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7310C6(Test_S7310C6, "S7310C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7310C6C1Ev();
extern void _ZN7S7310C6D1Ev();
Name_Map name_map_S7310C6[] = {
  NSPAIR(_ZN7S7310C6C1Ev),
  NSPAIR(_ZN7S7310C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7310C4;
extern VTBL_ENTRY _ZTI7S7310C4[];
extern  VTBL_ENTRY _ZTV7S7310C4[];
extern Class_Descriptor cd_S7310C5;
extern VTBL_ENTRY _ZTI7S7310C5[];
extern  VTBL_ENTRY _ZTV7S7310C5[];
extern Class_Descriptor cd_S7310C4;
extern VTBL_ENTRY _ZTI7S7310C4[];
extern  VTBL_ENTRY _ZTV7S7310C4[];
static Base_Class bases_S7310C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7310C4,    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
  0, 0},
  {&cd_S7310C5,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //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},
  {&cd_S7310C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7310C6[];
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C62v6Ev();
extern void _ZN7S7310C62v7Ev();
extern void _ZN7S7310C62v8Ev();
extern void _ZN7S7310C62v9Ev();
extern void _ZN7S7310C63v10Ev();
extern void _ZN7S7310C63v11Ev();
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C52v3Ev();
extern void _ZN7S7310C52v4Ev();
extern void _ZN7S7310C52v5Ev();
static  VTBL_ENTRY vtc_S7310C6[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7310C6[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7310C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7310C63v11Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7310C6[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v5Ev,
};
extern VTBL_ENTRY _ZTV7S7310C6[];
static  VTT_ENTRY vtt_S7310C6[] = {
  {&(_ZTV7S7310C6[3]),  3,20},
  {&(_ZTV7S7310C6[16]),  16,20},
};
extern VTBL_ENTRY _ZTI7S7310C6[];
extern  VTBL_ENTRY _ZTV7S7310C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7310C6[];
Class_Descriptor cd_S7310C6 = {  "S7310C6", // class name
  bases_S7310C6, 3,
  &(vtc_S7310C6[0]), // expected_vtbl_contents
  &(vtt_S7310C6[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7310C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7310C6),20, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7310C6),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7310C3  : S7310C4 , virtual S7310C5 , S7310C6 {
  char s7310c3f0;
  virtual void  v12(); // _ZN7S7310C33v12Ev
  virtual void  v13(); // _ZN7S7310C33v13Ev
  virtual void  v14(); // _ZN7S7310C33v14Ev
  virtual void  v15(); // _ZN7S7310C33v15Ev
  virtual void  v16(); // _ZN7S7310C33v16Ev
  virtual void  v17(); // _ZN7S7310C33v17Ev
  virtual void  v18(); // _ZN7S7310C33v18Ev
  ~S7310C3(); // tgen
  S7310C3(); // tgen
};
//SIG(-1 S7310C3) C1{ BC2{ v8} VBC3{ BC2 v9 v10 v11} BC4{ VBC3 BC2 v12 v13 v14 v15 v16 v17 Fi} v1 v2 v3 v4 v5 v6 v7 Fc}


void  S7310C3 ::v12(){vfunc_called(this, "_ZN7S7310C33v12Ev");}
void  S7310C3 ::v13(){vfunc_called(this, "_ZN7S7310C33v13Ev");}
void  S7310C3 ::v14(){vfunc_called(this, "_ZN7S7310C33v14Ev");}
void  S7310C3 ::v15(){vfunc_called(this, "_ZN7S7310C33v15Ev");}
void  S7310C3 ::v16(){vfunc_called(this, "_ZN7S7310C33v16Ev");}
void  S7310C3 ::v17(){vfunc_called(this, "_ZN7S7310C33v17Ev");}
void  S7310C3 ::v18(){vfunc_called(this, "_ZN7S7310C33v18Ev");}
S7310C3 ::~S7310C3(){ note_dtor("S7310C3", this);} // tgen
S7310C3 ::S7310C3(){ note_ctor("S7310C3", this);} // tgen

static void Test_S7310C3()
{
  extern Class_Descriptor cd_S7310C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S7310C3, buf);
    S7310C3 *dp, &lv = *(dp=new (buf) S7310C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S7310C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7310C3)");
    /*is_ambiguous_... S7310C3::S7310C4 */ AMB_check_base_class_offset(lv, (S7310C4*), 0, "S7310C3");
    check_base_class_offset(lv, (S7310C4*)(S7310C5*), ABISELECT(24,16), "S7310C3");
    check_base_class_offset(lv, (S7310C5*), ABISELECT(24,16), "S7310C3");
    check_base_class_offset(lv, (S7310C5*)(S7310C6*), ABISELECT(24,16), "S7310C3");
    /*is_ambiguous_... S7310C6::S7310C4 */ AMB_check_base_class_offset(lv, (S7310C4*)(S7310C6*), ABISELECT(8,4), "S7310C3");
    check_base_class_offset(lv, (S7310C6*), ABISELECT(8,4), "S7310C3");
    check_field_offset(lv, s7310c3f0, ABISELECT(20,12), "S7310C3.s7310c3f0");
    test_class_info(&lv, &cd_S7310C3);
    dp->~S7310C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7310C3(Test_S7310C3, "S7310C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S7310C3C1Ev();
extern void _ZN7S7310C3D1Ev();
Name_Map name_map_S7310C3[] = {
  NSPAIR(_ZN7S7310C3C1Ev),
  NSPAIR(_ZN7S7310C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7310C4;
extern VTBL_ENTRY _ZTI7S7310C4[];
extern  VTBL_ENTRY _ZTV7S7310C4[];
extern Class_Descriptor cd_S7310C4;
extern VTBL_ENTRY _ZTI7S7310C4[];
extern  VTBL_ENTRY _ZTV7S7310C4[];
extern Class_Descriptor cd_S7310C5;
extern VTBL_ENTRY _ZTI7S7310C5[];
extern  VTBL_ENTRY _ZTV7S7310C5[];
extern Class_Descriptor cd_S7310C4;
extern VTBL_ENTRY _ZTI7S7310C4[];
extern  VTBL_ENTRY _ZTV7S7310C4[];
extern Class_Descriptor cd_S7310C6;
extern VTBL_ENTRY _ZTI7S7310C6[];
extern  VTBL_ENTRY _ZTV7S7310C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7310C6[];
static Base_Class bases_S7310C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7310C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7310C4,    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
    2, //immediately_derived
  0, 0},
  {&cd_S7310C5,    ABISELECT(24,16), //bcp->offset
    21, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S7310C4,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7310C6,    ABISELECT(8,4), //bcp->offset
    11, //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7310C3[];
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C33v12Ev();
extern void _ZN7S7310C33v13Ev();
extern void _ZN7S7310C33v14Ev();
extern void _ZN7S7310C33v15Ev();
extern void _ZN7S7310C33v16Ev();
extern void _ZN7S7310C33v17Ev();
extern void _ZN7S7310C33v18Ev();
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C62v6Ev();
extern void _ZN7S7310C62v7Ev();
extern void _ZN7S7310C62v8Ev();
extern void _ZN7S7310C62v9Ev();
extern void _ZN7S7310C63v10Ev();
extern void _ZN7S7310C63v11Ev();
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C52v3Ev();
extern void _ZN7S7310C52v4Ev();
extern void _ZN7S7310C52v5Ev();
static  VTBL_ENTRY vtc_S7310C3[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7310C3[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v18Ev,
  ABISELECT(16,12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7310C3[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7310C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7310C63v11Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7310C3[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v5Ev,
};
extern VTBL_ENTRY _ZTV7S7310C3[];
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C62v6Ev();
extern void _ZN7S7310C62v7Ev();
extern void _ZN7S7310C62v8Ev();
extern void _ZN7S7310C62v9Ev();
extern void _ZN7S7310C63v10Ev();
extern void _ZN7S7310C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7310C6__7S7310C3[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7310C6[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7310C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7310C63v11Ev,
};
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C52v3Ev();
extern void _ZN7S7310C52v4Ev();
extern void _ZN7S7310C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7310C5__7S7310C6__7S7310C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7310C6[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v5Ev,
};
static  VTT_ENTRY vtt_S7310C3[] = {
  {&(_ZTV7S7310C3[3]),  3,31},
  {&(_tg__ZTV7S7310C6__7S7310C3[3]),  3,10},
  {&(_tg__ZTV7S7310C5__7S7310C6__7S7310C3[6]),  6,10},
  {&(_ZTV7S7310C3[27]),  27,31},
  {&(_ZTV7S7310C3[14]),  14,31},
};
extern VTBL_ENTRY _ZTI7S7310C3[];
extern  VTBL_ENTRY _ZTV7S7310C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7310C3[];
Class_Descriptor cd_S7310C3 = {  "S7310C3", // class name
  bases_S7310C3, 5,
  &(vtc_S7310C3[0]), // expected_vtbl_contents
  &(vtt_S7310C3[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S7310C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7310C3),31, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7310C3),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7310C7  {
  virtual void  v19(); // _ZN7S7310C73v19Ev
  virtual void  v20(); // _ZN7S7310C73v20Ev
  virtual void  v21(); // _ZN7S7310C73v21Ev
  virtual void  v22(); // _ZN7S7310C73v22Ev
  virtual void  v23(); // _ZN7S7310C73v23Ev
  ~S7310C7(); // tgen
  S7310C7(); // tgen
};
//SIG(-1 S7310C7) C1{ v1 v2 v3 v4 v5}


void  S7310C7 ::v19(){vfunc_called(this, "_ZN7S7310C73v19Ev");}
void  S7310C7 ::v20(){vfunc_called(this, "_ZN7S7310C73v20Ev");}
void  S7310C7 ::v21(){vfunc_called(this, "_ZN7S7310C73v21Ev");}
void  S7310C7 ::v22(){vfunc_called(this, "_ZN7S7310C73v22Ev");}
void  S7310C7 ::v23(){vfunc_called(this, "_ZN7S7310C73v23Ev");}
S7310C7 ::~S7310C7(){ note_dtor("S7310C7", this);} // tgen
S7310C7 ::S7310C7(){ note_ctor("S7310C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7310C7C1Ev();
extern void _ZN7S7310C7D1Ev();
Name_Map name_map_S7310C7[] = {
  NSPAIR(_ZN7S7310C7C1Ev),
  NSPAIR(_ZN7S7310C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7310C7[];
extern void _ZN7S7310C73v19Ev();
extern void _ZN7S7310C73v20Ev();
extern void _ZN7S7310C73v21Ev();
extern void _ZN7S7310C73v22Ev();
extern void _ZN7S7310C73v23Ev();
static  VTBL_ENTRY vtc_S7310C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7310C7[0]),
  (VTBL_ENTRY)&_ZN7S7310C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7310C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7310C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7310C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7310C73v23Ev,
};
extern VTBL_ENTRY _ZTI7S7310C7[];
extern  VTBL_ENTRY _ZTV7S7310C7[];
Class_Descriptor cd_S7310C7 = {  "S7310C7", // class name
  0,0,//no base classes
  &(vtc_S7310C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7310C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7310C7),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  S7310C8  : virtual S7310C4 {
  virtual  ~S7310C8(); // _ZN7S7310C8D2Ev
  virtual void  v24(); // _ZN7S7310C83v24Ev
  S7310C8(); // tgen
};
//SIG(-1 S7310C8) C1{ VBC2{ v2} vd v1}


 S7310C8 ::~S7310C8(){ note_dtor("S7310C8", this);}
void  S7310C8 ::v24(){vfunc_called(this, "_ZN7S7310C83v24Ev");}
S7310C8 ::S7310C8(){ note_ctor("S7310C8", this);} // tgen

static void Test_S7310C8()
{
  extern Class_Descriptor cd_S7310C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7310C8, buf);
    S7310C8 *dp, &lv = *(dp=new (buf) S7310C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7310C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7310C8)");
    check_base_class_offset(lv, (S7310C4*), 0, "S7310C8");
    test_class_info(&lv, &cd_S7310C8);
    dp->~S7310C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7310C8(Test_S7310C8, "S7310C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7310C8C1Ev();
extern void _ZN7S7310C8D2Ev();
Name_Map name_map_S7310C8[] = {
  NSPAIR(_ZN7S7310C8C1Ev),
  NSPAIR(_ZN7S7310C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7310C4;
extern VTBL_ENTRY _ZTI7S7310C4[];
extern  VTBL_ENTRY _ZTV7S7310C4[];
static Base_Class bases_S7310C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7310C4,    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 _ZTI7S7310C8[];
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C8D1Ev();
extern void _ZN7S7310C8D0Ev();
extern void _ZN7S7310C83v24Ev();
static  VTBL_ENTRY vtc_S7310C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7310C8[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7310C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7310C83v24Ev,
};
extern VTBL_ENTRY _ZTV7S7310C8[];
static  VTT_ENTRY vtt_S7310C8[] = {
  {&(_ZTV7S7310C8[4]),  4,8},
  {&(_ZTV7S7310C8[4]),  4,8},
};
extern VTBL_ENTRY _ZTI7S7310C8[];
extern  VTBL_ENTRY _ZTV7S7310C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7310C8[];
Class_Descriptor cd_S7310C8 = {  "S7310C8", // class name
  bases_S7310C8, 1,
  &(vtc_S7310C8[0]), // expected_vtbl_contents
  &(vtt_S7310C8[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7310C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7310C8),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7310C8),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7310C2  : virtual S7310C3 , virtual S7310C7 , S7310C8 {
  ::S7310C6 s7310c2f0;
  virtual  ~S7310C2(); // _ZN7S7310C2D2Ev
  virtual void  v25(); // _ZN7S7310C23v25Ev
  virtual void  v26(); // _ZN7S7310C23v26Ev
  virtual void  v27(); // _ZN7S7310C23v27Ev
  S7310C2(); // tgen
};
//SIG(-1 S7310C2) C1{ VBC2{ BC3{ v4} VBC4{ BC3 v5 v6 v7} BC5{ VBC4 BC3 v8 v9 v10 v11 v12 v13 Fi} v14 v15 v16 v17 v18 v19 v20 Fc} VBC6{ v21 v22 v23 v24 v25} BC7{ VBC3 vd v26} vd v1 v2 v3 FC5}


 S7310C2 ::~S7310C2(){ note_dtor("S7310C2", this);}
void  S7310C2 ::v25(){vfunc_called(this, "_ZN7S7310C23v25Ev");}
void  S7310C2 ::v26(){vfunc_called(this, "_ZN7S7310C23v26Ev");}
void  S7310C2 ::v27(){vfunc_called(this, "_ZN7S7310C23v27Ev");}
S7310C2 ::S7310C2(){ note_ctor("S7310C2", this);} // tgen

static void Test_S7310C2()
{
  extern Class_Descriptor cd_S7310C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S7310C2, buf);
    S7310C2 *dp, &lv = *(dp=new (buf) S7310C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S7310C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7310C2)");
    /*is_ambiguous_... S7310C3::S7310C4 */ AMB_check_base_class_offset(lv, (S7310C4*)(S7310C3*), ABISELECT(32,16), "S7310C2");
    check_base_class_offset(lv, (S7310C4*)(S7310C5*), ABISELECT(56,32), "S7310C2");
    check_base_class_offset(lv, (S7310C5*)(S7310C3*), ABISELECT(56,32), "S7310C2");
    check_base_class_offset(lv, (S7310C5*)(S7310C6*)(S7310C3*), ABISELECT(56,32), "S7310C2");
    /*is_ambiguous_... S7310C6::S7310C4 */ AMB_check_base_class_offset(lv, (S7310C4*)(S7310C6*)(S7310C3*), ABISELECT(40,20), "S7310C2");
    check_base_class_offset(lv, (S7310C6*)(S7310C3*), ABISELECT(40,20), "S7310C2");
    check_base_class_offset(lv, (S7310C3*), ABISELECT(32,16), "S7310C2");
    check_base_class_offset(lv, (S7310C7*), ABISELECT(64,36), "S7310C2");
    check_base_class_offset(lv, (S7310C4*)(S7310C8*), 0, "S7310C2");
    check_base_class_offset(lv, (S7310C8*), 0, "S7310C2");
    check_field_offset(lv, s7310c2f0, ABISELECT(8,4), "S7310C2.s7310c2f0");
    test_class_info(&lv, &cd_S7310C2);
    dp->~S7310C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7310C2(Test_S7310C2, "S7310C2", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN7S7310C2C1Ev();
extern void _ZN7S7310C2D2Ev();
Name_Map name_map_S7310C2[] = {
  NSPAIR(_ZN7S7310C2C1Ev),
  NSPAIR(_ZN7S7310C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7310C4;
extern VTBL_ENTRY _ZTI7S7310C4[];
extern  VTBL_ENTRY _ZTV7S7310C4[];
extern Class_Descriptor cd_S7310C4;
extern VTBL_ENTRY _ZTI7S7310C4[];
extern  VTBL_ENTRY _ZTV7S7310C4[];
extern Class_Descriptor cd_S7310C5;
extern VTBL_ENTRY _ZTI7S7310C5[];
extern  VTBL_ENTRY _ZTV7S7310C5[];
extern Class_Descriptor cd_S7310C4;
extern VTBL_ENTRY _ZTI7S7310C4[];
extern  VTBL_ENTRY _ZTV7S7310C4[];
extern Class_Descriptor cd_S7310C6;
extern VTBL_ENTRY _ZTI7S7310C6[];
extern  VTBL_ENTRY _ZTV7S7310C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7310C6[];
extern Class_Descriptor cd_S7310C3;
extern VTBL_ENTRY _ZTI7S7310C3[];
extern  VTBL_ENTRY _ZTV7S7310C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7310C3[];
extern Class_Descriptor cd_S7310C7;
extern VTBL_ENTRY _ZTI7S7310C7[];
extern  VTBL_ENTRY _ZTV7S7310C7[];
extern Class_Descriptor cd_S7310C4;
extern VTBL_ENTRY _ZTI7S7310C4[];
extern  VTBL_ENTRY _ZTV7S7310C4[];
extern Class_Descriptor cd_S7310C8;
extern VTBL_ENTRY _ZTI7S7310C8[];
extern  VTBL_ENTRY _ZTV7S7310C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7310C8[];
static Base_Class bases_S7310C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7310C4,    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
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7310C4,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7310C5,    ABISELECT(56,32), //bcp->offset
    49, //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
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7310C4,    ABISELECT(40,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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7310C6,    ABISELECT(40,20), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7310C3,    ABISELECT(32,16), //bcp->offset
    14, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7310C7,    ABISELECT(64,36), //bcp->offset
    59, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7310C4,    0, //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
    8, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7310C8,    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},
  {0}};
extern VTBL_ENTRY _ZTI7S7310C2[];
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C2D1Ev();
extern void _ZN7S7310C2D0Ev();
extern void _ZN7S7310C83v24Ev();
extern void _ZN7S7310C23v25Ev();
extern void _ZN7S7310C23v26Ev();
extern void _ZN7S7310C23v27Ev();
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C33v12Ev();
extern void _ZN7S7310C33v13Ev();
extern void _ZN7S7310C33v14Ev();
extern void _ZN7S7310C33v15Ev();
extern void _ZN7S7310C33v16Ev();
extern void _ZN7S7310C33v17Ev();
extern void _ZN7S7310C33v18Ev();
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C62v6Ev();
extern void _ZN7S7310C62v7Ev();
extern void _ZN7S7310C62v8Ev();
extern void _ZN7S7310C62v9Ev();
extern void _ZN7S7310C63v10Ev();
extern void _ZN7S7310C63v11Ev();
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C52v3Ev();
extern void _ZN7S7310C52v4Ev();
extern void _ZN7S7310C52v5Ev();
extern void _ZN7S7310C73v19Ev();
extern void _ZN7S7310C73v20Ev();
extern void _ZN7S7310C73v21Ev();
extern void _ZN7S7310C73v22Ev();
extern void _ZN7S7310C73v23Ev();
static  VTBL_ENTRY vtc_S7310C2[] = {
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(32,16),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7310C2[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7310C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7310C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7310C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7310C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7310C23v27Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7310C2[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v18Ev,
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7310C2[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7310C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7310C63v11Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7310C2[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v5Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7310C2[0]),
  (VTBL_ENTRY)&_ZN7S7310C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7310C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7310C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7310C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7310C73v23Ev,
};
extern VTBL_ENTRY _ZTV7S7310C2[];
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C8D1Ev();
extern void _ZN7S7310C8D0Ev();
extern void _ZN7S7310C83v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7310C8__7S7310C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7310C8[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7310C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7310C83v24Ev,
};
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C33v12Ev();
extern void _ZN7S7310C33v13Ev();
extern void _ZN7S7310C33v14Ev();
extern void _ZN7S7310C33v15Ev();
extern void _ZN7S7310C33v16Ev();
extern void _ZN7S7310C33v17Ev();
extern void _ZN7S7310C33v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7310C3__7S7310C2[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7310C3[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v18Ev,
};
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C62v6Ev();
extern void _ZN7S7310C62v7Ev();
extern void _ZN7S7310C62v8Ev();
extern void _ZN7S7310C62v9Ev();
extern void _ZN7S7310C63v10Ev();
extern void _ZN7S7310C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7310C67S7310C3__7S7310C2[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7310C6[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7310C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7310C63v11Ev,
};
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C52v3Ev();
extern void _ZN7S7310C52v4Ev();
extern void _ZN7S7310C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7310C5__7S7310C67S7310C3__7S7310C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7310C6[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v5Ev,
};
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C52v3Ev();
extern void _ZN7S7310C52v4Ev();
extern void _ZN7S7310C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7310C5__7S7310C3__7S7310C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7310C3[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v5Ev,
};
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C62v6Ev();
extern void _ZN7S7310C62v7Ev();
extern void _ZN7S7310C62v8Ev();
extern void _ZN7S7310C62v9Ev();
extern void _ZN7S7310C63v10Ev();
extern void _ZN7S7310C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7310C6__7S7310C3__7S7310C2[] = {
  ABISELECT(16,12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7310C3[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7310C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7310C63v11Ev,
};
static  VTT_ENTRY vtt_S7310C2[] = {
  {&(_ZTV7S7310C2[7]),  7,71},
  {&(_tg__ZTV7S7310C8__7S7310C2[4]),  4,8},
  {&(_tg__ZTV7S7310C8__7S7310C2[4]),  4,8},
  {&(_ZTV7S7310C2[31]),  31,71},
  {&(_ZTV7S7310C2[55]),  55,71},
  {&(_ZTV7S7310C2[42]),  42,71},
  {&(_ZTV7S7310C2[66]),  66,71},
  {&(_ZTV7S7310C2[7]),  7,71},
  {&(_tg__ZTV7S7310C3__7S7310C2[3]),  3,11},
  {&(_tg__ZTV7S7310C67S7310C3__7S7310C2[3]),  3,10},
  {&(_tg__ZTV7S7310C5__7S7310C67S7310C3__7S7310C2[6]),  6,10},
  {&(_tg__ZTV7S7310C5__7S7310C3__7S7310C2[6]),  6,10},
  {&(_tg__ZTV7S7310C6__7S7310C3__7S7310C2[3]),  3,10},
};
extern VTBL_ENTRY _ZTI7S7310C2[];
extern  VTBL_ENTRY _ZTV7S7310C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7310C2[];
Class_Descriptor cd_S7310C2 = {  "S7310C2", // class name
  bases_S7310C2, 9,
  &(vtc_S7310C2[0]), // expected_vtbl_contents
  &(vtt_S7310C2[0]), // expected_vtt_contents
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI7S7310C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7310C2),71, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7310C2),13, //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  S7310C1  : S7310C2 {
  void *s7310c1f0;
  virtual void  v1(); // _ZN7S7310C12v1Ev
  ~S7310C1(); // tgen
  S7310C1(); // tgen
};
//SIG(1 S7310C1) C1{ BC2{ VBC3{ BC4{ v2} VBC5{ BC4 v3 v4 v5} BC6{ VBC5 BC4 v6 v7 v8 v9 v10 v11 Fi} v12 v13 v14 v15 v16 v17 v18 Fc} VBC7{ v19 v20 v21 v22 v23} BC8{ VBC4 vd v24} vd v25 v26 v27 FC6} v1 Fp}


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

static void Test_S7310C1()
{
  extern Class_Descriptor cd_S7310C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S7310C1, buf);
    S7310C1 *dp, &lv = *(dp=new (buf) S7310C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S7310C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7310C1)");
    /*is_ambiguous_... S7310C3::S7310C4 */ AMB_check_base_class_offset(lv, (S7310C4*)(S7310C3*), ABISELECT(40,20), "S7310C1");
    check_base_class_offset(lv, (S7310C4*)(S7310C5*), ABISELECT(64,36), "S7310C1");
    check_base_class_offset(lv, (S7310C5*)(S7310C3*), ABISELECT(64,36), "S7310C1");
    check_base_class_offset(lv, (S7310C5*)(S7310C6*)(S7310C3*), ABISELECT(64,36), "S7310C1");
    /*is_ambiguous_... S7310C6::S7310C4 */ AMB_check_base_class_offset(lv, (S7310C4*)(S7310C6*)(S7310C3*), ABISELECT(48,24), "S7310C1");
    check_base_class_offset(lv, (S7310C6*)(S7310C3*), ABISELECT(48,24), "S7310C1");
    check_base_class_offset(lv, (S7310C3*)(S7310C2*), ABISELECT(40,20), "S7310C1");
    check_base_class_offset(lv, (S7310C7*)(S7310C2*), ABISELECT(72,40), "S7310C1");
    check_base_class_offset(lv, (S7310C4*)(S7310C8*)(S7310C2*), 0, "S7310C1");
    check_base_class_offset(lv, (S7310C8*)(S7310C2*), 0, "S7310C1");
    check_base_class_offset(lv, (S7310C2*), 0, "S7310C1");
    check_field_offset(lv, s7310c1f0, ABISELECT(32,16), "S7310C1.s7310c1f0");
    test_class_info(&lv, &cd_S7310C1);
    dp->~S7310C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7310C1(Test_S7310C1, "S7310C1", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN7S7310C1C1Ev();
extern void _ZN7S7310C1D1Ev();
Name_Map name_map_S7310C1[] = {
  NSPAIR(_ZN7S7310C1C1Ev),
  NSPAIR(_ZN7S7310C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7310C4;
extern VTBL_ENTRY _ZTI7S7310C4[];
extern  VTBL_ENTRY _ZTV7S7310C4[];
extern Class_Descriptor cd_S7310C4;
extern VTBL_ENTRY _ZTI7S7310C4[];
extern  VTBL_ENTRY _ZTV7S7310C4[];
extern Class_Descriptor cd_S7310C5;
extern VTBL_ENTRY _ZTI7S7310C5[];
extern  VTBL_ENTRY _ZTV7S7310C5[];
extern Class_Descriptor cd_S7310C4;
extern VTBL_ENTRY _ZTI7S7310C4[];
extern  VTBL_ENTRY _ZTV7S7310C4[];
extern Class_Descriptor cd_S7310C6;
extern VTBL_ENTRY _ZTI7S7310C6[];
extern  VTBL_ENTRY _ZTV7S7310C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7310C6[];
extern Class_Descriptor cd_S7310C3;
extern VTBL_ENTRY _ZTI7S7310C3[];
extern  VTBL_ENTRY _ZTV7S7310C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7310C3[];
extern Class_Descriptor cd_S7310C7;
extern VTBL_ENTRY _ZTI7S7310C7[];
extern  VTBL_ENTRY _ZTV7S7310C7[];
extern Class_Descriptor cd_S7310C4;
extern VTBL_ENTRY _ZTI7S7310C4[];
extern  VTBL_ENTRY _ZTV7S7310C4[];
extern Class_Descriptor cd_S7310C8;
extern VTBL_ENTRY _ZTI7S7310C8[];
extern  VTBL_ENTRY _ZTV7S7310C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7310C8[];
extern Class_Descriptor cd_S7310C2;
extern VTBL_ENTRY _ZTI7S7310C2[];
extern  VTBL_ENTRY _ZTV7S7310C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7310C2[];
static Base_Class bases_S7310C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7310C4,    ABISELECT(40,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
    5, //immediately_derived
  0, 0},
  {&cd_S7310C4,    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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7310C5,    ABISELECT(64,36), //bcp->offset
    50, //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
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7310C4,    ABISELECT(48,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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7310C6,    ABISELECT(48,24), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7310C3,    ABISELECT(40,20), //bcp->offset
    15, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7310C7,    ABISELECT(72,40), //bcp->offset
    60, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7310C4,    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
    8, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7310C8,    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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7310C2,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7310C1[];
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C1D1Ev();
extern void _ZN7S7310C1D0Ev();
extern void _ZN7S7310C83v24Ev();
extern void _ZN7S7310C23v25Ev();
extern void _ZN7S7310C23v26Ev();
extern void _ZN7S7310C23v27Ev();
extern void _ZN7S7310C12v1Ev();
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C33v12Ev();
extern void _ZN7S7310C33v13Ev();
extern void _ZN7S7310C33v14Ev();
extern void _ZN7S7310C33v15Ev();
extern void _ZN7S7310C33v16Ev();
extern void _ZN7S7310C33v17Ev();
extern void _ZN7S7310C33v18Ev();
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C62v6Ev();
extern void _ZN7S7310C62v7Ev();
extern void _ZN7S7310C62v8Ev();
extern void _ZN7S7310C62v9Ev();
extern void _ZN7S7310C63v10Ev();
extern void _ZN7S7310C63v11Ev();
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C52v3Ev();
extern void _ZN7S7310C52v4Ev();
extern void _ZN7S7310C52v5Ev();
extern void _ZN7S7310C73v19Ev();
extern void _ZN7S7310C73v20Ev();
extern void _ZN7S7310C73v21Ev();
extern void _ZN7S7310C73v22Ev();
extern void _ZN7S7310C73v23Ev();
static  VTBL_ENTRY vtc_S7310C1[] = {
  ABISELECT(72,40),
  ABISELECT(64,36),
  ABISELECT(40,20),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7310C1[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7310C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7310C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7310C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7310C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7310C23v27Ev,
  (VTBL_ENTRY)&_ZN7S7310C12v1Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7310C1[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v18Ev,
  ABISELECT(16,12),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7310C1[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7310C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7310C63v11Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7310C1[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v5Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S7310C1[0]),
  (VTBL_ENTRY)&_ZN7S7310C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7310C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7310C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7310C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7310C73v23Ev,
};
extern VTBL_ENTRY _ZTV7S7310C1[];
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C2D1Ev();
extern void _ZN7S7310C2D0Ev();
extern void _ZN7S7310C83v24Ev();
extern void _ZN7S7310C23v25Ev();
extern void _ZN7S7310C23v26Ev();
extern void _ZN7S7310C23v27Ev();
static  VTBL_ENTRY _tg__ZTV7S7310C2__7S7310C1[] = {
  ABISELECT(72,40),
  ABISELECT(64,36),
  ABISELECT(40,20),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7310C2[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7310C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7310C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7310C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7310C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7310C23v27Ev,
};
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C8D1Ev();
extern void _ZN7S7310C8D0Ev();
extern void _ZN7S7310C83v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7310C87S7310C2__7S7310C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7310C8[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7310C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7310C83v24Ev,
};
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C33v12Ev();
extern void _ZN7S7310C33v13Ev();
extern void _ZN7S7310C33v14Ev();
extern void _ZN7S7310C33v15Ev();
extern void _ZN7S7310C33v16Ev();
extern void _ZN7S7310C33v17Ev();
extern void _ZN7S7310C33v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7310C3__7S7310C2__7S7310C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7310C2[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v18Ev,
};
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C52v3Ev();
extern void _ZN7S7310C52v4Ev();
extern void _ZN7S7310C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7310C5__7S7310C2__7S7310C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7310C2[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v5Ev,
};
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C62v6Ev();
extern void _ZN7S7310C62v7Ev();
extern void _ZN7S7310C62v8Ev();
extern void _ZN7S7310C62v9Ev();
extern void _ZN7S7310C63v10Ev();
extern void _ZN7S7310C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7310C67S7310C3__7S7310C2__7S7310C1[] = {
  ABISELECT(16,12),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7310C2[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7310C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7310C63v11Ev,
};
extern void _ZN7S7310C73v19Ev();
extern void _ZN7S7310C73v20Ev();
extern void _ZN7S7310C73v21Ev();
extern void _ZN7S7310C73v22Ev();
extern void _ZN7S7310C73v23Ev();
static  VTBL_ENTRY _tg__ZTV7S7310C7__7S7310C2__7S7310C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S7310C2[0]),
  (VTBL_ENTRY)&_ZN7S7310C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7310C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7310C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7310C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7310C73v23Ev,
};
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C33v12Ev();
extern void _ZN7S7310C33v13Ev();
extern void _ZN7S7310C33v14Ev();
extern void _ZN7S7310C33v15Ev();
extern void _ZN7S7310C33v16Ev();
extern void _ZN7S7310C33v17Ev();
extern void _ZN7S7310C33v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7310C3__7S7310C1[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7310C3[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7310C33v18Ev,
};
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C62v6Ev();
extern void _ZN7S7310C62v7Ev();
extern void _ZN7S7310C62v8Ev();
extern void _ZN7S7310C62v9Ev();
extern void _ZN7S7310C63v10Ev();
extern void _ZN7S7310C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7310C67S7310C3__7S7310C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7310C6[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7310C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7310C63v11Ev,
};
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C52v3Ev();
extern void _ZN7S7310C52v4Ev();
extern void _ZN7S7310C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7310C5__7S7310C67S7310C3__7S7310C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7310C6[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v5Ev,
};
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C52v3Ev();
extern void _ZN7S7310C52v4Ev();
extern void _ZN7S7310C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7310C5__7S7310C3__7S7310C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7310C3[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7310C52v5Ev,
};
extern void _ZN7S7310C42v2Ev();
extern void _ZN7S7310C62v6Ev();
extern void _ZN7S7310C62v7Ev();
extern void _ZN7S7310C62v8Ev();
extern void _ZN7S7310C62v9Ev();
extern void _ZN7S7310C63v10Ev();
extern void _ZN7S7310C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7310C6__7S7310C3__7S7310C1[] = {
  ABISELECT(16,12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7310C3[0]),
  (VTBL_ENTRY)&_ZN7S7310C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7310C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7310C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7310C63v11Ev,
};
static  VTT_ENTRY vtt_S7310C1[] = {
  {&(_ZTV7S7310C1[7]),  7,72},
  {&(_tg__ZTV7S7310C2__7S7310C1[7]),  7,14},
  {&(_tg__ZTV7S7310C87S7310C2__7S7310C1[4]),  4,8},
  {&(_tg__ZTV7S7310C87S7310C2__7S7310C1[4]),  4,8},
  {&(_tg__ZTV7S7310C3__7S7310C2__7S7310C1[17]),  17,25},
  {&(_tg__ZTV7S7310C5__7S7310C2__7S7310C1[6]),  6,10},
  {&(_tg__ZTV7S7310C67S7310C3__7S7310C2__7S7310C1[3]),  3,10},
  {&(_tg__ZTV7S7310C7__7S7310C2__7S7310C1[7]),  7,12},
  {&(_tg__ZTV7S7310C2__7S7310C1[7]),  7,14},
  {&(_ZTV7S7310C1[32]),  32,72},
  {&(_ZTV7S7310C1[56]),  56,72},
  {&(_ZTV7S7310C1[43]),  43,72},
  {&(_ZTV7S7310C1[67]),  67,72},
  {&(_ZTV7S7310C1[7]),  7,72},
  {&(_tg__ZTV7S7310C3__7S7310C1[3]),  3,11},
  {&(_tg__ZTV7S7310C67S7310C3__7S7310C1[3]),  3,10},
  {&(_tg__ZTV7S7310C5__7S7310C67S7310C3__7S7310C1[6]),  6,10},
  {&(_tg__ZTV7S7310C5__7S7310C3__7S7310C1[6]),  6,10},
  {&(_tg__ZTV7S7310C6__7S7310C3__7S7310C1[3]),  3,10},
};
extern VTBL_ENTRY _ZTI7S7310C1[];
extern  VTBL_ENTRY _ZTV7S7310C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7310C1[];
Class_Descriptor cd_S7310C1 = {  "S7310C1", // class name
  bases_S7310C1, 10,
  &(vtc_S7310C1[0]), // expected_vtbl_contents
  &(vtt_S7310C1[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI7S7310C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7310C1),72, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7310C1),19, //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  S3752C2  : S1679C4_nt {
  virtual void  v8(); // _ZN7S3752C22v8Ev
  virtual void  v9(); // _ZN7S3752C22v9Ev
  virtual void  v10(); // _ZN7S3752C23v10Ev
  virtual void  v11(); // _ZN7S3752C23v11Ev
  virtual void  v12(); // _ZN7S3752C23v12Ev
  virtual void  v13(); // _ZN7S3752C23v13Ev
  virtual void  v14(); // _ZN7S3752C23v14Ev
  virtual void  v15(); // _ZN7S3752C23v15Ev
  virtual void  v16(); // _ZN7S3752C23v16Ev
  virtual void  v17(); // _ZN7S3752C23v17Ev
  virtual void  v18(); // _ZN7S3752C23v18Ev
  virtual void  v19(); // _ZN7S3752C23v19Ev
  ~S3752C2(); // tgen
  S3752C2(); // tgen
};
//SIG(-1 S3752C2) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S3752C2 ::v8(){vfunc_called(this, "_ZN7S3752C22v8Ev");}
void  S3752C2 ::v9(){vfunc_called(this, "_ZN7S3752C22v9Ev");}
void  S3752C2 ::v10(){vfunc_called(this, "_ZN7S3752C23v10Ev");}
void  S3752C2 ::v11(){vfunc_called(this, "_ZN7S3752C23v11Ev");}
void  S3752C2 ::v12(){vfunc_called(this, "_ZN7S3752C23v12Ev");}
void  S3752C2 ::v13(){vfunc_called(this, "_ZN7S3752C23v13Ev");}
void  S3752C2 ::v14(){vfunc_called(this, "_ZN7S3752C23v14Ev");}
void  S3752C2 ::v15(){vfunc_called(this, "_ZN7S3752C23v15Ev");}
void  S3752C2 ::v16(){vfunc_called(this, "_ZN7S3752C23v16Ev");}
void  S3752C2 ::v17(){vfunc_called(this, "_ZN7S3752C23v17Ev");}
void  S3752C2 ::v18(){vfunc_called(this, "_ZN7S3752C23v18Ev");}
void  S3752C2 ::v19(){vfunc_called(this, "_ZN7S3752C23v19Ev");}
S3752C2 ::~S3752C2(){ note_dtor("S3752C2", this);} // tgen
S3752C2 ::S3752C2(){ note_ctor("S3752C2", this);} // tgen

static void Test_S3752C2()
{
  extern Class_Descriptor cd_S3752C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3752C2, buf);
    S3752C2 *dp, &lv = *(dp=new (buf) S3752C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3752C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3752C2)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S3752C2");
    test_class_info(&lv, &cd_S3752C2);
    dp->~S3752C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3752C2(Test_S3752C2, "S3752C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3752C2C1Ev();
extern void _ZN7S3752C2D1Ev();
Name_Map name_map_S3752C2[] = {
  NSPAIR(_ZN7S3752C2C1Ev),
  NSPAIR(_ZN7S3752C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S3752C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S3752C2[];
extern void _ZN7S3752C2D1Ev();
extern void _ZN7S3752C2D0Ev();
extern void _ZN7S3752C22v8Ev();
extern void _ZN7S3752C22v9Ev();
extern void _ZN7S3752C23v10Ev();
extern void _ZN7S3752C23v11Ev();
extern void _ZN7S3752C23v12Ev();
extern void _ZN7S3752C23v13Ev();
extern void _ZN7S3752C23v14Ev();
extern void _ZN7S3752C23v15Ev();
extern void _ZN7S3752C23v16Ev();
extern void _ZN7S3752C23v17Ev();
extern void _ZN7S3752C23v18Ev();
extern void _ZN7S3752C23v19Ev();
static  VTBL_ENTRY vtc_S3752C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3752C2[0]),
  (VTBL_ENTRY)&_ZN7S3752C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3752C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3752C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3752C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3752C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3752C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3752C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3752C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3752C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3752C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3752C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3752C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3752C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3752C23v19Ev,
};
extern VTBL_ENTRY _ZTI7S3752C2[];
extern  VTBL_ENTRY _ZTV7S3752C2[];
Class_Descriptor cd_S3752C2 = {  "S3752C2", // class name
  bases_S3752C2, 1,
  &(vtc_S3752C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3752C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3752C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3752C6_nt  {
  void *s3752c6f0[2];
  void  mf3752c6(); // _ZN10S3752C6_nt8mf3752c6Ev
};
//SIG(-1 S3752C6_nt) C1{ m Fp[2]}


void  S3752C6_nt ::mf3752c6(){}

//skip512 S3752C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3752C1  : S3752C2 {
  ::S3765C5_nt s3752c1f0;
  ::S79C38_nt s3752c1f1;
  ::S79C38_nt s3752c1f2;
  ::S3752C6_nt s3752c1f3;
  ::S3752C6_nt s3752c1f4;
  ::S1679C8_nt s3752c1f5;
  virtual  ~S3752C1(); // _ZN7S3752C1D1Ev
  virtual void  v1(); // _ZN7S3752C12v1Ev
  virtual void  v2(); // _ZN7S3752C12v2Ev
  virtual void  v3(); // _ZN7S3752C12v3Ev
  virtual void  v4(); // _ZN7S3752C12v4Ev
  virtual void  v5(); // _ZN7S3752C12v5Ev
  virtual void  v6(); // _ZN7S3752C12v6Ev
  virtual void  v7(); // _ZN7S3752C12v7Ev
  S3752C1(); // tgen
};
//SIG(1 S3752C1) C1{ BC2{ BC3{ vd m Fi} v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19} vd v1 v2 v3 v4 v5 v6 v7 FC4{ m Fp[2]} FC5{ m Fp[2]} FC5 FC6{ m Fp[2]} FC6 FC7{ m FC8{ m Fp Fi[2] FC9{ m}} Fp[2]}}


 S3752C1 ::~S3752C1(){ note_dtor("S3752C1", this);}
void  S3752C1 ::v1(){vfunc_called(this, "_ZN7S3752C12v1Ev");}
void  S3752C1 ::v2(){vfunc_called(this, "_ZN7S3752C12v2Ev");}
void  S3752C1 ::v3(){vfunc_called(this, "_ZN7S3752C12v3Ev");}
void  S3752C1 ::v4(){vfunc_called(this, "_ZN7S3752C12v4Ev");}
void  S3752C1 ::v5(){vfunc_called(this, "_ZN7S3752C12v5Ev");}
void  S3752C1 ::v6(){vfunc_called(this, "_ZN7S3752C12v6Ev");}
void  S3752C1 ::v7(){vfunc_called(this, "_ZN7S3752C12v7Ev");}
S3752C1 ::S3752C1(){ note_ctor("S3752C1", this);} // tgen

static void Test_S3752C1()
{
  extern Class_Descriptor cd_S3752C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,19)];
    init_test(&cd_S3752C1, buf);
    S3752C1 *dp, &lv = *(dp=new (buf) S3752C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,72), "sizeof(S3752C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3752C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S3752C2*), 0, "S3752C1");
    check_base_class_offset(lv, (S3752C2*), 0, "S3752C1");
    check_field_offset(lv, s3752c1f0, ABISELECT(16,8), "S3752C1.s3752c1f0");
    check_field_offset(lv, s3752c1f1, ABISELECT(32,16), "S3752C1.s3752c1f1");
    check_field_offset(lv, s3752c1f2, ABISELECT(48,24), "S3752C1.s3752c1f2");
    check_field_offset(lv, s3752c1f3, ABISELECT(64,32), "S3752C1.s3752c1f3");
    check_field_offset(lv, s3752c1f4, ABISELECT(80,40), "S3752C1.s3752c1f4");
    check_field_offset(lv, s3752c1f5, ABISELECT(96,48), "S3752C1.s3752c1f5");
    test_class_info(&lv, &cd_S3752C1);
    dp->~S3752C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3752C1(Test_S3752C1, "S3752C1", ABISELECT(136,72));

#else // __cplusplus

extern void _ZN7S3752C1C1Ev();
extern void _ZN7S3752C1D1Ev();
Name_Map name_map_S3752C1[] = {
  NSPAIR(_ZN7S3752C1C1Ev),
  NSPAIR(_ZN7S3752C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S3752C2;
extern VTBL_ENTRY _ZTI7S3752C2[];
extern  VTBL_ENTRY _ZTV7S3752C2[];
static Base_Class bases_S3752C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S3752C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3752C1[];
extern void _ZN7S3752C1D1Ev();
extern void _ZN7S3752C1D0Ev();
extern void _ZN7S3752C22v8Ev();
extern void _ZN7S3752C22v9Ev();
extern void _ZN7S3752C23v10Ev();
extern void _ZN7S3752C23v11Ev();
extern void _ZN7S3752C23v12Ev();
extern void _ZN7S3752C23v13Ev();
extern void _ZN7S3752C23v14Ev();
extern void _ZN7S3752C23v15Ev();
extern void _ZN7S3752C23v16Ev();
extern void _ZN7S3752C23v17Ev();
extern void _ZN7S3752C23v18Ev();
extern void _ZN7S3752C23v19Ev();
extern void _ZN7S3752C12v1Ev();
extern void _ZN7S3752C12v2Ev();
extern void _ZN7S3752C12v3Ev();
extern void _ZN7S3752C12v4Ev();
extern void _ZN7S3752C12v5Ev();
extern void _ZN7S3752C12v6Ev();
extern void _ZN7S3752C12v7Ev();
static  VTBL_ENTRY vtc_S3752C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3752C1[0]),
  (VTBL_ENTRY)&_ZN7S3752C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3752C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3752C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3752C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3752C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3752C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3752C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3752C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3752C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3752C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3752C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3752C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3752C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3752C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3752C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3752C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3752C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3752C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3752C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3752C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3752C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S3752C1[];
extern  VTBL_ENTRY _ZTV7S3752C1[];
Class_Descriptor cd_S3752C1 = {  "S3752C1", // class name
  bases_S3752C1, 2,
  &(vtc_S3752C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,72), // object size
  NSPAIRA(_ZTI7S3752C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3752C1),23, //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  S3756C2  : S1679C4_nt {
  virtual void  v8(); // _ZN7S3756C22v8Ev
  virtual void  v9(); // _ZN7S3756C22v9Ev
  virtual void  v10(); // _ZN7S3756C23v10Ev
  virtual void  v11(); // _ZN7S3756C23v11Ev
  virtual void  v12(); // _ZN7S3756C23v12Ev
  virtual void  v13(); // _ZN7S3756C23v13Ev
  virtual void  v14(); // _ZN7S3756C23v14Ev
  virtual void  v15(); // _ZN7S3756C23v15Ev
  virtual void  v16(); // _ZN7S3756C23v16Ev
  virtual void  v17(); // _ZN7S3756C23v17Ev
  virtual void  v18(); // _ZN7S3756C23v18Ev
  virtual void  v19(); // _ZN7S3756C23v19Ev
  ~S3756C2(); // tgen
  S3756C2(); // tgen
};
//SIG(-1 S3756C2) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S3756C2 ::v8(){vfunc_called(this, "_ZN7S3756C22v8Ev");}
void  S3756C2 ::v9(){vfunc_called(this, "_ZN7S3756C22v9Ev");}
void  S3756C2 ::v10(){vfunc_called(this, "_ZN7S3756C23v10Ev");}
void  S3756C2 ::v11(){vfunc_called(this, "_ZN7S3756C23v11Ev");}
void  S3756C2 ::v12(){vfunc_called(this, "_ZN7S3756C23v12Ev");}
void  S3756C2 ::v13(){vfunc_called(this, "_ZN7S3756C23v13Ev");}
void  S3756C2 ::v14(){vfunc_called(this, "_ZN7S3756C23v14Ev");}
void  S3756C2 ::v15(){vfunc_called(this, "_ZN7S3756C23v15Ev");}
void  S3756C2 ::v16(){vfunc_called(this, "_ZN7S3756C23v16Ev");}
void  S3756C2 ::v17(){vfunc_called(this, "_ZN7S3756C23v17Ev");}
void  S3756C2 ::v18(){vfunc_called(this, "_ZN7S3756C23v18Ev");}
void  S3756C2 ::v19(){vfunc_called(this, "_ZN7S3756C23v19Ev");}
S3756C2 ::~S3756C2(){ note_dtor("S3756C2", this);} // tgen
S3756C2 ::S3756C2(){ note_ctor("S3756C2", this);} // tgen

static void Test_S3756C2()
{
  extern Class_Descriptor cd_S3756C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3756C2, buf);
    S3756C2 *dp, &lv = *(dp=new (buf) S3756C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3756C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3756C2)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S3756C2");
    test_class_info(&lv, &cd_S3756C2);
    dp->~S3756C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3756C2(Test_S3756C2, "S3756C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3756C2C1Ev();
extern void _ZN7S3756C2D1Ev();
Name_Map name_map_S3756C2[] = {
  NSPAIR(_ZN7S3756C2C1Ev),
  NSPAIR(_ZN7S3756C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S3756C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S3756C2[];
extern void _ZN7S3756C2D1Ev();
extern void _ZN7S3756C2D0Ev();
extern void _ZN7S3756C22v8Ev();
extern void _ZN7S3756C22v9Ev();
extern void _ZN7S3756C23v10Ev();
extern void _ZN7S3756C23v11Ev();
extern void _ZN7S3756C23v12Ev();
extern void _ZN7S3756C23v13Ev();
extern void _ZN7S3756C23v14Ev();
extern void _ZN7S3756C23v15Ev();
extern void _ZN7S3756C23v16Ev();
extern void _ZN7S3756C23v17Ev();
extern void _ZN7S3756C23v18Ev();
extern void _ZN7S3756C23v19Ev();
static  VTBL_ENTRY vtc_S3756C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3756C2[0]),
  (VTBL_ENTRY)&_ZN7S3756C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3756C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3756C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3756C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3756C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3756C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3756C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3756C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3756C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3756C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3756C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3756C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3756C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3756C23v19Ev,
};
extern VTBL_ENTRY _ZTI7S3756C2[];
extern  VTBL_ENTRY _ZTV7S3756C2[];
Class_Descriptor cd_S3756C2 = {  "S3756C2", // class name
  bases_S3756C2, 1,
  &(vtc_S3756C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3756C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3756C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3756C1  : S3756C2 {
  ::S3765C5_nt s3756c1f0;
  void *s3756c1f1;
  ::S5266C36 s3756c1f2;
  int s3756c1f3;
  ::S1679C8_nt s3756c1f4;
  virtual  ~S3756C1(); // _ZN7S3756C1D1Ev
  virtual void  v1(); // _ZN7S3756C12v1Ev
  virtual void  v2(); // _ZN7S3756C12v2Ev
  virtual void  v3(); // _ZN7S3756C12v3Ev
  virtual void  v4(); // _ZN7S3756C12v4Ev
  virtual void  v5(); // _ZN7S3756C12v5Ev
  virtual void  v6(); // _ZN7S3756C12v6Ev
  virtual void  v7(); // _ZN7S3756C12v7Ev
  S3756C1(); // tgen
};
//SIG(1 S3756C1) C1{ BC2{ BC3{ vd m Fi} v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19} vd v1 v2 v3 v4 v5 v6 v7 FC4{ m Fp[2]} Fp FC5{ m Fp Fi[2] FC6{ m}} Fi FC7{ m FC8{ m Fp Fi[2] FC6} Fp[2]}}


 S3756C1 ::~S3756C1(){ note_dtor("S3756C1", this);}
void  S3756C1 ::v1(){vfunc_called(this, "_ZN7S3756C12v1Ev");}
void  S3756C1 ::v2(){vfunc_called(this, "_ZN7S3756C12v2Ev");}
void  S3756C1 ::v3(){vfunc_called(this, "_ZN7S3756C12v3Ev");}
void  S3756C1 ::v4(){vfunc_called(this, "_ZN7S3756C12v4Ev");}
void  S3756C1 ::v5(){vfunc_called(this, "_ZN7S3756C12v5Ev");}
void  S3756C1 ::v6(){vfunc_called(this, "_ZN7S3756C12v6Ev");}
void  S3756C1 ::v7(){vfunc_called(this, "_ZN7S3756C12v7Ev");}
S3756C1 ::S3756C1(){ note_ctor("S3756C1", this);} // tgen

static void Test_S3756C1()
{
  extern Class_Descriptor cd_S3756C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,17)];
    init_test(&cd_S3756C1, buf);
    S3756C1 *dp, &lv = *(dp=new (buf) S3756C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S3756C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3756C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S3756C2*), 0, "S3756C1");
    check_base_class_offset(lv, (S3756C2*), 0, "S3756C1");
    check_field_offset(lv, s3756c1f0, ABISELECT(16,8), "S3756C1.s3756c1f0");
    check_field_offset(lv, s3756c1f1, ABISELECT(32,16), "S3756C1.s3756c1f1");
    check_field_offset(lv, s3756c1f2, ABISELECT(40,20), "S3756C1.s3756c1f2");
    check_field_offset(lv, s3756c1f3, ABISELECT(64,36), "S3756C1.s3756c1f3");
    check_field_offset(lv, s3756c1f4, ABISELECT(72,40), "S3756C1.s3756c1f4");
    test_class_info(&lv, &cd_S3756C1);
    dp->~S3756C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3756C1(Test_S3756C1, "S3756C1", ABISELECT(112,64));

#else // __cplusplus

extern void _ZN7S3756C1C1Ev();
extern void _ZN7S3756C1D1Ev();
Name_Map name_map_S3756C1[] = {
  NSPAIR(_ZN7S3756C1C1Ev),
  NSPAIR(_ZN7S3756C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S3756C2;
extern VTBL_ENTRY _ZTI7S3756C2[];
extern  VTBL_ENTRY _ZTV7S3756C2[];
static Base_Class bases_S3756C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S3756C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3756C1[];
extern void _ZN7S3756C1D1Ev();
extern void _ZN7S3756C1D0Ev();
extern void _ZN7S3756C22v8Ev();
extern void _ZN7S3756C22v9Ev();
extern void _ZN7S3756C23v10Ev();
extern void _ZN7S3756C23v11Ev();
extern void _ZN7S3756C23v12Ev();
extern void _ZN7S3756C23v13Ev();
extern void _ZN7S3756C23v14Ev();
extern void _ZN7S3756C23v15Ev();
extern void _ZN7S3756C23v16Ev();
extern void _ZN7S3756C23v17Ev();
extern void _ZN7S3756C23v18Ev();
extern void _ZN7S3756C23v19Ev();
extern void _ZN7S3756C12v1Ev();
extern void _ZN7S3756C12v2Ev();
extern void _ZN7S3756C12v3Ev();
extern void _ZN7S3756C12v4Ev();
extern void _ZN7S3756C12v5Ev();
extern void _ZN7S3756C12v6Ev();
extern void _ZN7S3756C12v7Ev();
static  VTBL_ENTRY vtc_S3756C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3756C1[0]),
  (VTBL_ENTRY)&_ZN7S3756C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3756C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3756C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3756C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3756C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3756C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3756C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3756C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3756C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3756C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3756C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3756C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3756C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3756C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3756C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3756C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3756C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3756C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3756C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3756C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3756C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S3756C1[];
extern  VTBL_ENTRY _ZTV7S3756C1[];
Class_Descriptor cd_S3756C1 = {  "S3756C1", // class name
  bases_S3756C1, 2,
  &(vtc_S3756C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,64), // object size
  NSPAIRA(_ZTI7S3756C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3756C1),23, //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  S15476C5  : virtual S19905C19 {
  long double s15476c5f0;
  char s15476c5f1;
  short s15476c5f2[4];
  ~S15476C5(); // tgen
  S15476C5(); // tgen
};
//SIG(-1 S15476C5) C1{ VBC2{ vd m} FD Fc Fs[4]}


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

static void Test_S15476C5()
{
  extern Class_Descriptor cd_S15476C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,8)];
    init_test(&cd_S15476C5, buf);
    S15476C5 *dp, &lv = *(dp=new (buf) S15476C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S15476C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S15476C5)");
    check_base_class_offset(lv, (S19905C19*), 0, "S15476C5");
    check_field_offset(lv, s15476c5f0, ABISELECT(16,4), "S15476C5.s15476c5f0");
    check_field_offset(lv, s15476c5f1, ABISELECT(32,16), "S15476C5.s15476c5f1");
    check_field_offset(lv, s15476c5f2, ABISELECT(34,18), "S15476C5.s15476c5f2");
    test_class_info(&lv, &cd_S15476C5);
    dp->~S15476C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15476C5(Test_S15476C5, "S15476C5", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S15476C5C1Ev();
extern void _ZN8S15476C5D1Ev();
Name_Map name_map_S15476C5[] = {
  NSPAIR(_ZN8S15476C5C1Ev),
  NSPAIR(_ZN8S15476C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
static Base_Class bases_S15476C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    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 _ZTI8S15476C5[];
extern void _ZN8S15476C5D1Ev();
extern void _ZN8S15476C5D0Ev();
static  VTBL_ENTRY vtc_S15476C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&_ZN8S15476C5D1Ev,
  (VTBL_ENTRY)&_ZN8S15476C5D0Ev,
};
extern VTBL_ENTRY _ZTV8S15476C5[];
static  VTT_ENTRY vtt_S15476C5[] = {
  {&(_ZTV8S15476C5[4]),  4,6},
  {&(_ZTV8S15476C5[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S15476C5[];
extern  VTBL_ENTRY _ZTV8S15476C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C5[];
Class_Descriptor cd_S15476C5 = {  "S15476C5", // class name
  bases_S15476C5, 1,
  &(vtc_S15476C5[0]), // expected_vtbl_contents
  &(vtt_S15476C5[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S15476C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S15476C5),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S15476C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15476C10  : virtual S19905C19 , virtual S15476C5 {
  int s15476c10f0;
  virtual  ~S15476C10(); // _ZN9S15476C10D2Ev
  S15476C10(); // tgen
};
//SIG(-1 S15476C10) C1{ VBC2{ vd m} VBC3{ VBC2 FD Fc Fs[4]} vd Fi}


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

static void Test_S15476C10()
{
  extern Class_Descriptor cd_S15476C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,10)];
    init_test(&cd_S15476C10, buf);
    S15476C10 *dp, &lv = *(dp=new (buf) S15476C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S15476C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S15476C10)");
    check_base_class_offset(lv, (S19905C19*), 0, "S15476C10");
    check_base_class_offset(lv, (S19905C19*)(S15476C5*), 0, "S15476C10");
    check_base_class_offset(lv, (S15476C5*), ABISELECT(16,8), "S15476C10");
    check_field_offset(lv, s15476c10f0, ABISELECT(8,4), "S15476C10.s15476c10f0");
    test_class_info(&lv, &cd_S15476C10);
    dp->~S15476C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15476C10(Test_S15476C10, "S15476C10", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN9S15476C10C1Ev();
extern void _ZN9S15476C10D2Ev();
Name_Map name_map_S15476C10[] = {
  NSPAIR(_ZN9S15476C10C1Ev),
  NSPAIR(_ZN9S15476C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S15476C5;
extern VTBL_ENTRY _ZTI8S15476C5[];
extern  VTBL_ENTRY _ZTV8S15476C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C5[];
static Base_Class bases_S15476C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    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_S15476C5,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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 _ZTI9S15476C10[];
extern void _ZN9S15476C10D1Ev();
extern void _ZN9S15476C10D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S15476C10D1Ev,_ZThn8_N9S15476C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev)();
extern void ABISELECT(_ZThn16_N9S15476C10D0Ev,_ZThn8_N9S15476C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S15476C10[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S15476C10[0]),
  (VTBL_ENTRY)&_ZN9S15476C10D1Ev,
  (VTBL_ENTRY)&_ZN9S15476C10D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S15476C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S15476C10[];
extern void ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev)();
extern void _ZN8S15476C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev)();
extern void _ZN8S15476C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__9S15476C10[] = {
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S15476C5__9S15476C10[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev),
};
static  VTT_ENTRY vtt_S15476C10[] = {
  {&(_ZTV9S15476C10[5]),  5,13},
  {&(_ZTV9S15476C10[5]),  5,13},
  {&(_ZTV9S15476C10[11]),  11,13},
  {&(_tg__ZTV8S15476C5__9S15476C10[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S15476C5__9S15476C10[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S15476C10[];
extern  VTBL_ENTRY _ZTV9S15476C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S15476C10[];
static VTBL_ENTRY alt_thunk_names99[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S15476C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S15476C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S15476C10D0Ev,_ZThn8_N9S15476C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S15476C10D1Ev,_ZThn8_N9S15476C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S15476C10 = {  "S15476C10", // class name
  bases_S15476C10, 2,
  &(vtc_S15476C10[0]), // expected_vtbl_contents
  &(vtt_S15476C10[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI9S15476C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S15476C10),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S15476C10),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names99,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15476C9  : virtual S19905C19 , S15476C10 , S17777C6_nt {
  short s15476c9f0;
  __tsi64 s15476c9f1;
  void *s15476c9f2;
  __tsi64 s15476c9f3;
  virtual  ~S15476C9(); // _ZN8S15476C9D2Ev
  S15476C9(); // tgen
};
//SIG(-1 S15476C9) C1{ VBC2{ vd m} BC3{ VBC2 VBC4{ VBC2 FD Fc Fs[4]} vd Fi} BC5{ m Fp} vd Fs FL Fp FL}


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

static void Test_S15476C9()
{
  extern Class_Descriptor cd_S15476C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,17)];
    init_test(&cd_S15476C9, buf);
    S15476C9 *dp, &lv = *(dp=new (buf) S15476C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S15476C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S15476C9)");
    check_base_class_offset(lv, (S19905C19*), 0, "S15476C9");
    check_base_class_offset(lv, (S19905C19*)(S15476C10*), 0, "S15476C9");
    check_base_class_offset(lv, (S19905C19*)(S15476C5*), 0, "S15476C9");
    check_base_class_offset(lv, (S15476C5*)(S15476C10*), ABISELECT(64,36), "S15476C9");
    check_base_class_offset(lv, (S15476C10*), 0, "S15476C9");
    check_base_class_offset(lv, (S17777C6_nt*), ABISELECT(16,8), "S15476C9");
    check_field_offset(lv, s15476c9f0, ABISELECT(24,12), "S15476C9.s15476c9f0");
    check_field_offset(lv, s15476c9f1, ABISELECT(32,16), "S15476C9.s15476c9f1");
    check_field_offset(lv, s15476c9f2, ABISELECT(40,24), "S15476C9.s15476c9f2");
    check_field_offset(lv, s15476c9f3, ABISELECT(48,28), "S15476C9.s15476c9f3");
    test_class_info(&lv, &cd_S15476C9);
    dp->~S15476C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15476C9(Test_S15476C9, "S15476C9", ABISELECT(112,64));

#else // __cplusplus

extern void _ZN8S15476C9C1Ev();
extern void _ZN8S15476C9D2Ev();
Name_Map name_map_S15476C9[] = {
  NSPAIR(_ZN8S15476C9C1Ev),
  NSPAIR(_ZN8S15476C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S15476C5;
extern VTBL_ENTRY _ZTI8S15476C5[];
extern  VTBL_ENTRY _ZTV8S15476C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C5[];
extern Class_Descriptor cd_S15476C10;
extern VTBL_ENTRY _ZTI9S15476C10[];
extern  VTBL_ENTRY _ZTV9S15476C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S15476C10[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
static Base_Class bases_S15476C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S15476C5,    ABISELECT(64,36), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S15476C10,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S17777C6_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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S15476C9[];
extern void _ZN8S15476C9D1Ev();
extern void _ZN8S15476C9D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev)();
extern void ABISELECT(_ZThn64_N8S15476C9D1Ev,_ZThn36_N8S15476C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev)();
extern void ABISELECT(_ZThn64_N8S15476C9D0Ev,_ZThn36_N8S15476C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S15476C9[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C9[0]),
  (VTBL_ENTRY)&_ZN8S15476C9D1Ev,
  (VTBL_ENTRY)&_ZN8S15476C9D0Ev,
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S15476C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S15476C9[];
extern void ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev)();
extern void _ZN9S15476C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev)();
extern void _ZN9S15476C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S15476C10__8S15476C9[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S15476C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev)();
extern void ABISELECT(_ZThn64_N9S15476C10D1Ev,_ZThn36_N9S15476C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev)();
extern void ABISELECT(_ZThn64_N9S15476C10D0Ev,_ZThn36_N9S15476C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__9S15476C10__8S15476C9[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S15476C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev)();
extern void _ZN8S15476C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev)();
extern void _ZN8S15476C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__8S15476C9[] = {
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S15476C5__8S15476C9[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev),
};
static  VTT_ENTRY vtt_S15476C9[] = {
  {&(_ZTV8S15476C9[5]),  5,13},
  {&(_tg__ZTV9S15476C10__8S15476C9[5]),  5,7},
  {&(_tg__ZTV9S15476C10__8S15476C9[5]),  5,7},
  {&(_tg__ZTV8S15476C5__9S15476C10__8S15476C9[4]),  4,6},
  {&(_ZTV8S15476C9[5]),  5,13},
  {&(_ZTV8S15476C9[11]),  11,13},
  {&(_tg__ZTV8S15476C5__8S15476C9[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S15476C5__8S15476C9[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S15476C9[];
extern  VTBL_ENTRY _ZTV8S15476C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C9[];
static VTBL_ENTRY alt_thunk_names100[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S15476C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S15476C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S15476C10D0Ev,_ZThn36_N9S15476C10D0Ev),
  (VTBL_ENTRY)_ZN9S15476C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S15476C10D1Ev,_ZThn36_N9S15476C10D1Ev),
  (VTBL_ENTRY)_ZN9S15476C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S15476C9D0Ev,_ZThn36_N8S15476C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S15476C9D1Ev,_ZThn36_N8S15476C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S15476C9 = {  "S15476C9", // class name
  bases_S15476C9, 4,
  &(vtc_S15476C9[0]), // expected_vtbl_contents
  &(vtt_S15476C9[0]), // expected_vtt_contents
  ABISELECT(112,64), // object size
  NSPAIRA(_ZTI8S15476C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S15476C9),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S15476C9),8, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names100,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15476C8  : virtual S15476C9 , S17777C6_nt , S19905C19 , S15476C5 {
  int s15476c8f0;
  virtual  ~S15476C8(); // _ZN8S15476C8D2Ev
  S15476C8(); // tgen
};
//SIG(-1 S15476C8) C1{ VBC2{ VBC3{ vd m} BC4{ VBC3 VBC5{ VBC3 FD Fc Fs[4]} vd Fi} BC6{ m Fp} vd Fs FL Fp FL} BC6 BC3 BC5 vd Fi}


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

static void Test_S15476C8()
{
  extern Class_Descriptor cd_S15476C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,27)];
    init_test(&cd_S15476C8, buf);
    S15476C8 *dp, &lv = *(dp=new (buf) S15476C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,104), "sizeof(S15476C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S15476C8)");
    check_base_class_offset(lv, (S19905C19*)(S15476C9*), ABISELECT(64,40), "S15476C8");
    check_base_class_offset(lv, (S19905C19*)(S15476C10*)(S15476C9*), ABISELECT(64,40), "S15476C8");
    /*is_ambiguous_... S15476C8::S15476C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S15476C5*), ABISELECT(64,40), "S15476C8");
    /*is_ambiguous_... S15476C8::S15476C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S15476C5*), ABISELECT(64,40), "S15476C8");
    check_base_class_offset(lv, (S15476C5*)(S15476C10*)(S15476C9*), ABISELECT(128,76), "S15476C8");
    check_base_class_offset(lv, (S15476C10*)(S15476C9*), ABISELECT(64,40), "S15476C8");
    check_base_class_offset(lv, (S17777C6_nt*)(S15476C9*), ABISELECT(80,48), "S15476C8");
    check_base_class_offset(lv, (S15476C9*), ABISELECT(64,40), "S15476C8");
    /*is_ambiguous_... S15476C8::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*), ABISELECT(8,4), "S15476C8");
    /*is_ambiguous_... S15476C8::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*), 0, "S15476C8");
    /*is_ambiguous_... S15476C8::S15476C5 */ AMB_check_base_class_offset(lv, (S15476C5*), ABISELECT(16,8), "S15476C8");
    check_field_offset(lv, s15476c8f0, ABISELECT(60,36), "S15476C8.s15476c8f0");
    test_class_info(&lv, &cd_S15476C8);
    dp->~S15476C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15476C8(Test_S15476C8, "S15476C8", ABISELECT(176,104));

#else // __cplusplus

extern void _ZN8S15476C8C1Ev();
extern void _ZN8S15476C8D2Ev();
Name_Map name_map_S15476C8[] = {
  NSPAIR(_ZN8S15476C8C1Ev),
  NSPAIR(_ZN8S15476C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S15476C5;
extern VTBL_ENTRY _ZTI8S15476C5[];
extern  VTBL_ENTRY _ZTV8S15476C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C5[];
extern Class_Descriptor cd_S15476C10;
extern VTBL_ENTRY _ZTI9S15476C10[];
extern  VTBL_ENTRY _ZTV9S15476C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S15476C10[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S15476C9;
extern VTBL_ENTRY _ZTI8S15476C9[];
extern  VTBL_ENTRY _ZTV8S15476C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C9[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S15476C5;
extern VTBL_ENTRY _ZTI8S15476C5[];
extern  VTBL_ENTRY _ZTV8S15476C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C5[];
static Base_Class bases_S15476C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    ABISELECT(64,40), //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_S15476C5,    ABISELECT(128,76), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S15476C10,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    4, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(80,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
    4, //immediately_derived
  0, 0},
  {&cd_S15476C9,    ABISELECT(64,40), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //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},
  {&cd_S17777C6_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, 0},
  {&cd_S19905C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S15476C5,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //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 _ZTI8S15476C8[];
extern void _ZN8S15476C8D1Ev();
extern void _ZN8S15476C8D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S15476C8D1Ev,_ZThn8_N8S15476C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S15476C8D0Ev,_ZThn8_N8S15476C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S15476C8D1Ev,_ZThn40_N8S15476C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S15476C8D0Ev,_ZThn40_N8S15476C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev)();
extern void ABISELECT(_ZThn128_N8S15476C8D1Ev,_ZThn76_N8S15476C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev)();
extern void ABISELECT(_ZThn128_N8S15476C8D0Ev,_ZThn76_N8S15476C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S15476C8[] = {
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C8[0]),
  (VTBL_ENTRY)&_ZN8S15476C8D1Ev,
  (VTBL_ENTRY)&_ZN8S15476C8D0Ev,
  ABISELECT(48,32),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S15476C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev),
  ABISELECT(64,36),
  0,
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S15476C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S15476C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev),
};
extern VTBL_ENTRY _ZTV8S15476C8[];
extern void ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev)();
extern void _ZN8S15476C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev)();
extern void _ZN8S15476C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__A__8S15476C8[] = {
  ABISELECT(48,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev)();
extern void ABISELECT(_ZThn48_N8S15476C5D1Ev,_ZThn32_N8S15476C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev)();
extern void ABISELECT(_ZThn48_N8S15476C5D0Ev,_ZThn32_N8S15476C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S15476C5__A__8S15476C8[] = {
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev)();
extern void _ZN8S15476C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev)();
extern void _ZN8S15476C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C9__8S15476C8[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev)();
extern void _ZN9S15476C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev)();
extern void _ZN9S15476C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S15476C108S15476C9__8S15476C8[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S15476C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev)();
extern void ABISELECT(_ZThn64_N9S15476C10D1Ev,_ZThn36_N9S15476C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev)();
extern void ABISELECT(_ZThn64_N9S15476C10D0Ev,_ZThn36_N9S15476C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__9S15476C108S15476C9__8S15476C8[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S15476C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev)();
extern void ABISELECT(_ZThn64_N8S15476C9D1Ev,_ZThn36_N8S15476C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev)();
extern void ABISELECT(_ZThn64_N8S15476C9D0Ev,_ZThn36_N8S15476C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__8S15476C9__8S15476C8[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S15476C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev)();
extern void _ZN8S15476C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev)();
extern void _ZN8S15476C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__8S15476C8[] = {
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S15476C5__8S15476C8[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev),
};
static  VTT_ENTRY vtt_S15476C8[] = {
  {&(_ZTV8S15476C8[5]),  5,26},
  {&(_tg__ZTV8S15476C5__A__8S15476C8[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S15476C5__A__8S15476C8[3]),  3,5},
  {&(_ZTV8S15476C8[18]),  18,26},
  {&(_ZTV8S15476C8[18]),  18,26},
  {&(_ZTV8S15476C8[24]),  24,26},
  {&(_ZTV8S15476C8[11]),  11,26},
  {&(_tg__ZTV8S15476C9__8S15476C8[5]),  5,7},
  {&(_tg__ZTV9S15476C108S15476C9__8S15476C8[5]),  5,7},
  {&(_tg__ZTV9S15476C108S15476C9__8S15476C8[5]),  5,7},
  {&(_tg__ZTV8S15476C5__9S15476C108S15476C9__8S15476C8[4]),  4,6},
  {&(_tg__ZTV8S15476C9__8S15476C8[5]),  5,7},
  {&(_tg__ZTV8S15476C5__8S15476C9__8S15476C8[4]),  4,6},
  {&(_tg__ZTV8S15476C5__8S15476C8[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S15476C5__8S15476C8[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S15476C8[];
extern  VTBL_ENTRY _ZTV8S15476C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C8[];
static VTBL_ENTRY alt_thunk_names101[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S15476C10D0Ev,_ZThn36_N9S15476C10D0Ev),
  (VTBL_ENTRY)_ZN9S15476C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S15476C10D1Ev,_ZThn36_N9S15476C10D1Ev),
  (VTBL_ENTRY)_ZN9S15476C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S15476C9D0Ev,_ZThn36_N8S15476C9D0Ev),
  (VTBL_ENTRY)_ZN8S15476C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S15476C9D1Ev,_ZThn36_N8S15476C9D1Ev),
  (VTBL_ENTRY)_ZN8S15476C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S15476C5D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S15476C5D0Ev,_ZThn32_N8S15476C5D0Ev),
  (VTBL_ENTRY)_ZN8S15476C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S15476C5D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S15476C5D1Ev,_ZThn32_N8S15476C5D1Ev),
  (VTBL_ENTRY)_ZN8S15476C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S15476C8D0Ev,_ZThn76_N8S15476C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S15476C8D0Ev,_ZThn40_N8S15476C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S15476C8D0Ev,_ZThn8_N8S15476C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S15476C8D1Ev,_ZThn76_N8S15476C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S15476C8D1Ev,_ZThn40_N8S15476C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S15476C8D1Ev,_ZThn8_N8S15476C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S15476C8 = {  "S15476C8", // class name
  bases_S15476C8, 8,
  &(vtc_S15476C8[0]), // expected_vtbl_contents
  &(vtt_S15476C8[0]), // expected_vtt_contents
  ABISELECT(176,104), // object size
  NSPAIRA(_ZTI8S15476C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S15476C8),26, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S15476C8),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names101,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15476C6  : virtual S5266C29 , virtual S15476C8 , S15476C5 {
  short s15476c6f0;
  virtual  ~S15476C6(); // _ZN8S15476C6D2Ev
  S15476C6(); // tgen
};
//SIG(-1 S15476C6) C1{ VBC2{ m} VBC3{ VBC4{ VBC5{ vd m} BC6{ VBC5 VBC7{ VBC5 FD Fc Fs[4]} vd Fi} BC8{ m Fp} vd Fs FL Fp FL} BC8 BC5 BC7 vd Fi} BC7 vd Fs}


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

static void Test_S15476C6()
{
  extern Class_Descriptor cd_S15476C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,34)];
    init_test(&cd_S15476C6, buf);
    S15476C6 *dp, &lv = *(dp=new (buf) S15476C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,132), "sizeof(S15476C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S15476C6)");
    check_base_class_offset(lv, (S5266C29*), 0, "S15476C6");
    check_base_class_offset(lv, (S19905C19*)(S15476C9*), ABISELECT(112,68), "S15476C6");
    check_base_class_offset(lv, (S19905C19*)(S15476C10*)(S15476C9*), ABISELECT(112,68), "S15476C6");
    /*is_ambiguous_... S15476C6::S15476C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S15476C5*), ABISELECT(112,68), "S15476C6");
    /*is_ambiguous_... S15476C8::S15476C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S15476C5*)(S15476C8*), ABISELECT(112,68), "S15476C6");
    /*is_ambiguous_... S15476C6::S15476C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S15476C5*), ABISELECT(112,68), "S15476C6");
    check_base_class_offset(lv, (S15476C5*)(S15476C10*)(S15476C9*), ABISELECT(176,104), "S15476C6");
    check_base_class_offset(lv, (S15476C10*)(S15476C9*), ABISELECT(112,68), "S15476C6");
    check_base_class_offset(lv, (S17777C6_nt*)(S15476C9*), ABISELECT(128,76), "S15476C6");
    check_base_class_offset(lv, (S15476C9*)(S15476C8*), ABISELECT(112,68), "S15476C6");
    /*is_ambiguous_... S15476C8::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S15476C8*), ABISELECT(56,32), "S15476C6");
    /*is_ambiguous_... S15476C8::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S15476C8*), ABISELECT(48,28), "S15476C6");
    /*is_ambiguous_... S15476C8::S15476C5 */ AMB_check_base_class_offset(lv, (S15476C5*)(S15476C8*), ABISELECT(64,36), "S15476C6");
    check_base_class_offset(lv, (S15476C8*), ABISELECT(48,28), "S15476C6");
    /*is_ambiguous_... S15476C6::S15476C5 */ AMB_check_base_class_offset(lv, (S15476C5*), 0, "S15476C6");
    check_field_offset(lv, s15476c6f0, ABISELECT(42,26), "S15476C6.s15476c6f0");
    test_class_info(&lv, &cd_S15476C6);
    dp->~S15476C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15476C6(Test_S15476C6, "S15476C6", ABISELECT(224,132));

#else // __cplusplus

extern void _ZN8S15476C6C1Ev();
extern void _ZN8S15476C6D2Ev();
Name_Map name_map_S15476C6[] = {
  NSPAIR(_ZN8S15476C6C1Ev),
  NSPAIR(_ZN8S15476C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S15476C5;
extern VTBL_ENTRY _ZTI8S15476C5[];
extern  VTBL_ENTRY _ZTV8S15476C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C5[];
extern Class_Descriptor cd_S15476C10;
extern VTBL_ENTRY _ZTI9S15476C10[];
extern  VTBL_ENTRY _ZTV9S15476C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S15476C10[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S15476C9;
extern VTBL_ENTRY _ZTI8S15476C9[];
extern  VTBL_ENTRY _ZTV8S15476C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C9[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S15476C5;
extern VTBL_ENTRY _ZTI8S15476C5[];
extern  VTBL_ENTRY _ZTV8S15476C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C5[];
extern Class_Descriptor cd_S15476C8;
extern VTBL_ENTRY _ZTI8S15476C8[];
extern  VTBL_ENTRY _ZTV8S15476C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C8[];
extern Class_Descriptor cd_S15476C5;
extern VTBL_ENTRY _ZTI8S15476C5[];
extern  VTBL_ENTRY _ZTV8S15476C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C5[];
static Base_Class bases_S15476C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19905C19,    ABISELECT(112,68), //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
    2, //immediately_derived
  0, 1},
  {&cd_S15476C5,    ABISELECT(176,104), //bcp->offset
    31, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S15476C10,    ABISELECT(112,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(128,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
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S15476C9,    ABISELECT(112,68), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19905C19,    ABISELECT(48,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
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S15476C5,    ABISELECT(64,36), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S15476C8,    ABISELECT(48,28), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S15476C5,    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 _ZTI8S15476C6[];
extern void ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev)();
extern void _ZN8S15476C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev)();
extern void _ZN8S15476C6D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S15476C6D1Ev,_ZTv0_n24_N8S15476C6D1Ev)();
extern void ABISELECT(_ZThn48_N8S15476C6D1Ev,_ZThn28_N8S15476C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S15476C6D0Ev,_ZTv0_n24_N8S15476C6D0Ev)();
extern void ABISELECT(_ZThn48_N8S15476C6D0Ev,_ZThn28_N8S15476C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S15476C6D1Ev,_ZThn36_N8S15476C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S15476C6D0Ev,_ZThn36_N8S15476C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev)();
extern void ABISELECT(_ZThn112_N8S15476C6D1Ev,_ZThn68_N8S15476C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev)();
extern void ABISELECT(_ZThn112_N8S15476C6D0Ev,_ZThn68_N8S15476C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev)();
extern void ABISELECT(_ZThn176_N8S15476C6D1Ev,_ZThn104_N8S15476C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev)();
extern void ABISELECT(_ZThn176_N8S15476C6D0Ev,_ZThn104_N8S15476C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S15476C6[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  0,
  ABISELECT(112,68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S15476C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S15476C6D1Ev,_ZTv0_n24_N8S15476C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S15476C6D0Ev,_ZTv0_n24_N8S15476C6D0Ev),
  ABISELECT(48,32),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S15476C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev),
  ABISELECT(64,36),
  0,
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S15476C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI8S15476C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev),
};
extern VTBL_ENTRY _ZTV8S15476C6[];
extern void ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev)();
extern void _ZN8S15476C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev)();
extern void _ZN8S15476C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__A__8S15476C6[] = {
  ABISELECT(112,68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev)();
extern void ABISELECT(_ZThn112_N8S15476C5D1Ev,_ZThn68_N8S15476C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev)();
extern void ABISELECT(_ZThn112_N8S15476C5D0Ev,_ZThn68_N8S15476C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S15476C5__A__8S15476C6[] = {
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev),
};
extern void _ZN8S15476C8D1Ev();
extern void _ZN8S15476C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S15476C8__8S15476C6[] = {
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C8[0]),
  (VTBL_ENTRY)&_ZN8S15476C8D1Ev,
  (VTBL_ENTRY)&_ZN8S15476C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev)();
extern void _ZN8S15476C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev)();
extern void _ZN8S15476C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C58S15476C8__A1__8S15476C6[] = {
  ABISELECT(48,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev)();
extern void ABISELECT(_ZThn48_N8S15476C5D1Ev,_ZThn32_N8S15476C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev)();
extern void ABISELECT(_ZThn48_N8S15476C5D0Ev,_ZThn32_N8S15476C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S15476C58S15476C8__A1__8S15476C6[] = {
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S15476C8D1Ev,_ZThn40_N8S15476C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S15476C8D0Ev,_ZThn40_N8S15476C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C9__8S15476C8__8S15476C6[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S15476C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev)();
extern void ABISELECT(_ZThn128_N8S15476C8D1Ev,_ZThn76_N8S15476C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev)();
extern void ABISELECT(_ZThn128_N8S15476C8D0Ev,_ZThn76_N8S15476C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__8S15476C8__8S15476C6[] = {
  ABISELECT(-64,-36),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S15476C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S15476C8D1Ev,_ZThn8_N8S15476C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S15476C8D0Ev,_ZThn8_N8S15476C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__A__8S15476C8__8S15476C6[] = {
  ABISELECT(48,32),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S15476C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev)();
extern void _ZN8S15476C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev)();
extern void _ZN8S15476C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C9__8S15476C6[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev)();
extern void _ZN9S15476C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev)();
extern void _ZN9S15476C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S15476C108S15476C9__8S15476C6[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S15476C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev)();
extern void ABISELECT(_ZThn64_N9S15476C10D1Ev,_ZThn36_N9S15476C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev)();
extern void ABISELECT(_ZThn64_N9S15476C10D0Ev,_ZThn36_N9S15476C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__9S15476C108S15476C9__8S15476C6[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S15476C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev)();
extern void ABISELECT(_ZThn64_N8S15476C9D1Ev,_ZThn36_N8S15476C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev)();
extern void ABISELECT(_ZThn64_N8S15476C9D0Ev,_ZThn36_N8S15476C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__8S15476C9__8S15476C6[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S15476C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev)();
extern void _ZN8S15476C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev)();
extern void _ZN8S15476C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__8S15476C6[] = {
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S15476C5__8S15476C6[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev),
};
static  VTT_ENTRY vtt_S15476C6[] = {
  {&(_ZTV8S15476C6[8]),  8,37},
  {&(_tg__ZTV8S15476C5__A__8S15476C6[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S15476C5__A__8S15476C6[3]),  3,5},
  {&(_ZTV8S15476C6[16]),  16,37},
  {&(_ZTV8S15476C6[29]),  29,37},
  {&(_ZTV8S15476C6[29]),  29,37},
  {&(_ZTV8S15476C6[35]),  35,37},
  {&(_ZTV8S15476C6[22]),  22,37},
  {&(_tg__ZTV8S15476C8__8S15476C6[5]),  5,7},
  {&(_tg__ZTV8S15476C58S15476C8__A1__8S15476C6[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S15476C58S15476C8__A1__8S15476C6[3]),  3,5},
  {&(_tg__ZTV8S15476C9__8S15476C8__8S15476C6[5]),  5,7},
  {&(_tg__ZTV8S15476C9__8S15476C8__8S15476C6[5]),  5,7},
  {&(_tg__ZTV8S15476C5__8S15476C8__8S15476C6[4]),  4,6},
  {&(_tg__ZTV8S15476C5__A__8S15476C8__8S15476C6[4]),  4,6},
  {&(_tg__ZTV8S15476C9__8S15476C6[5]),  5,7},
  {&(_tg__ZTV9S15476C108S15476C9__8S15476C6[5]),  5,7},
  {&(_tg__ZTV9S15476C108S15476C9__8S15476C6[5]),  5,7},
  {&(_tg__ZTV8S15476C5__9S15476C108S15476C9__8S15476C6[4]),  4,6},
  {&(_tg__ZTV8S15476C9__8S15476C6[5]),  5,7},
  {&(_tg__ZTV8S15476C5__8S15476C9__8S15476C6[4]),  4,6},
  {&(_tg__ZTV8S15476C5__8S15476C6[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S15476C5__8S15476C6[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S15476C6[];
extern  VTBL_ENTRY _ZTV8S15476C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C6[];
static VTBL_ENTRY alt_thunk_names102[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S15476C10D0Ev,_ZThn36_N9S15476C10D0Ev),
  (VTBL_ENTRY)_ZN9S15476C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S15476C10D1Ev,_ZThn36_N9S15476C10D1Ev),
  (VTBL_ENTRY)_ZN9S15476C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S15476C9D0Ev,_ZThn36_N8S15476C9D0Ev),
  (VTBL_ENTRY)_ZN8S15476C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S15476C9D1Ev,_ZThn36_N8S15476C9D1Ev),
  (VTBL_ENTRY)_ZN8S15476C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S15476C8D0Ev,_ZThn8_N8S15476C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S15476C8D0Ev,_ZThn76_N8S15476C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S15476C8D0Ev,_ZThn40_N8S15476C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S15476C8D1Ev,_ZThn8_N8S15476C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S15476C8D1Ev,_ZThn76_N8S15476C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S15476C8D1Ev,_ZThn40_N8S15476C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S15476C5D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S15476C5D0Ev,_ZThn32_N8S15476C5D0Ev),
  (VTBL_ENTRY)_ZN8S15476C5D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S15476C5D0Ev,_ZThn68_N8S15476C5D0Ev),
  (VTBL_ENTRY)_ZN8S15476C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S15476C5D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S15476C5D1Ev,_ZThn32_N8S15476C5D1Ev),
  (VTBL_ENTRY)_ZN8S15476C5D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S15476C5D1Ev,_ZThn68_N8S15476C5D1Ev),
  (VTBL_ENTRY)_ZN8S15476C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S15476C6D0Ev,_ZTv0_n24_N8S15476C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S15476C6D0Ev,_ZThn28_N8S15476C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S15476C6D1Ev,_ZTv0_n24_N8S15476C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S15476C6D1Ev,_ZThn28_N8S15476C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S15476C6D0Ev,_ZThn104_N8S15476C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S15476C6D0Ev,_ZThn68_N8S15476C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S15476C6D0Ev,_ZThn36_N8S15476C6D0Ev),
  (VTBL_ENTRY)_ZN8S15476C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S15476C6D1Ev,_ZThn104_N8S15476C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S15476C6D1Ev,_ZThn68_N8S15476C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S15476C6D1Ev,_ZThn36_N8S15476C6D1Ev),
  (VTBL_ENTRY)_ZN8S15476C6D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S15476C6 = {  "S15476C6", // class name
  bases_S15476C6, 11,
  &(vtc_S15476C6[0]), // expected_vtbl_contents
  &(vtt_S15476C6[0]), // expected_vtt_contents
  ABISELECT(224,132), // object size
  NSPAIRA(_ZTI8S15476C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S15476C6),37, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S15476C6),23, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names102,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15476C3  : virtual S19905C19 , S15476C5 , virtual S15476C6 , S15476C9 {
  void *s15476c3f0;
  ~S15476C3(); // tgen
  S15476C3(); // tgen
};
//SIG(-1 S15476C3) C1{ VBC2{ vd m} BC3{ VBC2 FD Fc Fs[4]} VBC4{ VBC5{ m} VBC6{ VBC7{ VBC2 BC8{ VBC2 VBC3 vd Fi} BC9{ m Fp} vd Fs FL Fp FL} BC9 BC2 BC3 vd Fi} BC3 vd Fs} BC7 Fp}


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

static void Test_S15476C3()
{
  extern Class_Descriptor cd_S15476C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,51)];
    init_test(&cd_S15476C3, buf);
    S15476C3 *dp, &lv = *(dp=new (buf) S15476C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,200), "sizeof(S15476C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S15476C3)");
    /*is_ambiguous_... S15476C3::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*), 0, "S15476C3");
    /*is_ambiguous_... S15476C3::S15476C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S15476C5*), 0, "S15476C3");
    /*is_ambiguous_... S15476C3::S15476C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S15476C9*), 0, "S15476C3");
    /*is_ambiguous_... S15476C3::S15476C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S15476C10*)(S15476C9*), 0, "S15476C3");
    /*is_ambiguous_... S15476C3::S15476C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S15476C5*), 0, "S15476C3");
    /*is_ambiguous_... S15476C8::S15476C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S15476C5*)(S15476C8*), 0, "S15476C3");
    /*is_ambiguous_... S15476C6::S15476C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S15476C5*)(S15476C6*), 0, "S15476C3");
    /*is_ambiguous_... S15476C3::S15476C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S15476C9*), 0, "S15476C3");
    /*is_ambiguous_... S15476C3::S15476C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S15476C10*)(S15476C9*), 0, "S15476C3");
    /*is_ambiguous_... S15476C3::S15476C5 */ AMB_check_base_class_offset(lv, (S15476C5*), 0, "S15476C3");
    check_base_class_offset(lv, (S5266C29*)(S15476C6*), 0, "S15476C3");
    /*is_ambiguous_... S15476C3::S15476C9 */ AMB_check_base_class_offset(lv, (S15476C5*)(S15476C10*)(S15476C9*), ABISELECT(288,172), "S15476C3");
    /*is_ambiguous_... S15476C3::S15476C9 */ AMB_check_base_class_offset(lv, (S15476C5*)(S15476C10*)(S15476C9*), ABISELECT(288,172), "S15476C3");
    /*is_ambiguous_... S15476C3::S15476C9 */ AMB_check_base_class_offset(lv, (S15476C10*)(S15476C9*), ABISELECT(224,136), "S15476C3");
    /*is_ambiguous_... S15476C3::S15476C9 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S15476C9*), ABISELECT(240,144), "S15476C3");
    check_base_class_offset(lv, (S15476C9*)(S15476C8*), ABISELECT(224,136), "S15476C3");
    /*is_ambiguous_... S15476C8::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S15476C8*), ABISELECT(168,100), "S15476C3");
    /*is_ambiguous_... S15476C8::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S15476C8*), ABISELECT(160,96), "S15476C3");
    /*is_ambiguous_... S15476C8::S15476C5 */ AMB_check_base_class_offset(lv, (S15476C5*)(S15476C8*), ABISELECT(176,104), "S15476C3");
    check_base_class_offset(lv, (S15476C8*)(S15476C6*), ABISELECT(160,96), "S15476C3");
    /*is_ambiguous_... S15476C6::S15476C5 */ AMB_check_base_class_offset(lv, (S15476C5*)(S15476C6*), ABISELECT(112,68), "S15476C3");
    check_base_class_offset(lv, (S15476C6*), ABISELECT(112,68), "S15476C3");
    /*is_ambiguous_... S15476C3::S15476C9 */ AMB_check_base_class_offset(lv, (S15476C10*)(S15476C9*), ABISELECT(48,28), "S15476C3");
    /*is_ambiguous_... S15476C3::S15476C9 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S15476C9*), ABISELECT(64,36), "S15476C3");
    /*is_ambiguous_... S15476C3::S15476C9 */ AMB_check_base_class_offset(lv, (S15476C9*), ABISELECT(48,28), "S15476C3");
    check_field_offset(lv, s15476c3f0, ABISELECT(104,64), "S15476C3.s15476c3f0");
    test_class_info(&lv, &cd_S15476C3);
    dp->~S15476C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15476C3(Test_S15476C3, "S15476C3", ABISELECT(336,200));

#else // __cplusplus

extern void _ZN8S15476C3C1Ev();
extern void _ZN8S15476C3D1Ev();
Name_Map name_map_S15476C3[] = {
  NSPAIR(_ZN8S15476C3C1Ev),
  NSPAIR(_ZN8S15476C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S15476C5;
extern VTBL_ENTRY _ZTI8S15476C5[];
extern  VTBL_ENTRY _ZTV8S15476C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C5[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S15476C5;
extern VTBL_ENTRY _ZTI8S15476C5[];
extern  VTBL_ENTRY _ZTV8S15476C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C5[];
extern Class_Descriptor cd_S15476C10;
extern VTBL_ENTRY _ZTI9S15476C10[];
extern  VTBL_ENTRY _ZTV9S15476C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S15476C10[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S15476C9;
extern VTBL_ENTRY _ZTI8S15476C9[];
extern  VTBL_ENTRY _ZTV8S15476C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C9[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S15476C5;
extern VTBL_ENTRY _ZTI8S15476C5[];
extern  VTBL_ENTRY _ZTV8S15476C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C5[];
extern Class_Descriptor cd_S15476C8;
extern VTBL_ENTRY _ZTI8S15476C8[];
extern  VTBL_ENTRY _ZTV8S15476C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C8[];
extern Class_Descriptor cd_S15476C5;
extern VTBL_ENTRY _ZTI8S15476C5[];
extern  VTBL_ENTRY _ZTV8S15476C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C5[];
extern Class_Descriptor cd_S15476C6;
extern VTBL_ENTRY _ZTI8S15476C6[];
extern  VTBL_ENTRY _ZTV8S15476C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C6[];
extern Class_Descriptor cd_S15476C10;
extern VTBL_ENTRY _ZTI9S15476C10[];
extern  VTBL_ENTRY _ZTV9S15476C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S15476C10[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S15476C9;
extern VTBL_ENTRY _ZTI8S15476C9[];
extern  VTBL_ENTRY _ZTV8S15476C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C9[];
static Base_Class bases_S15476C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    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
  1, 1},
  {&cd_S15476C5,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S15476C5,    ABISELECT(288,172), //bcp->offset
    49, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S15476C10,    ABISELECT(224,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(240,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S15476C9,    ABISELECT(224,136), //bcp->offset
    42, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19905C19,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S15476C5,    ABISELECT(176,104), //bcp->offset
    36, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S15476C8,    ABISELECT(160,96), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S15476C5,    ABISELECT(112,68), //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
    12, //immediately_derived
  0, 0},
  {&cd_S15476C6,    ABISELECT(112,68), //bcp->offset
    18, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S15476C10,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S17777C6_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
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S15476C9,    ABISELECT(48,28), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S15476C3[];
extern void ABISELECT(_ZTv0_n24_N8S15476C3D1Ev,_ZTv0_n12_N8S15476C3D1Ev)();
extern void _ZN8S15476C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C3D0Ev,_ZTv0_n12_N8S15476C3D0Ev)();
extern void _ZN8S15476C3D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C3D1Ev,_ZTv0_n12_N8S15476C3D1Ev)();
extern void ABISELECT(_ZThn48_N8S15476C3D1Ev,_ZThn28_N8S15476C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C3D0Ev,_ZTv0_n12_N8S15476C3D0Ev)();
extern void ABISELECT(_ZThn48_N8S15476C3D0Ev,_ZThn28_N8S15476C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C3D1Ev,_ZTv0_n12_N8S15476C3D1Ev)();
extern void ABISELECT(_ZThn112_N8S15476C3D1Ev,_ZThn68_N8S15476C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C3D0Ev,_ZTv0_n12_N8S15476C3D0Ev)();
extern void ABISELECT(_ZThn112_N8S15476C3D0Ev,_ZThn68_N8S15476C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S15476C3D1Ev,_ZTv0_n24_N8S15476C3D1Ev)();
extern void ABISELECT(_ZThn160_N8S15476C3D1Ev,_ZThn96_N8S15476C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S15476C3D0Ev,_ZTv0_n24_N8S15476C3D0Ev)();
extern void ABISELECT(_ZThn160_N8S15476C3D0Ev,_ZThn96_N8S15476C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C3D1Ev,_ZTv0_n12_N8S15476C3D1Ev)();
extern void ABISELECT(_ZThn176_N8S15476C3D1Ev,_ZThn104_N8S15476C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C3D0Ev,_ZTv0_n12_N8S15476C3D0Ev)();
extern void ABISELECT(_ZThn176_N8S15476C3D0Ev,_ZThn104_N8S15476C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C3D1Ev,_ZTv0_n12_N8S15476C3D1Ev)();
extern void ABISELECT(_ZThn224_N8S15476C3D1Ev,_ZThn136_N8S15476C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C3D0Ev,_ZTv0_n12_N8S15476C3D0Ev)();
extern void ABISELECT(_ZThn224_N8S15476C3D0Ev,_ZThn136_N8S15476C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C3D1Ev,_ZTv0_n12_N8S15476C3D1Ev)();
extern void ABISELECT(_ZThn288_N8S15476C3D1Ev,_ZThn172_N8S15476C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C3D0Ev,_ZTv0_n12_N8S15476C3D0Ev)();
extern void ABISELECT(_ZThn288_N8S15476C3D0Ev,_ZThn172_N8S15476C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S15476C3[] = {
  ABISELECT(288,172),
  ABISELECT(224,136),
  ABISELECT(160,96),
  0,
  ABISELECT(112,68),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C3D1Ev,_ZTv0_n12_N8S15476C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C3D0Ev,_ZTv0_n12_N8S15476C3D0Ev),
  ABISELECT(240,144),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S15476C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C3D1Ev,_ZTv0_n12_N8S15476C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C3D0Ev,_ZTv0_n12_N8S15476C3D0Ev),
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S15476C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C3D1Ev,_ZTv0_n12_N8S15476C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C3D0Ev,_ZTv0_n12_N8S15476C3D0Ev),
  ABISELECT(-160,-96),
  ABISELECT(128,76),
  ABISELECT(-160,-96),
  ABISELECT(64,40),
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI8S15476C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S15476C3D1Ev,_ZTv0_n24_N8S15476C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S15476C3D0Ev,_ZTv0_n24_N8S15476C3D0Ev),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI8S15476C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C3D1Ev,_ZTv0_n12_N8S15476C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C3D0Ev,_ZTv0_n12_N8S15476C3D0Ev),
  ABISELECT(64,36),
  ABISELECT(-224,-136),
  ABISELECT(-224,-136),
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI8S15476C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C3D1Ev,_ZTv0_n12_N8S15476C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C3D0Ev,_ZTv0_n12_N8S15476C3D0Ev),
  ABISELECT(-288,-172),
  ABISELECT(-288,-172),
  ABISELECT(-288,-172),
  (VTBL_ENTRY)&(_ZTI8S15476C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C3D1Ev,_ZTv0_n12_N8S15476C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C3D0Ev,_ZTv0_n12_N8S15476C3D0Ev),
};
extern VTBL_ENTRY _ZTV8S15476C3[];
extern void ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev)();
extern void _ZN8S15476C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev)();
extern void _ZN8S15476C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__A__8S15476C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev)();
extern void _ZN8S15476C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev)();
extern void _ZN8S15476C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C9__A__8S15476C3[] = {
  ABISELECT(240,144),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev)();
extern void _ZN9S15476C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev)();
extern void _ZN9S15476C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S15476C108S15476C9__A1__8S15476C3[] = {
  ABISELECT(240,144),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S15476C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__9S15476C108S15476C9__A1__8S15476C3[] = {
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI9S15476C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev)();
extern void ABISELECT(_ZThn240_N9S15476C10D1Ev,_ZThn144_N9S15476C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev)();
extern void ABISELECT(_ZThn240_N9S15476C10D0Ev,_ZThn144_N9S15476C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__9S15476C108S15476C9__A1__8S15476C3[] = {
  ABISELECT(-288,-172),
  ABISELECT(-240,-144),
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI9S15476C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S15476C9__A__8S15476C3[] = {
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S15476C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev)();
extern void ABISELECT(_ZThn240_N8S15476C9D1Ev,_ZThn144_N8S15476C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev)();
extern void ABISELECT(_ZThn240_N8S15476C9D0Ev,_ZThn144_N8S15476C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__8S15476C9__A__8S15476C3[] = {
  ABISELECT(-288,-172),
  ABISELECT(-240,-144),
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI8S15476C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev)();
extern void _ZN8S15476C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev)();
extern void _ZN8S15476C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C6__8S15476C3[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev)();
extern void _ZN8S15476C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev)();
extern void _ZN8S15476C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C58S15476C6__A3__8S15476C3[] = {
  ABISELECT(-112,-68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S15476C58S15476C6__A3__8S15476C3[] = {
  ABISELECT(112,68),
  ABISELECT(112,68),
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S15476C6D1Ev,_ZTv0_n24_N8S15476C6D1Ev)();
extern void ABISELECT(_ZThn48_N8S15476C6D1Ev,_ZThn28_N8S15476C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S15476C6D0Ev,_ZTv0_n24_N8S15476C6D0Ev)();
extern void ABISELECT(_ZThn48_N8S15476C6D0Ev,_ZThn28_N8S15476C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C8__8S15476C6__8S15476C3[] = {
  ABISELECT(-48,-28),
  ABISELECT(128,76),
  ABISELECT(-160,-96),
  ABISELECT(64,40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S15476C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S15476C6D1Ev,_ZTv0_n24_N8S15476C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S15476C6D0Ev,_ZTv0_n24_N8S15476C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev)();
extern void ABISELECT(_ZThn112_N8S15476C6D1Ev,_ZThn68_N8S15476C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev)();
extern void ABISELECT(_ZThn112_N8S15476C6D0Ev,_ZThn68_N8S15476C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C9__8S15476C6__8S15476C3[] = {
  ABISELECT(64,36),
  ABISELECT(-224,-136),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S15476C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S15476C6__8S15476C3[] = {
  ABISELECT(112,68),
  ABISELECT(112,68),
  (VTBL_ENTRY)&(_ZTI8S15476C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev)();
extern void ABISELECT(_ZThn176_N8S15476C6D1Ev,_ZThn104_N8S15476C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev)();
extern void ABISELECT(_ZThn176_N8S15476C6D0Ev,_ZThn104_N8S15476C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__8S15476C6__8S15476C3[] = {
  ABISELECT(-288,-172),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI8S15476C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S15476C6D1Ev,_ZThn36_N8S15476C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S15476C6D0Ev,_ZThn36_N8S15476C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C58S15476C8__A1__8S15476C6__8S15476C3[] = {
  ABISELECT(-176,-104),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S15476C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev),
};
extern void _ZN8S15476C8D1Ev();
extern void _ZN8S15476C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S15476C8__8S15476C3[] = {
  ABISELECT(128,76),
  ABISELECT(-160,-96),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C8[0]),
  (VTBL_ENTRY)&_ZN8S15476C8D1Ev,
  (VTBL_ENTRY)&_ZN8S15476C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev)();
extern void _ZN8S15476C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev)();
extern void _ZN8S15476C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C58S15476C8__A2__8S15476C3[] = {
  ABISELECT(-176,-104),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S15476C58S15476C8__A2__8S15476C3[] = {
  ABISELECT(176,104),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S15476C8D1Ev,_ZThn40_N8S15476C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S15476C8D0Ev,_ZThn40_N8S15476C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C9__8S15476C8__8S15476C3[] = {
  ABISELECT(64,36),
  ABISELECT(-224,-136),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S15476C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S15476C8__8S15476C3[] = {
  ABISELECT(160,96),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI8S15476C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev)();
extern void ABISELECT(_ZThn128_N8S15476C8D1Ev,_ZThn76_N8S15476C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev)();
extern void ABISELECT(_ZThn128_N8S15476C8D0Ev,_ZThn76_N8S15476C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__8S15476C8__8S15476C3[] = {
  ABISELECT(-288,-172),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S15476C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S15476C8D1Ev,_ZThn8_N8S15476C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S15476C8D0Ev,_ZThn8_N8S15476C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__A__8S15476C8__8S15476C3[] = {
  ABISELECT(-176,-104),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S15476C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev)();
extern void _ZN8S15476C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev)();
extern void _ZN8S15476C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C9__8S15476C3[] = {
  ABISELECT(64,36),
  ABISELECT(-224,-136),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev)();
extern void _ZN9S15476C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev)();
extern void _ZN9S15476C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S15476C108S15476C9__8S15476C3[] = {
  ABISELECT(64,36),
  ABISELECT(-224,-136),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S15476C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__9S15476C108S15476C9__8S15476C3[] = {
  ABISELECT(224,136),
  ABISELECT(224,136),
  (VTBL_ENTRY)&(_ZTI9S15476C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev)();
extern void ABISELECT(_ZThn64_N9S15476C10D1Ev,_ZThn36_N9S15476C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev)();
extern void ABISELECT(_ZThn64_N9S15476C10D0Ev,_ZThn36_N9S15476C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__9S15476C108S15476C9__8S15476C3[] = {
  ABISELECT(-288,-172),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S15476C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S15476C9__8S15476C3[] = {
  ABISELECT(224,136),
  ABISELECT(224,136),
  (VTBL_ENTRY)&(_ZTI8S15476C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev)();
extern void ABISELECT(_ZThn64_N8S15476C9D1Ev,_ZThn36_N8S15476C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev)();
extern void ABISELECT(_ZThn64_N8S15476C9D0Ev,_ZThn36_N8S15476C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__8S15476C9__8S15476C3[] = {
  ABISELECT(-288,-172),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S15476C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev)();
extern void _ZN8S15476C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev)();
extern void _ZN8S15476C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__A1__8S15476C3[] = {
  ABISELECT(-288,-172),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S15476C5__A1__8S15476C3[] = {
  ABISELECT(288,172),
  ABISELECT(288,172),
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev),
};
static  VTT_ENTRY vtt_S15476C3[] = {
  {&(_ZTV8S15476C3[9]),  9,55},
  {&(_tg__ZTV8S15476C5__A__8S15476C3[4]),  4,6},
  {&(_tg__ZTV8S15476C5__A__8S15476C3[4]),  4,6},
  {&(_tg__ZTV8S15476C9__A__8S15476C3[5]),  5,7},
  {&(_tg__ZTV9S15476C108S15476C9__A1__8S15476C3[5]),  5,7},
  {&(_tg__ZTV9S19905C19__9S15476C108S15476C9__A1__8S15476C3[3]),  3,5},
  {&(_tg__ZTV8S15476C5__9S15476C108S15476C9__A1__8S15476C3[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S15476C9__A__8S15476C3[3]),  3,5},
  {&(_tg__ZTV8S15476C5__8S15476C9__A__8S15476C3[4]),  4,6},
  {&(_ZTV8S15476C3[9]),  9,55},
  {&(_ZTV8S15476C3[26]),  26,55},
  {&(_ZTV8S15476C3[34]),  34,55},
  {&(_ZTV8S15476C3[47]),  47,55},
  {&(_ZTV8S15476C3[53]),  53,55},
  {&(_ZTV8S15476C3[40]),  40,55},
  {&(_ZTV8S15476C3[16]),  16,55},
  {&(_tg__ZTV8S15476C6__8S15476C3[8]),  8,10},
  {&(_tg__ZTV8S15476C58S15476C6__A3__8S15476C3[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S15476C58S15476C6__A3__8S15476C3[3]),  3,5},
  {&(_tg__ZTV8S15476C8__8S15476C6__8S15476C3[6]),  6,8},
  {&(_tg__ZTV8S15476C9__8S15476C6__8S15476C3[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S15476C6__8S15476C3[3]),  3,5},
  {&(_tg__ZTV8S15476C5__8S15476C6__8S15476C3[4]),  4,6},
  {&(_tg__ZTV8S15476C58S15476C8__A1__8S15476C6__8S15476C3[4]),  4,6},
  {&(_tg__ZTV8S15476C8__8S15476C3[5]),  5,7},
  {&(_tg__ZTV8S15476C58S15476C8__A2__8S15476C3[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S15476C58S15476C8__A2__8S15476C3[3]),  3,5},
  {&(_tg__ZTV8S15476C9__8S15476C8__8S15476C3[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S15476C8__8S15476C3[3]),  3,5},
  {&(_tg__ZTV8S15476C5__8S15476C8__8S15476C3[4]),  4,6},
  {&(_tg__ZTV8S15476C5__A__8S15476C8__8S15476C3[4]),  4,6},
  {&(_tg__ZTV8S15476C9__8S15476C3[5]),  5,7},
  {&(_tg__ZTV9S15476C108S15476C9__8S15476C3[5]),  5,7},
  {&(_tg__ZTV9S19905C19__9S15476C108S15476C9__8S15476C3[3]),  3,5},
  {&(_tg__ZTV8S15476C5__9S15476C108S15476C9__8S15476C3[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S15476C9__8S15476C3[3]),  3,5},
  {&(_tg__ZTV8S15476C5__8S15476C9__8S15476C3[4]),  4,6},
  {&(_tg__ZTV8S15476C5__A1__8S15476C3[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S15476C5__A1__8S15476C3[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S15476C3[];
extern  VTBL_ENTRY _ZTV8S15476C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C3[];
static VTBL_ENTRY alt_thunk_names103[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S15476C8D0Ev,_ZThn8_N8S15476C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S15476C8D0Ev,_ZThn76_N8S15476C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S15476C8D0Ev,_ZThn40_N8S15476C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S15476C8D1Ev,_ZThn8_N8S15476C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S15476C8D1Ev,_ZThn76_N8S15476C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S15476C8D1Ev,_ZThn40_N8S15476C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S15476C6D0Ev,_ZTv0_n24_N8S15476C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S15476C6D0Ev,_ZThn28_N8S15476C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S15476C6D1Ev,_ZTv0_n24_N8S15476C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S15476C6D1Ev,_ZThn28_N8S15476C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S15476C6D0Ev,_ZThn36_N8S15476C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S15476C6D0Ev,_ZThn104_N8S15476C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S15476C6D0Ev,_ZThn68_N8S15476C6D0Ev),
  (VTBL_ENTRY)_ZN8S15476C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S15476C6D1Ev,_ZThn36_N8S15476C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S15476C6D1Ev,_ZThn104_N8S15476C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S15476C6D1Ev,_ZThn68_N8S15476C6D1Ev),
  (VTBL_ENTRY)_ZN8S15476C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S15476C10D0Ev,_ZThn36_N9S15476C10D0Ev),
  (VTBL_ENTRY)_ZN9S15476C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S15476C10D0Ev,_ZThn144_N9S15476C10D0Ev),
  (VTBL_ENTRY)_ZN9S15476C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S15476C10D1Ev,_ZThn36_N9S15476C10D1Ev),
  (VTBL_ENTRY)_ZN9S15476C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S15476C10D1Ev,_ZThn144_N9S15476C10D1Ev),
  (VTBL_ENTRY)_ZN9S15476C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S15476C9D0Ev,_ZThn36_N8S15476C9D0Ev),
  (VTBL_ENTRY)_ZN8S15476C9D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S15476C9D0Ev,_ZThn144_N8S15476C9D0Ev),
  (VTBL_ENTRY)_ZN8S15476C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S15476C9D1Ev,_ZThn36_N8S15476C9D1Ev),
  (VTBL_ENTRY)_ZN8S15476C9D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S15476C9D1Ev,_ZThn144_N8S15476C9D1Ev),
  (VTBL_ENTRY)_ZN8S15476C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S15476C5D0Ev,
  (VTBL_ENTRY)_ZN8S15476C5D0Ev,
  (VTBL_ENTRY)_ZN8S15476C5D0Ev,
  (VTBL_ENTRY)_ZN8S15476C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S15476C5D1Ev,
  (VTBL_ENTRY)_ZN8S15476C5D1Ev,
  (VTBL_ENTRY)_ZN8S15476C5D1Ev,
  (VTBL_ENTRY)_ZN8S15476C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S15476C3D0Ev,_ZTv0_n24_N8S15476C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S15476C3D0Ev,_ZThn96_N8S15476C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S15476C3D1Ev,_ZTv0_n24_N8S15476C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S15476C3D1Ev,_ZThn96_N8S15476C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C3D0Ev,_ZTv0_n12_N8S15476C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S15476C3D0Ev,_ZThn172_N8S15476C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S15476C3D0Ev,_ZThn136_N8S15476C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S15476C3D0Ev,_ZThn104_N8S15476C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S15476C3D0Ev,_ZThn68_N8S15476C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S15476C3D0Ev,_ZThn28_N8S15476C3D0Ev),
  (VTBL_ENTRY)_ZN8S15476C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C3D1Ev,_ZTv0_n12_N8S15476C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S15476C3D1Ev,_ZThn172_N8S15476C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S15476C3D1Ev,_ZThn136_N8S15476C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S15476C3D1Ev,_ZThn104_N8S15476C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S15476C3D1Ev,_ZThn68_N8S15476C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S15476C3D1Ev,_ZThn28_N8S15476C3D1Ev),
  (VTBL_ENTRY)_ZN8S15476C3D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S15476C3 = {  "S15476C3", // class name
  bases_S15476C3, 16,
  &(vtc_S15476C3[0]), // expected_vtbl_contents
  &(vtt_S15476C3[0]), // expected_vtt_contents
  ABISELECT(336,200), // object size
  NSPAIRA(_ZTI8S15476C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S15476C3),55, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S15476C3),39, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names103,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15476C2  : S15476C3 {
  void *s15476c2f0;
  ~S15476C2(); // tgen
  S15476C2(); // tgen
};
//SIG(-1 S15476C2) C1{ BC2{ VBC3{ vd m} BC4{ VBC3 FD Fc Fs[4]} VBC5{ VBC6{ m} VBC7{ VBC8{ VBC3 BC9{ VBC3 VBC4 vd Fi} BC10{ m Fp} vd Fs FL Fp FL} BC10 BC3 BC4 vd Fi} BC4 vd Fs} BC8 Fp} Fp}


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

static void Test_S15476C2()
{
  extern Class_Descriptor cd_S15476C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(23,52)];
    init_test(&cd_S15476C2, buf);
    S15476C2 *dp, &lv = *(dp=new (buf) S15476C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,204), "sizeof(S15476C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S15476C2)");
    /*is_ambiguous_... S15476C3::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S15476C3*), 0, "S15476C2");
    /*is_ambiguous_... S15476C3::S15476C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S15476C5*)(S15476C3*), 0, "S15476C2");
    /*is_ambiguous_... S15476C2::S15476C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S15476C9*), 0, "S15476C2");
    /*is_ambiguous_... S15476C2::S15476C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S15476C10*)(S15476C9*), 0, "S15476C2");
    /*is_ambiguous_... S15476C2::S15476C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S15476C5*), 0, "S15476C2");
    /*is_ambiguous_... S15476C8::S15476C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S15476C5*)(S15476C8*), 0, "S15476C2");
    /*is_ambiguous_... S15476C6::S15476C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S15476C5*)(S15476C6*), 0, "S15476C2");
    /*is_ambiguous_... S15476C3::S15476C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S15476C9*)(S15476C3*), 0, "S15476C2");
    /*is_ambiguous_... S15476C3::S15476C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S15476C10*)(S15476C9*)(S15476C3*), 0, "S15476C2");
    /*is_ambiguous_... S15476C3::S15476C5 */ AMB_check_base_class_offset(lv, (S15476C5*)(S15476C3*), 0, "S15476C2");
    check_base_class_offset(lv, (S5266C29*)(S15476C6*), 0, "S15476C2");
    /*is_ambiguous_... S15476C2::S15476C9 */ AMB_check_base_class_offset(lv, (S15476C5*)(S15476C10*)(S15476C9*), ABISELECT(304,176), "S15476C2");
    /*is_ambiguous_... S15476C3::S15476C9 */ AMB_check_base_class_offset(lv, (S15476C5*)(S15476C10*)(S15476C9*)(S15476C3*), ABISELECT(304,176), "S15476C2");
    /*is_ambiguous_... S15476C2::S15476C9 */ AMB_check_base_class_offset(lv, (S15476C10*)(S15476C9*), ABISELECT(240,140), "S15476C2");
    /*is_ambiguous_... S15476C2::S15476C9 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S15476C9*), ABISELECT(256,148), "S15476C2");
    check_base_class_offset(lv, (S15476C9*)(S15476C8*), ABISELECT(240,140), "S15476C2");
    /*is_ambiguous_... S15476C8::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S15476C8*), ABISELECT(184,104), "S15476C2");
    /*is_ambiguous_... S15476C8::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S15476C8*), ABISELECT(176,100), "S15476C2");
    /*is_ambiguous_... S15476C8::S15476C5 */ AMB_check_base_class_offset(lv, (S15476C5*)(S15476C8*), ABISELECT(192,108), "S15476C2");
    check_base_class_offset(lv, (S15476C8*)(S15476C6*), ABISELECT(176,100), "S15476C2");
    /*is_ambiguous_... S15476C6::S15476C5 */ AMB_check_base_class_offset(lv, (S15476C5*)(S15476C6*), ABISELECT(128,72), "S15476C2");
    check_base_class_offset(lv, (S15476C6*)(S15476C3*), ABISELECT(128,72), "S15476C2");
    /*is_ambiguous_... S15476C3::S15476C9 */ AMB_check_base_class_offset(lv, (S15476C10*)(S15476C9*)(S15476C3*), ABISELECT(48,28), "S15476C2");
    /*is_ambiguous_... S15476C3::S15476C9 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S15476C9*)(S15476C3*), ABISELECT(64,36), "S15476C2");
    /*is_ambiguous_... S15476C3::S15476C9 */ AMB_check_base_class_offset(lv, (S15476C9*)(S15476C3*), ABISELECT(48,28), "S15476C2");
    check_base_class_offset(lv, (S15476C3*), 0, "S15476C2");
    check_field_offset(lv, s15476c2f0, ABISELECT(112,68), "S15476C2.s15476c2f0");
    test_class_info(&lv, &cd_S15476C2);
    dp->~S15476C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15476C2(Test_S15476C2, "S15476C2", ABISELECT(352,204));

#else // __cplusplus

extern void _ZN8S15476C2C1Ev();
extern void _ZN8S15476C2D1Ev();
Name_Map name_map_S15476C2[] = {
  NSPAIR(_ZN8S15476C2C1Ev),
  NSPAIR(_ZN8S15476C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S15476C5;
extern VTBL_ENTRY _ZTI8S15476C5[];
extern  VTBL_ENTRY _ZTV8S15476C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C5[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S15476C5;
extern VTBL_ENTRY _ZTI8S15476C5[];
extern  VTBL_ENTRY _ZTV8S15476C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C5[];
extern Class_Descriptor cd_S15476C10;
extern VTBL_ENTRY _ZTI9S15476C10[];
extern  VTBL_ENTRY _ZTV9S15476C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S15476C10[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S15476C9;
extern VTBL_ENTRY _ZTI8S15476C9[];
extern  VTBL_ENTRY _ZTV8S15476C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C9[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S15476C5;
extern VTBL_ENTRY _ZTI8S15476C5[];
extern  VTBL_ENTRY _ZTV8S15476C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C5[];
extern Class_Descriptor cd_S15476C8;
extern VTBL_ENTRY _ZTI8S15476C8[];
extern  VTBL_ENTRY _ZTV8S15476C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C8[];
extern Class_Descriptor cd_S15476C5;
extern VTBL_ENTRY _ZTI8S15476C5[];
extern  VTBL_ENTRY _ZTV8S15476C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C5[];
extern Class_Descriptor cd_S15476C6;
extern VTBL_ENTRY _ZTI8S15476C6[];
extern  VTBL_ENTRY _ZTV8S15476C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C6[];
extern Class_Descriptor cd_S15476C10;
extern VTBL_ENTRY _ZTI9S15476C10[];
extern  VTBL_ENTRY _ZTV9S15476C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S15476C10[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S15476C9;
extern VTBL_ENTRY _ZTI8S15476C9[];
extern  VTBL_ENTRY _ZTV8S15476C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C9[];
extern Class_Descriptor cd_S15476C3;
extern VTBL_ENTRY _ZTI8S15476C3[];
extern  VTBL_ENTRY _ZTV8S15476C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C3[];
static Base_Class bases_S15476C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S15476C5,    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
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S15476C5,    ABISELECT(304,176), //bcp->offset
    49, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S15476C10,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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_S17777C6_nt,    ABISELECT(256,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
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S15476C9,    ABISELECT(240,140), //bcp->offset
    42, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(184,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
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19905C19,    ABISELECT(176,100), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S15476C5,    ABISELECT(192,108), //bcp->offset
    36, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S15476C8,    ABISELECT(176,100), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S15476C5,    ABISELECT(128,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    12, //immediately_derived
  0, 0},
  {&cd_S15476C6,    ABISELECT(128,72), //bcp->offset
    18, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S15476C10,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S17777C6_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
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S15476C9,    ABISELECT(48,28), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S15476C3,    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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S15476C2[];
extern void ABISELECT(_ZTv0_n24_N8S15476C2D1Ev,_ZTv0_n12_N8S15476C2D1Ev)();
extern void _ZN8S15476C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C2D0Ev,_ZTv0_n12_N8S15476C2D0Ev)();
extern void _ZN8S15476C2D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C2D1Ev,_ZTv0_n12_N8S15476C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S15476C2D1Ev,_ZThn28_N8S15476C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C2D0Ev,_ZTv0_n12_N8S15476C2D0Ev)();
extern void ABISELECT(_ZThn48_N8S15476C2D0Ev,_ZThn28_N8S15476C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C2D1Ev,_ZTv0_n12_N8S15476C2D1Ev)();
extern void ABISELECT(_ZThn128_N8S15476C2D1Ev,_ZThn72_N8S15476C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C2D0Ev,_ZTv0_n12_N8S15476C2D0Ev)();
extern void ABISELECT(_ZThn128_N8S15476C2D0Ev,_ZThn72_N8S15476C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S15476C2D1Ev,_ZTv0_n24_N8S15476C2D1Ev)();
extern void ABISELECT(_ZThn176_N8S15476C2D1Ev,_ZThn100_N8S15476C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S15476C2D0Ev,_ZTv0_n24_N8S15476C2D0Ev)();
extern void ABISELECT(_ZThn176_N8S15476C2D0Ev,_ZThn100_N8S15476C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C2D1Ev,_ZTv0_n12_N8S15476C2D1Ev)();
extern void ABISELECT(_ZThn192_N8S15476C2D1Ev,_ZThn108_N8S15476C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C2D0Ev,_ZTv0_n12_N8S15476C2D0Ev)();
extern void ABISELECT(_ZThn192_N8S15476C2D0Ev,_ZThn108_N8S15476C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C2D1Ev,_ZTv0_n12_N8S15476C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S15476C2D1Ev,_ZThn140_N8S15476C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C2D0Ev,_ZTv0_n12_N8S15476C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S15476C2D0Ev,_ZThn140_N8S15476C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C2D1Ev,_ZTv0_n12_N8S15476C2D1Ev)();
extern void ABISELECT(_ZThn304_N8S15476C2D1Ev,_ZThn176_N8S15476C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C2D0Ev,_ZTv0_n12_N8S15476C2D0Ev)();
extern void ABISELECT(_ZThn304_N8S15476C2D0Ev,_ZThn176_N8S15476C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S15476C2[] = {
  ABISELECT(304,176),
  ABISELECT(240,140),
  ABISELECT(176,100),
  0,
  ABISELECT(128,72),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C2D1Ev,_ZTv0_n12_N8S15476C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C2D0Ev,_ZTv0_n12_N8S15476C2D0Ev),
  ABISELECT(256,148),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S15476C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C2D1Ev,_ZTv0_n12_N8S15476C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C2D0Ev,_ZTv0_n12_N8S15476C2D0Ev),
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S15476C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C2D1Ev,_ZTv0_n12_N8S15476C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C2D0Ev,_ZTv0_n12_N8S15476C2D0Ev),
  ABISELECT(-176,-100),
  ABISELECT(128,76),
  ABISELECT(-176,-100),
  ABISELECT(64,40),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S15476C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S15476C2D1Ev,_ZTv0_n24_N8S15476C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S15476C2D0Ev,_ZTv0_n24_N8S15476C2D0Ev),
  ABISELECT(-192,-108),
  ABISELECT(-192,-108),
  ABISELECT(-192,-108),
  (VTBL_ENTRY)&(_ZTI8S15476C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C2D1Ev,_ZTv0_n12_N8S15476C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C2D0Ev,_ZTv0_n12_N8S15476C2D0Ev),
  ABISELECT(64,36),
  ABISELECT(-240,-140),
  ABISELECT(-240,-140),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI8S15476C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C2D1Ev,_ZTv0_n12_N8S15476C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C2D0Ev,_ZTv0_n12_N8S15476C2D0Ev),
  ABISELECT(-304,-176),
  ABISELECT(-304,-176),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI8S15476C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C2D1Ev,_ZTv0_n12_N8S15476C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C2D0Ev,_ZTv0_n12_N8S15476C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S15476C2[];
extern void ABISELECT(_ZTv0_n24_N8S15476C3D1Ev,_ZTv0_n12_N8S15476C3D1Ev)();
extern void _ZN8S15476C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C3D0Ev,_ZTv0_n12_N8S15476C3D0Ev)();
extern void _ZN8S15476C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C3__8S15476C2[] = {
  ABISELECT(304,176),
  ABISELECT(240,140),
  ABISELECT(176,100),
  0,
  ABISELECT(128,72),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C3D1Ev,_ZTv0_n12_N8S15476C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C3D0Ev,_ZTv0_n12_N8S15476C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev)();
extern void _ZN8S15476C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev)();
extern void _ZN8S15476C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C58S15476C3__8S15476C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev)();
extern void _ZN8S15476C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev)();
extern void _ZN8S15476C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C98S15476C3__A1__8S15476C2[] = {
  ABISELECT(256,148),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev)();
extern void _ZN9S15476C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev)();
extern void _ZN9S15476C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S15476C108S15476C98S15476C3__A1__8S15476C2[] = {
  ABISELECT(256,148),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S15476C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__9S15476C108S15476C98S15476C3__A1__8S15476C2[] = {
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI9S15476C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev)();
extern void ABISELECT(_ZThn256_N9S15476C10D1Ev,_ZThn148_N9S15476C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev)();
extern void ABISELECT(_ZThn256_N9S15476C10D0Ev,_ZThn148_N9S15476C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__9S15476C108S15476C98S15476C3__A1__8S15476C2[] = {
  ABISELECT(-304,-176),
  ABISELECT(-256,-148),
  ABISELECT(-256,-148),
  (VTBL_ENTRY)&(_ZTI9S15476C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S15476C98S15476C3__A1__8S15476C2[] = {
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S15476C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev)();
extern void ABISELECT(_ZThn256_N8S15476C9D1Ev,_ZThn148_N8S15476C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev)();
extern void ABISELECT(_ZThn256_N8S15476C9D0Ev,_ZThn148_N8S15476C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__8S15476C98S15476C3__A1__8S15476C2[] = {
  ABISELECT(-304,-176),
  ABISELECT(-256,-148),
  ABISELECT(-256,-148),
  (VTBL_ENTRY)&(_ZTI8S15476C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C3D1Ev,_ZTv0_n12_N8S15476C3D1Ev)();
extern void ABISELECT(_ZThn128_N8S15476C3D1Ev,_ZThn72_N8S15476C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C3D0Ev,_ZTv0_n12_N8S15476C3D0Ev)();
extern void ABISELECT(_ZThn128_N8S15476C3D0Ev,_ZThn72_N8S15476C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C6__8S15476C3__8S15476C2[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S15476C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C3D1Ev,_ZTv0_n12_N8S15476C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C3D0Ev,_ZTv0_n12_N8S15476C3D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S15476C3D1Ev,_ZTv0_n24_N8S15476C3D1Ev)();
extern void ABISELECT(_ZThn176_N8S15476C3D1Ev,_ZThn100_N8S15476C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S15476C3D0Ev,_ZTv0_n24_N8S15476C3D0Ev)();
extern void ABISELECT(_ZThn176_N8S15476C3D0Ev,_ZThn100_N8S15476C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C8__8S15476C3__8S15476C2[] = {
  ABISELECT(-176,-100),
  ABISELECT(128,76),
  ABISELECT(-176,-100),
  ABISELECT(64,40),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S15476C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S15476C3D1Ev,_ZTv0_n24_N8S15476C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S15476C3D0Ev,_ZTv0_n24_N8S15476C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C3D1Ev,_ZTv0_n12_N8S15476C3D1Ev)();
extern void ABISELECT(_ZThn240_N8S15476C3D1Ev,_ZThn140_N8S15476C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C3D0Ev,_ZTv0_n12_N8S15476C3D0Ev)();
extern void ABISELECT(_ZThn240_N8S15476C3D0Ev,_ZThn140_N8S15476C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C9__8S15476C3__8S15476C2[] = {
  ABISELECT(64,36),
  ABISELECT(-240,-140),
  ABISELECT(-240,-140),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI8S15476C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C3D1Ev,_ZTv0_n12_N8S15476C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C3D0Ev,_ZTv0_n12_N8S15476C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C3D1Ev,_ZTv0_n12_N8S15476C3D1Ev)();
extern void ABISELECT(_ZThn304_N8S15476C3D1Ev,_ZThn176_N8S15476C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C3D0Ev,_ZTv0_n12_N8S15476C3D0Ev)();
extern void ABISELECT(_ZThn304_N8S15476C3D0Ev,_ZThn176_N8S15476C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__A1__8S15476C3__8S15476C2[] = {
  ABISELECT(-304,-176),
  ABISELECT(-304,-176),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI8S15476C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C3D1Ev,_ZTv0_n12_N8S15476C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C3D0Ev,_ZTv0_n12_N8S15476C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C3D1Ev,_ZTv0_n12_N8S15476C3D1Ev)();
extern void ABISELECT(_ZThn192_N8S15476C3D1Ev,_ZThn108_N8S15476C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C3D0Ev,_ZTv0_n12_N8S15476C3D0Ev)();
extern void ABISELECT(_ZThn192_N8S15476C3D0Ev,_ZThn108_N8S15476C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C58S15476C8__A2__8S15476C3__8S15476C2[] = {
  ABISELECT(-192,-108),
  ABISELECT(-192,-108),
  ABISELECT(-192,-108),
  (VTBL_ENTRY)&(_ZTI8S15476C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C3D1Ev,_ZTv0_n12_N8S15476C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C3D0Ev,_ZTv0_n12_N8S15476C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C3D1Ev,_ZTv0_n12_N8S15476C3D1Ev)();
extern void ABISELECT(_ZThn48_N8S15476C3D1Ev,_ZThn28_N8S15476C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C3D0Ev,_ZTv0_n12_N8S15476C3D0Ev)();
extern void ABISELECT(_ZThn48_N8S15476C3D0Ev,_ZThn28_N8S15476C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C9__A__8S15476C3__8S15476C2[] = {
  ABISELECT(256,148),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S15476C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C3D1Ev,_ZTv0_n12_N8S15476C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C3D0Ev,_ZTv0_n12_N8S15476C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev)();
extern void _ZN8S15476C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev)();
extern void _ZN8S15476C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C6__8S15476C2[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev)();
extern void _ZN8S15476C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev)();
extern void _ZN8S15476C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C58S15476C6__A3__8S15476C2[] = {
  ABISELECT(-128,-72),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S15476C58S15476C6__A3__8S15476C2[] = {
  ABISELECT(128,72),
  ABISELECT(128,72),
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S15476C6D1Ev,_ZTv0_n24_N8S15476C6D1Ev)();
extern void ABISELECT(_ZThn48_N8S15476C6D1Ev,_ZThn28_N8S15476C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S15476C6D0Ev,_ZTv0_n24_N8S15476C6D0Ev)();
extern void ABISELECT(_ZThn48_N8S15476C6D0Ev,_ZThn28_N8S15476C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C8__8S15476C6__8S15476C2[] = {
  ABISELECT(-48,-28),
  ABISELECT(128,76),
  ABISELECT(-176,-100),
  ABISELECT(64,40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S15476C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S15476C6D1Ev,_ZTv0_n24_N8S15476C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S15476C6D0Ev,_ZTv0_n24_N8S15476C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev)();
extern void ABISELECT(_ZThn112_N8S15476C6D1Ev,_ZThn68_N8S15476C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev)();
extern void ABISELECT(_ZThn112_N8S15476C6D0Ev,_ZThn68_N8S15476C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C9__8S15476C6__8S15476C2[] = {
  ABISELECT(64,36),
  ABISELECT(-240,-140),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S15476C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S15476C6__8S15476C2[] = {
  ABISELECT(128,72),
  ABISELECT(128,72),
  (VTBL_ENTRY)&(_ZTI8S15476C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev)();
extern void ABISELECT(_ZThn176_N8S15476C6D1Ev,_ZThn104_N8S15476C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev)();
extern void ABISELECT(_ZThn176_N8S15476C6D0Ev,_ZThn104_N8S15476C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__8S15476C6__8S15476C2[] = {
  ABISELECT(-304,-176),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI8S15476C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S15476C6D1Ev,_ZThn36_N8S15476C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S15476C6D0Ev,_ZThn36_N8S15476C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C58S15476C8__A1__8S15476C6__8S15476C2[] = {
  ABISELECT(-192,-108),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S15476C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev),
};
extern void _ZN8S15476C8D1Ev();
extern void _ZN8S15476C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S15476C8__8S15476C2[] = {
  ABISELECT(128,76),
  ABISELECT(-176,-100),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C8[0]),
  (VTBL_ENTRY)&_ZN8S15476C8D1Ev,
  (VTBL_ENTRY)&_ZN8S15476C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev)();
extern void _ZN8S15476C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev)();
extern void _ZN8S15476C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C58S15476C8__A2__8S15476C2[] = {
  ABISELECT(-192,-108),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S15476C58S15476C8__A2__8S15476C2[] = {
  ABISELECT(192,108),
  ABISELECT(192,108),
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S15476C8D1Ev,_ZThn40_N8S15476C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S15476C8D0Ev,_ZThn40_N8S15476C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C9__8S15476C8__8S15476C2[] = {
  ABISELECT(64,36),
  ABISELECT(-240,-140),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S15476C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S15476C8__8S15476C2[] = {
  ABISELECT(176,100),
  ABISELECT(176,100),
  (VTBL_ENTRY)&(_ZTI8S15476C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev)();
extern void ABISELECT(_ZThn128_N8S15476C8D1Ev,_ZThn76_N8S15476C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev)();
extern void ABISELECT(_ZThn128_N8S15476C8D0Ev,_ZThn76_N8S15476C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__8S15476C8__8S15476C2[] = {
  ABISELECT(-304,-176),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S15476C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S15476C8D1Ev,_ZThn8_N8S15476C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S15476C8D0Ev,_ZThn8_N8S15476C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__A__8S15476C8__8S15476C2[] = {
  ABISELECT(-192,-108),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S15476C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev)();
extern void _ZN8S15476C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev)();
extern void _ZN8S15476C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C9__8S15476C2[] = {
  ABISELECT(64,36),
  ABISELECT(-240,-140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev)();
extern void _ZN9S15476C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev)();
extern void _ZN9S15476C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S15476C108S15476C9__8S15476C2[] = {
  ABISELECT(64,36),
  ABISELECT(-240,-140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S15476C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__9S15476C108S15476C9__8S15476C2[] = {
  ABISELECT(240,140),
  ABISELECT(240,140),
  (VTBL_ENTRY)&(_ZTI9S15476C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev)();
extern void ABISELECT(_ZThn64_N9S15476C10D1Ev,_ZThn36_N9S15476C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev)();
extern void ABISELECT(_ZThn64_N9S15476C10D0Ev,_ZThn36_N9S15476C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__9S15476C108S15476C9__8S15476C2[] = {
  ABISELECT(-304,-176),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S15476C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S15476C9__8S15476C2[] = {
  ABISELECT(240,140),
  ABISELECT(240,140),
  (VTBL_ENTRY)&(_ZTI8S15476C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev)();
extern void ABISELECT(_ZThn64_N8S15476C9D1Ev,_ZThn36_N8S15476C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev)();
extern void ABISELECT(_ZThn64_N8S15476C9D0Ev,_ZThn36_N8S15476C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__8S15476C9__8S15476C2[] = {
  ABISELECT(-304,-176),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S15476C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev)();
extern void _ZN8S15476C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev)();
extern void _ZN8S15476C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15476C5__A1__8S15476C2[] = {
  ABISELECT(-304,-176),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S15476C5__A1__8S15476C2[] = {
  ABISELECT(304,176),
  ABISELECT(304,176),
  (VTBL_ENTRY)&(_ZTI8S15476C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev),
};
static  VTT_ENTRY vtt_S15476C2[] = {
  {&(_ZTV8S15476C2[9]),  9,55},
  {&(_tg__ZTV8S15476C3__8S15476C2[9]),  9,11},
  {&(_tg__ZTV8S15476C58S15476C3__8S15476C2[4]),  4,6},
  {&(_tg__ZTV8S15476C58S15476C3__8S15476C2[4]),  4,6},
  {&(_tg__ZTV8S15476C98S15476C3__A1__8S15476C2[5]),  5,7},
  {&(_tg__ZTV9S15476C108S15476C98S15476C3__A1__8S15476C2[5]),  5,7},
  {&(_tg__ZTV9S19905C19__9S15476C108S15476C98S15476C3__A1__8S15476C2[3]),  3,5},
  {&(_tg__ZTV8S15476C5__9S15476C108S15476C98S15476C3__A1__8S15476C2[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S15476C98S15476C3__A1__8S15476C2[3]),  3,5},
  {&(_tg__ZTV8S15476C5__8S15476C98S15476C3__A1__8S15476C2[4]),  4,6},
  {&(_tg__ZTV8S15476C3__8S15476C2[9]),  9,11},
  {&(_tg__ZTV8S15476C6__8S15476C3__8S15476C2[8]),  8,10},
  {&(_tg__ZTV8S15476C8__8S15476C3__8S15476C2[6]),  6,8},
  {&(_tg__ZTV8S15476C9__8S15476C3__8S15476C2[5]),  5,7},
  {&(_tg__ZTV8S15476C5__A1__8S15476C3__8S15476C2[4]),  4,6},
  {&(_tg__ZTV8S15476C58S15476C8__A2__8S15476C3__8S15476C2[4]),  4,6},
  {&(_tg__ZTV8S15476C9__A__8S15476C3__8S15476C2[5]),  5,7},
  {&(_ZTV8S15476C2[9]),  9,55},
  {&(_ZTV8S15476C2[26]),  26,55},
  {&(_ZTV8S15476C2[34]),  34,55},
  {&(_ZTV8S15476C2[47]),  47,55},
  {&(_ZTV8S15476C2[53]),  53,55},
  {&(_ZTV8S15476C2[40]),  40,55},
  {&(_ZTV8S15476C2[16]),  16,55},
  {&(_tg__ZTV8S15476C6__8S15476C2[8]),  8,10},
  {&(_tg__ZTV8S15476C58S15476C6__A3__8S15476C2[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S15476C58S15476C6__A3__8S15476C2[3]),  3,5},
  {&(_tg__ZTV8S15476C8__8S15476C6__8S15476C2[6]),  6,8},
  {&(_tg__ZTV8S15476C9__8S15476C6__8S15476C2[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S15476C6__8S15476C2[3]),  3,5},
  {&(_tg__ZTV8S15476C5__8S15476C6__8S15476C2[4]),  4,6},
  {&(_tg__ZTV8S15476C58S15476C8__A1__8S15476C6__8S15476C2[4]),  4,6},
  {&(_tg__ZTV8S15476C8__8S15476C2[5]),  5,7},
  {&(_tg__ZTV8S15476C58S15476C8__A2__8S15476C2[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S15476C58S15476C8__A2__8S15476C2[3]),  3,5},
  {&(_tg__ZTV8S15476C9__8S15476C8__8S15476C2[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S15476C8__8S15476C2[3]),  3,5},
  {&(_tg__ZTV8S15476C5__8S15476C8__8S15476C2[4]),  4,6},
  {&(_tg__ZTV8S15476C5__A__8S15476C8__8S15476C2[4]),  4,6},
  {&(_tg__ZTV8S15476C9__8S15476C2[5]),  5,7},
  {&(_tg__ZTV9S15476C108S15476C9__8S15476C2[5]),  5,7},
  {&(_tg__ZTV9S19905C19__9S15476C108S15476C9__8S15476C2[3]),  3,5},
  {&(_tg__ZTV8S15476C5__9S15476C108S15476C9__8S15476C2[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S15476C9__8S15476C2[3]),  3,5},
  {&(_tg__ZTV8S15476C5__8S15476C9__8S15476C2[4]),  4,6},
  {&(_tg__ZTV8S15476C5__A1__8S15476C2[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S15476C5__A1__8S15476C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S15476C2[];
extern  VTBL_ENTRY _ZTV8S15476C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15476C2[];
static VTBL_ENTRY alt_thunk_names104[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C8D0Ev,_ZTv0_n12_N8S15476C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S15476C8D0Ev,_ZThn8_N8S15476C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S15476C8D0Ev,_ZThn76_N8S15476C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S15476C8D0Ev,_ZThn40_N8S15476C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C8D1Ev,_ZTv0_n12_N8S15476C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S15476C8D1Ev,_ZThn8_N8S15476C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S15476C8D1Ev,_ZThn76_N8S15476C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S15476C8D1Ev,_ZThn40_N8S15476C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S15476C6D0Ev,_ZTv0_n24_N8S15476C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S15476C6D0Ev,_ZThn28_N8S15476C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S15476C6D1Ev,_ZTv0_n24_N8S15476C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S15476C6D1Ev,_ZThn28_N8S15476C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C6D0Ev,_ZTv0_n12_N8S15476C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S15476C6D0Ev,_ZThn36_N8S15476C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S15476C6D0Ev,_ZThn104_N8S15476C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S15476C6D0Ev,_ZThn68_N8S15476C6D0Ev),
  (VTBL_ENTRY)_ZN8S15476C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C6D1Ev,_ZTv0_n12_N8S15476C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S15476C6D1Ev,_ZThn36_N8S15476C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S15476C6D1Ev,_ZThn104_N8S15476C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S15476C6D1Ev,_ZThn68_N8S15476C6D1Ev),
  (VTBL_ENTRY)_ZN8S15476C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S15476C3D0Ev,_ZTv0_n24_N8S15476C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S15476C3D0Ev,_ZThn100_N8S15476C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S15476C3D1Ev,_ZTv0_n24_N8S15476C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S15476C3D1Ev,_ZThn100_N8S15476C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S15476C10D0Ev,_ZTv0_n12_N9S15476C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S15476C10D0Ev,_ZThn36_N9S15476C10D0Ev),
  (VTBL_ENTRY)_ZN9S15476C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S15476C10D0Ev,_ZThn148_N9S15476C10D0Ev),
  (VTBL_ENTRY)_ZN9S15476C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S15476C10D1Ev,_ZTv0_n12_N9S15476C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S15476C10D1Ev,_ZThn36_N9S15476C10D1Ev),
  (VTBL_ENTRY)_ZN9S15476C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S15476C10D1Ev,_ZThn148_N9S15476C10D1Ev),
  (VTBL_ENTRY)_ZN9S15476C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C9D0Ev,_ZTv0_n12_N8S15476C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S15476C9D0Ev,_ZThn36_N8S15476C9D0Ev),
  (VTBL_ENTRY)_ZN8S15476C9D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S15476C9D0Ev,_ZThn148_N8S15476C9D0Ev),
  (VTBL_ENTRY)_ZN8S15476C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C9D1Ev,_ZTv0_n12_N8S15476C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S15476C9D1Ev,_ZThn36_N8S15476C9D1Ev),
  (VTBL_ENTRY)_ZN8S15476C9D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S15476C9D1Ev,_ZThn148_N8S15476C9D1Ev),
  (VTBL_ENTRY)_ZN8S15476C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C5D0Ev,_ZTv0_n12_N8S15476C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S15476C5D0Ev,
  (VTBL_ENTRY)_ZN8S15476C5D0Ev,
  (VTBL_ENTRY)_ZN8S15476C5D0Ev,
  (VTBL_ENTRY)_ZN8S15476C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C5D1Ev,_ZTv0_n12_N8S15476C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S15476C5D1Ev,
  (VTBL_ENTRY)_ZN8S15476C5D1Ev,
  (VTBL_ENTRY)_ZN8S15476C5D1Ev,
  (VTBL_ENTRY)_ZN8S15476C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C3D0Ev,_ZTv0_n12_N8S15476C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S15476C3D0Ev,_ZThn28_N8S15476C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S15476C3D0Ev,_ZThn108_N8S15476C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S15476C3D0Ev,_ZThn176_N8S15476C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S15476C3D0Ev,_ZThn140_N8S15476C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S15476C3D0Ev,_ZThn72_N8S15476C3D0Ev),
  (VTBL_ENTRY)_ZN8S15476C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C3D1Ev,_ZTv0_n12_N8S15476C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S15476C3D1Ev,_ZThn28_N8S15476C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S15476C3D1Ev,_ZThn108_N8S15476C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S15476C3D1Ev,_ZThn176_N8S15476C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S15476C3D1Ev,_ZThn140_N8S15476C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S15476C3D1Ev,_ZThn72_N8S15476C3D1Ev),
  (VTBL_ENTRY)_ZN8S15476C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S15476C2D0Ev,_ZTv0_n24_N8S15476C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S15476C2D0Ev,_ZThn100_N8S15476C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S15476C2D1Ev,_ZTv0_n24_N8S15476C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S15476C2D1Ev,_ZThn100_N8S15476C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C2D0Ev,_ZTv0_n12_N8S15476C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S15476C2D0Ev,_ZThn176_N8S15476C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S15476C2D0Ev,_ZThn140_N8S15476C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S15476C2D0Ev,_ZThn108_N8S15476C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S15476C2D0Ev,_ZThn72_N8S15476C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S15476C2D0Ev,_ZThn28_N8S15476C2D0Ev),
  (VTBL_ENTRY)_ZN8S15476C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S15476C2D1Ev,_ZTv0_n12_N8S15476C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S15476C2D1Ev,_ZThn176_N8S15476C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S15476C2D1Ev,_ZThn140_N8S15476C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S15476C2D1Ev,_ZThn108_N8S15476C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S15476C2D1Ev,_ZThn72_N8S15476C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S15476C2D1Ev,_ZThn28_N8S15476C2D1Ev),
  (VTBL_ENTRY)_ZN8S15476C2D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S15476C2 = {  "S15476C2", // class name
  bases_S15476C2, 17,
  &(vtc_S15476C2[0]), // expected_vtbl_contents
  &(vtt_S15476C2[0]), // expected_vtt_contents
  ABISELECT(352,204), // object size
  NSPAIRA(_ZTI8S15476C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S15476C2),55, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S15476C2),47, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names104,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15476C1  {
  ::S15476C2 s15476c1f0;
  __tsi64 s15476c1f1:20;
  void  mf15476c1(); // _ZN8S15476C19mf15476c1Ev
};
//SIG(1 S15476C1) C1{ m FC2{ BC3{ VBC4{ vd m} BC5{ VBC4 FD Fc Fs[4]} VBC6{ VBC7{ m} VBC8{ VBC9{ VBC4 BC10{ VBC4 VBC5 vd Fi} BC11{ m Fp} vd Fs FL Fp FL} BC11 BC4 BC5 vd Fi} BC5 vd Fs} BC9 Fp} Fp} FL:20}


void  S15476C1 ::mf15476c1(){}

static void Test_S15476C1()
{
  {
    init_simple_test("S15476C1");
    static S15476C1 lv;
    check2(sizeof(lv), ABISELECT(368,208), "sizeof(S15476C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S15476C1)");
    check_field_offset(lv, s15476c1f0, 0, "S15476C1.s15476c1f0");
    set_bf_and_test(lv, s15476c1f1, ABISELECT(352,204), 0, 20, 1, "S15476C1");
    set_bf_and_test(lv, s15476c1f1, ABISELECT(352,204), 0, 20, hide_sll(1LL<<19), "S15476C1");
  }
}
static Arrange_To_Call_Me vS15476C1(Test_S15476C1, "S15476C1", ABISELECT(368,208));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3755C2  : S1679C4_nt {
  virtual void  v8(); // _ZN7S3755C22v8Ev
  virtual void  v9(); // _ZN7S3755C22v9Ev
  virtual void  v10(); // _ZN7S3755C23v10Ev
  virtual void  v11(); // _ZN7S3755C23v11Ev
  virtual void  v12(); // _ZN7S3755C23v12Ev
  virtual void  v13(); // _ZN7S3755C23v13Ev
  virtual void  v14(); // _ZN7S3755C23v14Ev
  virtual void  v15(); // _ZN7S3755C23v15Ev
  virtual void  v16(); // _ZN7S3755C23v16Ev
  virtual void  v17(); // _ZN7S3755C23v17Ev
  virtual void  v18(); // _ZN7S3755C23v18Ev
  virtual void  v19(); // _ZN7S3755C23v19Ev
  ~S3755C2(); // tgen
  S3755C2(); // tgen
};
//SIG(-1 S3755C2) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S3755C2 ::v8(){vfunc_called(this, "_ZN7S3755C22v8Ev");}
void  S3755C2 ::v9(){vfunc_called(this, "_ZN7S3755C22v9Ev");}
void  S3755C2 ::v10(){vfunc_called(this, "_ZN7S3755C23v10Ev");}
void  S3755C2 ::v11(){vfunc_called(this, "_ZN7S3755C23v11Ev");}
void  S3755C2 ::v12(){vfunc_called(this, "_ZN7S3755C23v12Ev");}
void  S3755C2 ::v13(){vfunc_called(this, "_ZN7S3755C23v13Ev");}
void  S3755C2 ::v14(){vfunc_called(this, "_ZN7S3755C23v14Ev");}
void  S3755C2 ::v15(){vfunc_called(this, "_ZN7S3755C23v15Ev");}
void  S3755C2 ::v16(){vfunc_called(this, "_ZN7S3755C23v16Ev");}
void  S3755C2 ::v17(){vfunc_called(this, "_ZN7S3755C23v17Ev");}
void  S3755C2 ::v18(){vfunc_called(this, "_ZN7S3755C23v18Ev");}
void  S3755C2 ::v19(){vfunc_called(this, "_ZN7S3755C23v19Ev");}
S3755C2 ::~S3755C2(){ note_dtor("S3755C2", this);} // tgen
S3755C2 ::S3755C2(){ note_ctor("S3755C2", this);} // tgen

static void Test_S3755C2()
{
  extern Class_Descriptor cd_S3755C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3755C2, buf);
    S3755C2 *dp, &lv = *(dp=new (buf) S3755C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3755C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3755C2)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S3755C2");
    test_class_info(&lv, &cd_S3755C2);
    dp->~S3755C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3755C2(Test_S3755C2, "S3755C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3755C2C1Ev();
extern void _ZN7S3755C2D1Ev();
Name_Map name_map_S3755C2[] = {
  NSPAIR(_ZN7S3755C2C1Ev),
  NSPAIR(_ZN7S3755C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S3755C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S3755C2[];
extern void _ZN7S3755C2D1Ev();
extern void _ZN7S3755C2D0Ev();
extern void _ZN7S3755C22v8Ev();
extern void _ZN7S3755C22v9Ev();
extern void _ZN7S3755C23v10Ev();
extern void _ZN7S3755C23v11Ev();
extern void _ZN7S3755C23v12Ev();
extern void _ZN7S3755C23v13Ev();
extern void _ZN7S3755C23v14Ev();
extern void _ZN7S3755C23v15Ev();
extern void _ZN7S3755C23v16Ev();
extern void _ZN7S3755C23v17Ev();
extern void _ZN7S3755C23v18Ev();
extern void _ZN7S3755C23v19Ev();
static  VTBL_ENTRY vtc_S3755C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3755C2[0]),
  (VTBL_ENTRY)&_ZN7S3755C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3755C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3755C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3755C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3755C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3755C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3755C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3755C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3755C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3755C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3755C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3755C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3755C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3755C23v19Ev,
};
extern VTBL_ENTRY _ZTI7S3755C2[];
extern  VTBL_ENTRY _ZTV7S3755C2[];
Class_Descriptor cd_S3755C2 = {  "S3755C2", // class name
  bases_S3755C2, 1,
  &(vtc_S3755C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3755C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3755C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3755C1  : S3755C2 {
  ::S3765C5_nt s3755c1f0;
  void *s3755c1f1;
  ::S5266C36 s3755c1f2;
  ::S1679C8_nt s3755c1f3;
  virtual  ~S3755C1(); // _ZN7S3755C1D1Ev
  virtual void  v1(); // _ZN7S3755C12v1Ev
  virtual void  v2(); // _ZN7S3755C12v2Ev
  virtual void  v3(); // _ZN7S3755C12v3Ev
  virtual void  v4(); // _ZN7S3755C12v4Ev
  virtual void  v5(); // _ZN7S3755C12v5Ev
  virtual void  v6(); // _ZN7S3755C12v6Ev
  virtual void  v7(); // _ZN7S3755C12v7Ev
  S3755C1(); // tgen
};
//SIG(1 S3755C1) C1{ BC2{ BC3{ vd m Fi} v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19} vd v1 v2 v3 v4 v5 v6 v7 FC4{ m Fp[2]} Fp FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FC8{ m Fp Fi[2] FC6} Fp[2]}}


 S3755C1 ::~S3755C1(){ note_dtor("S3755C1", this);}
void  S3755C1 ::v1(){vfunc_called(this, "_ZN7S3755C12v1Ev");}
void  S3755C1 ::v2(){vfunc_called(this, "_ZN7S3755C12v2Ev");}
void  S3755C1 ::v3(){vfunc_called(this, "_ZN7S3755C12v3Ev");}
void  S3755C1 ::v4(){vfunc_called(this, "_ZN7S3755C12v4Ev");}
void  S3755C1 ::v5(){vfunc_called(this, "_ZN7S3755C12v5Ev");}
void  S3755C1 ::v6(){vfunc_called(this, "_ZN7S3755C12v6Ev");}
void  S3755C1 ::v7(){vfunc_called(this, "_ZN7S3755C12v7Ev");}
S3755C1 ::S3755C1(){ note_ctor("S3755C1", this);} // tgen

static void Test_S3755C1()
{
  extern Class_Descriptor cd_S3755C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,16)];
    init_test(&cd_S3755C1, buf);
    S3755C1 *dp, &lv = *(dp=new (buf) S3755C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,60), "sizeof(S3755C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3755C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S3755C2*), 0, "S3755C1");
    check_base_class_offset(lv, (S3755C2*), 0, "S3755C1");
    check_field_offset(lv, s3755c1f0, ABISELECT(16,8), "S3755C1.s3755c1f0");
    check_field_offset(lv, s3755c1f1, ABISELECT(32,16), "S3755C1.s3755c1f1");
    check_field_offset(lv, s3755c1f2, ABISELECT(40,20), "S3755C1.s3755c1f2");
    check_field_offset(lv, s3755c1f3, ABISELECT(64,36), "S3755C1.s3755c1f3");
    test_class_info(&lv, &cd_S3755C1);
    dp->~S3755C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3755C1(Test_S3755C1, "S3755C1", ABISELECT(104,60));

#else // __cplusplus

extern void _ZN7S3755C1C1Ev();
extern void _ZN7S3755C1D1Ev();
Name_Map name_map_S3755C1[] = {
  NSPAIR(_ZN7S3755C1C1Ev),
  NSPAIR(_ZN7S3755C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S3755C2;
extern VTBL_ENTRY _ZTI7S3755C2[];
extern  VTBL_ENTRY _ZTV7S3755C2[];
static Base_Class bases_S3755C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S3755C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3755C1[];
extern void _ZN7S3755C1D1Ev();
extern void _ZN7S3755C1D0Ev();
extern void _ZN7S3755C22v8Ev();
extern void _ZN7S3755C22v9Ev();
extern void _ZN7S3755C23v10Ev();
extern void _ZN7S3755C23v11Ev();
extern void _ZN7S3755C23v12Ev();
extern void _ZN7S3755C23v13Ev();
extern void _ZN7S3755C23v14Ev();
extern void _ZN7S3755C23v15Ev();
extern void _ZN7S3755C23v16Ev();
extern void _ZN7S3755C23v17Ev();
extern void _ZN7S3755C23v18Ev();
extern void _ZN7S3755C23v19Ev();
extern void _ZN7S3755C12v1Ev();
extern void _ZN7S3755C12v2Ev();
extern void _ZN7S3755C12v3Ev();
extern void _ZN7S3755C12v4Ev();
extern void _ZN7S3755C12v5Ev();
extern void _ZN7S3755C12v6Ev();
extern void _ZN7S3755C12v7Ev();
static  VTBL_ENTRY vtc_S3755C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3755C1[0]),
  (VTBL_ENTRY)&_ZN7S3755C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3755C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3755C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3755C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3755C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3755C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3755C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3755C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3755C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3755C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3755C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3755C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3755C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3755C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3755C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3755C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3755C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3755C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3755C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3755C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3755C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S3755C1[];
extern  VTBL_ENTRY _ZTV7S3755C1[];
Class_Descriptor cd_S3755C1 = {  "S3755C1", // class name
  bases_S3755C1, 2,
  &(vtc_S3755C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,60), // object size
  NSPAIRA(_ZTI7S3755C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3755C1),23, //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  S3760C2  : S1679C4_nt {
  virtual void  v8(); // _ZN7S3760C22v8Ev
  virtual void  v9(); // _ZN7S3760C22v9Ev
  virtual void  v10(); // _ZN7S3760C23v10Ev
  virtual void  v11(); // _ZN7S3760C23v11Ev
  virtual void  v12(); // _ZN7S3760C23v12Ev
  virtual void  v13(); // _ZN7S3760C23v13Ev
  virtual void  v14(); // _ZN7S3760C23v14Ev
  virtual void  v15(); // _ZN7S3760C23v15Ev
  virtual void  v16(); // _ZN7S3760C23v16Ev
  virtual void  v17(); // _ZN7S3760C23v17Ev
  virtual void  v18(); // _ZN7S3760C23v18Ev
  virtual void  v19(); // _ZN7S3760C23v19Ev
  ~S3760C2(); // tgen
  S3760C2(); // tgen
};
//SIG(-1 S3760C2) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S3760C2 ::v8(){vfunc_called(this, "_ZN7S3760C22v8Ev");}
void  S3760C2 ::v9(){vfunc_called(this, "_ZN7S3760C22v9Ev");}
void  S3760C2 ::v10(){vfunc_called(this, "_ZN7S3760C23v10Ev");}
void  S3760C2 ::v11(){vfunc_called(this, "_ZN7S3760C23v11Ev");}
void  S3760C2 ::v12(){vfunc_called(this, "_ZN7S3760C23v12Ev");}
void  S3760C2 ::v13(){vfunc_called(this, "_ZN7S3760C23v13Ev");}
void  S3760C2 ::v14(){vfunc_called(this, "_ZN7S3760C23v14Ev");}
void  S3760C2 ::v15(){vfunc_called(this, "_ZN7S3760C23v15Ev");}
void  S3760C2 ::v16(){vfunc_called(this, "_ZN7S3760C23v16Ev");}
void  S3760C2 ::v17(){vfunc_called(this, "_ZN7S3760C23v17Ev");}
void  S3760C2 ::v18(){vfunc_called(this, "_ZN7S3760C23v18Ev");}
void  S3760C2 ::v19(){vfunc_called(this, "_ZN7S3760C23v19Ev");}
S3760C2 ::~S3760C2(){ note_dtor("S3760C2", this);} // tgen
S3760C2 ::S3760C2(){ note_ctor("S3760C2", this);} // tgen

static void Test_S3760C2()
{
  extern Class_Descriptor cd_S3760C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3760C2, buf);
    S3760C2 *dp, &lv = *(dp=new (buf) S3760C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3760C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3760C2)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S3760C2");
    test_class_info(&lv, &cd_S3760C2);
    dp->~S3760C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3760C2(Test_S3760C2, "S3760C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3760C2C1Ev();
extern void _ZN7S3760C2D1Ev();
Name_Map name_map_S3760C2[] = {
  NSPAIR(_ZN7S3760C2C1Ev),
  NSPAIR(_ZN7S3760C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S3760C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S3760C2[];
extern void _ZN7S3760C2D1Ev();
extern void _ZN7S3760C2D0Ev();
extern void _ZN7S3760C22v8Ev();
extern void _ZN7S3760C22v9Ev();
extern void _ZN7S3760C23v10Ev();
extern void _ZN7S3760C23v11Ev();
extern void _ZN7S3760C23v12Ev();
extern void _ZN7S3760C23v13Ev();
extern void _ZN7S3760C23v14Ev();
extern void _ZN7S3760C23v15Ev();
extern void _ZN7S3760C23v16Ev();
extern void _ZN7S3760C23v17Ev();
extern void _ZN7S3760C23v18Ev();
extern void _ZN7S3760C23v19Ev();
static  VTBL_ENTRY vtc_S3760C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3760C2[0]),
  (VTBL_ENTRY)&_ZN7S3760C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3760C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3760C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3760C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3760C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3760C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3760C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3760C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3760C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3760C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3760C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3760C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3760C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3760C23v19Ev,
};
extern VTBL_ENTRY _ZTI7S3760C2[];
extern  VTBL_ENTRY _ZTV7S3760C2[];
Class_Descriptor cd_S3760C2 = {  "S3760C2", // class name
  bases_S3760C2, 1,
  &(vtc_S3760C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3760C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3760C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3760C8  {
  virtual  ~S3760C8(); // _ZN7S3760C8D1Ev
  virtual void  v22(); // _ZN7S3760C83v22Ev
  virtual void  v23(); // _ZN7S3760C83v23Ev
  S3760C8(); // tgen
};
//SIG(-1 S3760C8) C1{ vd v1 v2}


 S3760C8 ::~S3760C8(){ note_dtor("S3760C8", this);}
void  S3760C8 ::v22(){vfunc_called(this, "_ZN7S3760C83v22Ev");}
void  S3760C8 ::v23(){vfunc_called(this, "_ZN7S3760C83v23Ev");}
S3760C8 ::S3760C8(){ note_ctor("S3760C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3760C8C1Ev();
extern void _ZN7S3760C8D1Ev();
Name_Map name_map_S3760C8[] = {
  NSPAIR(_ZN7S3760C8C1Ev),
  NSPAIR(_ZN7S3760C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3760C8[];
extern void _ZN7S3760C8D1Ev();
extern void _ZN7S3760C8D0Ev();
extern void _ZN7S3760C83v22Ev();
extern void _ZN7S3760C83v23Ev();
static  VTBL_ENTRY vtc_S3760C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3760C8[0]),
  (VTBL_ENTRY)&_ZN7S3760C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3760C8D0Ev,
  (VTBL_ENTRY)&_ZN7S3760C83v22Ev,
  (VTBL_ENTRY)&_ZN7S3760C83v23Ev,
};
extern VTBL_ENTRY _ZTI7S3760C8[];
extern  VTBL_ENTRY _ZTV7S3760C8[];
Class_Descriptor cd_S3760C8 = {  "S3760C8", // class name
  0,0,//no base classes
  &(vtc_S3760C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3760C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3760C8),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  S3760C5_nt  : S5266C36 , S3760C8 {
  virtual  ~S3760C5_nt(); // _ZN10S3760C5_ntD1Ev
  virtual void  v20(); // _ZN10S3760C5_nt3v20Ev
  virtual void  v21(); // _ZN10S3760C5_nt3v21Ev
  S3760C5_nt(); // tgen
};
//SIG(-1 S3760C5_nt) C1{ BC2{ m Fp Fi[2] FC3{ m}} BC4{ vd v3 v4} vd v1 v2}


 S3760C5_nt ::~S3760C5_nt(){ note_dtor("S3760C5_nt", this);}
void  S3760C5_nt ::v20(){vfunc_called(this, "_ZN10S3760C5_nt3v20Ev");}
void  S3760C5_nt ::v21(){vfunc_called(this, "_ZN10S3760C5_nt3v21Ev");}
S3760C5_nt ::S3760C5_nt(){ note_ctor("S3760C5_nt", this);} // tgen

//skip512 S3760C5_nt

#else // __cplusplus

extern void _ZN10S3760C5_ntC1Ev();
extern void _ZN10S3760C5_ntD1Ev();
Name_Map name_map_S3760C5_nt[] = {
  NSPAIR(_ZN10S3760C5_ntC1Ev),
  NSPAIR(_ZN10S3760C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C36;
extern VTBL_ENTRY _ZTI8S5266C36[];
extern Class_Descriptor cd_S3760C8;
extern VTBL_ENTRY _ZTI7S3760C8[];
extern  VTBL_ENTRY _ZTV7S3760C8[];
static Base_Class bases_S3760C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C36,    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},
  {&cd_S3760C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI10S3760C5_nt[];
extern void _ZN10S3760C5_ntD1Ev();
extern void _ZN10S3760C5_ntD0Ev();
extern void _ZN7S3760C83v22Ev();
extern void _ZN7S3760C83v23Ev();
extern void _ZN10S3760C5_nt3v20Ev();
extern void _ZN10S3760C5_nt3v21Ev();
static  VTBL_ENTRY vtc_S3760C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3760C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S3760C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3760C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S3760C83v22Ev,
  (VTBL_ENTRY)&_ZN7S3760C83v23Ev,
  (VTBL_ENTRY)&_ZN10S3760C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3760C5_nt3v21Ev,
};
extern VTBL_ENTRY _ZTI10S3760C5_nt[];
VTBL_ENTRY *P__ZTI10S3760C5_nt = _ZTI10S3760C5_nt; 
extern  VTBL_ENTRY _ZTV10S3760C5_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3760C1  : S3760C2 {
  int s3760c1f0;
  ::S3765C5_nt s3760c1f1;
  ::S3760C5_nt s3760c1f2;
  void *s3760c1f3;
  virtual  ~S3760C1(); // _ZN7S3760C1D1Ev
  virtual void  v1(); // _ZN7S3760C12v1Ev
  virtual void  v2(); // _ZN7S3760C12v2Ev
  virtual void  v3(); // _ZN7S3760C12v3Ev
  virtual void  v4(); // _ZN7S3760C12v4Ev
  virtual void  v5(); // _ZN7S3760C12v5Ev
  virtual void  v6(); // _ZN7S3760C12v6Ev
  virtual void  v7(); // _ZN7S3760C12v7Ev
  S3760C1(); // tgen
};
//SIG(1 S3760C1) C1{ BC2{ BC3{ vd m Fi} v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19} vd v1 v2 v3 v4 v5 v6 v7 Fi FC4{ m Fp[2]} FC5{ BC6{ m Fp Fi[2] FC7{ m}} BC8{ vd v22 v23} vd v20 v21} Fp}


 S3760C1 ::~S3760C1(){ note_dtor("S3760C1", this);}
void  S3760C1 ::v1(){vfunc_called(this, "_ZN7S3760C12v1Ev");}
void  S3760C1 ::v2(){vfunc_called(this, "_ZN7S3760C12v2Ev");}
void  S3760C1 ::v3(){vfunc_called(this, "_ZN7S3760C12v3Ev");}
void  S3760C1 ::v4(){vfunc_called(this, "_ZN7S3760C12v4Ev");}
void  S3760C1 ::v5(){vfunc_called(this, "_ZN7S3760C12v5Ev");}
void  S3760C1 ::v6(){vfunc_called(this, "_ZN7S3760C12v6Ev");}
void  S3760C1 ::v7(){vfunc_called(this, "_ZN7S3760C12v7Ev");}
S3760C1 ::S3760C1(){ note_ctor("S3760C1", this);} // tgen

static void Test_S3760C1()
{
  extern Class_Descriptor cd_S3760C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S3760C1, buf);
    S3760C1 *dp, &lv = *(dp=new (buf) S3760C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S3760C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3760C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S3760C2*), 0, "S3760C1");
    check_base_class_offset(lv, (S3760C2*), 0, "S3760C1");
    check_field_offset(lv, s3760c1f0, ABISELECT(12,8), "S3760C1.s3760c1f0");
    check_field_offset(lv, s3760c1f1, ABISELECT(16,12), "S3760C1.s3760c1f1");
    check_field_offset(lv, s3760c1f2, ABISELECT(32,20), "S3760C1.s3760c1f2");
    check_field_offset(lv, s3760c1f3, ABISELECT(64,40), "S3760C1.s3760c1f3");
    test_class_info(&lv, &cd_S3760C1);
    dp->~S3760C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3760C1(Test_S3760C1, "S3760C1", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN7S3760C1C1Ev();
extern void _ZN7S3760C1D1Ev();
Name_Map name_map_S3760C1[] = {
  NSPAIR(_ZN7S3760C1C1Ev),
  NSPAIR(_ZN7S3760C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S3760C2;
extern VTBL_ENTRY _ZTI7S3760C2[];
extern  VTBL_ENTRY _ZTV7S3760C2[];
static Base_Class bases_S3760C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S3760C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3760C1[];
extern void _ZN7S3760C1D1Ev();
extern void _ZN7S3760C1D0Ev();
extern void _ZN7S3760C22v8Ev();
extern void _ZN7S3760C22v9Ev();
extern void _ZN7S3760C23v10Ev();
extern void _ZN7S3760C23v11Ev();
extern void _ZN7S3760C23v12Ev();
extern void _ZN7S3760C23v13Ev();
extern void _ZN7S3760C23v14Ev();
extern void _ZN7S3760C23v15Ev();
extern void _ZN7S3760C23v16Ev();
extern void _ZN7S3760C23v17Ev();
extern void _ZN7S3760C23v18Ev();
extern void _ZN7S3760C23v19Ev();
extern void _ZN7S3760C12v1Ev();
extern void _ZN7S3760C12v2Ev();
extern void _ZN7S3760C12v3Ev();
extern void _ZN7S3760C12v4Ev();
extern void _ZN7S3760C12v5Ev();
extern void _ZN7S3760C12v6Ev();
extern void _ZN7S3760C12v7Ev();
static  VTBL_ENTRY vtc_S3760C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3760C1[0]),
  (VTBL_ENTRY)&_ZN7S3760C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3760C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3760C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3760C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3760C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3760C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3760C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3760C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3760C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3760C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3760C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3760C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3760C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3760C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3760C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3760C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3760C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3760C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3760C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3760C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3760C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S3760C1[];
extern  VTBL_ENTRY _ZTV7S3760C1[];
Class_Descriptor cd_S3760C1 = {  "S3760C1", // class name
  bases_S3760C1, 2,
  &(vtc_S3760C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI7S3760C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3760C1),23, //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  S19595C5  : virtual S19905C19 {
  long double s19595c5f0;
  char s19595c5f1;
  short s19595c5f2[4];
  ~S19595C5(); // tgen
  S19595C5(); // tgen
};
//SIG(-1 S19595C5) C1{ VBC2{ vd m} FD Fc Fs[4]}


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

static void Test_S19595C5()
{
  extern Class_Descriptor cd_S19595C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,8)];
    init_test(&cd_S19595C5, buf);
    S19595C5 *dp, &lv = *(dp=new (buf) S19595C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S19595C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19595C5)");
    check_base_class_offset(lv, (S19905C19*), 0, "S19595C5");
    check_field_offset(lv, s19595c5f0, ABISELECT(16,4), "S19595C5.s19595c5f0");
    check_field_offset(lv, s19595c5f1, ABISELECT(32,16), "S19595C5.s19595c5f1");
    check_field_offset(lv, s19595c5f2, ABISELECT(34,18), "S19595C5.s19595c5f2");
    test_class_info(&lv, &cd_S19595C5);
    dp->~S19595C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19595C5(Test_S19595C5, "S19595C5", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S19595C5C1Ev();
extern void _ZN8S19595C5D1Ev();
Name_Map name_map_S19595C5[] = {
  NSPAIR(_ZN8S19595C5C1Ev),
  NSPAIR(_ZN8S19595C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
static Base_Class bases_S19595C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    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 _ZTI8S19595C5[];
extern void _ZN8S19595C5D1Ev();
extern void _ZN8S19595C5D0Ev();
static  VTBL_ENTRY vtc_S19595C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&_ZN8S19595C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19595C5D0Ev,
};
extern VTBL_ENTRY _ZTV8S19595C5[];
static  VTT_ENTRY vtt_S19595C5[] = {
  {&(_ZTV8S19595C5[4]),  4,6},
  {&(_ZTV8S19595C5[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19595C5[];
extern  VTBL_ENTRY _ZTV8S19595C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C5[];
Class_Descriptor cd_S19595C5 = {  "S19595C5", // class name
  bases_S19595C5, 1,
  &(vtc_S19595C5[0]), // expected_vtbl_contents
  &(vtt_S19595C5[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S19595C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19595C5),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19595C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19595C10  : virtual S19905C19 , virtual S19595C5 {
  int s19595c10f0;
  virtual  ~S19595C10(); // _ZN9S19595C10D2Ev
  S19595C10(); // tgen
};
//SIG(-1 S19595C10) C1{ VBC2{ vd m} VBC3{ VBC2 FD Fc Fs[4]} vd Fi}


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

static void Test_S19595C10()
{
  extern Class_Descriptor cd_S19595C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,10)];
    init_test(&cd_S19595C10, buf);
    S19595C10 *dp, &lv = *(dp=new (buf) S19595C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S19595C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19595C10)");
    check_base_class_offset(lv, (S19905C19*), 0, "S19595C10");
    check_base_class_offset(lv, (S19905C19*)(S19595C5*), 0, "S19595C10");
    check_base_class_offset(lv, (S19595C5*), ABISELECT(16,8), "S19595C10");
    check_field_offset(lv, s19595c10f0, ABISELECT(8,4), "S19595C10.s19595c10f0");
    test_class_info(&lv, &cd_S19595C10);
    dp->~S19595C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19595C10(Test_S19595C10, "S19595C10", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN9S19595C10C1Ev();
extern void _ZN9S19595C10D2Ev();
Name_Map name_map_S19595C10[] = {
  NSPAIR(_ZN9S19595C10C1Ev),
  NSPAIR(_ZN9S19595C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S19595C5;
extern VTBL_ENTRY _ZTI8S19595C5[];
extern  VTBL_ENTRY _ZTV8S19595C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C5[];
static Base_Class bases_S19595C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    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_S19595C5,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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 _ZTI9S19595C10[];
extern void _ZN9S19595C10D1Ev();
extern void _ZN9S19595C10D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S19595C10D1Ev,_ZThn8_N9S19595C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev)();
extern void ABISELECT(_ZThn16_N9S19595C10D0Ev,_ZThn8_N9S19595C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19595C10[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19595C10[0]),
  (VTBL_ENTRY)&_ZN9S19595C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19595C10D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19595C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S19595C10[];
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void _ZN8S19595C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
extern void _ZN8S19595C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__9S19595C10[] = {
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C5__9S19595C10[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
static  VTT_ENTRY vtt_S19595C10[] = {
  {&(_ZTV9S19595C10[5]),  5,13},
  {&(_ZTV9S19595C10[5]),  5,13},
  {&(_ZTV9S19595C10[11]),  11,13},
  {&(_tg__ZTV8S19595C5__9S19595C10[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S19595C5__9S19595C10[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19595C10[];
extern  VTBL_ENTRY _ZTV9S19595C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19595C10[];
static VTBL_ENTRY alt_thunk_names105[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S19595C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S19595C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19595C10D0Ev,_ZThn8_N9S19595C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19595C10D1Ev,_ZThn8_N9S19595C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19595C10 = {  "S19595C10", // class name
  bases_S19595C10, 2,
  &(vtc_S19595C10[0]), // expected_vtbl_contents
  &(vtt_S19595C10[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI9S19595C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19595C10),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19595C10),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names105,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19595C9  : virtual S19905C19 , S19595C10 , S17777C6_nt {
  short s19595c9f0;
  __tsi64 s19595c9f1;
  void *s19595c9f2;
  __tsi64 s19595c9f3;
  virtual  ~S19595C9(); // _ZN8S19595C9D2Ev
  S19595C9(); // tgen
};
//SIG(-1 S19595C9) C1{ VBC2{ vd m} BC3{ VBC2 VBC4{ VBC2 FD Fc Fs[4]} vd Fi} BC5{ m Fp} vd Fs FL Fp FL}


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

static void Test_S19595C9()
{
  extern Class_Descriptor cd_S19595C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,17)];
    init_test(&cd_S19595C9, buf);
    S19595C9 *dp, &lv = *(dp=new (buf) S19595C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S19595C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19595C9)");
    check_base_class_offset(lv, (S19905C19*), 0, "S19595C9");
    check_base_class_offset(lv, (S19905C19*)(S19595C10*), 0, "S19595C9");
    check_base_class_offset(lv, (S19905C19*)(S19595C5*), 0, "S19595C9");
    check_base_class_offset(lv, (S19595C5*)(S19595C10*), ABISELECT(64,36), "S19595C9");
    check_base_class_offset(lv, (S19595C10*), 0, "S19595C9");
    check_base_class_offset(lv, (S17777C6_nt*), ABISELECT(16,8), "S19595C9");
    check_field_offset(lv, s19595c9f0, ABISELECT(24,12), "S19595C9.s19595c9f0");
    check_field_offset(lv, s19595c9f1, ABISELECT(32,16), "S19595C9.s19595c9f1");
    check_field_offset(lv, s19595c9f2, ABISELECT(40,24), "S19595C9.s19595c9f2");
    check_field_offset(lv, s19595c9f3, ABISELECT(48,28), "S19595C9.s19595c9f3");
    test_class_info(&lv, &cd_S19595C9);
    dp->~S19595C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19595C9(Test_S19595C9, "S19595C9", ABISELECT(112,64));

#else // __cplusplus

extern void _ZN8S19595C9C1Ev();
extern void _ZN8S19595C9D2Ev();
Name_Map name_map_S19595C9[] = {
  NSPAIR(_ZN8S19595C9C1Ev),
  NSPAIR(_ZN8S19595C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S19595C5;
extern VTBL_ENTRY _ZTI8S19595C5[];
extern  VTBL_ENTRY _ZTV8S19595C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C5[];
extern Class_Descriptor cd_S19595C10;
extern VTBL_ENTRY _ZTI9S19595C10[];
extern  VTBL_ENTRY _ZTV9S19595C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19595C10[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
static Base_Class bases_S19595C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19595C5,    ABISELECT(64,36), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19595C10,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S17777C6_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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19595C9[];
extern void _ZN8S19595C9D1Ev();
extern void _ZN8S19595C9D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev)();
extern void ABISELECT(_ZThn64_N8S19595C9D1Ev,_ZThn36_N8S19595C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev)();
extern void ABISELECT(_ZThn64_N8S19595C9D0Ev,_ZThn36_N8S19595C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19595C9[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C9[0]),
  (VTBL_ENTRY)&_ZN8S19595C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19595C9D0Ev,
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19595C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S19595C9[];
extern void ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev)();
extern void _ZN9S19595C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev)();
extern void _ZN9S19595C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19595C10__8S19595C9[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19595C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev)();
extern void ABISELECT(_ZThn64_N9S19595C10D1Ev,_ZThn36_N9S19595C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev)();
extern void ABISELECT(_ZThn64_N9S19595C10D0Ev,_ZThn36_N9S19595C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__9S19595C10__8S19595C9[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19595C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void _ZN8S19595C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
extern void _ZN8S19595C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__8S19595C9[] = {
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C5__8S19595C9[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
static  VTT_ENTRY vtt_S19595C9[] = {
  {&(_ZTV8S19595C9[5]),  5,13},
  {&(_tg__ZTV9S19595C10__8S19595C9[5]),  5,7},
  {&(_tg__ZTV9S19595C10__8S19595C9[5]),  5,7},
  {&(_tg__ZTV8S19595C5__9S19595C10__8S19595C9[4]),  4,6},
  {&(_ZTV8S19595C9[5]),  5,13},
  {&(_ZTV8S19595C9[11]),  11,13},
  {&(_tg__ZTV8S19595C5__8S19595C9[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S19595C5__8S19595C9[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19595C9[];
extern  VTBL_ENTRY _ZTV8S19595C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C9[];
static VTBL_ENTRY alt_thunk_names106[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S19595C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S19595C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19595C10D0Ev,_ZThn36_N9S19595C10D0Ev),
  (VTBL_ENTRY)_ZN9S19595C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19595C10D1Ev,_ZThn36_N9S19595C10D1Ev),
  (VTBL_ENTRY)_ZN9S19595C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C9D0Ev,_ZThn36_N8S19595C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C9D1Ev,_ZThn36_N8S19595C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19595C9 = {  "S19595C9", // class name
  bases_S19595C9, 4,
  &(vtc_S19595C9[0]), // expected_vtbl_contents
  &(vtt_S19595C9[0]), // expected_vtt_contents
  ABISELECT(112,64), // object size
  NSPAIRA(_ZTI8S19595C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19595C9),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19595C9),8, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names106,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19595C8  : virtual S19595C9 , S17777C6_nt , S19905C19 , S19595C5 {
  int s19595c8f0;
  virtual  ~S19595C8(); // _ZN8S19595C8D2Ev
  S19595C8(); // tgen
};
//SIG(-1 S19595C8) C1{ VBC2{ VBC3{ vd m} BC4{ VBC3 VBC5{ VBC3 FD Fc Fs[4]} vd Fi} BC6{ m Fp} vd Fs FL Fp FL} BC6 BC3 BC5 vd Fi}


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

static void Test_S19595C8()
{
  extern Class_Descriptor cd_S19595C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,27)];
    init_test(&cd_S19595C8, buf);
    S19595C8 *dp, &lv = *(dp=new (buf) S19595C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,104), "sizeof(S19595C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19595C8)");
    check_base_class_offset(lv, (S19905C19*)(S19595C9*), ABISELECT(64,40), "S19595C8");
    check_base_class_offset(lv, (S19905C19*)(S19595C10*)(S19595C9*), ABISELECT(64,40), "S19595C8");
    /*is_ambiguous_... S19595C8::S19595C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C5*), ABISELECT(64,40), "S19595C8");
    /*is_ambiguous_... S19595C8::S19595C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C5*), ABISELECT(64,40), "S19595C8");
    check_base_class_offset(lv, (S19595C5*)(S19595C10*)(S19595C9*), ABISELECT(128,76), "S19595C8");
    check_base_class_offset(lv, (S19595C10*)(S19595C9*), ABISELECT(64,40), "S19595C8");
    check_base_class_offset(lv, (S17777C6_nt*)(S19595C9*), ABISELECT(80,48), "S19595C8");
    check_base_class_offset(lv, (S19595C9*), ABISELECT(64,40), "S19595C8");
    /*is_ambiguous_... S19595C8::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*), ABISELECT(8,4), "S19595C8");
    /*is_ambiguous_... S19595C8::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*), 0, "S19595C8");
    /*is_ambiguous_... S19595C8::S19595C5 */ AMB_check_base_class_offset(lv, (S19595C5*), ABISELECT(16,8), "S19595C8");
    check_field_offset(lv, s19595c8f0, ABISELECT(60,36), "S19595C8.s19595c8f0");
    test_class_info(&lv, &cd_S19595C8);
    dp->~S19595C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19595C8(Test_S19595C8, "S19595C8", ABISELECT(176,104));

#else // __cplusplus

extern void _ZN8S19595C8C1Ev();
extern void _ZN8S19595C8D2Ev();
Name_Map name_map_S19595C8[] = {
  NSPAIR(_ZN8S19595C8C1Ev),
  NSPAIR(_ZN8S19595C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S19595C5;
extern VTBL_ENTRY _ZTI8S19595C5[];
extern  VTBL_ENTRY _ZTV8S19595C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C5[];
extern Class_Descriptor cd_S19595C10;
extern VTBL_ENTRY _ZTI9S19595C10[];
extern  VTBL_ENTRY _ZTV9S19595C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19595C10[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19595C9;
extern VTBL_ENTRY _ZTI8S19595C9[];
extern  VTBL_ENTRY _ZTV8S19595C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C9[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S19595C5;
extern VTBL_ENTRY _ZTI8S19595C5[];
extern  VTBL_ENTRY _ZTV8S19595C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C5[];
static Base_Class bases_S19595C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    ABISELECT(64,40), //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_S19595C5,    ABISELECT(128,76), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19595C10,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    4, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(80,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
    4, //immediately_derived
  0, 0},
  {&cd_S19595C9,    ABISELECT(64,40), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //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},
  {&cd_S17777C6_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, 0},
  {&cd_S19905C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19595C5,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //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 _ZTI8S19595C8[];
extern void _ZN8S19595C8D1Ev();
extern void _ZN8S19595C8D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19595C8D1Ev,_ZThn8_N8S19595C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S19595C8D0Ev,_ZThn8_N8S19595C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S19595C8D1Ev,_ZThn40_N8S19595C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S19595C8D0Ev,_ZThn40_N8S19595C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev)();
extern void ABISELECT(_ZThn128_N8S19595C8D1Ev,_ZThn76_N8S19595C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev)();
extern void ABISELECT(_ZThn128_N8S19595C8D0Ev,_ZThn76_N8S19595C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19595C8[] = {
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C8[0]),
  (VTBL_ENTRY)&_ZN8S19595C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19595C8D0Ev,
  ABISELECT(48,32),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev),
  ABISELECT(64,36),
  0,
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S19595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev),
};
extern VTBL_ENTRY _ZTV8S19595C8[];
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void _ZN8S19595C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
extern void _ZN8S19595C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__A__8S19595C8[] = {
  ABISELECT(48,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void ABISELECT(_ZThn48_N8S19595C5D1Ev,_ZThn32_N8S19595C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
extern void ABISELECT(_ZThn48_N8S19595C5D0Ev,_ZThn32_N8S19595C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C5__A__8S19595C8[] = {
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev)();
extern void _ZN8S19595C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev)();
extern void _ZN8S19595C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C9__8S19595C8[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev)();
extern void _ZN9S19595C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev)();
extern void _ZN9S19595C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19595C108S19595C9__8S19595C8[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19595C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev)();
extern void ABISELECT(_ZThn64_N9S19595C10D1Ev,_ZThn36_N9S19595C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev)();
extern void ABISELECT(_ZThn64_N9S19595C10D0Ev,_ZThn36_N9S19595C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__9S19595C108S19595C9__8S19595C8[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19595C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev)();
extern void ABISELECT(_ZThn64_N8S19595C9D1Ev,_ZThn36_N8S19595C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev)();
extern void ABISELECT(_ZThn64_N8S19595C9D0Ev,_ZThn36_N8S19595C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__8S19595C9__8S19595C8[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19595C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void _ZN8S19595C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
extern void _ZN8S19595C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__8S19595C8[] = {
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C5__8S19595C8[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
static  VTT_ENTRY vtt_S19595C8[] = {
  {&(_ZTV8S19595C8[5]),  5,26},
  {&(_tg__ZTV8S19595C5__A__8S19595C8[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S19595C5__A__8S19595C8[3]),  3,5},
  {&(_ZTV8S19595C8[18]),  18,26},
  {&(_ZTV8S19595C8[18]),  18,26},
  {&(_ZTV8S19595C8[24]),  24,26},
  {&(_ZTV8S19595C8[11]),  11,26},
  {&(_tg__ZTV8S19595C9__8S19595C8[5]),  5,7},
  {&(_tg__ZTV9S19595C108S19595C9__8S19595C8[5]),  5,7},
  {&(_tg__ZTV9S19595C108S19595C9__8S19595C8[5]),  5,7},
  {&(_tg__ZTV8S19595C5__9S19595C108S19595C9__8S19595C8[4]),  4,6},
  {&(_tg__ZTV8S19595C9__8S19595C8[5]),  5,7},
  {&(_tg__ZTV8S19595C5__8S19595C9__8S19595C8[4]),  4,6},
  {&(_tg__ZTV8S19595C5__8S19595C8[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S19595C5__8S19595C8[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19595C8[];
extern  VTBL_ENTRY _ZTV8S19595C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C8[];
static VTBL_ENTRY alt_thunk_names107[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19595C10D0Ev,_ZThn36_N9S19595C10D0Ev),
  (VTBL_ENTRY)_ZN9S19595C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19595C10D1Ev,_ZThn36_N9S19595C10D1Ev),
  (VTBL_ENTRY)_ZN9S19595C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C9D0Ev,_ZThn36_N8S19595C9D0Ev),
  (VTBL_ENTRY)_ZN8S19595C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C9D1Ev,_ZThn36_N8S19595C9D1Ev),
  (VTBL_ENTRY)_ZN8S19595C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S19595C5D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19595C5D0Ev,_ZThn32_N8S19595C5D0Ev),
  (VTBL_ENTRY)_ZN8S19595C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S19595C5D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19595C5D1Ev,_ZThn32_N8S19595C5D1Ev),
  (VTBL_ENTRY)_ZN8S19595C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19595C8D0Ev,_ZThn76_N8S19595C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C8D0Ev,_ZThn40_N8S19595C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19595C8D0Ev,_ZThn8_N8S19595C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19595C8D1Ev,_ZThn76_N8S19595C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C8D1Ev,_ZThn40_N8S19595C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19595C8D1Ev,_ZThn8_N8S19595C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19595C8 = {  "S19595C8", // class name
  bases_S19595C8, 8,
  &(vtc_S19595C8[0]), // expected_vtbl_contents
  &(vtt_S19595C8[0]), // expected_vtt_contents
  ABISELECT(176,104), // object size
  NSPAIRA(_ZTI8S19595C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19595C8),26, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19595C8),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names107,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19595C6  : virtual S5266C29 , virtual S19595C8 , S19595C5 {
  short s19595c6f0;
  virtual  ~S19595C6(); // _ZN8S19595C6D2Ev
  S19595C6(); // tgen
};
//SIG(-1 S19595C6) C1{ VBC2{ m} VBC3{ VBC4{ VBC5{ vd m} BC6{ VBC5 VBC7{ VBC5 FD Fc Fs[4]} vd Fi} BC8{ m Fp} vd Fs FL Fp FL} BC8 BC5 BC7 vd Fi} BC7 vd Fs}


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

static void Test_S19595C6()
{
  extern Class_Descriptor cd_S19595C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,34)];
    init_test(&cd_S19595C6, buf);
    S19595C6 *dp, &lv = *(dp=new (buf) S19595C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,132), "sizeof(S19595C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19595C6)");
    check_base_class_offset(lv, (S5266C29*), 0, "S19595C6");
    check_base_class_offset(lv, (S19905C19*)(S19595C9*), ABISELECT(112,68), "S19595C6");
    check_base_class_offset(lv, (S19905C19*)(S19595C10*)(S19595C9*), ABISELECT(112,68), "S19595C6");
    /*is_ambiguous_... S19595C6::S19595C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C5*), ABISELECT(112,68), "S19595C6");
    /*is_ambiguous_... S19595C8::S19595C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C5*)(S19595C8*), ABISELECT(112,68), "S19595C6");
    /*is_ambiguous_... S19595C6::S19595C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C5*), ABISELECT(112,68), "S19595C6");
    check_base_class_offset(lv, (S19595C5*)(S19595C10*)(S19595C9*), ABISELECT(176,104), "S19595C6");
    check_base_class_offset(lv, (S19595C10*)(S19595C9*), ABISELECT(112,68), "S19595C6");
    check_base_class_offset(lv, (S17777C6_nt*)(S19595C9*), ABISELECT(128,76), "S19595C6");
    check_base_class_offset(lv, (S19595C9*)(S19595C8*), ABISELECT(112,68), "S19595C6");
    /*is_ambiguous_... S19595C8::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19595C8*), ABISELECT(56,32), "S19595C6");
    /*is_ambiguous_... S19595C8::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C8*), ABISELECT(48,28), "S19595C6");
    /*is_ambiguous_... S19595C8::S19595C5 */ AMB_check_base_class_offset(lv, (S19595C5*)(S19595C8*), ABISELECT(64,36), "S19595C6");
    check_base_class_offset(lv, (S19595C8*), ABISELECT(48,28), "S19595C6");
    /*is_ambiguous_... S19595C6::S19595C5 */ AMB_check_base_class_offset(lv, (S19595C5*), 0, "S19595C6");
    check_field_offset(lv, s19595c6f0, ABISELECT(42,26), "S19595C6.s19595c6f0");
    test_class_info(&lv, &cd_S19595C6);
    dp->~S19595C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19595C6(Test_S19595C6, "S19595C6", ABISELECT(224,132));

#else // __cplusplus

extern void _ZN8S19595C6C1Ev();
extern void _ZN8S19595C6D2Ev();
Name_Map name_map_S19595C6[] = {
  NSPAIR(_ZN8S19595C6C1Ev),
  NSPAIR(_ZN8S19595C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S19595C5;
extern VTBL_ENTRY _ZTI8S19595C5[];
extern  VTBL_ENTRY _ZTV8S19595C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C5[];
extern Class_Descriptor cd_S19595C10;
extern VTBL_ENTRY _ZTI9S19595C10[];
extern  VTBL_ENTRY _ZTV9S19595C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19595C10[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19595C9;
extern VTBL_ENTRY _ZTI8S19595C9[];
extern  VTBL_ENTRY _ZTV8S19595C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C9[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S19595C5;
extern VTBL_ENTRY _ZTI8S19595C5[];
extern  VTBL_ENTRY _ZTV8S19595C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C5[];
extern Class_Descriptor cd_S19595C8;
extern VTBL_ENTRY _ZTI8S19595C8[];
extern  VTBL_ENTRY _ZTV8S19595C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C8[];
extern Class_Descriptor cd_S19595C5;
extern VTBL_ENTRY _ZTI8S19595C5[];
extern  VTBL_ENTRY _ZTV8S19595C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C5[];
static Base_Class bases_S19595C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19905C19,    ABISELECT(112,68), //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
    2, //immediately_derived
  0, 1},
  {&cd_S19595C5,    ABISELECT(176,104), //bcp->offset
    31, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19595C10,    ABISELECT(112,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(128,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
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19595C9,    ABISELECT(112,68), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19905C19,    ABISELECT(48,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
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19595C5,    ABISELECT(64,36), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19595C8,    ABISELECT(48,28), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19595C5,    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 _ZTI8S19595C6[];
extern void ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev)();
extern void _ZN8S19595C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev)();
extern void _ZN8S19595C6D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19595C6D1Ev,_ZTv0_n24_N8S19595C6D1Ev)();
extern void ABISELECT(_ZThn48_N8S19595C6D1Ev,_ZThn28_N8S19595C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19595C6D0Ev,_ZTv0_n24_N8S19595C6D0Ev)();
extern void ABISELECT(_ZThn48_N8S19595C6D0Ev,_ZThn28_N8S19595C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S19595C6D1Ev,_ZThn36_N8S19595C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S19595C6D0Ev,_ZThn36_N8S19595C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev)();
extern void ABISELECT(_ZThn112_N8S19595C6D1Ev,_ZThn68_N8S19595C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev)();
extern void ABISELECT(_ZThn112_N8S19595C6D0Ev,_ZThn68_N8S19595C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev)();
extern void ABISELECT(_ZThn176_N8S19595C6D1Ev,_ZThn104_N8S19595C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev)();
extern void ABISELECT(_ZThn176_N8S19595C6D0Ev,_ZThn104_N8S19595C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19595C6[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  0,
  ABISELECT(112,68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19595C6D1Ev,_ZTv0_n24_N8S19595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19595C6D0Ev,_ZTv0_n24_N8S19595C6D0Ev),
  ABISELECT(48,32),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev),
  ABISELECT(64,36),
  0,
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S19595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI8S19595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev),
};
extern VTBL_ENTRY _ZTV8S19595C6[];
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void _ZN8S19595C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
extern void _ZN8S19595C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__A__8S19595C6[] = {
  ABISELECT(112,68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void ABISELECT(_ZThn112_N8S19595C5D1Ev,_ZThn68_N8S19595C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
extern void ABISELECT(_ZThn112_N8S19595C5D0Ev,_ZThn68_N8S19595C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C5__A__8S19595C6[] = {
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void _ZN8S19595C8D1Ev();
extern void _ZN8S19595C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19595C8__8S19595C6[] = {
  ABISELECT(128,76),
  ABISELECT(64,40),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C8[0]),
  (VTBL_ENTRY)&_ZN8S19595C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19595C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void _ZN8S19595C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
extern void _ZN8S19595C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C58S19595C8__A1__8S19595C6[] = {
  ABISELECT(48,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void ABISELECT(_ZThn48_N8S19595C5D1Ev,_ZThn32_N8S19595C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
extern void ABISELECT(_ZThn48_N8S19595C5D0Ev,_ZThn32_N8S19595C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C58S19595C8__A1__8S19595C6[] = {
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S19595C8D1Ev,_ZThn40_N8S19595C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S19595C8D0Ev,_ZThn40_N8S19595C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C9__8S19595C8__8S19595C6[] = {
  ABISELECT(64,36),
  0,
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev)();
extern void ABISELECT(_ZThn128_N8S19595C8D1Ev,_ZThn76_N8S19595C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev)();
extern void ABISELECT(_ZThn128_N8S19595C8D0Ev,_ZThn76_N8S19595C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__8S19595C8__8S19595C6[] = {
  ABISELECT(-64,-36),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S19595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19595C8D1Ev,_ZThn8_N8S19595C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S19595C8D0Ev,_ZThn8_N8S19595C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__A__8S19595C8__8S19595C6[] = {
  ABISELECT(48,32),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev)();
extern void _ZN8S19595C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev)();
extern void _ZN8S19595C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C9__8S19595C6[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev)();
extern void _ZN9S19595C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev)();
extern void _ZN9S19595C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19595C108S19595C9__8S19595C6[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19595C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev)();
extern void ABISELECT(_ZThn64_N9S19595C10D1Ev,_ZThn36_N9S19595C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev)();
extern void ABISELECT(_ZThn64_N9S19595C10D0Ev,_ZThn36_N9S19595C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__9S19595C108S19595C9__8S19595C6[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19595C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev)();
extern void ABISELECT(_ZThn64_N8S19595C9D1Ev,_ZThn36_N8S19595C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev)();
extern void ABISELECT(_ZThn64_N8S19595C9D0Ev,_ZThn36_N8S19595C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__8S19595C9__8S19595C6[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19595C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void _ZN8S19595C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
extern void _ZN8S19595C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__8S19595C6[] = {
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C5__8S19595C6[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
static  VTT_ENTRY vtt_S19595C6[] = {
  {&(_ZTV8S19595C6[8]),  8,37},
  {&(_tg__ZTV8S19595C5__A__8S19595C6[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S19595C5__A__8S19595C6[3]),  3,5},
  {&(_ZTV8S19595C6[16]),  16,37},
  {&(_ZTV8S19595C6[29]),  29,37},
  {&(_ZTV8S19595C6[29]),  29,37},
  {&(_ZTV8S19595C6[35]),  35,37},
  {&(_ZTV8S19595C6[22]),  22,37},
  {&(_tg__ZTV8S19595C8__8S19595C6[5]),  5,7},
  {&(_tg__ZTV8S19595C58S19595C8__A1__8S19595C6[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S19595C58S19595C8__A1__8S19595C6[3]),  3,5},
  {&(_tg__ZTV8S19595C9__8S19595C8__8S19595C6[5]),  5,7},
  {&(_tg__ZTV8S19595C9__8S19595C8__8S19595C6[5]),  5,7},
  {&(_tg__ZTV8S19595C5__8S19595C8__8S19595C6[4]),  4,6},
  {&(_tg__ZTV8S19595C5__A__8S19595C8__8S19595C6[4]),  4,6},
  {&(_tg__ZTV8S19595C9__8S19595C6[5]),  5,7},
  {&(_tg__ZTV9S19595C108S19595C9__8S19595C6[5]),  5,7},
  {&(_tg__ZTV9S19595C108S19595C9__8S19595C6[5]),  5,7},
  {&(_tg__ZTV8S19595C5__9S19595C108S19595C9__8S19595C6[4]),  4,6},
  {&(_tg__ZTV8S19595C9__8S19595C6[5]),  5,7},
  {&(_tg__ZTV8S19595C5__8S19595C9__8S19595C6[4]),  4,6},
  {&(_tg__ZTV8S19595C5__8S19595C6[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S19595C5__8S19595C6[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19595C6[];
extern  VTBL_ENTRY _ZTV8S19595C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C6[];
static VTBL_ENTRY alt_thunk_names108[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19595C10D0Ev,_ZThn36_N9S19595C10D0Ev),
  (VTBL_ENTRY)_ZN9S19595C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19595C10D1Ev,_ZThn36_N9S19595C10D1Ev),
  (VTBL_ENTRY)_ZN9S19595C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C9D0Ev,_ZThn36_N8S19595C9D0Ev),
  (VTBL_ENTRY)_ZN8S19595C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C9D1Ev,_ZThn36_N8S19595C9D1Ev),
  (VTBL_ENTRY)_ZN8S19595C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19595C8D0Ev,_ZThn8_N8S19595C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19595C8D0Ev,_ZThn76_N8S19595C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C8D0Ev,_ZThn40_N8S19595C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19595C8D1Ev,_ZThn8_N8S19595C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19595C8D1Ev,_ZThn76_N8S19595C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C8D1Ev,_ZThn40_N8S19595C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S19595C5D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19595C5D0Ev,_ZThn32_N8S19595C5D0Ev),
  (VTBL_ENTRY)_ZN8S19595C5D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19595C5D0Ev,_ZThn68_N8S19595C5D0Ev),
  (VTBL_ENTRY)_ZN8S19595C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S19595C5D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19595C5D1Ev,_ZThn32_N8S19595C5D1Ev),
  (VTBL_ENTRY)_ZN8S19595C5D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19595C5D1Ev,_ZThn68_N8S19595C5D1Ev),
  (VTBL_ENTRY)_ZN8S19595C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19595C6D0Ev,_ZTv0_n24_N8S19595C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19595C6D0Ev,_ZThn28_N8S19595C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19595C6D1Ev,_ZTv0_n24_N8S19595C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19595C6D1Ev,_ZThn28_N8S19595C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S19595C6D0Ev,_ZThn104_N8S19595C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19595C6D0Ev,_ZThn68_N8S19595C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C6D0Ev,_ZThn36_N8S19595C6D0Ev),
  (VTBL_ENTRY)_ZN8S19595C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S19595C6D1Ev,_ZThn104_N8S19595C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19595C6D1Ev,_ZThn68_N8S19595C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C6D1Ev,_ZThn36_N8S19595C6D1Ev),
  (VTBL_ENTRY)_ZN8S19595C6D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19595C6 = {  "S19595C6", // class name
  bases_S19595C6, 11,
  &(vtc_S19595C6[0]), // expected_vtbl_contents
  &(vtt_S19595C6[0]), // expected_vtt_contents
  ABISELECT(224,132), // object size
  NSPAIRA(_ZTI8S19595C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19595C6),37, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19595C6),23, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names108,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19595C3  : virtual S19905C19 , S19595C5 , virtual S19595C6 , S19595C9 {
  void *s19595c3f0;
  ~S19595C3(); // tgen
  S19595C3(); // tgen
};
//SIG(-1 S19595C3) C1{ VBC2{ vd m} BC3{ VBC2 FD Fc Fs[4]} VBC4{ VBC5{ m} VBC6{ VBC7{ VBC2 BC8{ VBC2 VBC3 vd Fi} BC9{ m Fp} vd Fs FL Fp FL} BC9 BC2 BC3 vd Fi} BC3 vd Fs} BC7 Fp}


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

static void Test_S19595C3()
{
  extern Class_Descriptor cd_S19595C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,51)];
    init_test(&cd_S19595C3, buf);
    S19595C3 *dp, &lv = *(dp=new (buf) S19595C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,200), "sizeof(S19595C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19595C3)");
    /*is_ambiguous_... S19595C3::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*), 0, "S19595C3");
    /*is_ambiguous_... S19595C3::S19595C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C5*), 0, "S19595C3");
    /*is_ambiguous_... S19595C3::S19595C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C9*), 0, "S19595C3");
    /*is_ambiguous_... S19595C3::S19595C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C10*)(S19595C9*), 0, "S19595C3");
    /*is_ambiguous_... S19595C3::S19595C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C5*), 0, "S19595C3");
    /*is_ambiguous_... S19595C8::S19595C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C5*)(S19595C8*), 0, "S19595C3");
    /*is_ambiguous_... S19595C6::S19595C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C5*)(S19595C6*), 0, "S19595C3");
    /*is_ambiguous_... S19595C3::S19595C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C9*), 0, "S19595C3");
    /*is_ambiguous_... S19595C3::S19595C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C10*)(S19595C9*), 0, "S19595C3");
    /*is_ambiguous_... S19595C3::S19595C5 */ AMB_check_base_class_offset(lv, (S19595C5*), 0, "S19595C3");
    check_base_class_offset(lv, (S5266C29*)(S19595C6*), 0, "S19595C3");
    /*is_ambiguous_... S19595C3::S19595C9 */ AMB_check_base_class_offset(lv, (S19595C5*)(S19595C10*)(S19595C9*), ABISELECT(288,172), "S19595C3");
    /*is_ambiguous_... S19595C3::S19595C9 */ AMB_check_base_class_offset(lv, (S19595C5*)(S19595C10*)(S19595C9*), ABISELECT(288,172), "S19595C3");
    /*is_ambiguous_... S19595C3::S19595C9 */ AMB_check_base_class_offset(lv, (S19595C10*)(S19595C9*), ABISELECT(224,136), "S19595C3");
    /*is_ambiguous_... S19595C3::S19595C9 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19595C9*), ABISELECT(240,144), "S19595C3");
    check_base_class_offset(lv, (S19595C9*)(S19595C8*), ABISELECT(224,136), "S19595C3");
    /*is_ambiguous_... S19595C8::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19595C8*), ABISELECT(168,100), "S19595C3");
    /*is_ambiguous_... S19595C8::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C8*), ABISELECT(160,96), "S19595C3");
    /*is_ambiguous_... S19595C8::S19595C5 */ AMB_check_base_class_offset(lv, (S19595C5*)(S19595C8*), ABISELECT(176,104), "S19595C3");
    check_base_class_offset(lv, (S19595C8*)(S19595C6*), ABISELECT(160,96), "S19595C3");
    /*is_ambiguous_... S19595C6::S19595C5 */ AMB_check_base_class_offset(lv, (S19595C5*)(S19595C6*), ABISELECT(112,68), "S19595C3");
    check_base_class_offset(lv, (S19595C6*), ABISELECT(112,68), "S19595C3");
    /*is_ambiguous_... S19595C3::S19595C9 */ AMB_check_base_class_offset(lv, (S19595C10*)(S19595C9*), ABISELECT(48,28), "S19595C3");
    /*is_ambiguous_... S19595C3::S19595C9 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19595C9*), ABISELECT(64,36), "S19595C3");
    /*is_ambiguous_... S19595C3::S19595C9 */ AMB_check_base_class_offset(lv, (S19595C9*), ABISELECT(48,28), "S19595C3");
    check_field_offset(lv, s19595c3f0, ABISELECT(104,64), "S19595C3.s19595c3f0");
    test_class_info(&lv, &cd_S19595C3);
    dp->~S19595C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19595C3(Test_S19595C3, "S19595C3", ABISELECT(336,200));

#else // __cplusplus

extern void _ZN8S19595C3C1Ev();
extern void _ZN8S19595C3D1Ev();
Name_Map name_map_S19595C3[] = {
  NSPAIR(_ZN8S19595C3C1Ev),
  NSPAIR(_ZN8S19595C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S19595C5;
extern VTBL_ENTRY _ZTI8S19595C5[];
extern  VTBL_ENTRY _ZTV8S19595C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C5[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19595C5;
extern VTBL_ENTRY _ZTI8S19595C5[];
extern  VTBL_ENTRY _ZTV8S19595C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C5[];
extern Class_Descriptor cd_S19595C10;
extern VTBL_ENTRY _ZTI9S19595C10[];
extern  VTBL_ENTRY _ZTV9S19595C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19595C10[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19595C9;
extern VTBL_ENTRY _ZTI8S19595C9[];
extern  VTBL_ENTRY _ZTV8S19595C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C9[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S19595C5;
extern VTBL_ENTRY _ZTI8S19595C5[];
extern  VTBL_ENTRY _ZTV8S19595C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C5[];
extern Class_Descriptor cd_S19595C8;
extern VTBL_ENTRY _ZTI8S19595C8[];
extern  VTBL_ENTRY _ZTV8S19595C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C8[];
extern Class_Descriptor cd_S19595C5;
extern VTBL_ENTRY _ZTI8S19595C5[];
extern  VTBL_ENTRY _ZTV8S19595C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C5[];
extern Class_Descriptor cd_S19595C6;
extern VTBL_ENTRY _ZTI8S19595C6[];
extern  VTBL_ENTRY _ZTV8S19595C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C6[];
extern Class_Descriptor cd_S19595C10;
extern VTBL_ENTRY _ZTI9S19595C10[];
extern  VTBL_ENTRY _ZTV9S19595C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19595C10[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19595C9;
extern VTBL_ENTRY _ZTI8S19595C9[];
extern  VTBL_ENTRY _ZTV8S19595C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C9[];
static Base_Class bases_S19595C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    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
  1, 1},
  {&cd_S19595C5,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19595C5,    ABISELECT(288,172), //bcp->offset
    49, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19595C10,    ABISELECT(224,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(240,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19595C9,    ABISELECT(224,136), //bcp->offset
    42, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19905C19,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S19595C5,    ABISELECT(176,104), //bcp->offset
    36, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19595C8,    ABISELECT(160,96), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19595C5,    ABISELECT(112,68), //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
    12, //immediately_derived
  0, 0},
  {&cd_S19595C6,    ABISELECT(112,68), //bcp->offset
    18, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19595C10,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S17777C6_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
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19595C9,    ABISELECT(48,28), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19595C3[];
extern void ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev)();
extern void _ZN8S19595C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev)();
extern void _ZN8S19595C3D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev)();
extern void ABISELECT(_ZThn48_N8S19595C3D1Ev,_ZThn28_N8S19595C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev)();
extern void ABISELECT(_ZThn48_N8S19595C3D0Ev,_ZThn28_N8S19595C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev)();
extern void ABISELECT(_ZThn112_N8S19595C3D1Ev,_ZThn68_N8S19595C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev)();
extern void ABISELECT(_ZThn112_N8S19595C3D0Ev,_ZThn68_N8S19595C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19595C3D1Ev,_ZTv0_n24_N8S19595C3D1Ev)();
extern void ABISELECT(_ZThn160_N8S19595C3D1Ev,_ZThn96_N8S19595C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19595C3D0Ev,_ZTv0_n24_N8S19595C3D0Ev)();
extern void ABISELECT(_ZThn160_N8S19595C3D0Ev,_ZThn96_N8S19595C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev)();
extern void ABISELECT(_ZThn176_N8S19595C3D1Ev,_ZThn104_N8S19595C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev)();
extern void ABISELECT(_ZThn176_N8S19595C3D0Ev,_ZThn104_N8S19595C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev)();
extern void ABISELECT(_ZThn224_N8S19595C3D1Ev,_ZThn136_N8S19595C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev)();
extern void ABISELECT(_ZThn224_N8S19595C3D0Ev,_ZThn136_N8S19595C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev)();
extern void ABISELECT(_ZThn288_N8S19595C3D1Ev,_ZThn172_N8S19595C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev)();
extern void ABISELECT(_ZThn288_N8S19595C3D0Ev,_ZThn172_N8S19595C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19595C3[] = {
  ABISELECT(288,172),
  ABISELECT(224,136),
  ABISELECT(160,96),
  0,
  ABISELECT(112,68),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev),
  ABISELECT(240,144),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev),
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S19595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev),
  ABISELECT(-160,-96),
  ABISELECT(128,76),
  ABISELECT(-160,-96),
  ABISELECT(64,40),
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI8S19595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19595C3D1Ev,_ZTv0_n24_N8S19595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19595C3D0Ev,_ZTv0_n24_N8S19595C3D0Ev),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI8S19595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev),
  ABISELECT(64,36),
  ABISELECT(-224,-136),
  ABISELECT(-224,-136),
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI8S19595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev),
  ABISELECT(-288,-172),
  ABISELECT(-288,-172),
  ABISELECT(-288,-172),
  (VTBL_ENTRY)&(_ZTI8S19595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev),
};
extern VTBL_ENTRY _ZTV8S19595C3[];
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void _ZN8S19595C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
extern void _ZN8S19595C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__A__8S19595C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev)();
extern void _ZN8S19595C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev)();
extern void _ZN8S19595C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C9__A__8S19595C3[] = {
  ABISELECT(240,144),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev)();
extern void _ZN9S19595C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev)();
extern void _ZN9S19595C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19595C108S19595C9__A1__8S19595C3[] = {
  ABISELECT(240,144),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19595C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__9S19595C108S19595C9__A1__8S19595C3[] = {
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI9S19595C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev)();
extern void ABISELECT(_ZThn240_N9S19595C10D1Ev,_ZThn144_N9S19595C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev)();
extern void ABISELECT(_ZThn240_N9S19595C10D0Ev,_ZThn144_N9S19595C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__9S19595C108S19595C9__A1__8S19595C3[] = {
  ABISELECT(-288,-172),
  ABISELECT(-240,-144),
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI9S19595C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C9__A__8S19595C3[] = {
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S19595C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev)();
extern void ABISELECT(_ZThn240_N8S19595C9D1Ev,_ZThn144_N8S19595C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev)();
extern void ABISELECT(_ZThn240_N8S19595C9D0Ev,_ZThn144_N8S19595C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__8S19595C9__A__8S19595C3[] = {
  ABISELECT(-288,-172),
  ABISELECT(-240,-144),
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI8S19595C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev)();
extern void _ZN8S19595C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev)();
extern void _ZN8S19595C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C6__8S19595C3[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void _ZN8S19595C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
extern void _ZN8S19595C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C58S19595C6__A3__8S19595C3[] = {
  ABISELECT(-112,-68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C58S19595C6__A3__8S19595C3[] = {
  ABISELECT(112,68),
  ABISELECT(112,68),
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19595C6D1Ev,_ZTv0_n24_N8S19595C6D1Ev)();
extern void ABISELECT(_ZThn48_N8S19595C6D1Ev,_ZThn28_N8S19595C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19595C6D0Ev,_ZTv0_n24_N8S19595C6D0Ev)();
extern void ABISELECT(_ZThn48_N8S19595C6D0Ev,_ZThn28_N8S19595C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C8__8S19595C6__8S19595C3[] = {
  ABISELECT(-48,-28),
  ABISELECT(128,76),
  ABISELECT(-160,-96),
  ABISELECT(64,40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19595C6D1Ev,_ZTv0_n24_N8S19595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19595C6D0Ev,_ZTv0_n24_N8S19595C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev)();
extern void ABISELECT(_ZThn112_N8S19595C6D1Ev,_ZThn68_N8S19595C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev)();
extern void ABISELECT(_ZThn112_N8S19595C6D0Ev,_ZThn68_N8S19595C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C9__8S19595C6__8S19595C3[] = {
  ABISELECT(64,36),
  ABISELECT(-224,-136),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S19595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C6__8S19595C3[] = {
  ABISELECT(112,68),
  ABISELECT(112,68),
  (VTBL_ENTRY)&(_ZTI8S19595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev)();
extern void ABISELECT(_ZThn176_N8S19595C6D1Ev,_ZThn104_N8S19595C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev)();
extern void ABISELECT(_ZThn176_N8S19595C6D0Ev,_ZThn104_N8S19595C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__8S19595C6__8S19595C3[] = {
  ABISELECT(-288,-172),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI8S19595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S19595C6D1Ev,_ZThn36_N8S19595C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S19595C6D0Ev,_ZThn36_N8S19595C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C58S19595C8__A1__8S19595C6__8S19595C3[] = {
  ABISELECT(-176,-104),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev),
};
extern void _ZN8S19595C8D1Ev();
extern void _ZN8S19595C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19595C8__8S19595C3[] = {
  ABISELECT(128,76),
  ABISELECT(-160,-96),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C8[0]),
  (VTBL_ENTRY)&_ZN8S19595C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19595C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void _ZN8S19595C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
extern void _ZN8S19595C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C58S19595C8__A2__8S19595C3[] = {
  ABISELECT(-176,-104),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C58S19595C8__A2__8S19595C3[] = {
  ABISELECT(176,104),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S19595C8D1Ev,_ZThn40_N8S19595C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S19595C8D0Ev,_ZThn40_N8S19595C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C9__8S19595C8__8S19595C3[] = {
  ABISELECT(64,36),
  ABISELECT(-224,-136),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C8__8S19595C3[] = {
  ABISELECT(160,96),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI8S19595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev)();
extern void ABISELECT(_ZThn128_N8S19595C8D1Ev,_ZThn76_N8S19595C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev)();
extern void ABISELECT(_ZThn128_N8S19595C8D0Ev,_ZThn76_N8S19595C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__8S19595C8__8S19595C3[] = {
  ABISELECT(-288,-172),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S19595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19595C8D1Ev,_ZThn8_N8S19595C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S19595C8D0Ev,_ZThn8_N8S19595C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__A__8S19595C8__8S19595C3[] = {
  ABISELECT(-176,-104),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev)();
extern void _ZN8S19595C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev)();
extern void _ZN8S19595C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C9__8S19595C3[] = {
  ABISELECT(64,36),
  ABISELECT(-224,-136),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev)();
extern void _ZN9S19595C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev)();
extern void _ZN9S19595C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19595C108S19595C9__8S19595C3[] = {
  ABISELECT(64,36),
  ABISELECT(-224,-136),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19595C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__9S19595C108S19595C9__8S19595C3[] = {
  ABISELECT(224,136),
  ABISELECT(224,136),
  (VTBL_ENTRY)&(_ZTI9S19595C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev)();
extern void ABISELECT(_ZThn64_N9S19595C10D1Ev,_ZThn36_N9S19595C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev)();
extern void ABISELECT(_ZThn64_N9S19595C10D0Ev,_ZThn36_N9S19595C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__9S19595C108S19595C9__8S19595C3[] = {
  ABISELECT(-288,-172),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19595C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C9__8S19595C3[] = {
  ABISELECT(224,136),
  ABISELECT(224,136),
  (VTBL_ENTRY)&(_ZTI8S19595C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev)();
extern void ABISELECT(_ZThn64_N8S19595C9D1Ev,_ZThn36_N8S19595C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev)();
extern void ABISELECT(_ZThn64_N8S19595C9D0Ev,_ZThn36_N8S19595C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__8S19595C9__8S19595C3[] = {
  ABISELECT(-288,-172),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19595C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void _ZN8S19595C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
extern void _ZN8S19595C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__A1__8S19595C3[] = {
  ABISELECT(-288,-172),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C5__A1__8S19595C3[] = {
  ABISELECT(288,172),
  ABISELECT(288,172),
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
static  VTT_ENTRY vtt_S19595C3[] = {
  {&(_ZTV8S19595C3[9]),  9,55},
  {&(_tg__ZTV8S19595C5__A__8S19595C3[4]),  4,6},
  {&(_tg__ZTV8S19595C5__A__8S19595C3[4]),  4,6},
  {&(_tg__ZTV8S19595C9__A__8S19595C3[5]),  5,7},
  {&(_tg__ZTV9S19595C108S19595C9__A1__8S19595C3[5]),  5,7},
  {&(_tg__ZTV9S19905C19__9S19595C108S19595C9__A1__8S19595C3[3]),  3,5},
  {&(_tg__ZTV8S19595C5__9S19595C108S19595C9__A1__8S19595C3[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S19595C9__A__8S19595C3[3]),  3,5},
  {&(_tg__ZTV8S19595C5__8S19595C9__A__8S19595C3[4]),  4,6},
  {&(_ZTV8S19595C3[9]),  9,55},
  {&(_ZTV8S19595C3[26]),  26,55},
  {&(_ZTV8S19595C3[34]),  34,55},
  {&(_ZTV8S19595C3[47]),  47,55},
  {&(_ZTV8S19595C3[53]),  53,55},
  {&(_ZTV8S19595C3[40]),  40,55},
  {&(_ZTV8S19595C3[16]),  16,55},
  {&(_tg__ZTV8S19595C6__8S19595C3[8]),  8,10},
  {&(_tg__ZTV8S19595C58S19595C6__A3__8S19595C3[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S19595C58S19595C6__A3__8S19595C3[3]),  3,5},
  {&(_tg__ZTV8S19595C8__8S19595C6__8S19595C3[6]),  6,8},
  {&(_tg__ZTV8S19595C9__8S19595C6__8S19595C3[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S19595C6__8S19595C3[3]),  3,5},
  {&(_tg__ZTV8S19595C5__8S19595C6__8S19595C3[4]),  4,6},
  {&(_tg__ZTV8S19595C58S19595C8__A1__8S19595C6__8S19595C3[4]),  4,6},
  {&(_tg__ZTV8S19595C8__8S19595C3[5]),  5,7},
  {&(_tg__ZTV8S19595C58S19595C8__A2__8S19595C3[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S19595C58S19595C8__A2__8S19595C3[3]),  3,5},
  {&(_tg__ZTV8S19595C9__8S19595C8__8S19595C3[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S19595C8__8S19595C3[3]),  3,5},
  {&(_tg__ZTV8S19595C5__8S19595C8__8S19595C3[4]),  4,6},
  {&(_tg__ZTV8S19595C5__A__8S19595C8__8S19595C3[4]),  4,6},
  {&(_tg__ZTV8S19595C9__8S19595C3[5]),  5,7},
  {&(_tg__ZTV9S19595C108S19595C9__8S19595C3[5]),  5,7},
  {&(_tg__ZTV9S19905C19__9S19595C108S19595C9__8S19595C3[3]),  3,5},
  {&(_tg__ZTV8S19595C5__9S19595C108S19595C9__8S19595C3[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S19595C9__8S19595C3[3]),  3,5},
  {&(_tg__ZTV8S19595C5__8S19595C9__8S19595C3[4]),  4,6},
  {&(_tg__ZTV8S19595C5__A1__8S19595C3[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S19595C5__A1__8S19595C3[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19595C3[];
extern  VTBL_ENTRY _ZTV8S19595C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C3[];
static VTBL_ENTRY alt_thunk_names109[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19595C8D0Ev,_ZThn8_N8S19595C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19595C8D0Ev,_ZThn76_N8S19595C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C8D0Ev,_ZThn40_N8S19595C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19595C8D1Ev,_ZThn8_N8S19595C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19595C8D1Ev,_ZThn76_N8S19595C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C8D1Ev,_ZThn40_N8S19595C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19595C6D0Ev,_ZTv0_n24_N8S19595C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19595C6D0Ev,_ZThn28_N8S19595C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19595C6D1Ev,_ZTv0_n24_N8S19595C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19595C6D1Ev,_ZThn28_N8S19595C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C6D0Ev,_ZThn36_N8S19595C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S19595C6D0Ev,_ZThn104_N8S19595C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19595C6D0Ev,_ZThn68_N8S19595C6D0Ev),
  (VTBL_ENTRY)_ZN8S19595C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C6D1Ev,_ZThn36_N8S19595C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S19595C6D1Ev,_ZThn104_N8S19595C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19595C6D1Ev,_ZThn68_N8S19595C6D1Ev),
  (VTBL_ENTRY)_ZN8S19595C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19595C10D0Ev,_ZThn36_N9S19595C10D0Ev),
  (VTBL_ENTRY)_ZN9S19595C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19595C10D0Ev,_ZThn144_N9S19595C10D0Ev),
  (VTBL_ENTRY)_ZN9S19595C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19595C10D1Ev,_ZThn36_N9S19595C10D1Ev),
  (VTBL_ENTRY)_ZN9S19595C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19595C10D1Ev,_ZThn144_N9S19595C10D1Ev),
  (VTBL_ENTRY)_ZN9S19595C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C9D0Ev,_ZThn36_N8S19595C9D0Ev),
  (VTBL_ENTRY)_ZN8S19595C9D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19595C9D0Ev,_ZThn144_N8S19595C9D0Ev),
  (VTBL_ENTRY)_ZN8S19595C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C9D1Ev,_ZThn36_N8S19595C9D1Ev),
  (VTBL_ENTRY)_ZN8S19595C9D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19595C9D1Ev,_ZThn144_N8S19595C9D1Ev),
  (VTBL_ENTRY)_ZN8S19595C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S19595C5D0Ev,
  (VTBL_ENTRY)_ZN8S19595C5D0Ev,
  (VTBL_ENTRY)_ZN8S19595C5D0Ev,
  (VTBL_ENTRY)_ZN8S19595C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S19595C5D1Ev,
  (VTBL_ENTRY)_ZN8S19595C5D1Ev,
  (VTBL_ENTRY)_ZN8S19595C5D1Ev,
  (VTBL_ENTRY)_ZN8S19595C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19595C3D0Ev,_ZTv0_n24_N8S19595C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19595C3D0Ev,_ZThn96_N8S19595C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19595C3D1Ev,_ZTv0_n24_N8S19595C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19595C3D1Ev,_ZThn96_N8S19595C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19595C3D0Ev,_ZThn172_N8S19595C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19595C3D0Ev,_ZThn136_N8S19595C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S19595C3D0Ev,_ZThn104_N8S19595C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19595C3D0Ev,_ZThn68_N8S19595C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19595C3D0Ev,_ZThn28_N8S19595C3D0Ev),
  (VTBL_ENTRY)_ZN8S19595C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19595C3D1Ev,_ZThn172_N8S19595C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19595C3D1Ev,_ZThn136_N8S19595C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S19595C3D1Ev,_ZThn104_N8S19595C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19595C3D1Ev,_ZThn68_N8S19595C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19595C3D1Ev,_ZThn28_N8S19595C3D1Ev),
  (VTBL_ENTRY)_ZN8S19595C3D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19595C3 = {  "S19595C3", // class name
  bases_S19595C3, 16,
  &(vtc_S19595C3[0]), // expected_vtbl_contents
  &(vtt_S19595C3[0]), // expected_vtt_contents
  ABISELECT(336,200), // object size
  NSPAIRA(_ZTI8S19595C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19595C3),55, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19595C3),39, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names109,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19595C2  : S19595C3 {
  void *s19595c2f0;
  ~S19595C2(); // tgen
  S19595C2(); // tgen
};
//SIG(-1 S19595C2) C1{ BC2{ VBC3{ vd m} BC4{ VBC3 FD Fc Fs[4]} VBC5{ VBC6{ m} VBC7{ VBC8{ VBC3 BC9{ VBC3 VBC4 vd Fi} BC10{ m Fp} vd Fs FL Fp FL} BC10 BC3 BC4 vd Fi} BC4 vd Fs} BC8 Fp} Fp}


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

static void Test_S19595C2()
{
  extern Class_Descriptor cd_S19595C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(23,52)];
    init_test(&cd_S19595C2, buf);
    S19595C2 *dp, &lv = *(dp=new (buf) S19595C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,204), "sizeof(S19595C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19595C2)");
    /*is_ambiguous_... S19595C3::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C3*), 0, "S19595C2");
    /*is_ambiguous_... S19595C3::S19595C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C5*)(S19595C3*), 0, "S19595C2");
    /*is_ambiguous_... S19595C2::S19595C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C9*), 0, "S19595C2");
    /*is_ambiguous_... S19595C2::S19595C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C10*)(S19595C9*), 0, "S19595C2");
    /*is_ambiguous_... S19595C2::S19595C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C5*), 0, "S19595C2");
    /*is_ambiguous_... S19595C8::S19595C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C5*)(S19595C8*), 0, "S19595C2");
    /*is_ambiguous_... S19595C6::S19595C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C5*)(S19595C6*), 0, "S19595C2");
    /*is_ambiguous_... S19595C3::S19595C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C9*)(S19595C3*), 0, "S19595C2");
    /*is_ambiguous_... S19595C3::S19595C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C10*)(S19595C9*)(S19595C3*), 0, "S19595C2");
    /*is_ambiguous_... S19595C3::S19595C5 */ AMB_check_base_class_offset(lv, (S19595C5*)(S19595C3*), 0, "S19595C2");
    check_base_class_offset(lv, (S5266C29*)(S19595C6*), 0, "S19595C2");
    /*is_ambiguous_... S19595C2::S19595C9 */ AMB_check_base_class_offset(lv, (S19595C5*)(S19595C10*)(S19595C9*), ABISELECT(304,176), "S19595C2");
    /*is_ambiguous_... S19595C3::S19595C9 */ AMB_check_base_class_offset(lv, (S19595C5*)(S19595C10*)(S19595C9*)(S19595C3*), ABISELECT(304,176), "S19595C2");
    /*is_ambiguous_... S19595C2::S19595C9 */ AMB_check_base_class_offset(lv, (S19595C10*)(S19595C9*), ABISELECT(240,140), "S19595C2");
    /*is_ambiguous_... S19595C2::S19595C9 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19595C9*), ABISELECT(256,148), "S19595C2");
    check_base_class_offset(lv, (S19595C9*)(S19595C8*), ABISELECT(240,140), "S19595C2");
    /*is_ambiguous_... S19595C8::S17777C6_nt */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19595C8*), ABISELECT(184,104), "S19595C2");
    /*is_ambiguous_... S19595C8::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C8*), ABISELECT(176,100), "S19595C2");
    /*is_ambiguous_... S19595C8::S19595C5 */ AMB_check_base_class_offset(lv, (S19595C5*)(S19595C8*), ABISELECT(192,108), "S19595C2");
    check_base_class_offset(lv, (S19595C8*)(S19595C6*), ABISELECT(176,100), "S19595C2");
    /*is_ambiguous_... S19595C6::S19595C5 */ AMB_check_base_class_offset(lv, (S19595C5*)(S19595C6*), ABISELECT(128,72), "S19595C2");
    check_base_class_offset(lv, (S19595C6*)(S19595C3*), ABISELECT(128,72), "S19595C2");
    /*is_ambiguous_... S19595C3::S19595C9 */ AMB_check_base_class_offset(lv, (S19595C10*)(S19595C9*)(S19595C3*), ABISELECT(48,28), "S19595C2");
    /*is_ambiguous_... S19595C3::S19595C9 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19595C9*)(S19595C3*), ABISELECT(64,36), "S19595C2");
    /*is_ambiguous_... S19595C3::S19595C9 */ AMB_check_base_class_offset(lv, (S19595C9*)(S19595C3*), ABISELECT(48,28), "S19595C2");
    check_base_class_offset(lv, (S19595C3*), 0, "S19595C2");
    check_field_offset(lv, s19595c2f0, ABISELECT(112,68), "S19595C2.s19595c2f0");
    test_class_info(&lv, &cd_S19595C2);
    dp->~S19595C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19595C2(Test_S19595C2, "S19595C2", ABISELECT(352,204));

#else // __cplusplus

extern void _ZN8S19595C2C1Ev();
extern void _ZN8S19595C2D1Ev();
Name_Map name_map_S19595C2[] = {
  NSPAIR(_ZN8S19595C2C1Ev),
  NSPAIR(_ZN8S19595C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S19595C5;
extern VTBL_ENTRY _ZTI8S19595C5[];
extern  VTBL_ENTRY _ZTV8S19595C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C5[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19595C5;
extern VTBL_ENTRY _ZTI8S19595C5[];
extern  VTBL_ENTRY _ZTV8S19595C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C5[];
extern Class_Descriptor cd_S19595C10;
extern VTBL_ENTRY _ZTI9S19595C10[];
extern  VTBL_ENTRY _ZTV9S19595C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19595C10[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19595C9;
extern VTBL_ENTRY _ZTI8S19595C9[];
extern  VTBL_ENTRY _ZTV8S19595C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C9[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S19595C5;
extern VTBL_ENTRY _ZTI8S19595C5[];
extern  VTBL_ENTRY _ZTV8S19595C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C5[];
extern Class_Descriptor cd_S19595C8;
extern VTBL_ENTRY _ZTI8S19595C8[];
extern  VTBL_ENTRY _ZTV8S19595C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C8[];
extern Class_Descriptor cd_S19595C5;
extern VTBL_ENTRY _ZTI8S19595C5[];
extern  VTBL_ENTRY _ZTV8S19595C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C5[];
extern Class_Descriptor cd_S19595C6;
extern VTBL_ENTRY _ZTI8S19595C6[];
extern  VTBL_ENTRY _ZTV8S19595C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C6[];
extern Class_Descriptor cd_S19595C10;
extern VTBL_ENTRY _ZTI9S19595C10[];
extern  VTBL_ENTRY _ZTV9S19595C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19595C10[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19595C9;
extern VTBL_ENTRY _ZTI8S19595C9[];
extern  VTBL_ENTRY _ZTV8S19595C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C9[];
extern Class_Descriptor cd_S19595C3;
extern VTBL_ENTRY _ZTI8S19595C3[];
extern  VTBL_ENTRY _ZTV8S19595C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C3[];
static Base_Class bases_S19595C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19595C5,    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
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19595C5,    ABISELECT(304,176), //bcp->offset
    49, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19595C10,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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_S17777C6_nt,    ABISELECT(256,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
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19595C9,    ABISELECT(240,140), //bcp->offset
    42, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(184,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
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19905C19,    ABISELECT(176,100), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S19595C5,    ABISELECT(192,108), //bcp->offset
    36, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19595C8,    ABISELECT(176,100), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19595C5,    ABISELECT(128,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    12, //immediately_derived
  0, 0},
  {&cd_S19595C6,    ABISELECT(128,72), //bcp->offset
    18, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19595C10,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S17777C6_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
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19595C9,    ABISELECT(48,28), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19595C3,    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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19595C2[];
extern void ABISELECT(_ZTv0_n24_N8S19595C2D1Ev,_ZTv0_n12_N8S19595C2D1Ev)();
extern void _ZN8S19595C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C2D0Ev,_ZTv0_n12_N8S19595C2D0Ev)();
extern void _ZN8S19595C2D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C2D1Ev,_ZTv0_n12_N8S19595C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S19595C2D1Ev,_ZThn28_N8S19595C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C2D0Ev,_ZTv0_n12_N8S19595C2D0Ev)();
extern void ABISELECT(_ZThn48_N8S19595C2D0Ev,_ZThn28_N8S19595C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C2D1Ev,_ZTv0_n12_N8S19595C2D1Ev)();
extern void ABISELECT(_ZThn128_N8S19595C2D1Ev,_ZThn72_N8S19595C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C2D0Ev,_ZTv0_n12_N8S19595C2D0Ev)();
extern void ABISELECT(_ZThn128_N8S19595C2D0Ev,_ZThn72_N8S19595C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19595C2D1Ev,_ZTv0_n24_N8S19595C2D1Ev)();
extern void ABISELECT(_ZThn176_N8S19595C2D1Ev,_ZThn100_N8S19595C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19595C2D0Ev,_ZTv0_n24_N8S19595C2D0Ev)();
extern void ABISELECT(_ZThn176_N8S19595C2D0Ev,_ZThn100_N8S19595C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C2D1Ev,_ZTv0_n12_N8S19595C2D1Ev)();
extern void ABISELECT(_ZThn192_N8S19595C2D1Ev,_ZThn108_N8S19595C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C2D0Ev,_ZTv0_n12_N8S19595C2D0Ev)();
extern void ABISELECT(_ZThn192_N8S19595C2D0Ev,_ZThn108_N8S19595C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C2D1Ev,_ZTv0_n12_N8S19595C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19595C2D1Ev,_ZThn140_N8S19595C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C2D0Ev,_ZTv0_n12_N8S19595C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19595C2D0Ev,_ZThn140_N8S19595C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C2D1Ev,_ZTv0_n12_N8S19595C2D1Ev)();
extern void ABISELECT(_ZThn304_N8S19595C2D1Ev,_ZThn176_N8S19595C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C2D0Ev,_ZTv0_n12_N8S19595C2D0Ev)();
extern void ABISELECT(_ZThn304_N8S19595C2D0Ev,_ZThn176_N8S19595C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19595C2[] = {
  ABISELECT(304,176),
  ABISELECT(240,140),
  ABISELECT(176,100),
  0,
  ABISELECT(128,72),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C2D1Ev,_ZTv0_n12_N8S19595C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C2D0Ev,_ZTv0_n12_N8S19595C2D0Ev),
  ABISELECT(256,148),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19595C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C2D1Ev,_ZTv0_n12_N8S19595C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C2D0Ev,_ZTv0_n12_N8S19595C2D0Ev),
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S19595C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C2D1Ev,_ZTv0_n12_N8S19595C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C2D0Ev,_ZTv0_n12_N8S19595C2D0Ev),
  ABISELECT(-176,-100),
  ABISELECT(128,76),
  ABISELECT(-176,-100),
  ABISELECT(64,40),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S19595C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19595C2D1Ev,_ZTv0_n24_N8S19595C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19595C2D0Ev,_ZTv0_n24_N8S19595C2D0Ev),
  ABISELECT(-192,-108),
  ABISELECT(-192,-108),
  ABISELECT(-192,-108),
  (VTBL_ENTRY)&(_ZTI8S19595C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C2D1Ev,_ZTv0_n12_N8S19595C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C2D0Ev,_ZTv0_n12_N8S19595C2D0Ev),
  ABISELECT(64,36),
  ABISELECT(-240,-140),
  ABISELECT(-240,-140),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI8S19595C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C2D1Ev,_ZTv0_n12_N8S19595C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C2D0Ev,_ZTv0_n12_N8S19595C2D0Ev),
  ABISELECT(-304,-176),
  ABISELECT(-304,-176),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI8S19595C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C2D1Ev,_ZTv0_n12_N8S19595C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C2D0Ev,_ZTv0_n12_N8S19595C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S19595C2[];
extern void ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev)();
extern void _ZN8S19595C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev)();
extern void _ZN8S19595C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C3__8S19595C2[] = {
  ABISELECT(304,176),
  ABISELECT(240,140),
  ABISELECT(176,100),
  0,
  ABISELECT(128,72),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void _ZN8S19595C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
extern void _ZN8S19595C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C58S19595C3__8S19595C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev)();
extern void _ZN8S19595C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev)();
extern void _ZN8S19595C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C98S19595C3__A1__8S19595C2[] = {
  ABISELECT(256,148),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev)();
extern void _ZN9S19595C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev)();
extern void _ZN9S19595C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19595C108S19595C98S19595C3__A1__8S19595C2[] = {
  ABISELECT(256,148),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19595C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__9S19595C108S19595C98S19595C3__A1__8S19595C2[] = {
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI9S19595C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev)();
extern void ABISELECT(_ZThn256_N9S19595C10D1Ev,_ZThn148_N9S19595C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev)();
extern void ABISELECT(_ZThn256_N9S19595C10D0Ev,_ZThn148_N9S19595C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__9S19595C108S19595C98S19595C3__A1__8S19595C2[] = {
  ABISELECT(-304,-176),
  ABISELECT(-256,-148),
  ABISELECT(-256,-148),
  (VTBL_ENTRY)&(_ZTI9S19595C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C98S19595C3__A1__8S19595C2[] = {
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S19595C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev)();
extern void ABISELECT(_ZThn256_N8S19595C9D1Ev,_ZThn148_N8S19595C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev)();
extern void ABISELECT(_ZThn256_N8S19595C9D0Ev,_ZThn148_N8S19595C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__8S19595C98S19595C3__A1__8S19595C2[] = {
  ABISELECT(-304,-176),
  ABISELECT(-256,-148),
  ABISELECT(-256,-148),
  (VTBL_ENTRY)&(_ZTI8S19595C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev)();
extern void ABISELECT(_ZThn128_N8S19595C3D1Ev,_ZThn72_N8S19595C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev)();
extern void ABISELECT(_ZThn128_N8S19595C3D0Ev,_ZThn72_N8S19595C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C6__8S19595C3__8S19595C2[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S19595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19595C3D1Ev,_ZTv0_n24_N8S19595C3D1Ev)();
extern void ABISELECT(_ZThn176_N8S19595C3D1Ev,_ZThn100_N8S19595C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19595C3D0Ev,_ZTv0_n24_N8S19595C3D0Ev)();
extern void ABISELECT(_ZThn176_N8S19595C3D0Ev,_ZThn100_N8S19595C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C8__8S19595C3__8S19595C2[] = {
  ABISELECT(-176,-100),
  ABISELECT(128,76),
  ABISELECT(-176,-100),
  ABISELECT(64,40),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S19595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19595C3D1Ev,_ZTv0_n24_N8S19595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19595C3D0Ev,_ZTv0_n24_N8S19595C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev)();
extern void ABISELECT(_ZThn240_N8S19595C3D1Ev,_ZThn140_N8S19595C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev)();
extern void ABISELECT(_ZThn240_N8S19595C3D0Ev,_ZThn140_N8S19595C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C9__8S19595C3__8S19595C2[] = {
  ABISELECT(64,36),
  ABISELECT(-240,-140),
  ABISELECT(-240,-140),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI8S19595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev)();
extern void ABISELECT(_ZThn304_N8S19595C3D1Ev,_ZThn176_N8S19595C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev)();
extern void ABISELECT(_ZThn304_N8S19595C3D0Ev,_ZThn176_N8S19595C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__A1__8S19595C3__8S19595C2[] = {
  ABISELECT(-304,-176),
  ABISELECT(-304,-176),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI8S19595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev)();
extern void ABISELECT(_ZThn192_N8S19595C3D1Ev,_ZThn108_N8S19595C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev)();
extern void ABISELECT(_ZThn192_N8S19595C3D0Ev,_ZThn108_N8S19595C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C58S19595C8__A2__8S19595C3__8S19595C2[] = {
  ABISELECT(-192,-108),
  ABISELECT(-192,-108),
  ABISELECT(-192,-108),
  (VTBL_ENTRY)&(_ZTI8S19595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev)();
extern void ABISELECT(_ZThn48_N8S19595C3D1Ev,_ZThn28_N8S19595C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev)();
extern void ABISELECT(_ZThn48_N8S19595C3D0Ev,_ZThn28_N8S19595C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C9__A__8S19595C3__8S19595C2[] = {
  ABISELECT(256,148),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev)();
extern void _ZN8S19595C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev)();
extern void _ZN8S19595C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C6__8S19595C2[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void _ZN8S19595C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
extern void _ZN8S19595C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C58S19595C6__A3__8S19595C2[] = {
  ABISELECT(-128,-72),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C58S19595C6__A3__8S19595C2[] = {
  ABISELECT(128,72),
  ABISELECT(128,72),
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19595C6D1Ev,_ZTv0_n24_N8S19595C6D1Ev)();
extern void ABISELECT(_ZThn48_N8S19595C6D1Ev,_ZThn28_N8S19595C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19595C6D0Ev,_ZTv0_n24_N8S19595C6D0Ev)();
extern void ABISELECT(_ZThn48_N8S19595C6D0Ev,_ZThn28_N8S19595C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C8__8S19595C6__8S19595C2[] = {
  ABISELECT(-48,-28),
  ABISELECT(128,76),
  ABISELECT(-176,-100),
  ABISELECT(64,40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19595C6D1Ev,_ZTv0_n24_N8S19595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19595C6D0Ev,_ZTv0_n24_N8S19595C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev)();
extern void ABISELECT(_ZThn112_N8S19595C6D1Ev,_ZThn68_N8S19595C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev)();
extern void ABISELECT(_ZThn112_N8S19595C6D0Ev,_ZThn68_N8S19595C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C9__8S19595C6__8S19595C2[] = {
  ABISELECT(64,36),
  ABISELECT(-240,-140),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S19595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C6__8S19595C2[] = {
  ABISELECT(128,72),
  ABISELECT(128,72),
  (VTBL_ENTRY)&(_ZTI8S19595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev)();
extern void ABISELECT(_ZThn176_N8S19595C6D1Ev,_ZThn104_N8S19595C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev)();
extern void ABISELECT(_ZThn176_N8S19595C6D0Ev,_ZThn104_N8S19595C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__8S19595C6__8S19595C2[] = {
  ABISELECT(-304,-176),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI8S19595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S19595C6D1Ev,_ZThn36_N8S19595C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S19595C6D0Ev,_ZThn36_N8S19595C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C58S19595C8__A1__8S19595C6__8S19595C2[] = {
  ABISELECT(-192,-108),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev),
};
extern void _ZN8S19595C8D1Ev();
extern void _ZN8S19595C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19595C8__8S19595C2[] = {
  ABISELECT(128,76),
  ABISELECT(-176,-100),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C8[0]),
  (VTBL_ENTRY)&_ZN8S19595C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19595C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void _ZN8S19595C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
extern void _ZN8S19595C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C58S19595C8__A2__8S19595C2[] = {
  ABISELECT(-192,-108),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C58S19595C8__A2__8S19595C2[] = {
  ABISELECT(192,108),
  ABISELECT(192,108),
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S19595C8D1Ev,_ZThn40_N8S19595C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S19595C8D0Ev,_ZThn40_N8S19595C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C9__8S19595C8__8S19595C2[] = {
  ABISELECT(64,36),
  ABISELECT(-240,-140),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C8__8S19595C2[] = {
  ABISELECT(176,100),
  ABISELECT(176,100),
  (VTBL_ENTRY)&(_ZTI8S19595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev)();
extern void ABISELECT(_ZThn128_N8S19595C8D1Ev,_ZThn76_N8S19595C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev)();
extern void ABISELECT(_ZThn128_N8S19595C8D0Ev,_ZThn76_N8S19595C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__8S19595C8__8S19595C2[] = {
  ABISELECT(-304,-176),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S19595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19595C8D1Ev,_ZThn8_N8S19595C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S19595C8D0Ev,_ZThn8_N8S19595C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__A__8S19595C8__8S19595C2[] = {
  ABISELECT(-192,-108),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev)();
extern void _ZN8S19595C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev)();
extern void _ZN8S19595C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C9__8S19595C2[] = {
  ABISELECT(64,36),
  ABISELECT(-240,-140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev)();
extern void _ZN9S19595C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev)();
extern void _ZN9S19595C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19595C108S19595C9__8S19595C2[] = {
  ABISELECT(64,36),
  ABISELECT(-240,-140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19595C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__9S19595C108S19595C9__8S19595C2[] = {
  ABISELECT(240,140),
  ABISELECT(240,140),
  (VTBL_ENTRY)&(_ZTI9S19595C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev)();
extern void ABISELECT(_ZThn64_N9S19595C10D1Ev,_ZThn36_N9S19595C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev)();
extern void ABISELECT(_ZThn64_N9S19595C10D0Ev,_ZThn36_N9S19595C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__9S19595C108S19595C9__8S19595C2[] = {
  ABISELECT(-304,-176),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19595C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C9__8S19595C2[] = {
  ABISELECT(240,140),
  ABISELECT(240,140),
  (VTBL_ENTRY)&(_ZTI8S19595C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev)();
extern void ABISELECT(_ZThn64_N8S19595C9D1Ev,_ZThn36_N8S19595C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev)();
extern void ABISELECT(_ZThn64_N8S19595C9D0Ev,_ZThn36_N8S19595C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__8S19595C9__8S19595C2[] = {
  ABISELECT(-304,-176),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19595C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void _ZN8S19595C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
extern void _ZN8S19595C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__A1__8S19595C2[] = {
  ABISELECT(-304,-176),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C5__A1__8S19595C2[] = {
  ABISELECT(304,176),
  ABISELECT(304,176),
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
static  VTT_ENTRY vtt_S19595C2[] = {
  {&(_ZTV8S19595C2[9]),  9,55},
  {&(_tg__ZTV8S19595C3__8S19595C2[9]),  9,11},
  {&(_tg__ZTV8S19595C58S19595C3__8S19595C2[4]),  4,6},
  {&(_tg__ZTV8S19595C58S19595C3__8S19595C2[4]),  4,6},
  {&(_tg__ZTV8S19595C98S19595C3__A1__8S19595C2[5]),  5,7},
  {&(_tg__ZTV9S19595C108S19595C98S19595C3__A1__8S19595C2[5]),  5,7},
  {&(_tg__ZTV9S19905C19__9S19595C108S19595C98S19595C3__A1__8S19595C2[3]),  3,5},
  {&(_tg__ZTV8S19595C5__9S19595C108S19595C98S19595C3__A1__8S19595C2[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S19595C98S19595C3__A1__8S19595C2[3]),  3,5},
  {&(_tg__ZTV8S19595C5__8S19595C98S19595C3__A1__8S19595C2[4]),  4,6},
  {&(_tg__ZTV8S19595C3__8S19595C2[9]),  9,11},
  {&(_tg__ZTV8S19595C6__8S19595C3__8S19595C2[8]),  8,10},
  {&(_tg__ZTV8S19595C8__8S19595C3__8S19595C2[6]),  6,8},
  {&(_tg__ZTV8S19595C9__8S19595C3__8S19595C2[5]),  5,7},
  {&(_tg__ZTV8S19595C5__A1__8S19595C3__8S19595C2[4]),  4,6},
  {&(_tg__ZTV8S19595C58S19595C8__A2__8S19595C3__8S19595C2[4]),  4,6},
  {&(_tg__ZTV8S19595C9__A__8S19595C3__8S19595C2[5]),  5,7},
  {&(_ZTV8S19595C2[9]),  9,55},
  {&(_ZTV8S19595C2[26]),  26,55},
  {&(_ZTV8S19595C2[34]),  34,55},
  {&(_ZTV8S19595C2[47]),  47,55},
  {&(_ZTV8S19595C2[53]),  53,55},
  {&(_ZTV8S19595C2[40]),  40,55},
  {&(_ZTV8S19595C2[16]),  16,55},
  {&(_tg__ZTV8S19595C6__8S19595C2[8]),  8,10},
  {&(_tg__ZTV8S19595C58S19595C6__A3__8S19595C2[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S19595C58S19595C6__A3__8S19595C2[3]),  3,5},
  {&(_tg__ZTV8S19595C8__8S19595C6__8S19595C2[6]),  6,8},
  {&(_tg__ZTV8S19595C9__8S19595C6__8S19595C2[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S19595C6__8S19595C2[3]),  3,5},
  {&(_tg__ZTV8S19595C5__8S19595C6__8S19595C2[4]),  4,6},
  {&(_tg__ZTV8S19595C58S19595C8__A1__8S19595C6__8S19595C2[4]),  4,6},
  {&(_tg__ZTV8S19595C8__8S19595C2[5]),  5,7},
  {&(_tg__ZTV8S19595C58S19595C8__A2__8S19595C2[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S19595C58S19595C8__A2__8S19595C2[3]),  3,5},
  {&(_tg__ZTV8S19595C9__8S19595C8__8S19595C2[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S19595C8__8S19595C2[3]),  3,5},
  {&(_tg__ZTV8S19595C5__8S19595C8__8S19595C2[4]),  4,6},
  {&(_tg__ZTV8S19595C5__A__8S19595C8__8S19595C2[4]),  4,6},
  {&(_tg__ZTV8S19595C9__8S19595C2[5]),  5,7},
  {&(_tg__ZTV9S19595C108S19595C9__8S19595C2[5]),  5,7},
  {&(_tg__ZTV9S19905C19__9S19595C108S19595C9__8S19595C2[3]),  3,5},
  {&(_tg__ZTV8S19595C5__9S19595C108S19595C9__8S19595C2[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S19595C9__8S19595C2[3]),  3,5},
  {&(_tg__ZTV8S19595C5__8S19595C9__8S19595C2[4]),  4,6},
  {&(_tg__ZTV8S19595C5__A1__8S19595C2[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S19595C5__A1__8S19595C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19595C2[];
extern  VTBL_ENTRY _ZTV8S19595C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C2[];
static VTBL_ENTRY alt_thunk_names110[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19595C8D0Ev,_ZThn8_N8S19595C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19595C8D0Ev,_ZThn76_N8S19595C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C8D0Ev,_ZThn40_N8S19595C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19595C8D1Ev,_ZThn8_N8S19595C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19595C8D1Ev,_ZThn76_N8S19595C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C8D1Ev,_ZThn40_N8S19595C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19595C6D0Ev,_ZTv0_n24_N8S19595C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19595C6D0Ev,_ZThn28_N8S19595C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19595C6D1Ev,_ZTv0_n24_N8S19595C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19595C6D1Ev,_ZThn28_N8S19595C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C6D0Ev,_ZThn36_N8S19595C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S19595C6D0Ev,_ZThn104_N8S19595C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19595C6D0Ev,_ZThn68_N8S19595C6D0Ev),
  (VTBL_ENTRY)_ZN8S19595C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C6D1Ev,_ZThn36_N8S19595C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S19595C6D1Ev,_ZThn104_N8S19595C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19595C6D1Ev,_ZThn68_N8S19595C6D1Ev),
  (VTBL_ENTRY)_ZN8S19595C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19595C3D0Ev,_ZTv0_n24_N8S19595C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S19595C3D0Ev,_ZThn100_N8S19595C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19595C3D1Ev,_ZTv0_n24_N8S19595C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S19595C3D1Ev,_ZThn100_N8S19595C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19595C10D0Ev,_ZThn36_N9S19595C10D0Ev),
  (VTBL_ENTRY)_ZN9S19595C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19595C10D0Ev,_ZThn148_N9S19595C10D0Ev),
  (VTBL_ENTRY)_ZN9S19595C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19595C10D1Ev,_ZThn36_N9S19595C10D1Ev),
  (VTBL_ENTRY)_ZN9S19595C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19595C10D1Ev,_ZThn148_N9S19595C10D1Ev),
  (VTBL_ENTRY)_ZN9S19595C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C9D0Ev,_ZThn36_N8S19595C9D0Ev),
  (VTBL_ENTRY)_ZN8S19595C9D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19595C9D0Ev,_ZThn148_N8S19595C9D0Ev),
  (VTBL_ENTRY)_ZN8S19595C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C9D1Ev,_ZThn36_N8S19595C9D1Ev),
  (VTBL_ENTRY)_ZN8S19595C9D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19595C9D1Ev,_ZThn148_N8S19595C9D1Ev),
  (VTBL_ENTRY)_ZN8S19595C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S19595C5D0Ev,
  (VTBL_ENTRY)_ZN8S19595C5D0Ev,
  (VTBL_ENTRY)_ZN8S19595C5D0Ev,
  (VTBL_ENTRY)_ZN8S19595C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S19595C5D1Ev,
  (VTBL_ENTRY)_ZN8S19595C5D1Ev,
  (VTBL_ENTRY)_ZN8S19595C5D1Ev,
  (VTBL_ENTRY)_ZN8S19595C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19595C3D0Ev,_ZThn28_N8S19595C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19595C3D0Ev,_ZThn108_N8S19595C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19595C3D0Ev,_ZThn176_N8S19595C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19595C3D0Ev,_ZThn140_N8S19595C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19595C3D0Ev,_ZThn72_N8S19595C3D0Ev),
  (VTBL_ENTRY)_ZN8S19595C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19595C3D1Ev,_ZThn28_N8S19595C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19595C3D1Ev,_ZThn108_N8S19595C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19595C3D1Ev,_ZThn176_N8S19595C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19595C3D1Ev,_ZThn140_N8S19595C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19595C3D1Ev,_ZThn72_N8S19595C3D1Ev),
  (VTBL_ENTRY)_ZN8S19595C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19595C2D0Ev,_ZTv0_n24_N8S19595C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S19595C2D0Ev,_ZThn100_N8S19595C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19595C2D1Ev,_ZTv0_n24_N8S19595C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S19595C2D1Ev,_ZThn100_N8S19595C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C2D0Ev,_ZTv0_n12_N8S19595C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19595C2D0Ev,_ZThn176_N8S19595C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19595C2D0Ev,_ZThn140_N8S19595C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19595C2D0Ev,_ZThn108_N8S19595C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19595C2D0Ev,_ZThn72_N8S19595C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19595C2D0Ev,_ZThn28_N8S19595C2D0Ev),
  (VTBL_ENTRY)_ZN8S19595C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C2D1Ev,_ZTv0_n12_N8S19595C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19595C2D1Ev,_ZThn176_N8S19595C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19595C2D1Ev,_ZThn140_N8S19595C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19595C2D1Ev,_ZThn108_N8S19595C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19595C2D1Ev,_ZThn72_N8S19595C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19595C2D1Ev,_ZThn28_N8S19595C2D1Ev),
  (VTBL_ENTRY)_ZN8S19595C2D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19595C2 = {  "S19595C2", // class name
  bases_S19595C2, 17,
  &(vtc_S19595C2[0]), // expected_vtbl_contents
  &(vtt_S19595C2[0]), // expected_vtt_contents
  ABISELECT(352,204), // object size
  NSPAIRA(_ZTI8S19595C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19595C2),55, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19595C2),47, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names110,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19595C1  : virtual S19595C2 , S19595C8 {
  ~S19595C1(); // tgen
  S19595C1(); // tgen
};
//SIG(1 S19595C1) C1{ VBC2{ BC3{ VBC4{ vd m} BC5{ VBC4 FD Fc Fs[4]} VBC6{ VBC7{ m} VBC8{ VBC9{ VBC4 BC10{ VBC4 VBC5 vd Fi} BC11{ m Fp} vd Fs FL Fp FL} BC11 BC4 BC5 vd Fi} BC5 vd Fs} BC9 Fp} Fp} BC8}


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

static void Test_S19595C1()
{
  extern Class_Descriptor cd_S19595C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(27,62)];
    init_test(&cd_S19595C1, buf);
    S19595C1 *dp, &lv = *(dp=new (buf) S19595C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,244), "sizeof(S19595C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19595C1)");
    /*is_ambiguous_... S19595C3::S19905C19 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C3*)(S19595C2*), ABISELECT(64,40), "S19595C1");
    /*is_ambiguous_... S19595C3::S19595C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C5*)(S19595C3*)(S19595C2*), ABISELECT(64,40), "S19595C1");
    /*is_ambiguous_... S19595C1::S19595C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C9*), ABISELECT(64,40), "S19595C1");
    /*is_ambiguous_... S19595C1::S19595C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C10*)(S19595C9*), ABISELECT(64,40), "S19595C1");
    /*is_ambiguous_... S19595C1::S19595C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C5*), ABISELECT(64,40), "S19595C1");
    /*is_ambiguous_... S19595C1::S19595C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C5*)(S19595C8*), ABISELECT(64,40), "S19595C1");
    /*is_ambiguous_... S19595C6::S19595C5 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C5*)(S19595C6*), ABISELECT(64,40), "S19595C1");
    /*is_ambiguous_... S19595C3::S19595C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C9*)(S19595C3*)(S19595C2*), ABISELECT(64,40), "S19595C1");
    /*is_ambiguous_... S19595C3::S19595C9 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C10*)(S19595C9*)(S19595C3*)(S19595C2*), ABISELECT(64,40), "S19595C1");
    /*is_ambiguous_... S19595C1::S19595C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C5*)(S19595C8*), ABISELECT(64,40), "S19595C1");
    /*is_ambiguous_... S19595C3::S19595C5 */ AMB_check_base_class_offset(lv, (S19595C5*)(S19595C3*)(S19595C2*), ABISELECT(64,40), "S19595C1");
    check_base_class_offset(lv, (S5266C29*)(S19595C6*), 0, "S19595C1");
    /*is_ambiguous_... S19595C1::S19595C9 */ AMB_check_base_class_offset(lv, (S19595C5*)(S19595C10*)(S19595C9*), ABISELECT(368,216), "S19595C1");
    /*is_ambiguous_... S19595C3::S19595C9 */ AMB_check_base_class_offset(lv, (S19595C5*)(S19595C10*)(S19595C9*)(S19595C3*)(S19595C2*), ABISELECT(368,216), "S19595C1");
    /*is_ambiguous_... S19595C1::S19595C9 */ AMB_check_base_class_offset(lv, (S19595C10*)(S19595C9*), ABISELECT(304,180), "S19595C1");
    /*is_ambiguous_... S19595C1::S19595C9 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19595C9*), ABISELECT(320,188), "S19595C1");
    /*is_ambiguous_... S19595C1::S19595C8 */ AMB_check_base_class_offset(lv, (S19595C9*)(S19595C8*), ABISELECT(304,180), "S19595C1");
    /*is_ambiguous_... S19595C1::S19595C8 */ AMB_check_base_class_offset(lv, (S19595C9*)(S19595C8*), ABISELECT(304,180), "S19595C1");
    /*is_ambiguous_... S19595C1::S19595C8 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19595C8*), ABISELECT(248,144), "S19595C1");
    /*is_ambiguous_... S19595C1::S19595C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C8*), ABISELECT(240,140), "S19595C1");
    /*is_ambiguous_... S19595C1::S19595C8 */ AMB_check_base_class_offset(lv, (S19595C5*)(S19595C8*), ABISELECT(256,148), "S19595C1");
    check_base_class_offset(lv, (S19595C8*)(S19595C6*), ABISELECT(240,140), "S19595C1");
    /*is_ambiguous_... S19595C6::S19595C5 */ AMB_check_base_class_offset(lv, (S19595C5*)(S19595C6*), ABISELECT(192,112), "S19595C1");
    check_base_class_offset(lv, (S19595C6*)(S19595C3*)(S19595C2*), ABISELECT(192,112), "S19595C1");
    /*is_ambiguous_... S19595C3::S19595C9 */ AMB_check_base_class_offset(lv, (S19595C10*)(S19595C9*)(S19595C3*)(S19595C2*), ABISELECT(112,68), "S19595C1");
    /*is_ambiguous_... S19595C3::S19595C9 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19595C9*)(S19595C3*)(S19595C2*), ABISELECT(128,76), "S19595C1");
    /*is_ambiguous_... S19595C3::S19595C9 */ AMB_check_base_class_offset(lv, (S19595C9*)(S19595C3*)(S19595C2*), ABISELECT(112,68), "S19595C1");
    check_base_class_offset(lv, (S19595C3*)(S19595C2*), ABISELECT(64,40), "S19595C1");
    check_base_class_offset(lv, (S19595C2*), ABISELECT(64,40), "S19595C1");
    /*is_ambiguous_... S19595C1::S19595C8 */ AMB_check_base_class_offset(lv, (S17777C6_nt*)(S19595C8*), ABISELECT(8,4), "S19595C1");
    /*is_ambiguous_... S19595C1::S19595C8 */ AMB_check_base_class_offset(lv, (S19905C19*)(S19595C8*), 0, "S19595C1");
    /*is_ambiguous_... S19595C1::S19595C8 */ AMB_check_base_class_offset(lv, (S19595C5*)(S19595C8*), ABISELECT(16,8), "S19595C1");
    /*is_ambiguous_... S19595C1::S19595C8 */ AMB_check_base_class_offset(lv, (S19595C8*), 0, "S19595C1");
    test_class_info(&lv, &cd_S19595C1);
    dp->~S19595C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19595C1(Test_S19595C1, "S19595C1", ABISELECT(416,244));

#else // __cplusplus

extern void _ZN8S19595C1C1Ev();
extern void _ZN8S19595C1D1Ev();
Name_Map name_map_S19595C1[] = {
  NSPAIR(_ZN8S19595C1C1Ev),
  NSPAIR(_ZN8S19595C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S19595C5;
extern VTBL_ENTRY _ZTI8S19595C5[];
extern  VTBL_ENTRY _ZTV8S19595C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C5[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19595C5;
extern VTBL_ENTRY _ZTI8S19595C5[];
extern  VTBL_ENTRY _ZTV8S19595C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C5[];
extern Class_Descriptor cd_S19595C10;
extern VTBL_ENTRY _ZTI9S19595C10[];
extern  VTBL_ENTRY _ZTV9S19595C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19595C10[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19595C9;
extern VTBL_ENTRY _ZTI8S19595C9[];
extern  VTBL_ENTRY _ZTV8S19595C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C9[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S19595C5;
extern VTBL_ENTRY _ZTI8S19595C5[];
extern  VTBL_ENTRY _ZTV8S19595C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C5[];
extern Class_Descriptor cd_S19595C8;
extern VTBL_ENTRY _ZTI8S19595C8[];
extern  VTBL_ENTRY _ZTV8S19595C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C8[];
extern Class_Descriptor cd_S19595C5;
extern VTBL_ENTRY _ZTI8S19595C5[];
extern  VTBL_ENTRY _ZTV8S19595C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C5[];
extern Class_Descriptor cd_S19595C6;
extern VTBL_ENTRY _ZTI8S19595C6[];
extern  VTBL_ENTRY _ZTV8S19595C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C6[];
extern Class_Descriptor cd_S19595C10;
extern VTBL_ENTRY _ZTI9S19595C10[];
extern  VTBL_ENTRY _ZTV9S19595C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19595C10[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19595C9;
extern VTBL_ENTRY _ZTI8S19595C9[];
extern  VTBL_ENTRY _ZTV8S19595C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C9[];
extern Class_Descriptor cd_S19595C3;
extern VTBL_ENTRY _ZTI8S19595C3[];
extern  VTBL_ENTRY _ZTV8S19595C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C3[];
extern Class_Descriptor cd_S19595C2;
extern VTBL_ENTRY _ZTI8S19595C2[];
extern  VTBL_ENTRY _ZTV8S19595C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C2[];
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S19595C5;
extern VTBL_ENTRY _ZTI8S19595C5[];
extern  VTBL_ENTRY _ZTV8S19595C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C5[];
extern Class_Descriptor cd_S19595C8;
extern VTBL_ENTRY _ZTI8S19595C8[];
extern  VTBL_ENTRY _ZTV8S19595C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C8[];
static Base_Class bases_S19595C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    ABISELECT(64,40), //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_S19595C5,    ABISELECT(64,40), //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
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19595C5,    ABISELECT(368,216), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19595C10,    ABISELECT(304,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(320,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19595C9,    ABISELECT(304,180), //bcp->offset
    59, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S17777C6_nt,    ABISELECT(248,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19905C19,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S19595C5,    ABISELECT(256,148), //bcp->offset
    53, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19595C8,    ABISELECT(240,140), //bcp->offset
    45, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19595C5,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19595C6,    ABISELECT(192,112), //bcp->offset
    35, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19595C10,    ABISELECT(112,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S17777C6_nt,    ABISELECT(128,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
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19595C9,    ABISELECT(112,68), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19595C3,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //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
    17, //immediately_derived
  0, 0},
  {&cd_S19595C2,    ABISELECT(64,40), //bcp->offset
    17, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S17777C6_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
    21, //immediately_derived
  0, 0},
  {&cd_S19905C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    21, //immediately_derived
  0, 0},
  {&cd_S19595C5,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19595C8,    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
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19595C1[];
extern void _ZN8S19595C1D1Ev();
extern void _ZN8S19595C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19595C1D1Ev,_ZTv0_n12_N8S19595C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19595C1D1Ev,_ZThn8_N8S19595C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C1D0Ev,_ZTv0_n12_N8S19595C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19595C1D0Ev,_ZThn8_N8S19595C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C1D1Ev,_ZTv0_n12_N8S19595C1D1Ev)();
extern void ABISELECT(_ZThn64_N8S19595C1D1Ev,_ZThn40_N8S19595C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C1D0Ev,_ZTv0_n12_N8S19595C1D0Ev)();
extern void ABISELECT(_ZThn64_N8S19595C1D0Ev,_ZThn40_N8S19595C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C1D1Ev,_ZTv0_n12_N8S19595C1D1Ev)();
extern void ABISELECT(_ZThn112_N8S19595C1D1Ev,_ZThn68_N8S19595C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C1D0Ev,_ZTv0_n12_N8S19595C1D0Ev)();
extern void ABISELECT(_ZThn112_N8S19595C1D0Ev,_ZThn68_N8S19595C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C1D1Ev,_ZTv0_n12_N8S19595C1D1Ev)();
extern void ABISELECT(_ZThn192_N8S19595C1D1Ev,_ZThn112_N8S19595C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C1D0Ev,_ZTv0_n12_N8S19595C1D0Ev)();
extern void ABISELECT(_ZThn192_N8S19595C1D0Ev,_ZThn112_N8S19595C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19595C1D1Ev,_ZTv0_n24_N8S19595C1D1Ev)();
extern void ABISELECT(_ZThn240_N8S19595C1D1Ev,_ZThn140_N8S19595C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19595C1D0Ev,_ZTv0_n24_N8S19595C1D0Ev)();
extern void ABISELECT(_ZThn240_N8S19595C1D0Ev,_ZThn140_N8S19595C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C1D1Ev,_ZTv0_n12_N8S19595C1D1Ev)();
extern void ABISELECT(_ZThn256_N8S19595C1D1Ev,_ZThn148_N8S19595C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C1D0Ev,_ZTv0_n12_N8S19595C1D0Ev)();
extern void ABISELECT(_ZThn256_N8S19595C1D0Ev,_ZThn148_N8S19595C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C1D1Ev,_ZTv0_n12_N8S19595C1D1Ev)();
extern void ABISELECT(_ZThn304_N8S19595C1D1Ev,_ZThn180_N8S19595C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C1D0Ev,_ZTv0_n12_N8S19595C1D0Ev)();
extern void ABISELECT(_ZThn304_N8S19595C1D0Ev,_ZThn180_N8S19595C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C1D1Ev,_ZTv0_n12_N8S19595C1D1Ev)();
extern void ABISELECT(_ZThn368_N8S19595C1D1Ev,_ZThn216_N8S19595C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C1D0Ev,_ZTv0_n12_N8S19595C1D0Ev)();
extern void ABISELECT(_ZThn368_N8S19595C1D0Ev,_ZThn216_N8S19595C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19595C1[] = {
  ABISELECT(240,140),
  0,
  ABISELECT(192,112),
  ABISELECT(64,40),
  ABISELECT(368,216),
  ABISELECT(64,40),
  ABISELECT(304,180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C1[0]),
  (VTBL_ENTRY)&_ZN8S19595C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19595C1D0Ev,
  ABISELECT(48,32),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19595C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C1D1Ev,_ZTv0_n12_N8S19595C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C1D0Ev,_ZTv0_n12_N8S19595C1D0Ev),
  ABISELECT(304,176),
  ABISELECT(240,140),
  ABISELECT(176,100),
  ABISELECT(-64,-40),
  ABISELECT(128,72),
  0,
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19595C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C1D1Ev,_ZTv0_n12_N8S19595C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C1D0Ev,_ZTv0_n12_N8S19595C1D0Ev),
  ABISELECT(256,148),
  ABISELECT(-48,-28),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S19595C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C1D1Ev,_ZTv0_n12_N8S19595C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C1D0Ev,_ZTv0_n12_N8S19595C1D0Ev),
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-192,-112),
  ABISELECT(-128,-72),
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI8S19595C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C1D1Ev,_ZTv0_n12_N8S19595C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C1D0Ev,_ZTv0_n12_N8S19595C1D0Ev),
  ABISELECT(-240,-140),
  ABISELECT(128,76),
  ABISELECT(-176,-100),
  ABISELECT(64,40),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI8S19595C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19595C1D1Ev,_ZTv0_n24_N8S19595C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19595C1D0Ev,_ZTv0_n24_N8S19595C1D0Ev),
  ABISELECT(-192,-108),
  ABISELECT(-256,-148),
  ABISELECT(-256,-148),
  (VTBL_ENTRY)&(_ZTI8S19595C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C1D1Ev,_ZTv0_n12_N8S19595C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C1D0Ev,_ZTv0_n12_N8S19595C1D0Ev),
  ABISELECT(64,36),
  ABISELECT(-240,-140),
  ABISELECT(-304,-180),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI8S19595C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C1D1Ev,_ZTv0_n12_N8S19595C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C1D0Ev,_ZTv0_n12_N8S19595C1D0Ev),
  ABISELECT(-304,-176),
  ABISELECT(-368,-216),
  ABISELECT(-368,-216),
  (VTBL_ENTRY)&(_ZTI8S19595C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C1D1Ev,_ZTv0_n12_N8S19595C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C1D0Ev,_ZTv0_n12_N8S19595C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19595C1[];
extern void _ZN8S19595C8D1Ev();
extern void _ZN8S19595C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19595C8__A__8S19595C1[] = {
  ABISELECT(368,216),
  ABISELECT(64,40),
  ABISELECT(304,180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C8[0]),
  (VTBL_ENTRY)&_ZN8S19595C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19595C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void _ZN8S19595C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
extern void _ZN8S19595C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C58S19595C8__A4__8S19595C1[] = {
  ABISELECT(48,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void ABISELECT(_ZThn48_N8S19595C5D1Ev,_ZThn32_N8S19595C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
extern void ABISELECT(_ZThn48_N8S19595C5D0Ev,_ZThn32_N8S19595C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C58S19595C8__A4__8S19595C1[] = {
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev)();
extern void ABISELECT(_ZThn304_N8S19595C8D1Ev,_ZThn180_N8S19595C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev)();
extern void ABISELECT(_ZThn304_N8S19595C8D0Ev,_ZThn180_N8S19595C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C9__8S19595C8__A__8S19595C1[] = {
  ABISELECT(64,36),
  ABISELECT(-240,-140),
  ABISELECT(-304,-180),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI8S19595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S19595C8D1Ev,_ZThn40_N8S19595C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S19595C8D0Ev,_ZThn40_N8S19595C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C8__A__8S19595C1[] = {
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev)();
extern void ABISELECT(_ZThn368_N8S19595C8D1Ev,_ZThn216_N8S19595C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev)();
extern void ABISELECT(_ZThn368_N8S19595C8D0Ev,_ZThn216_N8S19595C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__8S19595C8__A__8S19595C1[] = {
  ABISELECT(-304,-176),
  ABISELECT(-368,-216),
  ABISELECT(-368,-216),
  (VTBL_ENTRY)&(_ZTI8S19595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19595C8D1Ev,_ZThn8_N8S19595C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S19595C8D0Ev,_ZThn8_N8S19595C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__A__8S19595C8__A__8S19595C1[] = {
  ABISELECT(48,32),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C2D1Ev,_ZTv0_n12_N8S19595C2D1Ev)();
extern void _ZN8S19595C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C2D0Ev,_ZTv0_n12_N8S19595C2D0Ev)();
extern void _ZN8S19595C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C2__8S19595C1[] = {
  ABISELECT(304,176),
  ABISELECT(240,140),
  ABISELECT(176,100),
  ABISELECT(-64,-40),
  ABISELECT(128,72),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C2D1Ev,_ZTv0_n12_N8S19595C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C2D0Ev,_ZTv0_n12_N8S19595C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev)();
extern void _ZN8S19595C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev)();
extern void _ZN8S19595C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C38S19595C2__8S19595C1[] = {
  ABISELECT(304,176),
  ABISELECT(240,140),
  ABISELECT(176,100),
  ABISELECT(-64,-40),
  ABISELECT(128,72),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void _ZN8S19595C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
extern void _ZN8S19595C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C58S19595C38S19595C2__8S19595C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev)();
extern void _ZN8S19595C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev)();
extern void _ZN8S19595C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C98S19595C38S19595C2__A1__8S19595C1[] = {
  ABISELECT(256,148),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev)();
extern void _ZN9S19595C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev)();
extern void _ZN9S19595C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19595C108S19595C98S19595C38S19595C2__A1__8S19595C1[] = {
  ABISELECT(256,148),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19595C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__9S19595C108S19595C98S19595C38S19595C2__A1__8S19595C1[] = {
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI9S19595C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev)();
extern void ABISELECT(_ZThn256_N9S19595C10D1Ev,_ZThn148_N9S19595C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev)();
extern void ABISELECT(_ZThn256_N9S19595C10D0Ev,_ZThn148_N9S19595C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__9S19595C108S19595C98S19595C38S19595C2__A1__8S19595C1[] = {
  ABISELECT(-304,-176),
  ABISELECT(-256,-148),
  ABISELECT(-256,-148),
  (VTBL_ENTRY)&(_ZTI9S19595C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C98S19595C38S19595C2__A1__8S19595C1[] = {
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S19595C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev)();
extern void ABISELECT(_ZThn256_N8S19595C9D1Ev,_ZThn148_N8S19595C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev)();
extern void ABISELECT(_ZThn256_N8S19595C9D0Ev,_ZThn148_N8S19595C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__8S19595C98S19595C38S19595C2__A1__8S19595C1[] = {
  ABISELECT(-304,-176),
  ABISELECT(-256,-148),
  ABISELECT(-256,-148),
  (VTBL_ENTRY)&(_ZTI8S19595C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev)();
extern void ABISELECT(_ZThn128_N8S19595C3D1Ev,_ZThn72_N8S19595C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev)();
extern void ABISELECT(_ZThn128_N8S19595C3D0Ev,_ZThn72_N8S19595C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C6__8S19595C38S19595C2__8S19595C1[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-192,-112),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S19595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19595C3D1Ev,_ZTv0_n24_N8S19595C3D1Ev)();
extern void ABISELECT(_ZThn176_N8S19595C3D1Ev,_ZThn100_N8S19595C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19595C3D0Ev,_ZTv0_n24_N8S19595C3D0Ev)();
extern void ABISELECT(_ZThn176_N8S19595C3D0Ev,_ZThn100_N8S19595C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C8__8S19595C38S19595C2__8S19595C1[] = {
  ABISELECT(-176,-100),
  ABISELECT(128,76),
  ABISELECT(-176,-100),
  ABISELECT(64,40),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S19595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19595C3D1Ev,_ZTv0_n24_N8S19595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19595C3D0Ev,_ZTv0_n24_N8S19595C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev)();
extern void ABISELECT(_ZThn240_N8S19595C3D1Ev,_ZThn140_N8S19595C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev)();
extern void ABISELECT(_ZThn240_N8S19595C3D0Ev,_ZThn140_N8S19595C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C9__8S19595C38S19595C2__8S19595C1[] = {
  ABISELECT(64,36),
  ABISELECT(-240,-140),
  ABISELECT(-240,-140),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI8S19595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev)();
extern void ABISELECT(_ZThn304_N8S19595C3D1Ev,_ZThn176_N8S19595C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev)();
extern void ABISELECT(_ZThn304_N8S19595C3D0Ev,_ZThn176_N8S19595C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__A1__8S19595C38S19595C2__8S19595C1[] = {
  ABISELECT(-304,-176),
  ABISELECT(-304,-176),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI8S19595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev)();
extern void ABISELECT(_ZThn192_N8S19595C3D1Ev,_ZThn108_N8S19595C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev)();
extern void ABISELECT(_ZThn192_N8S19595C3D0Ev,_ZThn108_N8S19595C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C58S19595C8__A2__8S19595C38S19595C2__8S19595C1[] = {
  ABISELECT(-192,-108),
  ABISELECT(-192,-108),
  ABISELECT(-192,-108),
  (VTBL_ENTRY)&(_ZTI8S19595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev)();
extern void ABISELECT(_ZThn48_N8S19595C3D1Ev,_ZThn28_N8S19595C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev)();
extern void ABISELECT(_ZThn48_N8S19595C3D0Ev,_ZThn28_N8S19595C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C9__A__8S19595C38S19595C2__8S19595C1[] = {
  ABISELECT(256,148),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C2D1Ev,_ZTv0_n12_N8S19595C2D1Ev)();
extern void ABISELECT(_ZThn128_N8S19595C2D1Ev,_ZThn72_N8S19595C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C2D0Ev,_ZTv0_n12_N8S19595C2D0Ev)();
extern void ABISELECT(_ZThn128_N8S19595C2D0Ev,_ZThn72_N8S19595C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C6__8S19595C2__8S19595C1[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-192,-112),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S19595C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C2D1Ev,_ZTv0_n12_N8S19595C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C2D0Ev,_ZTv0_n12_N8S19595C2D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19595C2D1Ev,_ZTv0_n24_N8S19595C2D1Ev)();
extern void ABISELECT(_ZThn176_N8S19595C2D1Ev,_ZThn100_N8S19595C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19595C2D0Ev,_ZTv0_n24_N8S19595C2D0Ev)();
extern void ABISELECT(_ZThn176_N8S19595C2D0Ev,_ZThn100_N8S19595C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C8__8S19595C2__8S19595C1[] = {
  ABISELECT(-176,-100),
  ABISELECT(128,76),
  ABISELECT(-176,-100),
  ABISELECT(64,40),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S19595C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19595C2D1Ev,_ZTv0_n24_N8S19595C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19595C2D0Ev,_ZTv0_n24_N8S19595C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C2D1Ev,_ZTv0_n12_N8S19595C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19595C2D1Ev,_ZThn140_N8S19595C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C2D0Ev,_ZTv0_n12_N8S19595C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19595C2D0Ev,_ZThn140_N8S19595C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C9__8S19595C2__8S19595C1[] = {
  ABISELECT(64,36),
  ABISELECT(-240,-140),
  ABISELECT(-240,-140),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI8S19595C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C2D1Ev,_ZTv0_n12_N8S19595C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C2D0Ev,_ZTv0_n12_N8S19595C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C2D1Ev,_ZTv0_n12_N8S19595C2D1Ev)();
extern void ABISELECT(_ZThn304_N8S19595C2D1Ev,_ZThn176_N8S19595C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C2D0Ev,_ZTv0_n12_N8S19595C2D0Ev)();
extern void ABISELECT(_ZThn304_N8S19595C2D0Ev,_ZThn176_N8S19595C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__A1__8S19595C2__8S19595C1[] = {
  ABISELECT(-304,-176),
  ABISELECT(-304,-176),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI8S19595C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C2D1Ev,_ZTv0_n12_N8S19595C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C2D0Ev,_ZTv0_n12_N8S19595C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C2D1Ev,_ZTv0_n12_N8S19595C2D1Ev)();
extern void ABISELECT(_ZThn192_N8S19595C2D1Ev,_ZThn108_N8S19595C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C2D0Ev,_ZTv0_n12_N8S19595C2D0Ev)();
extern void ABISELECT(_ZThn192_N8S19595C2D0Ev,_ZThn108_N8S19595C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C58S19595C8__A2__8S19595C2__8S19595C1[] = {
  ABISELECT(-192,-108),
  ABISELECT(-192,-108),
  ABISELECT(-192,-108),
  (VTBL_ENTRY)&(_ZTI8S19595C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C2D1Ev,_ZTv0_n12_N8S19595C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C2D0Ev,_ZTv0_n12_N8S19595C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C2D1Ev,_ZTv0_n12_N8S19595C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S19595C2D1Ev,_ZThn28_N8S19595C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C2D0Ev,_ZTv0_n12_N8S19595C2D0Ev)();
extern void ABISELECT(_ZThn48_N8S19595C2D0Ev,_ZThn28_N8S19595C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C98S19595C3__A1__8S19595C2__8S19595C1[] = {
  ABISELECT(256,148),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19595C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C2D1Ev,_ZTv0_n12_N8S19595C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C2D0Ev,_ZTv0_n12_N8S19595C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev)();
extern void _ZN8S19595C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev)();
extern void _ZN8S19595C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C6__8S19595C1[] = {
  ABISELECT(176,104),
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(-192,-112),
  ABISELECT(-128,-72),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void _ZN8S19595C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
extern void _ZN8S19595C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C58S19595C6__A3__8S19595C1[] = {
  ABISELECT(-128,-72),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C58S19595C6__A3__8S19595C1[] = {
  ABISELECT(128,72),
  ABISELECT(128,72),
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19595C6D1Ev,_ZTv0_n24_N8S19595C6D1Ev)();
extern void ABISELECT(_ZThn48_N8S19595C6D1Ev,_ZThn28_N8S19595C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19595C6D0Ev,_ZTv0_n24_N8S19595C6D0Ev)();
extern void ABISELECT(_ZThn48_N8S19595C6D0Ev,_ZThn28_N8S19595C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C8__8S19595C6__8S19595C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(128,76),
  ABISELECT(-176,-100),
  ABISELECT(64,40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19595C6D1Ev,_ZTv0_n24_N8S19595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19595C6D0Ev,_ZTv0_n24_N8S19595C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev)();
extern void ABISELECT(_ZThn112_N8S19595C6D1Ev,_ZThn68_N8S19595C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev)();
extern void ABISELECT(_ZThn112_N8S19595C6D0Ev,_ZThn68_N8S19595C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C9__8S19595C6__8S19595C1[] = {
  ABISELECT(64,36),
  ABISELECT(-240,-140),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S19595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C6__8S19595C1[] = {
  ABISELECT(128,72),
  ABISELECT(128,72),
  (VTBL_ENTRY)&(_ZTI8S19595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev)();
extern void ABISELECT(_ZThn176_N8S19595C6D1Ev,_ZThn104_N8S19595C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev)();
extern void ABISELECT(_ZThn176_N8S19595C6D0Ev,_ZThn104_N8S19595C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__8S19595C6__8S19595C1[] = {
  ABISELECT(-304,-176),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI8S19595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S19595C6D1Ev,_ZThn36_N8S19595C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S19595C6D0Ev,_ZThn36_N8S19595C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C58S19595C8__A1__8S19595C6__8S19595C1[] = {
  ABISELECT(-192,-108),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev),
};
extern void _ZN8S19595C8D1Ev();
extern void _ZN8S19595C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19595C8__8S19595C1[] = {
  ABISELECT(128,76),
  ABISELECT(-176,-100),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C8[0]),
  (VTBL_ENTRY)&_ZN8S19595C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19595C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void _ZN8S19595C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
extern void _ZN8S19595C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C58S19595C8__A2__8S19595C1[] = {
  ABISELECT(-192,-108),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C58S19595C8__A2__8S19595C1[] = {
  ABISELECT(192,108),
  ABISELECT(192,108),
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S19595C8D1Ev,_ZThn40_N8S19595C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S19595C8D0Ev,_ZThn40_N8S19595C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C9__8S19595C8__8S19595C1[] = {
  ABISELECT(64,36),
  ABISELECT(-240,-140),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C8__8S19595C1[] = {
  ABISELECT(176,100),
  ABISELECT(176,100),
  (VTBL_ENTRY)&(_ZTI8S19595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev)();
extern void ABISELECT(_ZThn128_N8S19595C8D1Ev,_ZThn76_N8S19595C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev)();
extern void ABISELECT(_ZThn128_N8S19595C8D0Ev,_ZThn76_N8S19595C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__8S19595C8__8S19595C1[] = {
  ABISELECT(-304,-176),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S19595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19595C8D1Ev,_ZThn8_N8S19595C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S19595C8D0Ev,_ZThn8_N8S19595C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__A__8S19595C8__8S19595C1[] = {
  ABISELECT(-192,-108),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev)();
extern void _ZN8S19595C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev)();
extern void _ZN8S19595C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C9__8S19595C1[] = {
  ABISELECT(64,36),
  ABISELECT(-240,-140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev)();
extern void _ZN9S19595C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev)();
extern void _ZN9S19595C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19595C108S19595C9__8S19595C1[] = {
  ABISELECT(64,36),
  ABISELECT(-240,-140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19595C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__9S19595C108S19595C9__8S19595C1[] = {
  ABISELECT(240,140),
  ABISELECT(240,140),
  (VTBL_ENTRY)&(_ZTI9S19595C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev)();
extern void ABISELECT(_ZThn64_N9S19595C10D1Ev,_ZThn36_N9S19595C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev)();
extern void ABISELECT(_ZThn64_N9S19595C10D0Ev,_ZThn36_N9S19595C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__9S19595C108S19595C9__8S19595C1[] = {
  ABISELECT(-304,-176),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19595C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C9__8S19595C1[] = {
  ABISELECT(240,140),
  ABISELECT(240,140),
  (VTBL_ENTRY)&(_ZTI8S19595C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev)();
extern void ABISELECT(_ZThn64_N8S19595C9D1Ev,_ZThn36_N8S19595C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev)();
extern void ABISELECT(_ZThn64_N8S19595C9D0Ev,_ZThn36_N8S19595C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__8S19595C9__8S19595C1[] = {
  ABISELECT(-304,-176),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19595C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void _ZN8S19595C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
extern void _ZN8S19595C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19595C5__A1__8S19595C1[] = {
  ABISELECT(-304,-176),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19905C19__8S19595C5__A1__8S19595C1[] = {
  ABISELECT(304,176),
  ABISELECT(304,176),
  (VTBL_ENTRY)&(_ZTI8S19595C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev),
};
static  VTT_ENTRY vtt_S19595C1[] = {
  {&(_ZTV8S19595C1[9]),  9,72},
  {&(_tg__ZTV8S19595C8__A__8S19595C1[5]),  5,7},
  {&(_tg__ZTV8S19595C58S19595C8__A4__8S19595C1[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S19595C58S19595C8__A4__8S19595C1[3]),  3,5},
  {&(_tg__ZTV8S19595C9__8S19595C8__A__8S19595C1[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S19595C8__A__8S19595C1[3]),  3,5},
  {&(_tg__ZTV8S19595C5__8S19595C8__A__8S19595C1[4]),  4,6},
  {&(_tg__ZTV8S19595C5__A__8S19595C8__A__8S19595C1[4]),  4,6},
  {&(_ZTV8S19595C1[26]),  26,72},
  {&(_ZTV8S19595C1[26]),  26,72},
  {&(_ZTV8S19595C1[43]),  43,72},
  {&(_ZTV8S19595C1[51]),  51,72},
  {&(_ZTV8S19595C1[64]),  64,72},
  {&(_ZTV8S19595C1[70]),  70,72},
  {&(_ZTV8S19595C1[57]),  57,72},
  {&(_ZTV8S19595C1[33]),  33,72},
  {&(_ZTV8S19595C1[15]),  15,72},
  {&(_tg__ZTV8S19595C2__8S19595C1[9]),  9,11},
  {&(_tg__ZTV8S19595C38S19595C2__8S19595C1[9]),  9,11},
  {&(_tg__ZTV8S19595C58S19595C38S19595C2__8S19595C1[4]),  4,6},
  {&(_tg__ZTV8S19595C58S19595C38S19595C2__8S19595C1[4]),  4,6},
  {&(_tg__ZTV8S19595C98S19595C38S19595C2__A1__8S19595C1[5]),  5,7},
  {&(_tg__ZTV9S19595C108S19595C98S19595C38S19595C2__A1__8S19595C1[5]),  5,7},
  {&(_tg__ZTV9S19905C19__9S19595C108S19595C98S19595C38S19595C2__A1__8S19595C1[3]),  3,5},
  {&(_tg__ZTV8S19595C5__9S19595C108S19595C98S19595C38S19595C2__A1__8S19595C1[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S19595C98S19595C38S19595C2__A1__8S19595C1[3]),  3,5},
  {&(_tg__ZTV8S19595C5__8S19595C98S19595C38S19595C2__A1__8S19595C1[4]),  4,6},
  {&(_tg__ZTV8S19595C38S19595C2__8S19595C1[9]),  9,11},
  {&(_tg__ZTV8S19595C6__8S19595C38S19595C2__8S19595C1[8]),  8,10},
  {&(_tg__ZTV8S19595C8__8S19595C38S19595C2__8S19595C1[6]),  6,8},
  {&(_tg__ZTV8S19595C9__8S19595C38S19595C2__8S19595C1[5]),  5,7},
  {&(_tg__ZTV8S19595C5__A1__8S19595C38S19595C2__8S19595C1[4]),  4,6},
  {&(_tg__ZTV8S19595C58S19595C8__A2__8S19595C38S19595C2__8S19595C1[4]),  4,6},
  {&(_tg__ZTV8S19595C9__A__8S19595C38S19595C2__8S19595C1[5]),  5,7},
  {&(_tg__ZTV8S19595C2__8S19595C1[9]),  9,11},
  {&(_tg__ZTV8S19595C6__8S19595C2__8S19595C1[8]),  8,10},
  {&(_tg__ZTV8S19595C8__8S19595C2__8S19595C1[6]),  6,8},
  {&(_tg__ZTV8S19595C9__8S19595C2__8S19595C1[5]),  5,7},
  {&(_tg__ZTV8S19595C5__A1__8S19595C2__8S19595C1[4]),  4,6},
  {&(_tg__ZTV8S19595C58S19595C8__A2__8S19595C2__8S19595C1[4]),  4,6},
  {&(_tg__ZTV8S19595C98S19595C3__A1__8S19595C2__8S19595C1[5]),  5,7},
  {&(_tg__ZTV8S19595C6__8S19595C1[8]),  8,10},
  {&(_tg__ZTV8S19595C58S19595C6__A3__8S19595C1[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S19595C58S19595C6__A3__8S19595C1[3]),  3,5},
  {&(_tg__ZTV8S19595C8__8S19595C6__8S19595C1[6]),  6,8},
  {&(_tg__ZTV8S19595C9__8S19595C6__8S19595C1[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S19595C6__8S19595C1[3]),  3,5},
  {&(_tg__ZTV8S19595C5__8S19595C6__8S19595C1[4]),  4,6},
  {&(_tg__ZTV8S19595C58S19595C8__A1__8S19595C6__8S19595C1[4]),  4,6},
  {&(_tg__ZTV8S19595C8__8S19595C1[5]),  5,7},
  {&(_tg__ZTV8S19595C58S19595C8__A2__8S19595C1[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S19595C58S19595C8__A2__8S19595C1[3]),  3,5},
  {&(_tg__ZTV8S19595C9__8S19595C8__8S19595C1[5]),  5,7},
  {&(_tg__ZTV9S19905C19__8S19595C8__8S19595C1[3]),  3,5},
  {&(_tg__ZTV8S19595C5__8S19595C8__8S19595C1[4]),  4,6},
  {&(_tg__ZTV8S19595C5__A__8S19595C8__8S19595C1[4]),  4,6},
  {&(_tg__ZTV8S19595C9__8S19595C1[5]),  5,7},
  {&(_tg__ZTV9S19595C108S19595C9__8S19595C1[5]),  5,7},
  {&(_tg__ZTV9S19905C19__9S19595C108S19595C9__8S19595C1[3]),  3,5},
  {&(_tg__ZTV8S19595C5__9S19595C108S19595C9__8S19595C1[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S19595C9__8S19595C1[3]),  3,5},
  {&(_tg__ZTV8S19595C5__8S19595C9__8S19595C1[4]),  4,6},
  {&(_tg__ZTV8S19595C5__A1__8S19595C1[4]),  4,6},
  {&(_tg__ZTV9S19905C19__8S19595C5__A1__8S19595C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19595C1[];
extern  VTBL_ENTRY _ZTV8S19595C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19595C1[];
static VTBL_ENTRY alt_thunk_names111[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19595C6D0Ev,_ZTv0_n24_N8S19595C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19595C6D0Ev,_ZThn28_N8S19595C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19595C6D1Ev,_ZTv0_n24_N8S19595C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19595C6D1Ev,_ZThn28_N8S19595C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C6D0Ev,_ZTv0_n12_N8S19595C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C6D0Ev,_ZThn36_N8S19595C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S19595C6D0Ev,_ZThn104_N8S19595C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19595C6D0Ev,_ZThn68_N8S19595C6D0Ev),
  (VTBL_ENTRY)_ZN8S19595C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C6D1Ev,_ZTv0_n12_N8S19595C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C6D1Ev,_ZThn36_N8S19595C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S19595C6D1Ev,_ZThn104_N8S19595C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19595C6D1Ev,_ZThn68_N8S19595C6D1Ev),
  (VTBL_ENTRY)_ZN8S19595C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19595C2D0Ev,_ZTv0_n24_N8S19595C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S19595C2D0Ev,_ZThn100_N8S19595C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19595C2D1Ev,_ZTv0_n24_N8S19595C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S19595C2D1Ev,_ZThn100_N8S19595C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19595C3D0Ev,_ZTv0_n24_N8S19595C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S19595C3D0Ev,_ZThn100_N8S19595C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19595C3D1Ev,_ZTv0_n24_N8S19595C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S19595C3D1Ev,_ZThn100_N8S19595C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19595C10D0Ev,_ZTv0_n12_N9S19595C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19595C10D0Ev,_ZThn36_N9S19595C10D0Ev),
  (VTBL_ENTRY)_ZN9S19595C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19595C10D0Ev,_ZThn148_N9S19595C10D0Ev),
  (VTBL_ENTRY)_ZN9S19595C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19595C10D1Ev,_ZTv0_n12_N9S19595C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19595C10D1Ev,_ZThn36_N9S19595C10D1Ev),
  (VTBL_ENTRY)_ZN9S19595C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19595C10D1Ev,_ZThn148_N9S19595C10D1Ev),
  (VTBL_ENTRY)_ZN9S19595C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C9D0Ev,_ZTv0_n12_N8S19595C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C9D0Ev,_ZThn36_N8S19595C9D0Ev),
  (VTBL_ENTRY)_ZN8S19595C9D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19595C9D0Ev,_ZThn148_N8S19595C9D0Ev),
  (VTBL_ENTRY)_ZN8S19595C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C9D1Ev,_ZTv0_n12_N8S19595C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C9D1Ev,_ZThn36_N8S19595C9D1Ev),
  (VTBL_ENTRY)_ZN8S19595C9D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19595C9D1Ev,_ZThn148_N8S19595C9D1Ev),
  (VTBL_ENTRY)_ZN8S19595C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C3D0Ev,_ZTv0_n12_N8S19595C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19595C3D0Ev,_ZThn28_N8S19595C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19595C3D0Ev,_ZThn108_N8S19595C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19595C3D0Ev,_ZThn176_N8S19595C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19595C3D0Ev,_ZThn140_N8S19595C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19595C3D0Ev,_ZThn72_N8S19595C3D0Ev),
  (VTBL_ENTRY)_ZN8S19595C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C3D1Ev,_ZTv0_n12_N8S19595C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19595C3D1Ev,_ZThn28_N8S19595C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19595C3D1Ev,_ZThn108_N8S19595C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19595C3D1Ev,_ZThn176_N8S19595C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19595C3D1Ev,_ZThn140_N8S19595C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19595C3D1Ev,_ZThn72_N8S19595C3D1Ev),
  (VTBL_ENTRY)_ZN8S19595C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C2D0Ev,_ZTv0_n12_N8S19595C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19595C2D0Ev,_ZThn28_N8S19595C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19595C2D0Ev,_ZThn108_N8S19595C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19595C2D0Ev,_ZThn176_N8S19595C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19595C2D0Ev,_ZThn140_N8S19595C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19595C2D0Ev,_ZThn72_N8S19595C2D0Ev),
  (VTBL_ENTRY)_ZN8S19595C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C2D1Ev,_ZTv0_n12_N8S19595C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19595C2D1Ev,_ZThn28_N8S19595C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19595C2D1Ev,_ZThn108_N8S19595C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19595C2D1Ev,_ZThn176_N8S19595C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19595C2D1Ev,_ZThn140_N8S19595C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19595C2D1Ev,_ZThn72_N8S19595C2D1Ev),
  (VTBL_ENTRY)_ZN8S19595C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C8D0Ev,_ZTv0_n12_N8S19595C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19595C8D0Ev,_ZThn8_N8S19595C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19595C8D0Ev,_ZThn76_N8S19595C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C8D0Ev,_ZThn40_N8S19595C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19595C8D0Ev,_ZThn8_N8S19595C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S19595C8D0Ev,_ZThn216_N8S19595C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C8D0Ev,_ZThn40_N8S19595C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19595C8D0Ev,_ZThn180_N8S19595C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C8D1Ev,_ZTv0_n12_N8S19595C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19595C8D1Ev,_ZThn8_N8S19595C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19595C8D1Ev,_ZThn76_N8S19595C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C8D1Ev,_ZThn40_N8S19595C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19595C8D1Ev,_ZThn8_N8S19595C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S19595C8D1Ev,_ZThn216_N8S19595C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C8D1Ev,_ZThn40_N8S19595C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19595C8D1Ev,_ZThn180_N8S19595C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C5D0Ev,_ZTv0_n12_N8S19595C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S19595C5D0Ev,
  (VTBL_ENTRY)_ZN8S19595C5D0Ev,
  (VTBL_ENTRY)_ZN8S19595C5D0Ev,
  (VTBL_ENTRY)_ZN8S19595C5D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19595C5D0Ev,_ZThn32_N8S19595C5D0Ev),
  (VTBL_ENTRY)_ZN8S19595C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C5D1Ev,_ZTv0_n12_N8S19595C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S19595C5D1Ev,
  (VTBL_ENTRY)_ZN8S19595C5D1Ev,
  (VTBL_ENTRY)_ZN8S19595C5D1Ev,
  (VTBL_ENTRY)_ZN8S19595C5D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19595C5D1Ev,_ZThn32_N8S19595C5D1Ev),
  (VTBL_ENTRY)_ZN8S19595C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19595C1D0Ev,_ZTv0_n24_N8S19595C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19595C1D0Ev,_ZThn140_N8S19595C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19595C1D1Ev,_ZTv0_n24_N8S19595C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19595C1D1Ev,_ZThn140_N8S19595C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C1D0Ev,_ZTv0_n12_N8S19595C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S19595C1D0Ev,_ZThn216_N8S19595C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19595C1D0Ev,_ZThn180_N8S19595C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19595C1D0Ev,_ZThn148_N8S19595C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19595C1D0Ev,_ZThn112_N8S19595C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19595C1D0Ev,_ZThn68_N8S19595C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C1D0Ev,_ZThn40_N8S19595C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19595C1D0Ev,_ZThn8_N8S19595C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19595C1D1Ev,_ZTv0_n12_N8S19595C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S19595C1D1Ev,_ZThn216_N8S19595C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19595C1D1Ev,_ZThn180_N8S19595C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19595C1D1Ev,_ZThn148_N8S19595C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19595C1D1Ev,_ZThn112_N8S19595C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19595C1D1Ev,_ZThn68_N8S19595C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19595C1D1Ev,_ZThn40_N8S19595C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19595C1D1Ev,_ZThn8_N8S19595C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19595C1 = {  "S19595C1", // class name
  bases_S19595C1, 22,
  &(vtc_S19595C1[0]), // expected_vtbl_contents
  &(vtt_S19595C1[0]), // expected_vtt_contents
  ABISELECT(416,244), // object size
  NSPAIRA(_ZTI8S19595C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19595C1),72, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19595C1),64, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names111,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2515C4  : virtual S3589C9_nt {
  void *s2515c4f0[2];
  ~S2515C4(); // tgen
  S2515C4(); // tgen
};
//SIG(-1 S2515C4) C1{ VBC2{ vd m Fi Fc Fi} Fp[2]}


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

static void Test_S2515C4()
{
  extern Class_Descriptor cd_S2515C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S2515C4, buf);
    S2515C4 *dp, &lv = *(dp=new (buf) S2515C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S2515C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2515C4)");
    check_base_class_offset(lv, (S3589C9_nt*), ABISELECT(24,12), "S2515C4");
    check_field_offset(lv, s2515c4f0, ABISELECT(8,4), "S2515C4.s2515c4f0");
    test_class_info(&lv, &cd_S2515C4);
    dp->~S2515C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2515C4(Test_S2515C4, "S2515C4", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S2515C4C1Ev();
extern void _ZN7S2515C4D1Ev();
Name_Map name_map_S2515C4[] = {
  NSPAIR(_ZN7S2515C4C1Ev),
  NSPAIR(_ZN7S2515C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
static Base_Class bases_S2515C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C9_nt,    ABISELECT(24,12), //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},
  {0}};
extern VTBL_ENTRY _ZTI7S2515C4[];
extern void _ZN7S2515C4D1Ev();
extern void _ZN7S2515C4D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S2515C4D1Ev,_ZTv0_n12_N7S2515C4D1Ev)();
extern void ABISELECT(_ZThn24_N7S2515C4D1Ev,_ZThn12_N7S2515C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2515C4D0Ev,_ZTv0_n12_N7S2515C4D0Ev)();
extern void ABISELECT(_ZThn24_N7S2515C4D0Ev,_ZThn12_N7S2515C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2515C4[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S2515C4[0]),
  (VTBL_ENTRY)&_ZN7S2515C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2515C4D0Ev,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S2515C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C4D1Ev,_ZTv0_n12_N7S2515C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C4D0Ev,_ZTv0_n12_N7S2515C4D0Ev),
};
extern VTBL_ENTRY _ZTV7S2515C4[];
static  VTT_ENTRY vtt_S2515C4[] = {
  {&(_ZTV7S2515C4[3]),  3,10},
  {&(_ZTV7S2515C4[8]),  8,10},
};
extern VTBL_ENTRY _ZTI7S2515C4[];
extern  VTBL_ENTRY _ZTV7S2515C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2515C4[];
static VTBL_ENTRY alt_thunk_names112[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2515C4D0Ev,_ZTv0_n12_N7S2515C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S2515C4D0Ev,_ZThn12_N7S2515C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2515C4D1Ev,_ZTv0_n12_N7S2515C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S2515C4D1Ev,_ZThn12_N7S2515C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2515C4 = {  "S2515C4", // class name
  bases_S2515C4, 1,
  &(vtc_S2515C4[0]), // expected_vtbl_contents
  &(vtt_S2515C4[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S2515C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S2515C4),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2515C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names112,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2515C7  : S3589C3 {
  __tsi64 s2515c7f0;
  ::S3589C4 s2515c7f1;
  virtual  ~S2515C7(); // _ZN7S2515C7D1Ev
  S2515C7(); // tgen
};
//SIG(-1 S2515C7) C1{ BC2{ vd m Fc FU3{ m Fc[6]}} vd FL FU3}


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

static void Test_S2515C7()
{
  extern Class_Descriptor cd_S2515C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,8)];
    init_test(&cd_S2515C7, buf);
    S2515C7 *dp, &lv = *(dp=new (buf) S2515C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S2515C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2515C7)");
    check_base_class_offset(lv, (S3589C3*), 0, "S2515C7");
    check_field_offset(lv, s2515c7f0, ABISELECT(16,12), "S2515C7.s2515c7f0");
    check_field_offset(lv, s2515c7f1, ABISELECT(24,20), "S2515C7.s2515c7f1");
    test_class_info(&lv, &cd_S2515C7);
    dp->~S2515C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2515C7(Test_S2515C7, "S2515C7", ABISELECT(32,28));

#else // __cplusplus

extern void _ZN7S2515C7C1Ev();
extern void _ZN7S2515C7D1Ev();
Name_Map name_map_S2515C7[] = {
  NSPAIR(_ZN7S2515C7C1Ev),
  NSPAIR(_ZN7S2515C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
static Base_Class bases_S2515C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2515C7[];
extern void _ZN7S2515C7D1Ev();
extern void _ZN7S2515C7D0Ev();
static  VTBL_ENTRY vtc_S2515C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2515C7[0]),
  (VTBL_ENTRY)&_ZN7S2515C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2515C7D0Ev,
};
extern VTBL_ENTRY _ZTI7S2515C7[];
extern  VTBL_ENTRY _ZTV7S2515C7[];
Class_Descriptor cd_S2515C7 = {  "S2515C7", // class name
  bases_S2515C7, 1,
  &(vtc_S2515C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,28), // object size
  NSPAIRA(_ZTI7S2515C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2515C7),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  S2515C6  : virtual S2515C7 , virtual S3589C3 {
  virtual  ~S2515C6(); // _ZN7S2515C6D2Ev
  S2515C6(); // tgen
};
//SIG(-1 S2515C6) C1{ VBC2{ BC3{ vd m Fc FU4{ m Fc[6]}} vd FL FU4} VBC3 vd}


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

static void Test_S2515C6()
{
  extern Class_Descriptor cd_S2515C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S2515C6, buf);
    S2515C6 *dp, &lv = *(dp=new (buf) S2515C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S2515C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2515C6)");
    check_base_class_offset(lv, (S3589C3*)(S2515C7*), ABISELECT(8,4), "S2515C6");
    check_base_class_offset(lv, (S2515C7*), ABISELECT(8,4), "S2515C6");
    /*is_ambiguous_... S2515C6::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*), ABISELECT(40,32), "S2515C6");
    test_class_info(&lv, &cd_S2515C6);
    dp->~S2515C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2515C6(Test_S2515C6, "S2515C6", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN7S2515C6C1Ev();
extern void _ZN7S2515C6D2Ev();
Name_Map name_map_S2515C6[] = {
  NSPAIR(_ZN7S2515C6C1Ev),
  NSPAIR(_ZN7S2515C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S2515C7;
extern VTBL_ENTRY _ZTI7S2515C7[];
extern  VTBL_ENTRY _ZTV7S2515C7[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
static Base_Class bases_S2515C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    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_S2515C7,    ABISELECT(8,4), //bcp->offset
    6, //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},
  {&cd_S3589C3,    ABISELECT(40,32), //bcp->offset
    11, //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 _ZTI7S2515C6[];
extern void _ZN7S2515C6D1Ev();
extern void _ZN7S2515C6D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S2515C6D1Ev,_ZTv0_n12_N7S2515C6D1Ev)();
extern void ABISELECT(_ZThn8_N7S2515C6D1Ev,_ZThn4_N7S2515C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2515C6D0Ev,_ZTv0_n12_N7S2515C6D0Ev)();
extern void ABISELECT(_ZThn8_N7S2515C6D0Ev,_ZThn4_N7S2515C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2515C6D1Ev,_ZTv0_n12_N7S2515C6D1Ev)();
extern void ABISELECT(_ZThn40_N7S2515C6D1Ev,_ZThn32_N7S2515C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2515C6D0Ev,_ZTv0_n12_N7S2515C6D0Ev)();
extern void ABISELECT(_ZThn40_N7S2515C6D0Ev,_ZThn32_N7S2515C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2515C6[] = {
  ABISELECT(40,32),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2515C6[0]),
  (VTBL_ENTRY)&_ZN7S2515C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2515C6D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S2515C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C6D1Ev,_ZTv0_n12_N7S2515C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C6D0Ev,_ZTv0_n12_N7S2515C6D0Ev),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S2515C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C6D1Ev,_ZTv0_n12_N7S2515C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C6D0Ev,_ZTv0_n12_N7S2515C6D0Ev),
};
extern VTBL_ENTRY _ZTV7S2515C6[];
static  VTT_ENTRY vtt_S2515C6[] = {
  {&(_ZTV7S2515C6[4]),  4,16},
  {&(_ZTV7S2515C6[9]),  9,16},
  {&(_ZTV7S2515C6[14]),  14,16},
};
extern VTBL_ENTRY _ZTI7S2515C6[];
extern  VTBL_ENTRY _ZTV7S2515C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2515C6[];
static VTBL_ENTRY alt_thunk_names113[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2515C6D0Ev,_ZTv0_n12_N7S2515C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S2515C6D0Ev,_ZThn32_N7S2515C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S2515C6D0Ev,_ZThn4_N7S2515C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2515C6D1Ev,_ZTv0_n12_N7S2515C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S2515C6D1Ev,_ZThn32_N7S2515C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S2515C6D1Ev,_ZThn4_N7S2515C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2515C6 = {  "S2515C6", // class name
  bases_S2515C6, 3,
  &(vtc_S2515C6[0]), // expected_vtbl_contents
  &(vtt_S2515C6[0]), // expected_vtt_contents
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI7S2515C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2515C6),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2515C6),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names113,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2515C10  : virtual S3589C3 {
  ~S2515C10(); // tgen
  S2515C10(); // tgen
};
//SIG(-1 S2515C10) C1{ VBC2{ vd m Fc FU3{ m Fc[6]}}}


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

static void Test_S2515C10()
{
  extern Class_Descriptor cd_S2515C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S2515C10, buf);
    S2515C10 *dp, &lv = *(dp=new (buf) S2515C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S2515C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2515C10)");
    check_base_class_offset(lv, (S3589C3*), ABISELECT(8,4), "S2515C10");
    test_class_info(&lv, &cd_S2515C10);
    dp->~S2515C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2515C10(Test_S2515C10, "S2515C10", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S2515C10C1Ev();
extern void _ZN8S2515C10D1Ev();
Name_Map name_map_S2515C10[] = {
  NSPAIR(_ZN8S2515C10C1Ev),
  NSPAIR(_ZN8S2515C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
static Base_Class bases_S2515C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    ABISELECT(8,4), //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},
  {0}};
extern VTBL_ENTRY _ZTI8S2515C10[];
extern void _ZN8S2515C10D1Ev();
extern void _ZN8S2515C10D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S2515C10D1Ev,_ZTv0_n12_N8S2515C10D1Ev)();
extern void ABISELECT(_ZThn8_N8S2515C10D1Ev,_ZThn4_N8S2515C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2515C10D0Ev,_ZTv0_n12_N8S2515C10D0Ev)();
extern void ABISELECT(_ZThn8_N8S2515C10D0Ev,_ZThn4_N8S2515C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2515C10[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S2515C10[0]),
  (VTBL_ENTRY)&_ZN8S2515C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2515C10D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S2515C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2515C10D1Ev,_ZTv0_n12_N8S2515C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2515C10D0Ev,_ZTv0_n12_N8S2515C10D0Ev),
};
extern VTBL_ENTRY _ZTV8S2515C10[];
static  VTT_ENTRY vtt_S2515C10[] = {
  {&(_ZTV8S2515C10[3]),  3,10},
  {&(_ZTV8S2515C10[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S2515C10[];
extern  VTBL_ENTRY _ZTV8S2515C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2515C10[];
static VTBL_ENTRY alt_thunk_names114[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2515C10D0Ev,_ZTv0_n12_N8S2515C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S2515C10D0Ev,_ZThn4_N8S2515C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2515C10D1Ev,_ZTv0_n12_N8S2515C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S2515C10D1Ev,_ZThn4_N8S2515C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2515C10 = {  "S2515C10", // class name
  bases_S2515C10, 1,
  &(vtc_S2515C10[0]), // expected_vtbl_contents
  &(vtt_S2515C10[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S2515C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S2515C10),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2515C10),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names114,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2515C2  : S3589C13_nt , virtual S2515C4 , virtual S2515C6 , S3589C3 , virtual S2515C10 {
  char s2515c2f0;
  int s2515c2f1;
  ~S2515C2(); // tgen
  S2515C2(); // tgen
};
//SIG(-1 S2515C2) C1{ BC2{ m FD} VBC3{ VBC4{ vd m Fi Fc Fi} Fp[2]} VBC5{ VBC6{ BC7{ vd m Fc FU8{ m Fc[6]}} vd FL FU8} VBC7 vd} BC7 VBC9{ VBC7} Fc Fi}


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

static void Test_S2515C2()
{
  extern Class_Descriptor cd_S2515C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,28)];
    init_test(&cd_S2515C2, buf);
    S2515C2 *dp, &lv = *(dp=new (buf) S2515C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S2515C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2515C2)");
    check_base_class_offset(lv, (S3589C13_nt*), ABISELECT(16,12), "S2515C2");
    check_base_class_offset(lv, (S3589C9_nt*)(S2515C4*), ABISELECT(64,44), "S2515C2");
    check_base_class_offset(lv, (S2515C4*), ABISELECT(40,32), "S2515C2");
    check_base_class_offset(lv, (S3589C3*)(S2515C7*), ABISELECT(96,64), "S2515C2");
    check_base_class_offset(lv, (S2515C7*)(S2515C6*), ABISELECT(96,64), "S2515C2");
    /*is_ambiguous_... S2515C6::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S2515C6*), ABISELECT(128,92), "S2515C2");
    check_base_class_offset(lv, (S3589C3*)(S2515C10*), ABISELECT(128,92), "S2515C2");
    check_base_class_offset(lv, (S2515C6*), ABISELECT(88,60), "S2515C2");
    /*is_ambiguous_... S2515C2::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*), 0, "S2515C2");
    check_base_class_offset(lv, (S2515C10*), ABISELECT(144,104), "S2515C2");
    check_field_offset(lv, s2515c2f0, ABISELECT(32,24), "S2515C2.s2515c2f0");
    check_field_offset(lv, s2515c2f1, ABISELECT(36,28), "S2515C2.s2515c2f1");
    test_class_info(&lv, &cd_S2515C2);
    dp->~S2515C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2515C2(Test_S2515C2, "S2515C2", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN7S2515C2C1Ev();
extern void _ZN7S2515C2D1Ev();
Name_Map name_map_S2515C2[] = {
  NSPAIR(_ZN7S2515C2C1Ev),
  NSPAIR(_ZN7S2515C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C13_nt;
extern VTBL_ENTRY _ZTI11S3589C13_nt[];
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
extern Class_Descriptor cd_S2515C4;
extern VTBL_ENTRY _ZTI7S2515C4[];
extern  VTBL_ENTRY _ZTV7S2515C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2515C4[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S2515C7;
extern VTBL_ENTRY _ZTI7S2515C7[];
extern  VTBL_ENTRY _ZTV7S2515C7[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S2515C6;
extern VTBL_ENTRY _ZTI7S2515C6[];
extern  VTBL_ENTRY _ZTV7S2515C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2515C6[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S2515C10;
extern VTBL_ENTRY _ZTI8S2515C10[];
extern  VTBL_ENTRY _ZTV8S2515C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2515C10[];
static Base_Class bases_S2515C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C13_nt,    ABISELECT(16,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},
  {&cd_S3589C9_nt,    ABISELECT(64,44), //bcp->offset
    16, //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
    2, //immediately_derived
  0, 1},
  {&cd_S2515C4,    ABISELECT(40,32), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3589C3,    ABISELECT(96,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_S2515C7,    ABISELECT(96,64), //bcp->offset
    28, //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
    6, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(128,92), //bcp->offset
    33, //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
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2515C6,    ABISELECT(88,60), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3589C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2515C10,    ABISELECT(144,104), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2515C2[];
extern void _ZN7S2515C2D1Ev();
extern void _ZN7S2515C2D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S2515C2D1Ev,_ZTv0_n16_N7S2515C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2515C2D1Ev,_ZThn32_N7S2515C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S2515C2D0Ev,_ZTv0_n16_N7S2515C2D0Ev)();
extern void ABISELECT(_ZThn40_N7S2515C2D0Ev,_ZThn32_N7S2515C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2515C2D1Ev,_ZTv0_n12_N7S2515C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S2515C2D1Ev,_ZThn44_N7S2515C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2515C2D0Ev,_ZTv0_n12_N7S2515C2D0Ev)();
extern void ABISELECT(_ZThn64_N7S2515C2D0Ev,_ZThn44_N7S2515C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2515C2D1Ev,_ZTv0_n20_N7S2515C2D1Ev)();
extern void ABISELECT(_ZThn88_N7S2515C2D1Ev,_ZThn60_N7S2515C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2515C2D0Ev,_ZTv0_n20_N7S2515C2D0Ev)();
extern void ABISELECT(_ZThn88_N7S2515C2D0Ev,_ZThn60_N7S2515C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2515C2D1Ev,_ZTv0_n12_N7S2515C2D1Ev)();
extern void ABISELECT(_ZThn96_N7S2515C2D1Ev,_ZThn64_N7S2515C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2515C2D0Ev,_ZTv0_n12_N7S2515C2D0Ev)();
extern void ABISELECT(_ZThn96_N7S2515C2D0Ev,_ZThn64_N7S2515C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2515C2D1Ev,_ZTv0_n12_N7S2515C2D1Ev)();
extern void ABISELECT(_ZThn128_N7S2515C2D1Ev,_ZThn92_N7S2515C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2515C2D0Ev,_ZTv0_n12_N7S2515C2D0Ev)();
extern void ABISELECT(_ZThn128_N7S2515C2D0Ev,_ZThn92_N7S2515C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S2515C2D1Ev,_ZTv0_n16_N7S2515C2D1Ev)();
extern void ABISELECT(_ZThn144_N7S2515C2D1Ev,_ZThn104_N7S2515C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S2515C2D0Ev,_ZTv0_n16_N7S2515C2D0Ev)();
extern void ABISELECT(_ZThn144_N7S2515C2D0Ev,_ZThn104_N7S2515C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2515C2[] = {
  ABISELECT(144,104),
  ABISELECT(128,92),
  ABISELECT(96,64),
  ABISELECT(88,60),
  ABISELECT(64,44),
  ABISELECT(40,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S2515C2[0]),
  (VTBL_ENTRY)&_ZN7S2515C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2515C2D0Ev,
  ABISELECT(-40,-32),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S2515C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2515C2D1Ev,_ZTv0_n16_N7S2515C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2515C2D0Ev,_ZTv0_n16_N7S2515C2D0Ev),
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2515C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C2D1Ev,_ZTv0_n12_N7S2515C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C2D0Ev,_ZTv0_n12_N7S2515C2D0Ev),
  ABISELECT(-88,-60),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI7S2515C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2515C2D1Ev,_ZTv0_n20_N7S2515C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2515C2D0Ev,_ZTv0_n20_N7S2515C2D0Ev),
  ABISELECT(-96,-64),
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI7S2515C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C2D1Ev,_ZTv0_n12_N7S2515C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C2D0Ev,_ZTv0_n12_N7S2515C2D0Ev),
  ABISELECT(-128,-92),
  ABISELECT(-128,-92),
  (VTBL_ENTRY)&(_ZTI7S2515C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C2D1Ev,_ZTv0_n12_N7S2515C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C2D0Ev,_ZTv0_n12_N7S2515C2D0Ev),
  ABISELECT(-144,-104),
  ABISELECT(-16,-12),
  ABISELECT(-144,-104),
  (VTBL_ENTRY)&(_ZTI7S2515C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2515C2D1Ev,_ZTv0_n16_N7S2515C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2515C2D0Ev,_ZTv0_n16_N7S2515C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S2515C2[];
extern void _ZN7S2515C4D1Ev();
extern void _ZN7S2515C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2515C4__7S2515C2[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S2515C4[0]),
  (VTBL_ENTRY)&_ZN7S2515C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2515C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S2515C4D1Ev,_ZTv0_n12_N7S2515C4D1Ev)();
extern void ABISELECT(_ZThn24_N7S2515C4D1Ev,_ZThn12_N7S2515C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2515C4D0Ev,_ZTv0_n12_N7S2515C4D0Ev)();
extern void ABISELECT(_ZThn24_N7S2515C4D0Ev,_ZThn12_N7S2515C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__7S2515C4__7S2515C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S2515C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C4D1Ev,_ZTv0_n12_N7S2515C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C4D0Ev,_ZTv0_n12_N7S2515C4D0Ev),
};
extern void _ZN7S2515C6D1Ev();
extern void _ZN7S2515C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2515C6__7S2515C2[] = {
  ABISELECT(40,32),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2515C6[0]),
  (VTBL_ENTRY)&_ZN7S2515C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2515C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S2515C6D1Ev,_ZTv0_n12_N7S2515C6D1Ev)();
extern void ABISELECT(_ZThn8_N7S2515C6D1Ev,_ZThn4_N7S2515C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2515C6D0Ev,_ZTv0_n12_N7S2515C6D0Ev)();
extern void ABISELECT(_ZThn8_N7S2515C6D0Ev,_ZThn4_N7S2515C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2515C7__7S2515C6__7S2515C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S2515C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C6D1Ev,_ZTv0_n12_N7S2515C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C6D0Ev,_ZTv0_n12_N7S2515C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S2515C6D1Ev,_ZTv0_n12_N7S2515C6D1Ev)();
extern void ABISELECT(_ZThn40_N7S2515C6D1Ev,_ZThn32_N7S2515C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2515C6D0Ev,_ZTv0_n12_N7S2515C6D0Ev)();
extern void ABISELECT(_ZThn40_N7S2515C6D0Ev,_ZThn32_N7S2515C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S2515C6__7S2515C2[] = {
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S2515C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C6D1Ev,_ZTv0_n12_N7S2515C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C6D0Ev,_ZTv0_n12_N7S2515C6D0Ev),
};
extern void _ZN8S2515C10D1Ev();
extern void _ZN8S2515C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2515C10__7S2515C2[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S2515C10[0]),
  (VTBL_ENTRY)&_ZN8S2515C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2515C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S2515C10D1Ev,_ZTv0_n12_N8S2515C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S2515C10D0Ev,_ZTv0_n12_N8S2515C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S2515C10__7S2515C2[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S2515C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2515C10D1Ev,_ZTv0_n12_N8S2515C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2515C10D0Ev,_ZTv0_n12_N8S2515C10D0Ev),
};
static  VTT_ENTRY vtt_S2515C2[] = {
  {&(_ZTV7S2515C2[8]),  8,44},
  {&(_ZTV7S2515C2[14]),  14,44},
  {&(_ZTV7S2515C2[19]),  19,44},
  {&(_ZTV7S2515C2[26]),  26,44},
  {&(_ZTV7S2515C2[31]),  31,44},
  {&(_ZTV7S2515C2[36]),  36,44},
  {&(_ZTV7S2515C2[42]),  42,44},
  {&(_tg__ZTV7S2515C4__7S2515C2[3]),  3,5},
  {&(_tg__ZTV10S3589C9_nt__7S2515C4__7S2515C2[3]),  3,5},
  {&(_tg__ZTV7S2515C6__7S2515C2[4]),  4,6},
  {&(_tg__ZTV7S2515C7__7S2515C6__7S2515C2[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S2515C6__7S2515C2[3]),  3,5},
  {&(_tg__ZTV8S2515C10__7S2515C2[3]),  3,5},
  {&(_tg__ZTV7S3589C3__8S2515C10__7S2515C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S2515C2[];
extern  VTBL_ENTRY _ZTV7S2515C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2515C2[];
static VTBL_ENTRY alt_thunk_names115[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2515C6D0Ev,_ZTv0_n12_N7S2515C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S2515C6D0Ev,_ZThn32_N7S2515C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S2515C6D0Ev,_ZThn4_N7S2515C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2515C6D1Ev,_ZTv0_n12_N7S2515C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S2515C6D1Ev,_ZThn32_N7S2515C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S2515C6D1Ev,_ZThn4_N7S2515C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2515C4D0Ev,_ZTv0_n12_N7S2515C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S2515C4D0Ev,_ZThn12_N7S2515C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2515C4D1Ev,_ZTv0_n12_N7S2515C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S2515C4D1Ev,_ZThn12_N7S2515C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2515C2D0Ev,_ZTv0_n20_N7S2515C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S2515C2D0Ev,_ZThn60_N7S2515C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2515C2D1Ev,_ZTv0_n20_N7S2515C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S2515C2D1Ev,_ZThn60_N7S2515C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2515C2D0Ev,_ZTv0_n12_N7S2515C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S2515C2D0Ev,_ZThn92_N7S2515C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S2515C2D0Ev,_ZThn64_N7S2515C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S2515C2D0Ev,_ZThn44_N7S2515C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2515C2D1Ev,_ZTv0_n12_N7S2515C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S2515C2D1Ev,_ZThn92_N7S2515C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S2515C2D1Ev,_ZThn64_N7S2515C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S2515C2D1Ev,_ZThn44_N7S2515C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S2515C2D0Ev,_ZTv0_n16_N7S2515C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S2515C2D0Ev,_ZThn104_N7S2515C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S2515C2D0Ev,_ZThn32_N7S2515C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S2515C2D1Ev,_ZTv0_n16_N7S2515C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S2515C2D1Ev,_ZThn104_N7S2515C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S2515C2D1Ev,_ZThn32_N7S2515C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2515C2 = {  "S2515C2", // class name
  bases_S2515C2, 9,
  &(vtc_S2515C2[0]), // expected_vtbl_contents
  &(vtt_S2515C2[0]), // expected_vtt_contents
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI7S2515C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S2515C2),44, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2515C2),14, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names115,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2515C11  : virtual S3589C3 {
  int s2515c11f0;
  ::S19905C17_nt s2515c11f1;
  ~S2515C11(); // tgen
  S2515C11(); // tgen
};
//SIG(-1 S2515C11) C1{ VBC2{ vd m Fc FU3{ m Fc[6]}} Fi FC4{}}


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

static void Test_S2515C11()
{
  extern Class_Descriptor cd_S2515C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S2515C11, buf);
    S2515C11 *dp, &lv = *(dp=new (buf) S2515C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S2515C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2515C11)");
    check_base_class_offset(lv, (S3589C3*), ABISELECT(16,12), "S2515C11");
    check_field_offset(lv, s2515c11f0, ABISELECT(8,4), "S2515C11.s2515c11f0");
    check_field_offset(lv, s2515c11f1, ABISELECT(12,8), "S2515C11.s2515c11f1");
    test_class_info(&lv, &cd_S2515C11);
    dp->~S2515C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2515C11(Test_S2515C11, "S2515C11", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN8S2515C11C1Ev();
extern void _ZN8S2515C11D1Ev();
Name_Map name_map_S2515C11[] = {
  NSPAIR(_ZN8S2515C11C1Ev),
  NSPAIR(_ZN8S2515C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
static Base_Class bases_S2515C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    ABISELECT(16,12), //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},
  {0}};
extern VTBL_ENTRY _ZTI8S2515C11[];
extern void _ZN8S2515C11D1Ev();
extern void _ZN8S2515C11D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S2515C11D1Ev,_ZTv0_n12_N8S2515C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S2515C11D1Ev,_ZThn12_N8S2515C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2515C11D0Ev,_ZTv0_n12_N8S2515C11D0Ev)();
extern void ABISELECT(_ZThn16_N8S2515C11D0Ev,_ZThn12_N8S2515C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2515C11[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S2515C11[0]),
  (VTBL_ENTRY)&_ZN8S2515C11D1Ev,
  (VTBL_ENTRY)&_ZN8S2515C11D0Ev,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S2515C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2515C11D1Ev,_ZTv0_n12_N8S2515C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2515C11D0Ev,_ZTv0_n12_N8S2515C11D0Ev),
};
extern VTBL_ENTRY _ZTV8S2515C11[];
static  VTT_ENTRY vtt_S2515C11[] = {
  {&(_ZTV8S2515C11[3]),  3,10},
  {&(_ZTV8S2515C11[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S2515C11[];
extern  VTBL_ENTRY _ZTV8S2515C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2515C11[];
static VTBL_ENTRY alt_thunk_names116[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2515C11D0Ev,_ZTv0_n12_N8S2515C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S2515C11D0Ev,_ZThn12_N8S2515C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2515C11D1Ev,_ZTv0_n12_N8S2515C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S2515C11D1Ev,_ZThn12_N8S2515C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2515C11 = {  "S2515C11", // class name
  bases_S2515C11, 1,
  &(vtc_S2515C11[0]), // expected_vtbl_contents
  &(vtt_S2515C11[0]), // expected_vtt_contents
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI8S2515C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S2515C11),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2515C11),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names116,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2515C1  : S2515C2 , virtual S2515C11 {
  __tsi64 s2515c1f0;
  int s2515c1f1;
  char  :0;
  int s2515c1f3;
  virtual  ~S2515C1(); // _ZN7S2515C1D2Ev
  S2515C1(); // tgen
};
//SIG(1 S2515C1) C1{ BC2{ BC3{ m FD} VBC4{ VBC5{ vd m Fi Fc Fi} Fp[2]} VBC6{ VBC7{ BC8{ vd m Fc FU9{ m Fc[6]}} vd FL FU9} VBC8 vd} BC8 VBC10{ VBC8} Fc Fi} VBC11{ VBC8 Fi FC12{}} vd FL Fi Fc:0 Fi}


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

static void Test_S2515C1()
{
  extern Class_Descriptor cd_S2515C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,35)];
    init_test(&cd_S2515C1, buf);
    S2515C1 *dp, &lv = *(dp=new (buf) S2515C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,136), "sizeof(S2515C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2515C1)");
    check_base_class_offset(lv, (S3589C13_nt*)(S2515C2*), ABISELECT(16,12), "S2515C1");
    check_base_class_offset(lv, (S3589C9_nt*)(S2515C4*), ABISELECT(80,60), "S2515C1");
    check_base_class_offset(lv, (S2515C4*)(S2515C2*), ABISELECT(56,48), "S2515C1");
    check_base_class_offset(lv, (S3589C3*)(S2515C7*), ABISELECT(112,80), "S2515C1");
    check_base_class_offset(lv, (S2515C7*)(S2515C6*), ABISELECT(112,80), "S2515C1");
    /*is_ambiguous_... S2515C6::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S2515C6*), ABISELECT(144,108), "S2515C1");
    check_base_class_offset(lv, (S3589C3*)(S2515C10*), ABISELECT(144,108), "S2515C1");
    check_base_class_offset(lv, (S3589C3*)(S2515C11*), ABISELECT(144,108), "S2515C1");
    check_base_class_offset(lv, (S2515C6*)(S2515C2*), ABISELECT(104,76), "S2515C1");
    /*is_ambiguous_... S2515C2::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S2515C2*), 0, "S2515C1");
    check_base_class_offset(lv, (S2515C10*)(S2515C2*), ABISELECT(160,120), "S2515C1");
    check_base_class_offset(lv, (S2515C2*), 0, "S2515C1");
    check_base_class_offset(lv, (S2515C11*), ABISELECT(168,124), "S2515C1");
    check_field_offset(lv, s2515c1f0, ABISELECT(40,32), "S2515C1.s2515c1f0");
    check_field_offset(lv, s2515c1f1, ABISELECT(48,40), "S2515C1.s2515c1f1");
    check_field_offset(lv, s2515c1f3, ABISELECT(52,44), "S2515C1.s2515c1f3");
    test_class_info(&lv, &cd_S2515C1);
    dp->~S2515C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2515C1(Test_S2515C1, "S2515C1", ABISELECT(192,136));

#else // __cplusplus

extern void _ZN7S2515C1C1Ev();
extern void _ZN7S2515C1D2Ev();
Name_Map name_map_S2515C1[] = {
  NSPAIR(_ZN7S2515C1C1Ev),
  NSPAIR(_ZN7S2515C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C13_nt;
extern VTBL_ENTRY _ZTI11S3589C13_nt[];
extern Class_Descriptor cd_S3589C9_nt;
extern VTBL_ENTRY _ZTI10S3589C9_nt[];
extern  VTBL_ENTRY _ZTV10S3589C9_nt[];
extern Class_Descriptor cd_S2515C4;
extern VTBL_ENTRY _ZTI7S2515C4[];
extern  VTBL_ENTRY _ZTV7S2515C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2515C4[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S2515C7;
extern VTBL_ENTRY _ZTI7S2515C7[];
extern  VTBL_ENTRY _ZTV7S2515C7[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S2515C6;
extern VTBL_ENTRY _ZTI7S2515C6[];
extern  VTBL_ENTRY _ZTV7S2515C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2515C6[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S2515C10;
extern VTBL_ENTRY _ZTI8S2515C10[];
extern  VTBL_ENTRY _ZTV8S2515C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2515C10[];
extern Class_Descriptor cd_S2515C2;
extern VTBL_ENTRY _ZTI7S2515C2[];
extern  VTBL_ENTRY _ZTV7S2515C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2515C2[];
extern Class_Descriptor cd_S2515C11;
extern VTBL_ENTRY _ZTI8S2515C11[];
extern  VTBL_ENTRY _ZTV8S2515C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2515C11[];
static Base_Class bases_S2515C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C13_nt,    ABISELECT(16,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
    9, //immediately_derived
  0, 0},
  {&cd_S3589C9_nt,    ABISELECT(80,60), //bcp->offset
    17, //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
    2, //immediately_derived
  0, 1},
  {&cd_S2515C4,    ABISELECT(56,48), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(112,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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2515C7,    ABISELECT(112,80), //bcp->offset
    29, //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
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(144,108), //bcp->offset
    34, //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
    6, //immediately_derived
  0, 1},
  {&cd_S2515C6,    ABISELECT(104,76), //bcp->offset
    22, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3589C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2515C10,    ABISELECT(160,120), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S2515C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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_S2515C11,    ABISELECT(168,124), //bcp->offset
    45, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2515C1[];
extern void _ZN7S2515C1D1Ev();
extern void _ZN7S2515C1D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S2515C1D1Ev,_ZTv0_n16_N7S2515C1D1Ev)();
extern void ABISELECT(_ZThn56_N7S2515C1D1Ev,_ZThn48_N7S2515C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S2515C1D0Ev,_ZTv0_n16_N7S2515C1D0Ev)();
extern void ABISELECT(_ZThn56_N7S2515C1D0Ev,_ZThn48_N7S2515C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2515C1D1Ev,_ZTv0_n12_N7S2515C1D1Ev)();
extern void ABISELECT(_ZThn80_N7S2515C1D1Ev,_ZThn60_N7S2515C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2515C1D0Ev,_ZTv0_n12_N7S2515C1D0Ev)();
extern void ABISELECT(_ZThn80_N7S2515C1D0Ev,_ZThn60_N7S2515C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2515C1D1Ev,_ZTv0_n20_N7S2515C1D1Ev)();
extern void ABISELECT(_ZThn104_N7S2515C1D1Ev,_ZThn76_N7S2515C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2515C1D0Ev,_ZTv0_n20_N7S2515C1D0Ev)();
extern void ABISELECT(_ZThn104_N7S2515C1D0Ev,_ZThn76_N7S2515C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2515C1D1Ev,_ZTv0_n12_N7S2515C1D1Ev)();
extern void ABISELECT(_ZThn112_N7S2515C1D1Ev,_ZThn80_N7S2515C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2515C1D0Ev,_ZTv0_n12_N7S2515C1D0Ev)();
extern void ABISELECT(_ZThn112_N7S2515C1D0Ev,_ZThn80_N7S2515C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2515C1D1Ev,_ZTv0_n12_N7S2515C1D1Ev)();
extern void ABISELECT(_ZThn144_N7S2515C1D1Ev,_ZThn108_N7S2515C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2515C1D0Ev,_ZTv0_n12_N7S2515C1D0Ev)();
extern void ABISELECT(_ZThn144_N7S2515C1D0Ev,_ZThn108_N7S2515C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S2515C1D1Ev,_ZTv0_n16_N7S2515C1D1Ev)();
extern void ABISELECT(_ZThn160_N7S2515C1D1Ev,_ZThn120_N7S2515C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S2515C1D0Ev,_ZTv0_n16_N7S2515C1D0Ev)();
extern void ABISELECT(_ZThn160_N7S2515C1D0Ev,_ZThn120_N7S2515C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S2515C1D1Ev,_ZTv0_n16_N7S2515C1D1Ev)();
extern void ABISELECT(_ZThn168_N7S2515C1D1Ev,_ZThn124_N7S2515C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S2515C1D0Ev,_ZTv0_n16_N7S2515C1D0Ev)();
extern void ABISELECT(_ZThn168_N7S2515C1D0Ev,_ZThn124_N7S2515C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2515C1[] = {
  ABISELECT(168,124),
  ABISELECT(160,120),
  ABISELECT(144,108),
  ABISELECT(112,80),
  ABISELECT(104,76),
  ABISELECT(80,60),
  ABISELECT(56,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S2515C1[0]),
  (VTBL_ENTRY)&_ZN7S2515C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2515C1D0Ev,
  ABISELECT(-56,-48),
  ABISELECT(24,12),
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI7S2515C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2515C1D1Ev,_ZTv0_n16_N7S2515C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2515C1D0Ev,_ZTv0_n16_N7S2515C1D0Ev),
  ABISELECT(-80,-60),
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI7S2515C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C1D1Ev,_ZTv0_n12_N7S2515C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C1D0Ev,_ZTv0_n12_N7S2515C1D0Ev),
  ABISELECT(-104,-76),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-104,-76),
  (VTBL_ENTRY)&(_ZTI7S2515C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2515C1D1Ev,_ZTv0_n20_N7S2515C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2515C1D0Ev,_ZTv0_n20_N7S2515C1D0Ev),
  ABISELECT(-112,-80),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI7S2515C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C1D1Ev,_ZTv0_n12_N7S2515C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C1D0Ev,_ZTv0_n12_N7S2515C1D0Ev),
  ABISELECT(-144,-108),
  ABISELECT(-144,-108),
  (VTBL_ENTRY)&(_ZTI7S2515C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C1D1Ev,_ZTv0_n12_N7S2515C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C1D0Ev,_ZTv0_n12_N7S2515C1D0Ev),
  ABISELECT(-160,-120),
  ABISELECT(-16,-12),
  ABISELECT(-160,-120),
  (VTBL_ENTRY)&(_ZTI7S2515C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2515C1D1Ev,_ZTv0_n16_N7S2515C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2515C1D0Ev,_ZTv0_n16_N7S2515C1D0Ev),
  ABISELECT(-168,-124),
  ABISELECT(-24,-16),
  ABISELECT(-168,-124),
  (VTBL_ENTRY)&(_ZTI7S2515C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2515C1D1Ev,_ZTv0_n16_N7S2515C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2515C1D0Ev,_ZTv0_n16_N7S2515C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S2515C1[];
extern void _ZN7S2515C2D1Ev();
extern void _ZN7S2515C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2515C2__7S2515C1[] = {
  ABISELECT(160,120),
  ABISELECT(144,108),
  ABISELECT(112,80),
  ABISELECT(104,76),
  ABISELECT(80,60),
  ABISELECT(56,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S2515C2[0]),
  (VTBL_ENTRY)&_ZN7S2515C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2515C2D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S2515C2D1Ev,_ZTv0_n16_N7S2515C2D1Ev)();
extern void ABISELECT(_ZThn56_N7S2515C2D1Ev,_ZThn48_N7S2515C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S2515C2D0Ev,_ZTv0_n16_N7S2515C2D0Ev)();
extern void ABISELECT(_ZThn56_N7S2515C2D0Ev,_ZThn48_N7S2515C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2515C4__7S2515C2__7S2515C1[] = {
  ABISELECT(-56,-48),
  ABISELECT(24,12),
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI7S2515C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2515C2D1Ev,_ZTv0_n16_N7S2515C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2515C2D0Ev,_ZTv0_n16_N7S2515C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S2515C2D1Ev,_ZTv0_n12_N7S2515C2D1Ev)();
extern void ABISELECT(_ZThn80_N7S2515C2D1Ev,_ZThn60_N7S2515C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2515C2D0Ev,_ZTv0_n12_N7S2515C2D0Ev)();
extern void ABISELECT(_ZThn80_N7S2515C2D0Ev,_ZThn60_N7S2515C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__7S2515C2__7S2515C1[] = {
  ABISELECT(-80,-60),
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI7S2515C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C2D1Ev,_ZTv0_n12_N7S2515C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C2D0Ev,_ZTv0_n12_N7S2515C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S2515C2D1Ev,_ZTv0_n20_N7S2515C2D1Ev)();
extern void ABISELECT(_ZThn104_N7S2515C2D1Ev,_ZThn76_N7S2515C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2515C2D0Ev,_ZTv0_n20_N7S2515C2D0Ev)();
extern void ABISELECT(_ZThn104_N7S2515C2D0Ev,_ZThn76_N7S2515C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2515C6__7S2515C2__7S2515C1[] = {
  ABISELECT(-104,-76),
  ABISELECT(40,32),
  ABISELECT(8,4),
  ABISELECT(-104,-76),
  (VTBL_ENTRY)&(_ZTI7S2515C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2515C2D1Ev,_ZTv0_n20_N7S2515C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2515C2D0Ev,_ZTv0_n20_N7S2515C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S2515C2D1Ev,_ZTv0_n12_N7S2515C2D1Ev)();
extern void ABISELECT(_ZThn112_N7S2515C2D1Ev,_ZThn80_N7S2515C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2515C2D0Ev,_ZTv0_n12_N7S2515C2D0Ev)();
extern void ABISELECT(_ZThn112_N7S2515C2D0Ev,_ZThn80_N7S2515C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2515C7__7S2515C2__7S2515C1[] = {
  ABISELECT(-112,-80),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI7S2515C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C2D1Ev,_ZTv0_n12_N7S2515C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C2D0Ev,_ZTv0_n12_N7S2515C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S2515C2D1Ev,_ZTv0_n12_N7S2515C2D1Ev)();
extern void ABISELECT(_ZThn144_N7S2515C2D1Ev,_ZThn108_N7S2515C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2515C2D0Ev,_ZTv0_n12_N7S2515C2D0Ev)();
extern void ABISELECT(_ZThn144_N7S2515C2D0Ev,_ZThn108_N7S2515C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S2515C2__7S2515C1[] = {
  ABISELECT(-144,-108),
  ABISELECT(-144,-108),
  (VTBL_ENTRY)&(_ZTI7S2515C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C2D1Ev,_ZTv0_n12_N7S2515C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C2D0Ev,_ZTv0_n12_N7S2515C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S2515C2D1Ev,_ZTv0_n16_N7S2515C2D1Ev)();
extern void ABISELECT(_ZThn160_N7S2515C2D1Ev,_ZThn120_N7S2515C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S2515C2D0Ev,_ZTv0_n16_N7S2515C2D0Ev)();
extern void ABISELECT(_ZThn160_N7S2515C2D0Ev,_ZThn120_N7S2515C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2515C10__7S2515C2__7S2515C1[] = {
  ABISELECT(-160,-120),
  ABISELECT(-16,-12),
  ABISELECT(-160,-120),
  (VTBL_ENTRY)&(_ZTI7S2515C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2515C2D1Ev,_ZTv0_n16_N7S2515C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2515C2D0Ev,_ZTv0_n16_N7S2515C2D0Ev),
};
extern void _ZN7S2515C4D1Ev();
extern void _ZN7S2515C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2515C4__7S2515C1[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S2515C4[0]),
  (VTBL_ENTRY)&_ZN7S2515C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2515C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S2515C4D1Ev,_ZTv0_n12_N7S2515C4D1Ev)();
extern void ABISELECT(_ZThn24_N7S2515C4D1Ev,_ZThn12_N7S2515C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2515C4D0Ev,_ZTv0_n12_N7S2515C4D0Ev)();
extern void ABISELECT(_ZThn24_N7S2515C4D0Ev,_ZThn12_N7S2515C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S3589C9_nt__7S2515C4__7S2515C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S2515C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C4D1Ev,_ZTv0_n12_N7S2515C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C4D0Ev,_ZTv0_n12_N7S2515C4D0Ev),
};
extern void _ZN7S2515C6D1Ev();
extern void _ZN7S2515C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2515C6__7S2515C1[] = {
  ABISELECT(40,32),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2515C6[0]),
  (VTBL_ENTRY)&_ZN7S2515C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2515C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S2515C6D1Ev,_ZTv0_n12_N7S2515C6D1Ev)();
extern void ABISELECT(_ZThn8_N7S2515C6D1Ev,_ZThn4_N7S2515C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2515C6D0Ev,_ZTv0_n12_N7S2515C6D0Ev)();
extern void ABISELECT(_ZThn8_N7S2515C6D0Ev,_ZThn4_N7S2515C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2515C7__7S2515C6__7S2515C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S2515C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C6D1Ev,_ZTv0_n12_N7S2515C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C6D0Ev,_ZTv0_n12_N7S2515C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S2515C6D1Ev,_ZTv0_n12_N7S2515C6D1Ev)();
extern void ABISELECT(_ZThn40_N7S2515C6D1Ev,_ZThn32_N7S2515C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2515C6D0Ev,_ZTv0_n12_N7S2515C6D0Ev)();
extern void ABISELECT(_ZThn40_N7S2515C6D0Ev,_ZThn32_N7S2515C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S2515C6__7S2515C1[] = {
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S2515C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C6D1Ev,_ZTv0_n12_N7S2515C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2515C6D0Ev,_ZTv0_n12_N7S2515C6D0Ev),
};
extern void _ZN8S2515C10D1Ev();
extern void _ZN8S2515C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2515C10__7S2515C1[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S2515C10[0]),
  (VTBL_ENTRY)&_ZN8S2515C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2515C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S2515C10D1Ev,_ZTv0_n12_N8S2515C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S2515C10D0Ev,_ZTv0_n12_N8S2515C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S2515C10__7S2515C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S2515C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2515C10D1Ev,_ZTv0_n12_N8S2515C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2515C10D0Ev,_ZTv0_n12_N8S2515C10D0Ev),
};
extern void _ZN8S2515C11D1Ev();
extern void _ZN8S2515C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2515C11__7S2515C1[] = {
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S2515C11[0]),
  (VTBL_ENTRY)&_ZN8S2515C11D1Ev,
  (VTBL_ENTRY)&_ZN8S2515C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S2515C11D1Ev,_ZTv0_n12_N8S2515C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S2515C11D0Ev,_ZTv0_n12_N8S2515C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3589C3__8S2515C11__7S2515C1[] = {
  ABISELECT(24,16),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI8S2515C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2515C11D1Ev,_ZTv0_n12_N8S2515C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2515C11D0Ev,_ZTv0_n12_N8S2515C11D0Ev),
};
static  VTT_ENTRY vtt_S2515C1[] = {
  {&(_ZTV7S2515C1[9]),  9,51},
  {&(_tg__ZTV7S2515C2__7S2515C1[8]),  8,10},
  {&(_tg__ZTV7S2515C4__7S2515C2__7S2515C1[4]),  4,6},
  {&(_tg__ZTV10S3589C9_nt__7S2515C2__7S2515C1[3]),  3,5},
  {&(_tg__ZTV7S2515C6__7S2515C2__7S2515C1[5]),  5,7},
  {&(_tg__ZTV7S2515C7__7S2515C2__7S2515C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S2515C2__7S2515C1[3]),  3,5},
  {&(_tg__ZTV8S2515C10__7S2515C2__7S2515C1[4]),  4,6},
  {&(_ZTV7S2515C1[15]),  15,51},
  {&(_ZTV7S2515C1[20]),  20,51},
  {&(_ZTV7S2515C1[27]),  27,51},
  {&(_ZTV7S2515C1[32]),  32,51},
  {&(_ZTV7S2515C1[37]),  37,51},
  {&(_ZTV7S2515C1[43]),  43,51},
  {&(_ZTV7S2515C1[49]),  49,51},
  {&(_tg__ZTV7S2515C4__7S2515C1[3]),  3,5},
  {&(_tg__ZTV10S3589C9_nt__7S2515C4__7S2515C1[3]),  3,5},
  {&(_tg__ZTV7S2515C6__7S2515C1[4]),  4,6},
  {&(_tg__ZTV7S2515C7__7S2515C6__7S2515C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S2515C6__7S2515C1[3]),  3,5},
  {&(_tg__ZTV8S2515C10__7S2515C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__8S2515C10__7S2515C1[3]),  3,5},
  {&(_tg__ZTV8S2515C11__7S2515C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__8S2515C11__7S2515C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S2515C1[];
extern  VTBL_ENTRY _ZTV7S2515C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2515C1[];
static VTBL_ENTRY alt_thunk_names117[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2515C6D0Ev,_ZTv0_n12_N7S2515C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S2515C6D0Ev,_ZThn32_N7S2515C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S2515C6D0Ev,_ZThn4_N7S2515C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2515C6D1Ev,_ZTv0_n12_N7S2515C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S2515C6D1Ev,_ZThn32_N7S2515C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S2515C6D1Ev,_ZThn4_N7S2515C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2515C4D0Ev,_ZTv0_n12_N7S2515C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S2515C4D0Ev,_ZThn12_N7S2515C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2515C4D1Ev,_ZTv0_n12_N7S2515C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S2515C4D1Ev,_ZThn12_N7S2515C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2515C2D0Ev,_ZTv0_n20_N7S2515C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S2515C2D0Ev,_ZThn76_N7S2515C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2515C2D1Ev,_ZTv0_n20_N7S2515C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S2515C2D1Ev,_ZThn76_N7S2515C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2515C2D0Ev,_ZTv0_n12_N7S2515C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S2515C2D0Ev,_ZThn108_N7S2515C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S2515C2D0Ev,_ZThn80_N7S2515C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S2515C2D0Ev,_ZThn60_N7S2515C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2515C2D1Ev,_ZTv0_n12_N7S2515C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S2515C2D1Ev,_ZThn108_N7S2515C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S2515C2D1Ev,_ZThn80_N7S2515C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S2515C2D1Ev,_ZThn60_N7S2515C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S2515C2D0Ev,_ZTv0_n16_N7S2515C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S2515C2D0Ev,_ZThn120_N7S2515C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S2515C2D0Ev,_ZThn48_N7S2515C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S2515C2D1Ev,_ZTv0_n16_N7S2515C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S2515C2D1Ev,_ZThn120_N7S2515C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S2515C2D1Ev,_ZThn48_N7S2515C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2515C1D0Ev,_ZTv0_n20_N7S2515C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S2515C1D0Ev,_ZThn76_N7S2515C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2515C1D1Ev,_ZTv0_n20_N7S2515C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S2515C1D1Ev,_ZThn76_N7S2515C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2515C1D0Ev,_ZTv0_n12_N7S2515C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S2515C1D0Ev,_ZThn108_N7S2515C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S2515C1D0Ev,_ZThn80_N7S2515C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S2515C1D0Ev,_ZThn60_N7S2515C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2515C1D1Ev,_ZTv0_n12_N7S2515C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S2515C1D1Ev,_ZThn108_N7S2515C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S2515C1D1Ev,_ZThn80_N7S2515C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S2515C1D1Ev,_ZThn60_N7S2515C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S2515C1D0Ev,_ZTv0_n16_N7S2515C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S2515C1D0Ev,_ZThn124_N7S2515C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S2515C1D0Ev,_ZThn120_N7S2515C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S2515C1D0Ev,_ZThn48_N7S2515C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S2515C1D1Ev,_ZTv0_n16_N7S2515C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S2515C1D1Ev,_ZThn124_N7S2515C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S2515C1D1Ev,_ZThn120_N7S2515C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S2515C1D1Ev,_ZThn48_N7S2515C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2515C1 = {  "S2515C1", // class name
  bases_S2515C1, 11,
  &(vtc_S2515C1[0]), // expected_vtbl_contents
  &(vtt_S2515C1[0]), // expected_vtt_contents
  ABISELECT(192,136), // object size
  NSPAIRA(_ZTI7S2515C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2515C1),51, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2515C1),24, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names117,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20855C3  {
  virtual void  v4(); // _ZN8S20855C32v4Ev
  virtual void  v5(); // _ZN8S20855C32v5Ev
  virtual void  v6(); // _ZN8S20855C32v6Ev
  virtual void  v7(); // _ZN8S20855C32v7Ev
  virtual void  v8(); // _ZN8S20855C32v8Ev
  virtual void  v9(); // _ZN8S20855C32v9Ev
  virtual void  v10(); // _ZN8S20855C33v10Ev
  virtual void  v11(); // _ZN8S20855C33v11Ev
  virtual void  v12(); // _ZN8S20855C33v12Ev
  ~S20855C3(); // tgen
  S20855C3(); // tgen
};
//SIG(-1 S20855C3) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S20855C3 ::v4(){vfunc_called(this, "_ZN8S20855C32v4Ev");}
void  S20855C3 ::v5(){vfunc_called(this, "_ZN8S20855C32v5Ev");}
void  S20855C3 ::v6(){vfunc_called(this, "_ZN8S20855C32v6Ev");}
void  S20855C3 ::v7(){vfunc_called(this, "_ZN8S20855C32v7Ev");}
void  S20855C3 ::v8(){vfunc_called(this, "_ZN8S20855C32v8Ev");}
void  S20855C3 ::v9(){vfunc_called(this, "_ZN8S20855C32v9Ev");}
void  S20855C3 ::v10(){vfunc_called(this, "_ZN8S20855C33v10Ev");}
void  S20855C3 ::v11(){vfunc_called(this, "_ZN8S20855C33v11Ev");}
void  S20855C3 ::v12(){vfunc_called(this, "_ZN8S20855C33v12Ev");}
S20855C3 ::~S20855C3(){ note_dtor("S20855C3", this);} // tgen
S20855C3 ::S20855C3(){ note_ctor("S20855C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20855C3C1Ev();
extern void _ZN8S20855C3D1Ev();
Name_Map name_map_S20855C3[] = {
  NSPAIR(_ZN8S20855C3C1Ev),
  NSPAIR(_ZN8S20855C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20855C3[];
extern void _ZN8S20855C32v4Ev();
extern void _ZN8S20855C32v5Ev();
extern void _ZN8S20855C32v6Ev();
extern void _ZN8S20855C32v7Ev();
extern void _ZN8S20855C32v8Ev();
extern void _ZN8S20855C32v9Ev();
extern void _ZN8S20855C33v10Ev();
extern void _ZN8S20855C33v11Ev();
extern void _ZN8S20855C33v12Ev();
static  VTBL_ENTRY vtc_S20855C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20855C3[0]),
  (VTBL_ENTRY)&_ZN8S20855C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20855C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20855C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20855C33v12Ev,
};
extern VTBL_ENTRY _ZTI8S20855C3[];
extern  VTBL_ENTRY _ZTV8S20855C3[];
Class_Descriptor cd_S20855C3 = {  "S20855C3", // class name
  0,0,//no base classes
  &(vtc_S20855C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20855C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20855C3),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  S20855C5  {
  int s20855c5f0;
  __tsi64 s20855c5f1;
  virtual  ~S20855C5(); // _ZN8S20855C5D1Ev
  virtual void  v13(); // _ZN8S20855C53v13Ev
  virtual void  v14(); // _ZN8S20855C53v14Ev
  virtual void  v15(); // _ZN8S20855C53v15Ev
  S20855C5(); // tgen
};
//SIG(-1 S20855C5) C1{ vd v1 v2 v3 Fi FL}


 S20855C5 ::~S20855C5(){ note_dtor("S20855C5", this);}
void  S20855C5 ::v13(){vfunc_called(this, "_ZN8S20855C53v13Ev");}
void  S20855C5 ::v14(){vfunc_called(this, "_ZN8S20855C53v14Ev");}
void  S20855C5 ::v15(){vfunc_called(this, "_ZN8S20855C53v15Ev");}
S20855C5 ::S20855C5(){ note_ctor("S20855C5", this);} // tgen

static void Test_S20855C5()
{
  extern Class_Descriptor cd_S20855C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20855C5, buf);
    S20855C5 *dp, &lv = *(dp=new (buf) S20855C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20855C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20855C5)");
    check_field_offset(lv, s20855c5f0, ABISELECT(8,4), "S20855C5.s20855c5f0");
    check_field_offset(lv, s20855c5f1, ABISELECT(16,8), "S20855C5.s20855c5f1");
    test_class_info(&lv, &cd_S20855C5);
    dp->~S20855C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20855C5(Test_S20855C5, "S20855C5", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S20855C5C1Ev();
extern void _ZN8S20855C5D1Ev();
Name_Map name_map_S20855C5[] = {
  NSPAIR(_ZN8S20855C5C1Ev),
  NSPAIR(_ZN8S20855C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20855C5[];
extern void _ZN8S20855C5D1Ev();
extern void _ZN8S20855C5D0Ev();
extern void _ZN8S20855C53v13Ev();
extern void _ZN8S20855C53v14Ev();
extern void _ZN8S20855C53v15Ev();
static  VTBL_ENTRY vtc_S20855C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20855C5[0]),
  (VTBL_ENTRY)&_ZN8S20855C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20855C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20855C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20855C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20855C53v15Ev,
};
extern VTBL_ENTRY _ZTI8S20855C5[];
extern  VTBL_ENTRY _ZTV8S20855C5[];
Class_Descriptor cd_S20855C5 = {  "S20855C5", // class name
  0,0,//no base classes
  &(vtc_S20855C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S20855C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20855C5),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  S20855C4  : S20855C5 {
  int s20855c4f0;
  ::S20855C5 s20855c4f1;
  virtual  ~S20855C4(); // _ZN8S20855C4D1Ev
  virtual void  v16(); // _ZN8S20855C43v16Ev
  virtual void  v17(); // _ZN8S20855C43v17Ev
  virtual void  v18(); // _ZN8S20855C43v18Ev
  S20855C4(); // tgen
};
//SIG(-1 S20855C4) C1{ BC2{ vd v4 v5 v6 Fi FL} vd v1 v2 v3 Fi FC2}


 S20855C4 ::~S20855C4(){ note_dtor("S20855C4", this);}
void  S20855C4 ::v16(){vfunc_called(this, "_ZN8S20855C43v16Ev");}
void  S20855C4 ::v17(){vfunc_called(this, "_ZN8S20855C43v17Ev");}
void  S20855C4 ::v18(){vfunc_called(this, "_ZN8S20855C43v18Ev");}
S20855C4 ::S20855C4(){ note_ctor("S20855C4", this);} // tgen

static void Test_S20855C4()
{
  extern Class_Descriptor cd_S20855C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S20855C4, buf);
    S20855C4 *dp, &lv = *(dp=new (buf) S20855C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S20855C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20855C4)");
    check_base_class_offset(lv, (S20855C5*), 0, "S20855C4");
    check_field_offset(lv, s20855c4f0, ABISELECT(24,16), "S20855C4.s20855c4f0");
    check_field_offset(lv, s20855c4f1, ABISELECT(32,20), "S20855C4.s20855c4f1");
    test_class_info(&lv, &cd_S20855C4);
    dp->~S20855C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20855C4(Test_S20855C4, "S20855C4", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN8S20855C4C1Ev();
extern void _ZN8S20855C4D1Ev();
Name_Map name_map_S20855C4[] = {
  NSPAIR(_ZN8S20855C4C1Ev),
  NSPAIR(_ZN8S20855C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20855C5;
extern VTBL_ENTRY _ZTI8S20855C5[];
extern  VTBL_ENTRY _ZTV8S20855C5[];
static Base_Class bases_S20855C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20855C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S20855C4[];
extern void _ZN8S20855C4D1Ev();
extern void _ZN8S20855C4D0Ev();
extern void _ZN8S20855C53v13Ev();
extern void _ZN8S20855C53v14Ev();
extern void _ZN8S20855C53v15Ev();
extern void _ZN8S20855C43v16Ev();
extern void _ZN8S20855C43v17Ev();
extern void _ZN8S20855C43v18Ev();
static  VTBL_ENTRY vtc_S20855C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20855C4[0]),
  (VTBL_ENTRY)&_ZN8S20855C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20855C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20855C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20855C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20855C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20855C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20855C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20855C43v18Ev,
};
extern VTBL_ENTRY _ZTI8S20855C4[];
extern  VTBL_ENTRY _ZTV8S20855C4[];
Class_Descriptor cd_S20855C4 = {  "S20855C4", // class name
  bases_S20855C4, 1,
  &(vtc_S20855C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI8S20855C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20855C4),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  S20855C2  : virtual S20855C3 , virtual S20855C4 {
  ::S20855C4 s20855c2f0[3];
  int s20855c2f1;
  void *s20855c2f2[8];
  int s20855c2f3;
  long double s20855c2f4[3];
  virtual void  v19(); // _ZN8S20855C23v19Ev
  virtual void  v20(); // _ZN8S20855C23v20Ev
  virtual void  v21(); // _ZN8S20855C23v21Ev
  virtual void  v22(); // _ZN8S20855C23v22Ev
  ~S20855C2(); // tgen
  S20855C2(); // tgen
};
//SIG(-1 S20855C2) C1{ VBC2{ v5 v6 v7 v8 v9 v10 v11 v12 v13} VBC3{ BC4{ vd v14 v15 v16 Fi FL} vd v17 v18 v19 Fi FC4} v1 v2 v3 v4 FC3[3] Fi Fp[8] Fi FD[3]}


void  S20855C2 ::v19(){vfunc_called(this, "_ZN8S20855C23v19Ev");}
void  S20855C2 ::v20(){vfunc_called(this, "_ZN8S20855C23v20Ev");}
void  S20855C2 ::v21(){vfunc_called(this, "_ZN8S20855C23v21Ev");}
void  S20855C2 ::v22(){vfunc_called(this, "_ZN8S20855C23v22Ev");}
S20855C2 ::~S20855C2(){ note_dtor("S20855C2", this);} // tgen
S20855C2 ::S20855C2(){ note_ctor("S20855C2", this);} // tgen

static void Test_S20855C2()
{
  extern Class_Descriptor cd_S20855C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,57)];
    init_test(&cd_S20855C2, buf);
    S20855C2 *dp, &lv = *(dp=new (buf) S20855C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,224), "sizeof(S20855C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20855C2)");
    check_base_class_offset(lv, (S20855C3*), 0, "S20855C2");
    check_base_class_offset(lv, (S20855C5*)(S20855C4*), ABISELECT(304,188), "S20855C2");
    check_base_class_offset(lv, (S20855C4*), ABISELECT(304,188), "S20855C2");
    check_field_offset(lv, s20855c2f0, ABISELECT(8,4), "S20855C2.s20855c2f0");
    check_field_offset(lv, s20855c2f1, ABISELECT(176,112), "S20855C2.s20855c2f1");
    check_field_offset(lv, s20855c2f2, ABISELECT(184,116), "S20855C2.s20855c2f2");
    check_field_offset(lv, s20855c2f3, ABISELECT(248,148), "S20855C2.s20855c2f3");
    check_field_offset(lv, s20855c2f4, ABISELECT(256,152), "S20855C2.s20855c2f4");
    test_class_info(&lv, &cd_S20855C2);
    dp->~S20855C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20855C2(Test_S20855C2, "S20855C2", ABISELECT(368,224));

#else // __cplusplus

extern void _ZN8S20855C2C1Ev();
extern void _ZN8S20855C2D1Ev();
Name_Map name_map_S20855C2[] = {
  NSPAIR(_ZN8S20855C2C1Ev),
  NSPAIR(_ZN8S20855C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20855C3;
extern VTBL_ENTRY _ZTI8S20855C3[];
extern  VTBL_ENTRY _ZTV8S20855C3[];
extern Class_Descriptor cd_S20855C5;
extern VTBL_ENTRY _ZTI8S20855C5[];
extern  VTBL_ENTRY _ZTV8S20855C5[];
extern Class_Descriptor cd_S20855C4;
extern VTBL_ENTRY _ZTI8S20855C4[];
extern  VTBL_ENTRY _ZTV8S20855C4[];
static Base_Class bases_S20855C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20855C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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_S20855C5,    ABISELECT(304,188), //bcp->offset
    -1, //bcp->virtual_function_table_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_S20855C4,    ABISELECT(304,188), //bcp->offset
    28, //bcp->virtual_function_table_offset
    9, //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 _ZTI8S20855C2[];
extern void _ZN8S20855C32v4Ev();
extern void _ZN8S20855C32v5Ev();
extern void _ZN8S20855C32v6Ev();
extern void _ZN8S20855C32v7Ev();
extern void _ZN8S20855C32v8Ev();
extern void _ZN8S20855C32v9Ev();
extern void _ZN8S20855C33v10Ev();
extern void _ZN8S20855C33v11Ev();
extern void _ZN8S20855C33v12Ev();
extern void _ZN8S20855C23v19Ev();
extern void _ZN8S20855C23v20Ev();
extern void _ZN8S20855C23v21Ev();
extern void _ZN8S20855C23v22Ev();
extern void _ZN8S20855C2D1Ev();
extern void _ZN8S20855C2D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20855C2D1Ev,_ZTv0_n12_N8S20855C2D1Ev)();
extern void ABISELECT(_ZThn304_N8S20855C2D1Ev,_ZThn188_N8S20855C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20855C2D0Ev,_ZTv0_n12_N8S20855C2D0Ev)();
extern void ABISELECT(_ZThn304_N8S20855C2D0Ev,_ZThn188_N8S20855C2D0Ev)() __attribute__((weak));
extern void _ZN8S20855C53v13Ev();
extern void _ZN8S20855C53v14Ev();
extern void _ZN8S20855C53v15Ev();
extern void _ZN8S20855C43v16Ev();
extern void _ZN8S20855C43v17Ev();
extern void _ZN8S20855C43v18Ev();
static  VTBL_ENTRY vtc_S20855C2[] = {
  ABISELECT(304,188),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20855C2[0]),
  (VTBL_ENTRY)&_ZN8S20855C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20855C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20855C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20855C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20855C23v19Ev,
  (VTBL_ENTRY)&_ZN8S20855C23v20Ev,
  (VTBL_ENTRY)&_ZN8S20855C23v21Ev,
  (VTBL_ENTRY)&_ZN8S20855C23v22Ev,
  (VTBL_ENTRY)&_ZN8S20855C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20855C2D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-188),
  ABISELECT(-304,-188),
  (VTBL_ENTRY)&(_ZTI8S20855C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20855C2D1Ev,_ZTv0_n12_N8S20855C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20855C2D0Ev,_ZTv0_n12_N8S20855C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20855C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20855C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20855C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20855C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20855C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20855C43v18Ev,
};
extern VTBL_ENTRY _ZTV8S20855C2[];
static  VTT_ENTRY vtt_S20855C2[] = {
  {&(_ZTV8S20855C2[13]),  13,45},
  {&(_ZTV8S20855C2[13]),  13,45},
  {&(_ZTV8S20855C2[37]),  37,45},
};
extern VTBL_ENTRY _ZTI8S20855C2[];
extern  VTBL_ENTRY _ZTV8S20855C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20855C2[];
static VTBL_ENTRY alt_thunk_names118[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20855C2D0Ev,_ZTv0_n12_N8S20855C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20855C2D0Ev,_ZThn188_N8S20855C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20855C2D1Ev,_ZTv0_n12_N8S20855C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20855C2D1Ev,_ZThn188_N8S20855C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20855C2 = {  "S20855C2", // class name
  bases_S20855C2, 3,
  &(vtc_S20855C2[0]), // expected_vtbl_contents
  &(vtt_S20855C2[0]), // expected_vtt_contents
  ABISELECT(368,224), // object size
  NSPAIRA(_ZTI8S20855C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20855C2),45, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20855C2),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names118,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20855C1  : virtual S20855C2 {
  void *s20855c1f0;
  virtual  ~S20855C1(); // _ZN8S20855C1D2Ev
  virtual void  v1(); // _ZN8S20855C12v1Ev
  virtual void  v2(); // _ZN8S20855C12v2Ev
  virtual void  v3(); // _ZN8S20855C12v3Ev
  S20855C1(); // tgen
};
//SIG(1 S20855C1) C1{ VBC2{ VBC3{ v4 v5 v6 v7 v8 v9 v10 v11 v12} VBC4{ BC5{ vd v13 v14 v15 Fi FL} vd v16 v17 v18 Fi FC5} v19 v20 v21 v22 FC4[3] Fi Fp[8] Fi FD[3]} vd v1 v2 v3 Fp}


 S20855C1 ::~S20855C1(){ note_dtor("S20855C1", this);}
void  S20855C1 ::v1(){vfunc_called(this, "_ZN8S20855C12v1Ev");}
void  S20855C1 ::v2(){vfunc_called(this, "_ZN8S20855C12v2Ev");}
void  S20855C1 ::v3(){vfunc_called(this, "_ZN8S20855C12v3Ev");}
S20855C1 ::S20855C1(){ note_ctor("S20855C1", this);} // tgen

static void Test_S20855C1()
{
  extern Class_Descriptor cd_S20855C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,59)];
    init_test(&cd_S20855C1, buf);
    S20855C1 *dp, &lv = *(dp=new (buf) S20855C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,232), "sizeof(S20855C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20855C1)");
    check_base_class_offset(lv, (S20855C3*)(S20855C2*), 0, "S20855C1");
    check_base_class_offset(lv, (S20855C5*)(S20855C4*), ABISELECT(320,196), "S20855C1");
    check_base_class_offset(lv, (S20855C4*)(S20855C2*), ABISELECT(320,196), "S20855C1");
    check_base_class_offset(lv, (S20855C2*), ABISELECT(16,8), "S20855C1");
    check_field_offset(lv, s20855c1f0, ABISELECT(8,4), "S20855C1.s20855c1f0");
    test_class_info(&lv, &cd_S20855C1);
    dp->~S20855C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20855C1(Test_S20855C1, "S20855C1", ABISELECT(384,232));

#else // __cplusplus

extern void _ZN8S20855C1C1Ev();
extern void _ZN8S20855C1D2Ev();
Name_Map name_map_S20855C1[] = {
  NSPAIR(_ZN8S20855C1C1Ev),
  NSPAIR(_ZN8S20855C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20855C3;
extern VTBL_ENTRY _ZTI8S20855C3[];
extern  VTBL_ENTRY _ZTV8S20855C3[];
extern Class_Descriptor cd_S20855C5;
extern VTBL_ENTRY _ZTI8S20855C5[];
extern  VTBL_ENTRY _ZTV8S20855C5[];
extern Class_Descriptor cd_S20855C4;
extern VTBL_ENTRY _ZTI8S20855C4[];
extern  VTBL_ENTRY _ZTV8S20855C4[];
extern Class_Descriptor cd_S20855C2;
extern VTBL_ENTRY _ZTI8S20855C2[];
extern  VTBL_ENTRY _ZTV8S20855C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20855C2[];
static Base_Class bases_S20855C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20855C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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_S20855C5,    ABISELECT(320,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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20855C4,    ABISELECT(320,196), //bcp->offset
    61, //bcp->virtual_function_table_offset
    9, //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_S20855C2,    ABISELECT(16,8), //bcp->offset
    28, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S20855C1[];
extern void _ZN8S20855C32v4Ev();
extern void _ZN8S20855C32v5Ev();
extern void _ZN8S20855C32v6Ev();
extern void _ZN8S20855C32v7Ev();
extern void _ZN8S20855C32v8Ev();
extern void _ZN8S20855C32v9Ev();
extern void _ZN8S20855C33v10Ev();
extern void _ZN8S20855C33v11Ev();
extern void _ZN8S20855C33v12Ev();
extern void _ZN8S20855C1D1Ev();
extern void _ZN8S20855C1D0Ev();
extern void _ZN8S20855C12v1Ev();
extern void _ZN8S20855C12v2Ev();
extern void _ZN8S20855C12v3Ev();
extern void _ZN8S20855C32v4Ev();
extern void _ZN8S20855C32v5Ev();
extern void _ZN8S20855C32v6Ev();
extern void _ZN8S20855C32v7Ev();
extern void _ZN8S20855C32v8Ev();
extern void _ZN8S20855C32v9Ev();
extern void _ZN8S20855C33v10Ev();
extern void _ZN8S20855C33v11Ev();
extern void _ZN8S20855C33v12Ev();
extern void _ZN8S20855C23v19Ev();
extern void _ZN8S20855C23v20Ev();
extern void _ZN8S20855C23v21Ev();
extern void _ZN8S20855C23v22Ev();
extern void ABISELECT(_ZTv0_n144_N8S20855C1D1Ev,_ZTv0_n72_N8S20855C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S20855C1D1Ev,_ZThn8_N8S20855C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N8S20855C1D0Ev,_ZTv0_n72_N8S20855C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S20855C1D0Ev,_ZThn8_N8S20855C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20855C1D1Ev,_ZTv0_n12_N8S20855C1D1Ev)();
extern void ABISELECT(_ZThn320_N8S20855C1D1Ev,_ZThn196_N8S20855C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20855C1D0Ev,_ZTv0_n12_N8S20855C1D0Ev)();
extern void ABISELECT(_ZThn320_N8S20855C1D0Ev,_ZThn196_N8S20855C1D0Ev)() __attribute__((weak));
extern void _ZN8S20855C53v13Ev();
extern void _ZN8S20855C53v14Ev();
extern void _ZN8S20855C53v15Ev();
extern void _ZN8S20855C43v16Ev();
extern void _ZN8S20855C43v17Ev();
extern void _ZN8S20855C43v18Ev();
static  VTBL_ENTRY vtc_S20855C1[] = {
  ABISELECT(320,196),
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20855C1[0]),
  (VTBL_ENTRY)&_ZN8S20855C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20855C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20855C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20855C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20855C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20855C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20855C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20855C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20855C12v3Ev,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  ABISELECT(304,188),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20855C1[0]),
  (VTBL_ENTRY)&_ZN8S20855C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20855C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20855C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20855C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20855C23v19Ev,
  (VTBL_ENTRY)&_ZN8S20855C23v20Ev,
  (VTBL_ENTRY)&_ZN8S20855C23v21Ev,
  (VTBL_ENTRY)&_ZN8S20855C23v22Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S20855C1D1Ev,_ZTv0_n72_N8S20855C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S20855C1D0Ev,_ZTv0_n72_N8S20855C1D0Ev),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-196),
  ABISELECT(-320,-196),
  (VTBL_ENTRY)&(_ZTI8S20855C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20855C1D1Ev,_ZTv0_n12_N8S20855C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20855C1D0Ev,_ZTv0_n12_N8S20855C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20855C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20855C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20855C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20855C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20855C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20855C43v18Ev,
};
extern VTBL_ENTRY _ZTV8S20855C1[];
extern void _ZN8S20855C32v4Ev();
extern void _ZN8S20855C32v5Ev();
extern void _ZN8S20855C32v6Ev();
extern void _ZN8S20855C32v7Ev();
extern void _ZN8S20855C32v8Ev();
extern void _ZN8S20855C32v9Ev();
extern void _ZN8S20855C33v10Ev();
extern void _ZN8S20855C33v11Ev();
extern void _ZN8S20855C33v12Ev();
extern void _ZN8S20855C23v19Ev();
extern void _ZN8S20855C23v20Ev();
extern void _ZN8S20855C23v21Ev();
extern void _ZN8S20855C23v22Ev();
extern void _ZN8S20855C2D1Ev();
extern void _ZN8S20855C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20855C2__8S20855C1[] = {
  ABISELECT(304,188),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20855C2[0]),
  (VTBL_ENTRY)&_ZN8S20855C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20855C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20855C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20855C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20855C23v19Ev,
  (VTBL_ENTRY)&_ZN8S20855C23v20Ev,
  (VTBL_ENTRY)&_ZN8S20855C23v21Ev,
  (VTBL_ENTRY)&_ZN8S20855C23v22Ev,
  (VTBL_ENTRY)&_ZN8S20855C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20855C2D0Ev,
};
extern void _ZN8S20855C32v4Ev();
extern void _ZN8S20855C32v5Ev();
extern void _ZN8S20855C32v6Ev();
extern void _ZN8S20855C32v7Ev();
extern void _ZN8S20855C32v8Ev();
extern void _ZN8S20855C32v9Ev();
extern void _ZN8S20855C33v10Ev();
extern void _ZN8S20855C33v11Ev();
extern void _ZN8S20855C33v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20855C3__8S20855C2__8S20855C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20855C2[0]),
  (VTBL_ENTRY)&_ZN8S20855C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20855C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20855C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20855C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20855C33v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20855C2D1Ev,_ZTv0_n12_N8S20855C2D1Ev)();
extern void ABISELECT(_ZThn304_N8S20855C2D1Ev,_ZThn188_N8S20855C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20855C2D0Ev,_ZTv0_n12_N8S20855C2D0Ev)();
extern void ABISELECT(_ZThn304_N8S20855C2D0Ev,_ZThn188_N8S20855C2D0Ev)() __attribute__((weak));
extern void _ZN8S20855C53v13Ev();
extern void _ZN8S20855C53v14Ev();
extern void _ZN8S20855C53v15Ev();
extern void _ZN8S20855C43v16Ev();
extern void _ZN8S20855C43v17Ev();
extern void _ZN8S20855C43v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20855C4__8S20855C2__8S20855C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-188),
  ABISELECT(-304,-188),
  (VTBL_ENTRY)&(_ZTI8S20855C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20855C2D1Ev,_ZTv0_n12_N8S20855C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20855C2D0Ev,_ZTv0_n12_N8S20855C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20855C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20855C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20855C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20855C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20855C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20855C43v18Ev,
};
static  VTT_ENTRY vtt_S20855C1[] = {
  {&(_ZTV8S20855C1[14]),  14,78},
  {&(_ZTV8S20855C1[46]),  46,78},
  {&(_ZTV8S20855C1[14]),  14,78},
  {&(_ZTV8S20855C1[70]),  70,78},
  {&(_tg__ZTV8S20855C2__8S20855C1[13]),  13,28},
  {&(_tg__ZTV8S20855C3__8S20855C2__8S20855C1[11]),  11,20},
  {&(_tg__ZTV8S20855C4__8S20855C2__8S20855C1[9]),  9,17},
};
extern VTBL_ENTRY _ZTI8S20855C1[];
extern  VTBL_ENTRY _ZTV8S20855C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20855C1[];
static VTBL_ENTRY alt_thunk_names119[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20855C2D0Ev,_ZTv0_n12_N8S20855C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20855C2D0Ev,_ZThn188_N8S20855C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20855C2D1Ev,_ZTv0_n12_N8S20855C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20855C2D1Ev,_ZThn188_N8S20855C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20855C1D0Ev,_ZTv0_n12_N8S20855C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S20855C1D0Ev,_ZThn196_N8S20855C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20855C1D1Ev,_ZTv0_n12_N8S20855C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S20855C1D1Ev,_ZThn196_N8S20855C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N8S20855C1D0Ev,_ZTv0_n72_N8S20855C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20855C1D0Ev,_ZThn8_N8S20855C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N8S20855C1D1Ev,_ZTv0_n72_N8S20855C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20855C1D1Ev,_ZThn8_N8S20855C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20855C1 = {  "S20855C1", // class name
  bases_S20855C1, 4,
  &(vtc_S20855C1[0]), // expected_vtbl_contents
  &(vtt_S20855C1[0]), // expected_vtt_contents
  ABISELECT(384,232), // object size
  NSPAIRA(_ZTI8S20855C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20855C1),78, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20855C1),7, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names119,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3761C2  : S1679C4_nt {
  virtual void  v8(); // _ZN7S3761C22v8Ev
  virtual void  v9(); // _ZN7S3761C22v9Ev
  virtual void  v10(); // _ZN7S3761C23v10Ev
  virtual void  v11(); // _ZN7S3761C23v11Ev
  virtual void  v12(); // _ZN7S3761C23v12Ev
  virtual void  v13(); // _ZN7S3761C23v13Ev
  virtual void  v14(); // _ZN7S3761C23v14Ev
  virtual void  v15(); // _ZN7S3761C23v15Ev
  virtual void  v16(); // _ZN7S3761C23v16Ev
  virtual void  v17(); // _ZN7S3761C23v17Ev
  virtual void  v18(); // _ZN7S3761C23v18Ev
  virtual void  v19(); // _ZN7S3761C23v19Ev
  ~S3761C2(); // tgen
  S3761C2(); // tgen
};
//SIG(-1 S3761C2) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S3761C2 ::v8(){vfunc_called(this, "_ZN7S3761C22v8Ev");}
void  S3761C2 ::v9(){vfunc_called(this, "_ZN7S3761C22v9Ev");}
void  S3761C2 ::v10(){vfunc_called(this, "_ZN7S3761C23v10Ev");}
void  S3761C2 ::v11(){vfunc_called(this, "_ZN7S3761C23v11Ev");}
void  S3761C2 ::v12(){vfunc_called(this, "_ZN7S3761C23v12Ev");}
void  S3761C2 ::v13(){vfunc_called(this, "_ZN7S3761C23v13Ev");}
void  S3761C2 ::v14(){vfunc_called(this, "_ZN7S3761C23v14Ev");}
void  S3761C2 ::v15(){vfunc_called(this, "_ZN7S3761C23v15Ev");}
void  S3761C2 ::v16(){vfunc_called(this, "_ZN7S3761C23v16Ev");}
void  S3761C2 ::v17(){vfunc_called(this, "_ZN7S3761C23v17Ev");}
void  S3761C2 ::v18(){vfunc_called(this, "_ZN7S3761C23v18Ev");}
void  S3761C2 ::v19(){vfunc_called(this, "_ZN7S3761C23v19Ev");}
S3761C2 ::~S3761C2(){ note_dtor("S3761C2", this);} // tgen
S3761C2 ::S3761C2(){ note_ctor("S3761C2", this);} // tgen

static void Test_S3761C2()
{
  extern Class_Descriptor cd_S3761C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3761C2, buf);
    S3761C2 *dp, &lv = *(dp=new (buf) S3761C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3761C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3761C2)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S3761C2");
    test_class_info(&lv, &cd_S3761C2);
    dp->~S3761C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3761C2(Test_S3761C2, "S3761C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3761C2C1Ev();
extern void _ZN7S3761C2D1Ev();
Name_Map name_map_S3761C2[] = {
  NSPAIR(_ZN7S3761C2C1Ev),
  NSPAIR(_ZN7S3761C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S3761C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S3761C2[];
extern void _ZN7S3761C2D1Ev();
extern void _ZN7S3761C2D0Ev();
extern void _ZN7S3761C22v8Ev();
extern void _ZN7S3761C22v9Ev();
extern void _ZN7S3761C23v10Ev();
extern void _ZN7S3761C23v11Ev();
extern void _ZN7S3761C23v12Ev();
extern void _ZN7S3761C23v13Ev();
extern void _ZN7S3761C23v14Ev();
extern void _ZN7S3761C23v15Ev();
extern void _ZN7S3761C23v16Ev();
extern void _ZN7S3761C23v17Ev();
extern void _ZN7S3761C23v18Ev();
extern void _ZN7S3761C23v19Ev();
static  VTBL_ENTRY vtc_S3761C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3761C2[0]),
  (VTBL_ENTRY)&_ZN7S3761C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3761C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3761C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3761C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3761C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3761C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3761C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3761C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3761C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3761C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3761C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3761C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3761C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3761C23v19Ev,
};
extern VTBL_ENTRY _ZTI7S3761C2[];
extern  VTBL_ENTRY _ZTV7S3761C2[];
Class_Descriptor cd_S3761C2 = {  "S3761C2", // class name
  bases_S3761C2, 1,
  &(vtc_S3761C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3761C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3761C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3761C1  : S3761C2 {
  void *s3761c1f0;
  ::S5266C36 s3761c1f1;
  ::S5266C36 s3761c1f2;
  ::S5266C12_nt s3761c1f3;
  void *s3761c1f4[2];
  virtual  ~S3761C1(); // _ZN7S3761C1D1Ev
  virtual void  v1(); // _ZN7S3761C12v1Ev
  virtual void  v2(); // _ZN7S3761C12v2Ev
  virtual void  v3(); // _ZN7S3761C12v3Ev
  virtual void  v4(); // _ZN7S3761C12v4Ev
  virtual void  v5(); // _ZN7S3761C12v5Ev
  virtual void  v6(); // _ZN7S3761C12v6Ev
  virtual void  v7(); // _ZN7S3761C12v7Ev
  S3761C1(); // tgen
};
//SIG(1 S3761C1) C1{ BC2{ BC3{ vd m Fi} v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19} vd v1 v2 v3 v4 v5 v6 v7 Fp FC4{ m Fp Fi[2] FC5{ m}} FC4 FC6{ m FC7{ m FL[2]}} Fp[2]}


 S3761C1 ::~S3761C1(){ note_dtor("S3761C1", this);}
void  S3761C1 ::v1(){vfunc_called(this, "_ZN7S3761C12v1Ev");}
void  S3761C1 ::v2(){vfunc_called(this, "_ZN7S3761C12v2Ev");}
void  S3761C1 ::v3(){vfunc_called(this, "_ZN7S3761C12v3Ev");}
void  S3761C1 ::v4(){vfunc_called(this, "_ZN7S3761C12v4Ev");}
void  S3761C1 ::v5(){vfunc_called(this, "_ZN7S3761C12v5Ev");}
void  S3761C1 ::v6(){vfunc_called(this, "_ZN7S3761C12v6Ev");}
void  S3761C1 ::v7(){vfunc_called(this, "_ZN7S3761C12v7Ev");}
S3761C1 ::S3761C1(){ note_ctor("S3761C1", this);} // tgen

static void Test_S3761C1()
{
  extern Class_Descriptor cd_S3761C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S3761C1, buf);
    S3761C1 *dp, &lv = *(dp=new (buf) S3761C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S3761C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3761C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S3761C2*), 0, "S3761C1");
    check_base_class_offset(lv, (S3761C2*), 0, "S3761C1");
    check_field_offset(lv, s3761c1f0, ABISELECT(16,8), "S3761C1.s3761c1f0");
    check_field_offset(lv, s3761c1f1, ABISELECT(24,12), "S3761C1.s3761c1f1");
    check_field_offset(lv, s3761c1f2, ABISELECT(48,28), "S3761C1.s3761c1f2");
    check_field_offset(lv, s3761c1f3, ABISELECT(72,44), "S3761C1.s3761c1f3");
    check_field_offset(lv, s3761c1f4, ABISELECT(88,60), "S3761C1.s3761c1f4");
    test_class_info(&lv, &cd_S3761C1);
    dp->~S3761C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3761C1(Test_S3761C1, "S3761C1", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S3761C1C1Ev();
extern void _ZN7S3761C1D1Ev();
Name_Map name_map_S3761C1[] = {
  NSPAIR(_ZN7S3761C1C1Ev),
  NSPAIR(_ZN7S3761C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S3761C2;
extern VTBL_ENTRY _ZTI7S3761C2[];
extern  VTBL_ENTRY _ZTV7S3761C2[];
static Base_Class bases_S3761C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S3761C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3761C1[];
extern void _ZN7S3761C1D1Ev();
extern void _ZN7S3761C1D0Ev();
extern void _ZN7S3761C22v8Ev();
extern void _ZN7S3761C22v9Ev();
extern void _ZN7S3761C23v10Ev();
extern void _ZN7S3761C23v11Ev();
extern void _ZN7S3761C23v12Ev();
extern void _ZN7S3761C23v13Ev();
extern void _ZN7S3761C23v14Ev();
extern void _ZN7S3761C23v15Ev();
extern void _ZN7S3761C23v16Ev();
extern void _ZN7S3761C23v17Ev();
extern void _ZN7S3761C23v18Ev();
extern void _ZN7S3761C23v19Ev();
extern void _ZN7S3761C12v1Ev();
extern void _ZN7S3761C12v2Ev();
extern void _ZN7S3761C12v3Ev();
extern void _ZN7S3761C12v4Ev();
extern void _ZN7S3761C12v5Ev();
extern void _ZN7S3761C12v6Ev();
extern void _ZN7S3761C12v7Ev();
static  VTBL_ENTRY vtc_S3761C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3761C1[0]),
  (VTBL_ENTRY)&_ZN7S3761C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3761C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3761C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3761C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3761C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3761C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3761C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3761C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3761C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3761C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3761C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3761C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3761C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3761C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3761C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3761C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3761C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3761C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3761C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3761C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3761C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S3761C1[];
extern  VTBL_ENTRY _ZTV7S3761C1[];
Class_Descriptor cd_S3761C1 = {  "S3761C1", // class name
  bases_S3761C1, 2,
  &(vtc_S3761C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S3761C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3761C1),23, //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  S6761C2  {
  virtual  ~S6761C2(); // _ZN7S6761C2D1Ev
  virtual void  v3(); // _ZN7S6761C22v3Ev
  virtual void  v4(); // _ZN7S6761C22v4Ev
  S6761C2(); // tgen
};
//SIG(-1 S6761C2) C1{ vd v1 v2}


 S6761C2 ::~S6761C2(){ note_dtor("S6761C2", this);}
void  S6761C2 ::v3(){vfunc_called(this, "_ZN7S6761C22v3Ev");}
void  S6761C2 ::v4(){vfunc_called(this, "_ZN7S6761C22v4Ev");}
S6761C2 ::S6761C2(){ note_ctor("S6761C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6761C2C1Ev();
extern void _ZN7S6761C2D1Ev();
Name_Map name_map_S6761C2[] = {
  NSPAIR(_ZN7S6761C2C1Ev),
  NSPAIR(_ZN7S6761C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6761C2[];
extern void _ZN7S6761C2D1Ev();
extern void _ZN7S6761C2D0Ev();
extern void _ZN7S6761C22v3Ev();
extern void _ZN7S6761C22v4Ev();
static  VTBL_ENTRY vtc_S6761C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6761C2[0]),
  (VTBL_ENTRY)&_ZN7S6761C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6761C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6761C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6761C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S6761C2[];
extern  VTBL_ENTRY _ZTV7S6761C2[];
Class_Descriptor cd_S6761C2 = {  "S6761C2", // class name
  0,0,//no base classes
  &(vtc_S6761C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6761C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6761C2),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  S6761C4  {
  int s6761c4f0[5];
  long s6761c4f1;
  virtual void  v5(); // _ZN7S6761C42v5Ev
  virtual void  v6(); // _ZN7S6761C42v6Ev
  virtual void  v7(); // _ZN7S6761C42v7Ev
  virtual void  v8(); // _ZN7S6761C42v8Ev
  ~S6761C4(); // tgen
  S6761C4(); // tgen
};
//SIG(-1 S6761C4) C1{ v1 v2 v3 v4 Fi[5] Fl}


void  S6761C4 ::v5(){vfunc_called(this, "_ZN7S6761C42v5Ev");}
void  S6761C4 ::v6(){vfunc_called(this, "_ZN7S6761C42v6Ev");}
void  S6761C4 ::v7(){vfunc_called(this, "_ZN7S6761C42v7Ev");}
void  S6761C4 ::v8(){vfunc_called(this, "_ZN7S6761C42v8Ev");}
S6761C4 ::~S6761C4(){ note_dtor("S6761C4", this);} // tgen
S6761C4 ::S6761C4(){ note_ctor("S6761C4", this);} // tgen

static void Test_S6761C4()
{
  extern Class_Descriptor cd_S6761C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S6761C4, buf);
    S6761C4 *dp, &lv = *(dp=new (buf) S6761C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S6761C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6761C4)");
    check_field_offset(lv, s6761c4f0, ABISELECT(8,4), "S6761C4.s6761c4f0");
    check_field_offset(lv, s6761c4f1, ABISELECT(32,24), "S6761C4.s6761c4f1");
    test_class_info(&lv, &cd_S6761C4);
    dp->~S6761C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6761C4(Test_S6761C4, "S6761C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S6761C4C1Ev();
extern void _ZN7S6761C4D1Ev();
Name_Map name_map_S6761C4[] = {
  NSPAIR(_ZN7S6761C4C1Ev),
  NSPAIR(_ZN7S6761C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6761C4[];
extern void _ZN7S6761C42v5Ev();
extern void _ZN7S6761C42v6Ev();
extern void _ZN7S6761C42v7Ev();
extern void _ZN7S6761C42v8Ev();
static  VTBL_ENTRY vtc_S6761C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6761C4[0]),
  (VTBL_ENTRY)&_ZN7S6761C42v5Ev,
  (VTBL_ENTRY)&_ZN7S6761C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6761C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6761C42v8Ev,
};
extern VTBL_ENTRY _ZTI7S6761C4[];
extern  VTBL_ENTRY _ZTV7S6761C4[];
Class_Descriptor cd_S6761C4 = {  "S6761C4", // class name
  0,0,//no base classes
  &(vtc_S6761C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S6761C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6761C4),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  S6761C6  {
  virtual void  v9(); // _ZN7S6761C62v9Ev
  virtual void  v10(); // _ZN7S6761C63v10Ev
  virtual void  v11(); // _ZN7S6761C63v11Ev
  virtual void  v12(); // _ZN7S6761C63v12Ev
  virtual void  v13(); // _ZN7S6761C63v13Ev
  virtual void  v14(); // _ZN7S6761C63v14Ev
  virtual void  v15(); // _ZN7S6761C63v15Ev
  virtual void  v16(); // _ZN7S6761C63v16Ev
  virtual void  v17(); // _ZN7S6761C63v17Ev
  ~S6761C6(); // tgen
  S6761C6(); // tgen
};
//SIG(-1 S6761C6) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S6761C6 ::v9(){vfunc_called(this, "_ZN7S6761C62v9Ev");}
void  S6761C6 ::v10(){vfunc_called(this, "_ZN7S6761C63v10Ev");}
void  S6761C6 ::v11(){vfunc_called(this, "_ZN7S6761C63v11Ev");}
void  S6761C6 ::v12(){vfunc_called(this, "_ZN7S6761C63v12Ev");}
void  S6761C6 ::v13(){vfunc_called(this, "_ZN7S6761C63v13Ev");}
void  S6761C6 ::v14(){vfunc_called(this, "_ZN7S6761C63v14Ev");}
void  S6761C6 ::v15(){vfunc_called(this, "_ZN7S6761C63v15Ev");}
void  S6761C6 ::v16(){vfunc_called(this, "_ZN7S6761C63v16Ev");}
void  S6761C6 ::v17(){vfunc_called(this, "_ZN7S6761C63v17Ev");}
S6761C6 ::~S6761C6(){ note_dtor("S6761C6", this);} // tgen
S6761C6 ::S6761C6(){ note_ctor("S6761C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6761C6C1Ev();
extern void _ZN7S6761C6D1Ev();
Name_Map name_map_S6761C6[] = {
  NSPAIR(_ZN7S6761C6C1Ev),
  NSPAIR(_ZN7S6761C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6761C6[];
extern void _ZN7S6761C62v9Ev();
extern void _ZN7S6761C63v10Ev();
extern void _ZN7S6761C63v11Ev();
extern void _ZN7S6761C63v12Ev();
extern void _ZN7S6761C63v13Ev();
extern void _ZN7S6761C63v14Ev();
extern void _ZN7S6761C63v15Ev();
extern void _ZN7S6761C63v16Ev();
extern void _ZN7S6761C63v17Ev();
static  VTBL_ENTRY vtc_S6761C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6761C6[0]),
  (VTBL_ENTRY)&_ZN7S6761C62v9Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v10Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v14Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v15Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v16Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v17Ev,
};
extern VTBL_ENTRY _ZTI7S6761C6[];
extern  VTBL_ENTRY _ZTV7S6761C6[];
Class_Descriptor cd_S6761C6 = {  "S6761C6", // class name
  0,0,//no base classes
  &(vtc_S6761C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6761C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6761C6),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  S6761C5  : virtual S6761C6 {
  void *s6761c5f0;
  long double s6761c5f1;
  int s6761c5f2;
  virtual void  v18(); // _ZN7S6761C53v18Ev
  virtual void  v19(); // _ZN7S6761C53v19Ev
  virtual void  v20(); // _ZN7S6761C53v20Ev
  ~S6761C5(); // tgen
  S6761C5(); // tgen
};
//SIG(-1 S6761C5) C1{ VBC2{ v4 v5 v6 v7 v8 v9 v10 v11 v12} v1 v2 v3 Fp FD Fi}


void  S6761C5 ::v18(){vfunc_called(this, "_ZN7S6761C53v18Ev");}
void  S6761C5 ::v19(){vfunc_called(this, "_ZN7S6761C53v19Ev");}
void  S6761C5 ::v20(){vfunc_called(this, "_ZN7S6761C53v20Ev");}
S6761C5 ::~S6761C5(){ note_dtor("S6761C5", this);} // tgen
S6761C5 ::S6761C5(){ note_ctor("S6761C5", this);} // tgen

static void Test_S6761C5()
{
  extern Class_Descriptor cd_S6761C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S6761C5, buf);
    S6761C5 *dp, &lv = *(dp=new (buf) S6761C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S6761C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6761C5)");
    check_base_class_offset(lv, (S6761C6*), 0, "S6761C5");
    check_field_offset(lv, s6761c5f0, ABISELECT(8,4), "S6761C5.s6761c5f0");
    check_field_offset(lv, s6761c5f1, ABISELECT(16,8), "S6761C5.s6761c5f1");
    check_field_offset(lv, s6761c5f2, ABISELECT(32,20), "S6761C5.s6761c5f2");
    test_class_info(&lv, &cd_S6761C5);
    dp->~S6761C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6761C5(Test_S6761C5, "S6761C5", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S6761C5C1Ev();
extern void _ZN7S6761C5D1Ev();
Name_Map name_map_S6761C5[] = {
  NSPAIR(_ZN7S6761C5C1Ev),
  NSPAIR(_ZN7S6761C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6761C6;
extern VTBL_ENTRY _ZTI7S6761C6[];
extern  VTBL_ENTRY _ZTV7S6761C6[];
static Base_Class bases_S6761C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6761C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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 _ZTI7S6761C5[];
extern void _ZN7S6761C62v9Ev();
extern void _ZN7S6761C63v10Ev();
extern void _ZN7S6761C63v11Ev();
extern void _ZN7S6761C63v12Ev();
extern void _ZN7S6761C63v13Ev();
extern void _ZN7S6761C63v14Ev();
extern void _ZN7S6761C63v15Ev();
extern void _ZN7S6761C63v16Ev();
extern void _ZN7S6761C63v17Ev();
extern void _ZN7S6761C53v18Ev();
extern void _ZN7S6761C53v19Ev();
extern void _ZN7S6761C53v20Ev();
static  VTBL_ENTRY vtc_S6761C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6761C5[0]),
  (VTBL_ENTRY)&_ZN7S6761C62v9Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v10Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v14Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v15Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v16Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v17Ev,
  (VTBL_ENTRY)&_ZN7S6761C53v18Ev,
  (VTBL_ENTRY)&_ZN7S6761C53v19Ev,
  (VTBL_ENTRY)&_ZN7S6761C53v20Ev,
};
extern VTBL_ENTRY _ZTV7S6761C5[];
static  VTT_ENTRY vtt_S6761C5[] = {
  {&(_ZTV7S6761C5[12]),  12,24},
  {&(_ZTV7S6761C5[12]),  12,24},
};
extern VTBL_ENTRY _ZTI7S6761C5[];
extern  VTBL_ENTRY _ZTV7S6761C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6761C5[];
Class_Descriptor cd_S6761C5 = {  "S6761C5", // class name
  bases_S6761C5, 1,
  &(vtc_S6761C5[0]), // expected_vtbl_contents
  &(vtt_S6761C5[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S6761C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S6761C5),24, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6761C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6761C3  : virtual S6761C4 , virtual S6761C5 {
  virtual void  v21(); // _ZN7S6761C33v21Ev
  virtual void  v22(); // _ZN7S6761C33v22Ev
  virtual void  v23(); // _ZN7S6761C33v23Ev
  ~S6761C3(); // tgen
  S6761C3(); // tgen
};
//SIG(-1 S6761C3) C1{ VBC2{ v4 v5 v6 v7 Fi[5] Fl} VBC3{ VBC4{ v8 v9 v10 v11 v12 v13 v14 v15 v16} v17 v18 v19 Fp FD Fi} v1 v2 v3}


void  S6761C3 ::v21(){vfunc_called(this, "_ZN7S6761C33v21Ev");}
void  S6761C3 ::v22(){vfunc_called(this, "_ZN7S6761C33v22Ev");}
void  S6761C3 ::v23(){vfunc_called(this, "_ZN7S6761C33v23Ev");}
S6761C3 ::~S6761C3(){ note_dtor("S6761C3", this);} // tgen
S6761C3 ::S6761C3(){ note_ctor("S6761C3", this);} // tgen

static void Test_S6761C3()
{
  extern Class_Descriptor cd_S6761C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S6761C3, buf);
    S6761C3 *dp, &lv = *(dp=new (buf) S6761C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S6761C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6761C3)");
    check_base_class_offset(lv, (S6761C4*), ABISELECT(8,4), "S6761C3");
    check_base_class_offset(lv, (S6761C6*)(S6761C5*), 0, "S6761C3");
    check_base_class_offset(lv, (S6761C5*), ABISELECT(48,32), "S6761C3");
    test_class_info(&lv, &cd_S6761C3);
    dp->~S6761C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6761C3(Test_S6761C3, "S6761C3", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN7S6761C3C1Ev();
extern void _ZN7S6761C3D1Ev();
Name_Map name_map_S6761C3[] = {
  NSPAIR(_ZN7S6761C3C1Ev),
  NSPAIR(_ZN7S6761C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6761C4;
extern VTBL_ENTRY _ZTI7S6761C4[];
extern  VTBL_ENTRY _ZTV7S6761C4[];
extern Class_Descriptor cd_S6761C6;
extern VTBL_ENTRY _ZTI7S6761C6[];
extern  VTBL_ENTRY _ZTV7S6761C6[];
extern Class_Descriptor cd_S6761C5;
extern VTBL_ENTRY _ZTI7S6761C5[];
extern  VTBL_ENTRY _ZTV7S6761C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6761C5[];
static Base_Class bases_S6761C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6761C4,    ABISELECT(8,4), //bcp->offset
    26, //bcp->virtual_function_table_offset
    6, //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_S6761C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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
    2, //immediately_derived
  0, 1},
  {&cd_S6761C5,    ABISELECT(48,32), //bcp->offset
    36, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6761C3[];
extern void _ZN7S6761C62v9Ev();
extern void _ZN7S6761C63v10Ev();
extern void _ZN7S6761C63v11Ev();
extern void _ZN7S6761C63v12Ev();
extern void _ZN7S6761C63v13Ev();
extern void _ZN7S6761C63v14Ev();
extern void _ZN7S6761C63v15Ev();
extern void _ZN7S6761C63v16Ev();
extern void _ZN7S6761C63v17Ev();
extern void _ZN7S6761C33v21Ev();
extern void _ZN7S6761C33v22Ev();
extern void _ZN7S6761C33v23Ev();
extern void _ZN7S6761C42v5Ev();
extern void _ZN7S6761C42v6Ev();
extern void _ZN7S6761C42v7Ev();
extern void _ZN7S6761C42v8Ev();
extern void _ZN7S6761C62v9Ev();
extern void _ZN7S6761C63v10Ev();
extern void _ZN7S6761C63v11Ev();
extern void _ZN7S6761C63v12Ev();
extern void _ZN7S6761C63v13Ev();
extern void _ZN7S6761C63v14Ev();
extern void _ZN7S6761C63v15Ev();
extern void _ZN7S6761C63v16Ev();
extern void _ZN7S6761C63v17Ev();
extern void _ZN7S6761C53v18Ev();
extern void _ZN7S6761C53v19Ev();
extern void _ZN7S6761C53v20Ev();
static  VTBL_ENTRY vtc_S6761C3[] = {
  0,
  ABISELECT(48,32),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6761C3[0]),
  (VTBL_ENTRY)&_ZN7S6761C62v9Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v10Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v14Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v15Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v16Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v17Ev,
  (VTBL_ENTRY)&_ZN7S6761C33v21Ev,
  (VTBL_ENTRY)&_ZN7S6761C33v22Ev,
  (VTBL_ENTRY)&_ZN7S6761C33v23Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6761C3[0]),
  (VTBL_ENTRY)&_ZN7S6761C42v5Ev,
  (VTBL_ENTRY)&_ZN7S6761C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6761C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6761C42v8Ev,
  0,
  0,
  0,
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S6761C3[0]),
  (VTBL_ENTRY)&_ZN7S6761C62v9Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v10Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v14Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v15Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v16Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v17Ev,
  (VTBL_ENTRY)&_ZN7S6761C53v18Ev,
  (VTBL_ENTRY)&_ZN7S6761C53v19Ev,
  (VTBL_ENTRY)&_ZN7S6761C53v20Ev,
};
extern VTBL_ENTRY _ZTV7S6761C3[];
extern void _ZN7S6761C62v9Ev();
extern void _ZN7S6761C63v10Ev();
extern void _ZN7S6761C63v11Ev();
extern void _ZN7S6761C63v12Ev();
extern void _ZN7S6761C63v13Ev();
extern void _ZN7S6761C63v14Ev();
extern void _ZN7S6761C63v15Ev();
extern void _ZN7S6761C63v16Ev();
extern void _ZN7S6761C63v17Ev();
extern void _ZN7S6761C53v18Ev();
extern void _ZN7S6761C53v19Ev();
extern void _ZN7S6761C53v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6761C5__7S6761C3[] = {
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S6761C5[0]),
  (VTBL_ENTRY)&_ZN7S6761C62v9Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v10Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v14Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v15Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v16Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v17Ev,
  (VTBL_ENTRY)&_ZN7S6761C53v18Ev,
  (VTBL_ENTRY)&_ZN7S6761C53v19Ev,
  (VTBL_ENTRY)&_ZN7S6761C53v20Ev,
};
extern void _ZN7S6761C62v9Ev();
extern void _ZN7S6761C63v10Ev();
extern void _ZN7S6761C63v11Ev();
extern void _ZN7S6761C63v12Ev();
extern void _ZN7S6761C63v13Ev();
extern void _ZN7S6761C63v14Ev();
extern void _ZN7S6761C63v15Ev();
extern void _ZN7S6761C63v16Ev();
extern void _ZN7S6761C63v17Ev();
static  VTBL_ENTRY _tg__ZTV7S6761C6__7S6761C5__7S6761C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,32),
  (VTBL_ENTRY)&(_ZTI7S6761C5[0]),
  (VTBL_ENTRY)&_ZN7S6761C62v9Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v10Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v14Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v15Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v16Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v17Ev,
};
static  VTT_ENTRY vtt_S6761C3[] = {
  {&(_ZTV7S6761C3[14]),  14,63},
  {&(_ZTV7S6761C3[32]),  32,63},
  {&(_ZTV7S6761C3[51]),  51,63},
  {&(_ZTV7S6761C3[14]),  14,63},
  {&(_tg__ZTV7S6761C5__7S6761C3[12]),  12,24},
  {&(_tg__ZTV7S6761C6__7S6761C5__7S6761C3[11]),  11,20},
};
extern VTBL_ENTRY _ZTI7S6761C3[];
extern  VTBL_ENTRY _ZTV7S6761C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6761C3[];
Class_Descriptor cd_S6761C3 = {  "S6761C3", // class name
  bases_S6761C3, 3,
  &(vtc_S6761C3[0]), // expected_vtbl_contents
  &(vtt_S6761C3[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI7S6761C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6761C3),63, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6761C3),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6761C1  : S6761C2 , virtual S6761C3 {
  char s6761c1f0;
  void *s6761c1f1[5];
  virtual void  v1(); // _ZN7S6761C12v1Ev
  virtual void  v2(); // _ZN7S6761C12v2Ev
  ~S6761C1(); // tgen
  S6761C1(); // tgen
};
//SIG(1 S6761C1) C1{ BC2{ vd v3 v4} VBC3{ VBC4{ v5 v6 v7 v8 Fi[5] Fl} VBC5{ VBC6{ v9 v10 v11 v12 v13 v14 v15 v16 v17} v18 v19 v20 Fp FD Fi} v21 v22 v23} v1 v2 Fc Fp[5]}


void  S6761C1 ::v1(){vfunc_called(this, "_ZN7S6761C12v1Ev");}
void  S6761C1 ::v2(){vfunc_called(this, "_ZN7S6761C12v2Ev");}
S6761C1 ::~S6761C1(){ note_dtor("S6761C1", this);} // tgen
S6761C1 ::S6761C1(){ note_ctor("S6761C1", this);} // tgen

static void Test_S6761C1()
{
  extern Class_Descriptor cd_S6761C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,22)];
    init_test(&cd_S6761C1, buf);
    S6761C1 *dp, &lv = *(dp=new (buf) S6761C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,84), "sizeof(S6761C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6761C1)");
    check_base_class_offset(lv, (S6761C2*), 0, "S6761C1");
    check_base_class_offset(lv, (S6761C4*)(S6761C3*), ABISELECT(64,32), "S6761C1");
    check_base_class_offset(lv, (S6761C6*)(S6761C5*), ABISELECT(56,28), "S6761C1");
    check_base_class_offset(lv, (S6761C5*)(S6761C3*), ABISELECT(112,60), "S6761C1");
    check_base_class_offset(lv, (S6761C3*), ABISELECT(56,28), "S6761C1");
    check_field_offset(lv, s6761c1f0, ABISELECT(8,4), "S6761C1.s6761c1f0");
    check_field_offset(lv, s6761c1f1, ABISELECT(16,8), "S6761C1.s6761c1f1");
    test_class_info(&lv, &cd_S6761C1);
    dp->~S6761C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6761C1(Test_S6761C1, "S6761C1", ABISELECT(160,84));

#else // __cplusplus

extern void _ZN7S6761C1C1Ev();
extern void _ZN7S6761C1D1Ev();
Name_Map name_map_S6761C1[] = {
  NSPAIR(_ZN7S6761C1C1Ev),
  NSPAIR(_ZN7S6761C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6761C2;
extern VTBL_ENTRY _ZTI7S6761C2[];
extern  VTBL_ENTRY _ZTV7S6761C2[];
extern Class_Descriptor cd_S6761C4;
extern VTBL_ENTRY _ZTI7S6761C4[];
extern  VTBL_ENTRY _ZTV7S6761C4[];
extern Class_Descriptor cd_S6761C6;
extern VTBL_ENTRY _ZTI7S6761C6[];
extern  VTBL_ENTRY _ZTV7S6761C6[];
extern Class_Descriptor cd_S6761C5;
extern VTBL_ENTRY _ZTI7S6761C5[];
extern  VTBL_ENTRY _ZTV7S6761C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6761C5[];
extern Class_Descriptor cd_S6761C3;
extern VTBL_ENTRY _ZTI7S6761C3[];
extern  VTBL_ENTRY _ZTV7S6761C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6761C3[];
static Base_Class bases_S6761C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6761C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6761C4,    ABISELECT(64,32), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //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
    4, //immediately_derived
  0, 1},
  {&cd_S6761C6,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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
    3, //immediately_derived
  0, 1},
  {&cd_S6761C5,    ABISELECT(112,60), //bcp->offset
    51, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6761C3,    ABISELECT(56,28), //bcp->offset
    12, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6761C1[];
extern void _ZN7S6761C1D1Ev();
extern void _ZN7S6761C1D0Ev();
extern void _ZN7S6761C22v3Ev();
extern void _ZN7S6761C22v4Ev();
extern void _ZN7S6761C12v1Ev();
extern void _ZN7S6761C12v2Ev();
extern void _ZN7S6761C62v9Ev();
extern void _ZN7S6761C63v10Ev();
extern void _ZN7S6761C63v11Ev();
extern void _ZN7S6761C63v12Ev();
extern void _ZN7S6761C63v13Ev();
extern void _ZN7S6761C63v14Ev();
extern void _ZN7S6761C63v15Ev();
extern void _ZN7S6761C63v16Ev();
extern void _ZN7S6761C63v17Ev();
extern void _ZN7S6761C33v21Ev();
extern void _ZN7S6761C33v22Ev();
extern void _ZN7S6761C33v23Ev();
extern void _ZN7S6761C42v5Ev();
extern void _ZN7S6761C42v6Ev();
extern void _ZN7S6761C42v7Ev();
extern void _ZN7S6761C42v8Ev();
extern void _ZN7S6761C62v9Ev();
extern void _ZN7S6761C63v10Ev();
extern void _ZN7S6761C63v11Ev();
extern void _ZN7S6761C63v12Ev();
extern void _ZN7S6761C63v13Ev();
extern void _ZN7S6761C63v14Ev();
extern void _ZN7S6761C63v15Ev();
extern void _ZN7S6761C63v16Ev();
extern void _ZN7S6761C63v17Ev();
extern void _ZN7S6761C53v18Ev();
extern void _ZN7S6761C53v19Ev();
extern void _ZN7S6761C53v20Ev();
static  VTBL_ENTRY vtc_S6761C1[] = {
  ABISELECT(56,28),
  ABISELECT(112,60),
  ABISELECT(64,32),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S6761C1[0]),
  (VTBL_ENTRY)&_ZN7S6761C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6761C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6761C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6761C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6761C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6761C12v2Ev,
  0,
  0,
  0,
  0,
  ABISELECT(56,32),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S6761C1[0]),
  (VTBL_ENTRY)&_ZN7S6761C62v9Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v10Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v14Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v15Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v16Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v17Ev,
  (VTBL_ENTRY)&_ZN7S6761C33v21Ev,
  (VTBL_ENTRY)&_ZN7S6761C33v22Ev,
  (VTBL_ENTRY)&_ZN7S6761C33v23Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S6761C1[0]),
  (VTBL_ENTRY)&_ZN7S6761C42v5Ev,
  (VTBL_ENTRY)&_ZN7S6761C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6761C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6761C42v8Ev,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S6761C1[0]),
  (VTBL_ENTRY)&_ZN7S6761C62v9Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v10Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v14Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v15Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v16Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v17Ev,
  (VTBL_ENTRY)&_ZN7S6761C53v18Ev,
  (VTBL_ENTRY)&_ZN7S6761C53v19Ev,
  (VTBL_ENTRY)&_ZN7S6761C53v20Ev,
};
extern VTBL_ENTRY _ZTV7S6761C1[];
extern void _ZN7S6761C62v9Ev();
extern void _ZN7S6761C63v10Ev();
extern void _ZN7S6761C63v11Ev();
extern void _ZN7S6761C63v12Ev();
extern void _ZN7S6761C63v13Ev();
extern void _ZN7S6761C63v14Ev();
extern void _ZN7S6761C63v15Ev();
extern void _ZN7S6761C63v16Ev();
extern void _ZN7S6761C63v17Ev();
extern void _ZN7S6761C33v21Ev();
extern void _ZN7S6761C33v22Ev();
extern void _ZN7S6761C33v23Ev();
static  VTBL_ENTRY _tg__ZTV7S6761C3__7S6761C1[] = {
  0,
  ABISELECT(56,32),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6761C3[0]),
  (VTBL_ENTRY)&_ZN7S6761C62v9Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v10Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v14Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v15Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v16Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v17Ev,
  (VTBL_ENTRY)&_ZN7S6761C33v21Ev,
  (VTBL_ENTRY)&_ZN7S6761C33v22Ev,
  (VTBL_ENTRY)&_ZN7S6761C33v23Ev,
};
extern void _ZN7S6761C42v5Ev();
extern void _ZN7S6761C42v6Ev();
extern void _ZN7S6761C42v7Ev();
extern void _ZN7S6761C42v8Ev();
static  VTBL_ENTRY _tg__ZTV7S6761C4__7S6761C3__7S6761C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6761C3[0]),
  (VTBL_ENTRY)&_ZN7S6761C42v5Ev,
  (VTBL_ENTRY)&_ZN7S6761C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6761C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6761C42v8Ev,
};
extern void _ZN7S6761C62v9Ev();
extern void _ZN7S6761C63v10Ev();
extern void _ZN7S6761C63v11Ev();
extern void _ZN7S6761C63v12Ev();
extern void _ZN7S6761C63v13Ev();
extern void _ZN7S6761C63v14Ev();
extern void _ZN7S6761C63v15Ev();
extern void _ZN7S6761C63v16Ev();
extern void _ZN7S6761C63v17Ev();
extern void _ZN7S6761C53v18Ev();
extern void _ZN7S6761C53v19Ev();
extern void _ZN7S6761C53v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6761C5__7S6761C3__7S6761C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S6761C3[0]),
  (VTBL_ENTRY)&_ZN7S6761C62v9Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v10Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v14Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v15Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v16Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v17Ev,
  (VTBL_ENTRY)&_ZN7S6761C53v18Ev,
  (VTBL_ENTRY)&_ZN7S6761C53v19Ev,
  (VTBL_ENTRY)&_ZN7S6761C53v20Ev,
};
extern void _ZN7S6761C62v9Ev();
extern void _ZN7S6761C63v10Ev();
extern void _ZN7S6761C63v11Ev();
extern void _ZN7S6761C63v12Ev();
extern void _ZN7S6761C63v13Ev();
extern void _ZN7S6761C63v14Ev();
extern void _ZN7S6761C63v15Ev();
extern void _ZN7S6761C63v16Ev();
extern void _ZN7S6761C63v17Ev();
extern void _ZN7S6761C53v18Ev();
extern void _ZN7S6761C53v19Ev();
extern void _ZN7S6761C53v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6761C5__7S6761C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S6761C5[0]),
  (VTBL_ENTRY)&_ZN7S6761C62v9Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v10Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v14Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v15Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v16Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v17Ev,
  (VTBL_ENTRY)&_ZN7S6761C53v18Ev,
  (VTBL_ENTRY)&_ZN7S6761C53v19Ev,
  (VTBL_ENTRY)&_ZN7S6761C53v20Ev,
};
extern void _ZN7S6761C62v9Ev();
extern void _ZN7S6761C63v10Ev();
extern void _ZN7S6761C63v11Ev();
extern void _ZN7S6761C63v12Ev();
extern void _ZN7S6761C63v13Ev();
extern void _ZN7S6761C63v14Ev();
extern void _ZN7S6761C63v15Ev();
extern void _ZN7S6761C63v16Ev();
extern void _ZN7S6761C63v17Ev();
static  VTBL_ENTRY _tg__ZTV7S6761C6__7S6761C5__7S6761C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI7S6761C5[0]),
  (VTBL_ENTRY)&_ZN7S6761C62v9Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v10Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v11Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v12Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v14Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v15Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v16Ev,
  (VTBL_ENTRY)&_ZN7S6761C63v17Ev,
};
static  VTT_ENTRY vtt_S6761C1[] = {
  {&(_ZTV7S6761C1[6]),  6,78},
  {&(_ZTV7S6761C1[29]),  29,78},
  {&(_ZTV7S6761C1[47]),  47,78},
  {&(_ZTV7S6761C1[66]),  66,78},
  {&(_ZTV7S6761C1[29]),  29,78},
  {&(_tg__ZTV7S6761C3__7S6761C1[14]),  14,26},
  {&(_tg__ZTV7S6761C4__7S6761C3__7S6761C1[6]),  6,10},
  {&(_tg__ZTV7S6761C5__7S6761C3__7S6761C1[15]),  15,27},
  {&(_tg__ZTV7S6761C3__7S6761C1[14]),  14,26},
  {&(_tg__ZTV7S6761C5__7S6761C1[12]),  12,24},
  {&(_tg__ZTV7S6761C6__7S6761C5__7S6761C1[11]),  11,20},
};
extern VTBL_ENTRY _ZTI7S6761C1[];
extern  VTBL_ENTRY _ZTV7S6761C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6761C1[];
Class_Descriptor cd_S6761C1 = {  "S6761C1", // class name
  bases_S6761C1, 5,
  &(vtc_S6761C1[0]), // expected_vtbl_contents
  &(vtt_S6761C1[0]), // expected_vtt_contents
  ABISELECT(160,84), // object size
  NSPAIRA(_ZTI7S6761C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6761C1),78, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6761C1),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3758C2  : S1679C4_nt {
  virtual void  v8(); // _ZN7S3758C22v8Ev
  virtual void  v9(); // _ZN7S3758C22v9Ev
  virtual void  v10(); // _ZN7S3758C23v10Ev
  virtual void  v11(); // _ZN7S3758C23v11Ev
  virtual void  v12(); // _ZN7S3758C23v12Ev
  virtual void  v13(); // _ZN7S3758C23v13Ev
  virtual void  v14(); // _ZN7S3758C23v14Ev
  virtual void  v15(); // _ZN7S3758C23v15Ev
  virtual void  v16(); // _ZN7S3758C23v16Ev
  virtual void  v17(); // _ZN7S3758C23v17Ev
  virtual void  v18(); // _ZN7S3758C23v18Ev
  virtual void  v19(); // _ZN7S3758C23v19Ev
  ~S3758C2(); // tgen
  S3758C2(); // tgen
};
//SIG(-1 S3758C2) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S3758C2 ::v8(){vfunc_called(this, "_ZN7S3758C22v8Ev");}
void  S3758C2 ::v9(){vfunc_called(this, "_ZN7S3758C22v9Ev");}
void  S3758C2 ::v10(){vfunc_called(this, "_ZN7S3758C23v10Ev");}
void  S3758C2 ::v11(){vfunc_called(this, "_ZN7S3758C23v11Ev");}
void  S3758C2 ::v12(){vfunc_called(this, "_ZN7S3758C23v12Ev");}
void  S3758C2 ::v13(){vfunc_called(this, "_ZN7S3758C23v13Ev");}
void  S3758C2 ::v14(){vfunc_called(this, "_ZN7S3758C23v14Ev");}
void  S3758C2 ::v15(){vfunc_called(this, "_ZN7S3758C23v15Ev");}
void  S3758C2 ::v16(){vfunc_called(this, "_ZN7S3758C23v16Ev");}
void  S3758C2 ::v17(){vfunc_called(this, "_ZN7S3758C23v17Ev");}
void  S3758C2 ::v18(){vfunc_called(this, "_ZN7S3758C23v18Ev");}
void  S3758C2 ::v19(){vfunc_called(this, "_ZN7S3758C23v19Ev");}
S3758C2 ::~S3758C2(){ note_dtor("S3758C2", this);} // tgen
S3758C2 ::S3758C2(){ note_ctor("S3758C2", this);} // tgen

static void Test_S3758C2()
{
  extern Class_Descriptor cd_S3758C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3758C2, buf);
    S3758C2 *dp, &lv = *(dp=new (buf) S3758C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3758C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3758C2)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S3758C2");
    test_class_info(&lv, &cd_S3758C2);
    dp->~S3758C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3758C2(Test_S3758C2, "S3758C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3758C2C1Ev();
extern void _ZN7S3758C2D1Ev();
Name_Map name_map_S3758C2[] = {
  NSPAIR(_ZN7S3758C2C1Ev),
  NSPAIR(_ZN7S3758C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S3758C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S3758C2[];
extern void _ZN7S3758C2D1Ev();
extern void _ZN7S3758C2D0Ev();
extern void _ZN7S3758C22v8Ev();
extern void _ZN7S3758C22v9Ev();
extern void _ZN7S3758C23v10Ev();
extern void _ZN7S3758C23v11Ev();
extern void _ZN7S3758C23v12Ev();
extern void _ZN7S3758C23v13Ev();
extern void _ZN7S3758C23v14Ev();
extern void _ZN7S3758C23v15Ev();
extern void _ZN7S3758C23v16Ev();
extern void _ZN7S3758C23v17Ev();
extern void _ZN7S3758C23v18Ev();
extern void _ZN7S3758C23v19Ev();
static  VTBL_ENTRY vtc_S3758C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3758C2[0]),
  (VTBL_ENTRY)&_ZN7S3758C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3758C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3758C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3758C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3758C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3758C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3758C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3758C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3758C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3758C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3758C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3758C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3758C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3758C23v19Ev,
};
extern VTBL_ENTRY _ZTI7S3758C2[];
extern  VTBL_ENTRY _ZTV7S3758C2[];
Class_Descriptor cd_S3758C2 = {  "S3758C2", // class name
  bases_S3758C2, 1,
  &(vtc_S3758C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3758C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3758C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3758C1  : S3758C2 {
  ::S3765C5_nt s3758c1f0;
  void *s3758c1f1;
  int s3758c1f2;
  void *s3758c1f3;
  char s3758c1f4;
  int s3758c1f5;
  ::S5266C36 s3758c1f6;
  virtual  ~S3758C1(); // _ZN7S3758C1D1Ev
  virtual void  v1(); // _ZN7S3758C12v1Ev
  virtual void  v2(); // _ZN7S3758C12v2Ev
  virtual void  v3(); // _ZN7S3758C12v3Ev
  virtual void  v4(); // _ZN7S3758C12v4Ev
  virtual void  v5(); // _ZN7S3758C12v5Ev
  virtual void  v6(); // _ZN7S3758C12v6Ev
  virtual void  v7(); // _ZN7S3758C12v7Ev
  S3758C1(); // tgen
};
//SIG(1 S3758C1) C1{ BC2{ BC3{ vd m Fi} v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19} vd v1 v2 v3 v4 v5 v6 v7 FC4{ m Fp[2]} Fp Fi Fp Fc Fi FC5{ m Fp Fi[2] FC6{ m}}}


 S3758C1 ::~S3758C1(){ note_dtor("S3758C1", this);}
void  S3758C1 ::v1(){vfunc_called(this, "_ZN7S3758C12v1Ev");}
void  S3758C1 ::v2(){vfunc_called(this, "_ZN7S3758C12v2Ev");}
void  S3758C1 ::v3(){vfunc_called(this, "_ZN7S3758C12v3Ev");}
void  S3758C1 ::v4(){vfunc_called(this, "_ZN7S3758C12v4Ev");}
void  S3758C1 ::v5(){vfunc_called(this, "_ZN7S3758C12v5Ev");}
void  S3758C1 ::v6(){vfunc_called(this, "_ZN7S3758C12v6Ev");}
void  S3758C1 ::v7(){vfunc_called(this, "_ZN7S3758C12v7Ev");}
S3758C1 ::S3758C1(){ note_ctor("S3758C1", this);} // tgen

static void Test_S3758C1()
{
  extern Class_Descriptor cd_S3758C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S3758C1, buf);
    S3758C1 *dp, &lv = *(dp=new (buf) S3758C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S3758C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3758C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S3758C2*), 0, "S3758C1");
    check_base_class_offset(lv, (S3758C2*), 0, "S3758C1");
    check_field_offset(lv, s3758c1f0, ABISELECT(16,8), "S3758C1.s3758c1f0");
    check_field_offset(lv, s3758c1f1, ABISELECT(32,16), "S3758C1.s3758c1f1");
    check_field_offset(lv, s3758c1f2, ABISELECT(40,20), "S3758C1.s3758c1f2");
    check_field_offset(lv, s3758c1f3, ABISELECT(48,24), "S3758C1.s3758c1f3");
    check_field_offset(lv, s3758c1f4, ABISELECT(56,28), "S3758C1.s3758c1f4");
    check_field_offset(lv, s3758c1f5, ABISELECT(60,32), "S3758C1.s3758c1f5");
    check_field_offset(lv, s3758c1f6, ABISELECT(64,36), "S3758C1.s3758c1f6");
    test_class_info(&lv, &cd_S3758C1);
    dp->~S3758C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3758C1(Test_S3758C1, "S3758C1", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S3758C1C1Ev();
extern void _ZN7S3758C1D1Ev();
Name_Map name_map_S3758C1[] = {
  NSPAIR(_ZN7S3758C1C1Ev),
  NSPAIR(_ZN7S3758C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S3758C2;
extern VTBL_ENTRY _ZTI7S3758C2[];
extern  VTBL_ENTRY _ZTV7S3758C2[];
static Base_Class bases_S3758C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S3758C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3758C1[];
extern void _ZN7S3758C1D1Ev();
extern void _ZN7S3758C1D0Ev();
extern void _ZN7S3758C22v8Ev();
extern void _ZN7S3758C22v9Ev();
extern void _ZN7S3758C23v10Ev();
extern void _ZN7S3758C23v11Ev();
extern void _ZN7S3758C23v12Ev();
extern void _ZN7S3758C23v13Ev();
extern void _ZN7S3758C23v14Ev();
extern void _ZN7S3758C23v15Ev();
extern void _ZN7S3758C23v16Ev();
extern void _ZN7S3758C23v17Ev();
extern void _ZN7S3758C23v18Ev();
extern void _ZN7S3758C23v19Ev();
extern void _ZN7S3758C12v1Ev();
extern void _ZN7S3758C12v2Ev();
extern void _ZN7S3758C12v3Ev();
extern void _ZN7S3758C12v4Ev();
extern void _ZN7S3758C12v5Ev();
extern void _ZN7S3758C12v6Ev();
extern void _ZN7S3758C12v7Ev();
static  VTBL_ENTRY vtc_S3758C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3758C1[0]),
  (VTBL_ENTRY)&_ZN7S3758C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3758C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3758C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3758C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3758C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3758C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3758C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3758C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3758C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3758C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3758C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3758C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3758C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3758C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3758C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3758C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3758C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3758C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3758C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3758C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3758C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S3758C1[];
extern  VTBL_ENTRY _ZTV7S3758C1[];
Class_Descriptor cd_S3758C1 = {  "S3758C1", // class name
  bases_S3758C1, 2,
  &(vtc_S3758C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S3758C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3758C1),23, //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  S3764C2  : S1679C4_nt {
  virtual void  v9(); // _ZN7S3764C22v9Ev
  virtual void  v10(); // _ZN7S3764C23v10Ev
  virtual void  v11(); // _ZN7S3764C23v11Ev
  virtual void  v12(); // _ZN7S3764C23v12Ev
  virtual void  v13(); // _ZN7S3764C23v13Ev
  virtual void  v14(); // _ZN7S3764C23v14Ev
  virtual void  v15(); // _ZN7S3764C23v15Ev
  virtual void  v16(); // _ZN7S3764C23v16Ev
  virtual void  v17(); // _ZN7S3764C23v17Ev
  virtual void  v18(); // _ZN7S3764C23v18Ev
  virtual void  v19(); // _ZN7S3764C23v19Ev
  virtual void  v20(); // _ZN7S3764C23v20Ev
  ~S3764C2(); // tgen
  S3764C2(); // tgen
};
//SIG(-1 S3764C2) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S3764C2 ::v9(){vfunc_called(this, "_ZN7S3764C22v9Ev");}
void  S3764C2 ::v10(){vfunc_called(this, "_ZN7S3764C23v10Ev");}
void  S3764C2 ::v11(){vfunc_called(this, "_ZN7S3764C23v11Ev");}
void  S3764C2 ::v12(){vfunc_called(this, "_ZN7S3764C23v12Ev");}
void  S3764C2 ::v13(){vfunc_called(this, "_ZN7S3764C23v13Ev");}
void  S3764C2 ::v14(){vfunc_called(this, "_ZN7S3764C23v14Ev");}
void  S3764C2 ::v15(){vfunc_called(this, "_ZN7S3764C23v15Ev");}
void  S3764C2 ::v16(){vfunc_called(this, "_ZN7S3764C23v16Ev");}
void  S3764C2 ::v17(){vfunc_called(this, "_ZN7S3764C23v17Ev");}
void  S3764C2 ::v18(){vfunc_called(this, "_ZN7S3764C23v18Ev");}
void  S3764C2 ::v19(){vfunc_called(this, "_ZN7S3764C23v19Ev");}
void  S3764C2 ::v20(){vfunc_called(this, "_ZN7S3764C23v20Ev");}
S3764C2 ::~S3764C2(){ note_dtor("S3764C2", this);} // tgen
S3764C2 ::S3764C2(){ note_ctor("S3764C2", this);} // tgen

static void Test_S3764C2()
{
  extern Class_Descriptor cd_S3764C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3764C2, buf);
    S3764C2 *dp, &lv = *(dp=new (buf) S3764C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3764C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3764C2)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S3764C2");
    test_class_info(&lv, &cd_S3764C2);
    dp->~S3764C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3764C2(Test_S3764C2, "S3764C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3764C2C1Ev();
extern void _ZN7S3764C2D1Ev();
Name_Map name_map_S3764C2[] = {
  NSPAIR(_ZN7S3764C2C1Ev),
  NSPAIR(_ZN7S3764C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S3764C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S3764C2[];
extern void _ZN7S3764C2D1Ev();
extern void _ZN7S3764C2D0Ev();
extern void _ZN7S3764C22v9Ev();
extern void _ZN7S3764C23v10Ev();
extern void _ZN7S3764C23v11Ev();
extern void _ZN7S3764C23v12Ev();
extern void _ZN7S3764C23v13Ev();
extern void _ZN7S3764C23v14Ev();
extern void _ZN7S3764C23v15Ev();
extern void _ZN7S3764C23v16Ev();
extern void _ZN7S3764C23v17Ev();
extern void _ZN7S3764C23v18Ev();
extern void _ZN7S3764C23v19Ev();
extern void _ZN7S3764C23v20Ev();
static  VTBL_ENTRY vtc_S3764C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3764C2[0]),
  (VTBL_ENTRY)&_ZN7S3764C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3764C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3764C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3764C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3764C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3764C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3764C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3764C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3764C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3764C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3764C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3764C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3764C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3764C23v20Ev,
};
extern VTBL_ENTRY _ZTI7S3764C2[];
extern  VTBL_ENTRY _ZTV7S3764C2[];
Class_Descriptor cd_S3764C2 = {  "S3764C2", // class name
  bases_S3764C2, 1,
  &(vtc_S3764C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3764C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3764C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3764C4  {
  virtual  ~S3764C4(); // _ZN7S3764C4D1Ev
  virtual void  v21(); // _ZN7S3764C43v21Ev
  virtual void  v22(); // _ZN7S3764C43v22Ev
  virtual void  v23(); // _ZN7S3764C43v23Ev
  virtual void  v24(); // _ZN7S3764C43v24Ev
  S3764C4(); // tgen
};
//SIG(-1 S3764C4) C1{ vd v1 v2 v3 v4}


 S3764C4 ::~S3764C4(){ note_dtor("S3764C4", this);}
void  S3764C4 ::v21(){vfunc_called(this, "_ZN7S3764C43v21Ev");}
void  S3764C4 ::v22(){vfunc_called(this, "_ZN7S3764C43v22Ev");}
void  S3764C4 ::v23(){vfunc_called(this, "_ZN7S3764C43v23Ev");}
void  S3764C4 ::v24(){vfunc_called(this, "_ZN7S3764C43v24Ev");}
S3764C4 ::S3764C4(){ note_ctor("S3764C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3764C4C1Ev();
extern void _ZN7S3764C4D1Ev();
Name_Map name_map_S3764C4[] = {
  NSPAIR(_ZN7S3764C4C1Ev),
  NSPAIR(_ZN7S3764C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3764C4[];
extern void _ZN7S3764C4D1Ev();
extern void _ZN7S3764C4D0Ev();
extern void _ZN7S3764C43v21Ev();
extern void _ZN7S3764C43v22Ev();
extern void _ZN7S3764C43v23Ev();
extern void _ZN7S3764C43v24Ev();
static  VTBL_ENTRY vtc_S3764C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3764C4[0]),
  (VTBL_ENTRY)&_ZN7S3764C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3764C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3764C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3764C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3764C43v23Ev,
  (VTBL_ENTRY)&_ZN7S3764C43v24Ev,
};
extern VTBL_ENTRY _ZTI7S3764C4[];
extern  VTBL_ENTRY _ZTV7S3764C4[];
Class_Descriptor cd_S3764C4 = {  "S3764C4", // class name
  0,0,//no base classes
  &(vtc_S3764C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3764C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3764C4),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  S3764C1  : S3764C2 , S3764C4 {
  ::S3765C5_nt s3764c1f0;
  char s3764c1f1;
  int s3764c1f2;
  virtual  ~S3764C1(); // _ZN7S3764C1D1Ev
  virtual void  v1(); // _ZN7S3764C12v1Ev
  virtual void  v2(); // _ZN7S3764C12v2Ev
  virtual void  v3(); // _ZN7S3764C12v3Ev
  virtual void  v4(); // _ZN7S3764C12v4Ev
  virtual void  v5(); // _ZN7S3764C12v5Ev
  virtual void  v6(); // _ZN7S3764C12v6Ev
  virtual void  v7(); // _ZN7S3764C12v7Ev
  virtual void  v8(); // _ZN7S3764C12v8Ev
  S3764C1(); // tgen
};
//SIG(1 S3764C1) C1{ BC2{ BC3{ vd m Fi} v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20} BC4{ vd v21 v22 v23 v24} vd v1 v2 v3 v4 v5 v6 v7 v8 FC5{ m Fp[2]} Fc Fi}


 S3764C1 ::~S3764C1(){ note_dtor("S3764C1", this);}
void  S3764C1 ::v1(){vfunc_called(this, "_ZN7S3764C12v1Ev");}
void  S3764C1 ::v2(){vfunc_called(this, "_ZN7S3764C12v2Ev");}
void  S3764C1 ::v3(){vfunc_called(this, "_ZN7S3764C12v3Ev");}
void  S3764C1 ::v4(){vfunc_called(this, "_ZN7S3764C12v4Ev");}
void  S3764C1 ::v5(){vfunc_called(this, "_ZN7S3764C12v5Ev");}
void  S3764C1 ::v6(){vfunc_called(this, "_ZN7S3764C12v6Ev");}
void  S3764C1 ::v7(){vfunc_called(this, "_ZN7S3764C12v7Ev");}
void  S3764C1 ::v8(){vfunc_called(this, "_ZN7S3764C12v8Ev");}
S3764C1 ::S3764C1(){ note_ctor("S3764C1", this);} // tgen

static void Test_S3764C1()
{
  extern Class_Descriptor cd_S3764C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S3764C1, buf);
    S3764C1 *dp, &lv = *(dp=new (buf) S3764C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S3764C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3764C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S3764C2*), 0, "S3764C1");
    check_base_class_offset(lv, (S3764C2*), 0, "S3764C1");
    check_base_class_offset(lv, (S3764C4*), ABISELECT(16,8), "S3764C1");
    check_field_offset(lv, s3764c1f0, ABISELECT(24,12), "S3764C1.s3764c1f0");
    check_field_offset(lv, s3764c1f1, ABISELECT(40,20), "S3764C1.s3764c1f1");
    check_field_offset(lv, s3764c1f2, ABISELECT(44,24), "S3764C1.s3764c1f2");
    test_class_info(&lv, &cd_S3764C1);
    dp->~S3764C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3764C1(Test_S3764C1, "S3764C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S3764C1C1Ev();
extern void _ZN7S3764C1D1Ev();
Name_Map name_map_S3764C1[] = {
  NSPAIR(_ZN7S3764C1C1Ev),
  NSPAIR(_ZN7S3764C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S3764C2;
extern VTBL_ENTRY _ZTI7S3764C2[];
extern  VTBL_ENTRY _ZTV7S3764C2[];
extern Class_Descriptor cd_S3764C4;
extern VTBL_ENTRY _ZTI7S3764C4[];
extern  VTBL_ENTRY _ZTV7S3764C4[];
static Base_Class bases_S3764C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S3764C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3764C4,    ABISELECT(16,8), //bcp->offset
    24, //bcp->virtual_function_table_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 _ZTI7S3764C1[];
extern void _ZN7S3764C1D1Ev();
extern void _ZN7S3764C1D0Ev();
extern void _ZN7S3764C22v9Ev();
extern void _ZN7S3764C23v10Ev();
extern void _ZN7S3764C23v11Ev();
extern void _ZN7S3764C23v12Ev();
extern void _ZN7S3764C23v13Ev();
extern void _ZN7S3764C23v14Ev();
extern void _ZN7S3764C23v15Ev();
extern void _ZN7S3764C23v16Ev();
extern void _ZN7S3764C23v17Ev();
extern void _ZN7S3764C23v18Ev();
extern void _ZN7S3764C23v19Ev();
extern void _ZN7S3764C23v20Ev();
extern void _ZN7S3764C12v1Ev();
extern void _ZN7S3764C12v2Ev();
extern void _ZN7S3764C12v3Ev();
extern void _ZN7S3764C12v4Ev();
extern void _ZN7S3764C12v5Ev();
extern void _ZN7S3764C12v6Ev();
extern void _ZN7S3764C12v7Ev();
extern void _ZN7S3764C12v8Ev();
extern void ABISELECT(_ZThn16_N7S3764C1D1Ev,_ZThn8_N7S3764C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S3764C1D0Ev,_ZThn8_N7S3764C1D0Ev)();
extern void _ZN7S3764C43v21Ev();
extern void _ZN7S3764C43v22Ev();
extern void _ZN7S3764C43v23Ev();
extern void _ZN7S3764C43v24Ev();
static  VTBL_ENTRY vtc_S3764C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3764C1[0]),
  (VTBL_ENTRY)&_ZN7S3764C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3764C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3764C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3764C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3764C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3764C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3764C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3764C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3764C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3764C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3764C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3764C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3764C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3764C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3764C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3764C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3764C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3764C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3764C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3764C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3764C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3764C12v8Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3764C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3764C1D1Ev,_ZThn8_N7S3764C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3764C1D0Ev,_ZThn8_N7S3764C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3764C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3764C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3764C43v23Ev,
  (VTBL_ENTRY)&_ZN7S3764C43v24Ev,
};
extern VTBL_ENTRY _ZTI7S3764C1[];
extern  VTBL_ENTRY _ZTV7S3764C1[];
Class_Descriptor cd_S3764C1 = {  "S3764C1", // class name
  bases_S3764C1, 3,
  &(vtc_S3764C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S3764C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3764C1),32, //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  S3757C2  : S1679C4_nt {
  virtual void  v8(); // _ZN7S3757C22v8Ev
  virtual void  v9(); // _ZN7S3757C22v9Ev
  virtual void  v10(); // _ZN7S3757C23v10Ev
  virtual void  v11(); // _ZN7S3757C23v11Ev
  virtual void  v12(); // _ZN7S3757C23v12Ev
  virtual void  v13(); // _ZN7S3757C23v13Ev
  virtual void  v14(); // _ZN7S3757C23v14Ev
  virtual void  v15(); // _ZN7S3757C23v15Ev
  virtual void  v16(); // _ZN7S3757C23v16Ev
  virtual void  v17(); // _ZN7S3757C23v17Ev
  virtual void  v18(); // _ZN7S3757C23v18Ev
  virtual void  v19(); // _ZN7S3757C23v19Ev
  ~S3757C2(); // tgen
  S3757C2(); // tgen
};
//SIG(-1 S3757C2) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S3757C2 ::v8(){vfunc_called(this, "_ZN7S3757C22v8Ev");}
void  S3757C2 ::v9(){vfunc_called(this, "_ZN7S3757C22v9Ev");}
void  S3757C2 ::v10(){vfunc_called(this, "_ZN7S3757C23v10Ev");}
void  S3757C2 ::v11(){vfunc_called(this, "_ZN7S3757C23v11Ev");}
void  S3757C2 ::v12(){vfunc_called(this, "_ZN7S3757C23v12Ev");}
void  S3757C2 ::v13(){vfunc_called(this, "_ZN7S3757C23v13Ev");}
void  S3757C2 ::v14(){vfunc_called(this, "_ZN7S3757C23v14Ev");}
void  S3757C2 ::v15(){vfunc_called(this, "_ZN7S3757C23v15Ev");}
void  S3757C2 ::v16(){vfunc_called(this, "_ZN7S3757C23v16Ev");}
void  S3757C2 ::v17(){vfunc_called(this, "_ZN7S3757C23v17Ev");}
void  S3757C2 ::v18(){vfunc_called(this, "_ZN7S3757C23v18Ev");}
void  S3757C2 ::v19(){vfunc_called(this, "_ZN7S3757C23v19Ev");}
S3757C2 ::~S3757C2(){ note_dtor("S3757C2", this);} // tgen
S3757C2 ::S3757C2(){ note_ctor("S3757C2", this);} // tgen

static void Test_S3757C2()
{
  extern Class_Descriptor cd_S3757C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3757C2, buf);
    S3757C2 *dp, &lv = *(dp=new (buf) S3757C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3757C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3757C2)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S3757C2");
    test_class_info(&lv, &cd_S3757C2);
    dp->~S3757C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3757C2(Test_S3757C2, "S3757C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3757C2C1Ev();
extern void _ZN7S3757C2D1Ev();
Name_Map name_map_S3757C2[] = {
  NSPAIR(_ZN7S3757C2C1Ev),
  NSPAIR(_ZN7S3757C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S3757C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S3757C2[];
extern void _ZN7S3757C2D1Ev();
extern void _ZN7S3757C2D0Ev();
extern void _ZN7S3757C22v8Ev();
extern void _ZN7S3757C22v9Ev();
extern void _ZN7S3757C23v10Ev();
extern void _ZN7S3757C23v11Ev();
extern void _ZN7S3757C23v12Ev();
extern void _ZN7S3757C23v13Ev();
extern void _ZN7S3757C23v14Ev();
extern void _ZN7S3757C23v15Ev();
extern void _ZN7S3757C23v16Ev();
extern void _ZN7S3757C23v17Ev();
extern void _ZN7S3757C23v18Ev();
extern void _ZN7S3757C23v19Ev();
static  VTBL_ENTRY vtc_S3757C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3757C2[0]),
  (VTBL_ENTRY)&_ZN7S3757C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3757C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3757C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3757C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3757C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3757C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3757C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3757C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3757C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3757C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3757C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3757C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3757C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3757C23v19Ev,
};
extern VTBL_ENTRY _ZTI7S3757C2[];
extern  VTBL_ENTRY _ZTV7S3757C2[];
Class_Descriptor cd_S3757C2 = {  "S3757C2", // class name
  bases_S3757C2, 1,
  &(vtc_S3757C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3757C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3757C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3757C1  : S3757C2 {
  ::S3765C5_nt s3757c1f0;
  void *s3757c1f1;
  int s3757c1f2;
  char s3757c1f3;
  ::S5266C36 s3757c1f4;
  virtual  ~S3757C1(); // _ZN7S3757C1D1Ev
  virtual void  v1(); // _ZN7S3757C12v1Ev
  virtual void  v2(); // _ZN7S3757C12v2Ev
  virtual void  v3(); // _ZN7S3757C12v3Ev
  virtual void  v4(); // _ZN7S3757C12v4Ev
  virtual void  v5(); // _ZN7S3757C12v5Ev
  virtual void  v6(); // _ZN7S3757C12v6Ev
  virtual void  v7(); // _ZN7S3757C12v7Ev
  S3757C1(); // tgen
};
//SIG(1 S3757C1) C1{ BC2{ BC3{ vd m Fi} v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19} vd v1 v2 v3 v4 v5 v6 v7 FC4{ m Fp[2]} Fp Fi Fc FC5{ m Fp Fi[2] FC6{ m}}}


 S3757C1 ::~S3757C1(){ note_dtor("S3757C1", this);}
void  S3757C1 ::v1(){vfunc_called(this, "_ZN7S3757C12v1Ev");}
void  S3757C1 ::v2(){vfunc_called(this, "_ZN7S3757C12v2Ev");}
void  S3757C1 ::v3(){vfunc_called(this, "_ZN7S3757C12v3Ev");}
void  S3757C1 ::v4(){vfunc_called(this, "_ZN7S3757C12v4Ev");}
void  S3757C1 ::v5(){vfunc_called(this, "_ZN7S3757C12v5Ev");}
void  S3757C1 ::v6(){vfunc_called(this, "_ZN7S3757C12v6Ev");}
void  S3757C1 ::v7(){vfunc_called(this, "_ZN7S3757C12v7Ev");}
S3757C1 ::S3757C1(){ note_ctor("S3757C1", this);} // tgen

static void Test_S3757C1()
{
  extern Class_Descriptor cd_S3757C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S3757C1, buf);
    S3757C1 *dp, &lv = *(dp=new (buf) S3757C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S3757C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3757C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S3757C2*), 0, "S3757C1");
    check_base_class_offset(lv, (S3757C2*), 0, "S3757C1");
    check_field_offset(lv, s3757c1f0, ABISELECT(16,8), "S3757C1.s3757c1f0");
    check_field_offset(lv, s3757c1f1, ABISELECT(32,16), "S3757C1.s3757c1f1");
    check_field_offset(lv, s3757c1f2, ABISELECT(40,20), "S3757C1.s3757c1f2");
    check_field_offset(lv, s3757c1f3, ABISELECT(44,24), "S3757C1.s3757c1f3");
    check_field_offset(lv, s3757c1f4, ABISELECT(48,28), "S3757C1.s3757c1f4");
    test_class_info(&lv, &cd_S3757C1);
    dp->~S3757C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3757C1(Test_S3757C1, "S3757C1", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN7S3757C1C1Ev();
extern void _ZN7S3757C1D1Ev();
Name_Map name_map_S3757C1[] = {
  NSPAIR(_ZN7S3757C1C1Ev),
  NSPAIR(_ZN7S3757C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S3757C2;
extern VTBL_ENTRY _ZTI7S3757C2[];
extern  VTBL_ENTRY _ZTV7S3757C2[];
static Base_Class bases_S3757C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S3757C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3757C1[];
extern void _ZN7S3757C1D1Ev();
extern void _ZN7S3757C1D0Ev();
extern void _ZN7S3757C22v8Ev();
extern void _ZN7S3757C22v9Ev();
extern void _ZN7S3757C23v10Ev();
extern void _ZN7S3757C23v11Ev();
extern void _ZN7S3757C23v12Ev();
extern void _ZN7S3757C23v13Ev();
extern void _ZN7S3757C23v14Ev();
extern void _ZN7S3757C23v15Ev();
extern void _ZN7S3757C23v16Ev();
extern void _ZN7S3757C23v17Ev();
extern void _ZN7S3757C23v18Ev();
extern void _ZN7S3757C23v19Ev();
extern void _ZN7S3757C12v1Ev();
extern void _ZN7S3757C12v2Ev();
extern void _ZN7S3757C12v3Ev();
extern void _ZN7S3757C12v4Ev();
extern void _ZN7S3757C12v5Ev();
extern void _ZN7S3757C12v6Ev();
extern void _ZN7S3757C12v7Ev();
static  VTBL_ENTRY vtc_S3757C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3757C1[0]),
  (VTBL_ENTRY)&_ZN7S3757C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3757C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3757C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3757C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3757C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3757C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3757C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3757C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3757C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3757C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3757C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3757C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3757C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3757C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3757C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3757C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3757C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3757C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3757C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3757C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3757C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S3757C1[];
extern  VTBL_ENTRY _ZTV7S3757C1[];
Class_Descriptor cd_S3757C1 = {  "S3757C1", // class name
  bases_S3757C1, 2,
  &(vtc_S3757C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI7S3757C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3757C1),23, //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  S7487C4  : S7719C4_nt , S5266C26 , virtual S5266C29 {
  ~S7487C4(); // tgen
  S7487C4(); // tgen
};
//SIG(-1 S7487C4) C1{ BC2{ m Fc} BC3{ m} VBC4{ m}}


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

static void Test_S7487C4()
{
  extern Class_Descriptor cd_S7487C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7487C4, buf);
    S7487C4 *dp, &lv = *(dp=new (buf) S7487C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7487C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7487C4)");
    check_base_class_offset(lv, (S7719C4_nt*), ABISELECT(8,4), "S7487C4");
    check_base_class_offset(lv, (S5266C26*), 0, "S7487C4");
    check_base_class_offset(lv, (S5266C29*), 0, "S7487C4");
    test_class_info(&lv, &cd_S7487C4);
    dp->~S7487C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7487C4(Test_S7487C4, "S7487C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7487C4C1Ev();
extern void _ZN7S7487C4D1Ev();
Name_Map name_map_S7487C4[] = {
  NSPAIR(_ZN7S7487C4C1Ev),
  NSPAIR(_ZN7S7487C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
static Base_Class bases_S7487C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7719C4_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, 0},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S7487C4[];
static  VTBL_ENTRY vtc_S7487C4[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7487C4[0]),
};
extern VTBL_ENTRY _ZTV7S7487C4[];
static  VTT_ENTRY vtt_S7487C4[] = {
  {&(_ZTV7S7487C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7487C4[];
extern  VTBL_ENTRY _ZTV7S7487C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7487C4[];
Class_Descriptor cd_S7487C4 = {  "S7487C4", // class name
  bases_S7487C4, 3,
  &(vtc_S7487C4[0]), // expected_vtbl_contents
  &(vtt_S7487C4[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7487C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7487C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7487C4),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  S7487C8  : S5266C26 , S7719C4_nt {
};
//SIG(-1 S7487C8) C1{ BC2{ m} BC3{ m Fc}}



static void Test_S7487C8()
{
  extern Class_Descriptor cd_S7487C8;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S7487C8, buf);
    S7487C8 &lv = *(new (buf) S7487C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S7487C8)");
    check2(__alignof__(lv), 1, "__alignof__(S7487C8)");
    check_base_class_offset(lv, (S5266C26*), 0, "S7487C8");
    check_base_class_offset(lv, (S7719C4_nt*), 0, "S7487C8");
    test_class_info(&lv, &cd_S7487C8);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7487C8(Test_S7487C8, "S7487C8", 1);

#else // __cplusplus

extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
static Base_Class bases_S7487C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7719C4_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 _ZTI7S7487C8[];
Class_Descriptor cd_S7487C8 = {  "S7487C8", // class name
  bases_S7487C8, 2,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI7S7487C8),ABISELECT(56,32), //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  S7487C7  : S7487C8 , S5266C26 , S7487C4 {
  __tsi64 s7487c7f0;
  ~S7487C7(); // tgen
  S7487C7(); // tgen
};
//SIG(-1 S7487C7) C1{ BC2{ BC3{ m} BC4{ m Fc}} BC3 BC5{ BC4 BC3 VBC6{ m}} FL}


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

static void Test_S7487C7()
{
  extern Class_Descriptor cd_S7487C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S7487C7, buf);
    S7487C7 *dp, &lv = *(dp=new (buf) S7487C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S7487C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7487C7)");
    check_base_class_offset(lv, (S5266C26*)(S7487C8*), ABISELECT(9,5), "S7487C7");
    check_base_class_offset(lv, (S7719C4_nt*)(S7487C8*), ABISELECT(9,5), "S7487C7");
    check_base_class_offset(lv, (S7487C8*), ABISELECT(9,5), "S7487C7");
    /*is_ambiguous_... S7487C7::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*), ABISELECT(10,6), "S7487C7");
    check_base_class_offset(lv, (S7719C4_nt*)(S7487C4*), ABISELECT(8,4), "S7487C7");
    check_base_class_offset(lv, (S5266C26*)(S7487C4*), 0, "S7487C7");
    check_base_class_offset(lv, (S5266C29*)(S7487C4*), 0, "S7487C7");
    check_base_class_offset(lv, (S7487C4*), 0, "S7487C7");
    check_field_offset(lv, s7487c7f0, ABISELECT(16,8), "S7487C7.s7487c7f0");
    test_class_info(&lv, &cd_S7487C7);
    dp->~S7487C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7487C7(Test_S7487C7, "S7487C7", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S7487C7C1Ev();
extern void _ZN7S7487C7D1Ev();
Name_Map name_map_S7487C7[] = {
  NSPAIR(_ZN7S7487C7C1Ev),
  NSPAIR(_ZN7S7487C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7487C8;
extern VTBL_ENTRY _ZTI7S7487C8[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7487C4;
extern VTBL_ENTRY _ZTI7S7487C4[];
extern  VTBL_ENTRY _ZTV7S7487C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7487C4[];
static Base_Class bases_S7487C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C26,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7487C8,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C26,    ABISELECT(10,6), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7719C4_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
    7, //immediately_derived
  0, 0},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7487C4,    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 _ZTI7S7487C7[];
static  VTBL_ENTRY vtc_S7487C7[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7487C7[0]),
};
extern VTBL_ENTRY _ZTV7S7487C7[];
static  VTBL_ENTRY _tg__ZTV7S7487C4__7S7487C7[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7487C4[0]),
};
static  VTT_ENTRY vtt_S7487C7[] = {
  {&(_ZTV7S7487C7[3]),  3,3},
  {&(_tg__ZTV7S7487C4__7S7487C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7487C7[];
extern  VTBL_ENTRY _ZTV7S7487C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7487C7[];
Class_Descriptor cd_S7487C7 = {  "S7487C7", // class name
  bases_S7487C7, 8,
  &(vtc_S7487C7[0]), // expected_vtbl_contents
  &(vtt_S7487C7[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S7487C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7487C7),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7487C7),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7487C10  : S5266C26 , S5266C29 , virtual S7719C4_nt {
  ::S5266C29 s7487c10f0;
  ~S7487C10(); // tgen
  S7487C10(); // tgen
};
//SIG(-1 S7487C10) C1{ BC2{ m} BC3{ m} VBC4{ m Fc} FC3}


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

static void Test_S7487C10()
{
  extern Class_Descriptor cd_S7487C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7487C10, buf);
    S7487C10 *dp, &lv = *(dp=new (buf) S7487C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7487C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7487C10)");
    check_base_class_offset(lv, (S5266C26*), 0, "S7487C10");
    check_base_class_offset(lv, (S5266C29*), 0, "S7487C10");
    check_base_class_offset(lv, (S7719C4_nt*), ABISELECT(9,5), "S7487C10");
    check_field_offset(lv, s7487c10f0, ABISELECT(8,4), "S7487C10.s7487c10f0");
    test_class_info(&lv, &cd_S7487C10);
    dp->~S7487C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7487C10(Test_S7487C10, "S7487C10", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S7487C10C1Ev();
extern void _ZN8S7487C10D1Ev();
Name_Map name_map_S7487C10[] = {
  NSPAIR(_ZN8S7487C10C1Ev),
  NSPAIR(_ZN8S7487C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
static Base_Class bases_S7487C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7719C4_nt,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S7487C10[];
static  VTBL_ENTRY vtc_S7487C10[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S7487C10[0]),
};
extern VTBL_ENTRY _ZTV8S7487C10[];
static  VTT_ENTRY vtt_S7487C10[] = {
  {&(_ZTV8S7487C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7487C10[];
extern  VTBL_ENTRY _ZTV8S7487C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7487C10[];
Class_Descriptor cd_S7487C10 = {  "S7487C10", // class name
  bases_S7487C10, 3,
  &(vtc_S7487C10[0]), // expected_vtbl_contents
  &(vtt_S7487C10[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S7487C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7487C10),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7487C10),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  S7487C9  : virtual S7719C4_nt , S5266C29 , S7487C8 , virtual S7487C10 {
  ~S7487C9(); // tgen
  S7487C9(); // tgen
};
//SIG(-1 S7487C9) C1{ VBC2{ m Fc} BC3{ m} BC4{ BC5{ m} BC2} VBC6{ BC5 BC3 VBC2 FC3}}


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

static void Test_S7487C9()
{
  extern Class_Descriptor cd_S7487C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7487C9, buf);
    S7487C9 *dp, &lv = *(dp=new (buf) S7487C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7487C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7487C9)");
    /*is_ambiguous_... S7487C9::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*), ABISELECT(9,5), "S7487C9");
    check_base_class_offset(lv, (S7719C4_nt*)(S7487C10*), ABISELECT(9,5), "S7487C9");
    /*is_ambiguous_... S7487C9::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*), 0, "S7487C9");
    check_base_class_offset(lv, (S5266C26*)(S7487C8*), ABISELECT(8,4), "S7487C9");
    check_base_class_offset(lv, (S7719C4_nt*)(S7487C8*), ABISELECT(8,4), "S7487C9");
    check_base_class_offset(lv, (S7487C8*), ABISELECT(8,4), "S7487C9");
    check_base_class_offset(lv, (S5266C26*)(S7487C10*), ABISELECT(16,8), "S7487C9");
    check_base_class_offset(lv, (S5266C29*)(S7487C10*), ABISELECT(16,8), "S7487C9");
    check_base_class_offset(lv, (S7487C10*), ABISELECT(16,8), "S7487C9");
    test_class_info(&lv, &cd_S7487C9);
    dp->~S7487C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7487C9(Test_S7487C9, "S7487C9", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7487C9C1Ev();
extern void _ZN7S7487C9D1Ev();
Name_Map name_map_S7487C9[] = {
  NSPAIR(_ZN7S7487C9C1Ev),
  NSPAIR(_ZN7S7487C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7487C8;
extern VTBL_ENTRY _ZTI7S7487C8[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7487C10;
extern VTBL_ENTRY _ZTI8S7487C10[];
extern  VTBL_ENTRY _ZTV8S7487C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7487C10[];
static Base_Class bases_S7487C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7719C4_nt,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C26,    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
    4, //immediately_derived
  0, 0},
  {&cd_S7719C4_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
    4, //immediately_derived
  0, 0},
  {&cd_S7487C8,    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},
  {&cd_S5266C26,    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
    7, //immediately_derived
  0, 0},
  {&cd_S5266C29,    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
    7, //immediately_derived
  0, 0},
  {&cd_S7487C10,    ABISELECT(16,8), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //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 _ZTI7S7487C9[];
static  VTBL_ENTRY vtc_S7487C9[] = {
  ABISELECT(16,8),
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI7S7487C9[0]),
  ABISELECT(-7,-3),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7487C9[0]),
};
extern VTBL_ENTRY _ZTV7S7487C9[];
static  VTBL_ENTRY _tg__ZTV8S7487C10__7S7487C9[] = {
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI8S7487C10[0]),
};
static  VTT_ENTRY vtt_S7487C9[] = {
  {&(_ZTV7S7487C9[4]),  4,7},
  {&(_ZTV7S7487C9[7]),  7,7},
  {&(_tg__ZTV8S7487C10__7S7487C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7487C9[];
extern  VTBL_ENTRY _ZTV7S7487C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7487C9[];
Class_Descriptor cd_S7487C9 = {  "S7487C9", // class name
  bases_S7487C9, 8,
  &(vtc_S7487C9[0]), // expected_vtbl_contents
  &(vtt_S7487C9[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7487C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7487C9),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7487C9),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  S7487C2  : virtual S5266C29 , virtual S7487C4 , virtual S7487C7 , S7487C9 , virtual S5266C26 {
  __tsi64 s7487c2f0[2];
  ~S7487C2(); // tgen
  S7487C2(); // tgen
};
//SIG(-1 S7487C2) C1{ VBC2{ m} VBC3{ BC4{ m Fc} BC5{ m} VBC2} VBC6{ BC7{ BC5 BC4} BC5 BC3 FL} BC8{ VBC4 BC2 BC7 VBC9{ BC5 BC2 VBC4 FC2}} VBC5 FL[2]}


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

static void Test_S7487C2()
{
  extern Class_Descriptor cd_S7487C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S7487C2, buf);
    S7487C2 *dp, &lv = *(dp=new (buf) S7487C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S7487C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7487C2)");
    /*is_ambiguous_... S7487C2::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*), ABISELECT(32,24), "S7487C2");
    /*is_ambiguous_... S7487C2::S7487C4 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7487C4*), ABISELECT(32,24), "S7487C2");
    check_base_class_offset(lv, (S5266C29*)(S7487C4*)(S7487C7*), ABISELECT(32,24), "S7487C2");
    /*is_ambiguous_... S7487C2::S7487C4 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7487C4*), ABISELECT(40,28), "S7487C2");
    /*is_ambiguous_... S7487C2::S7487C4 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7487C4*), ABISELECT(32,24), "S7487C2");
    /*is_ambiguous_... S7487C2::S7487C4 */ AMB_check_base_class_offset(lv, (S7487C4*), ABISELECT(32,24), "S7487C2");
    check_base_class_offset(lv, (S5266C26*)(S7487C8*)(S7487C7*), ABISELECT(57,37), "S7487C2");
    check_base_class_offset(lv, (S7719C4_nt*)(S7487C8*)(S7487C7*), ABISELECT(57,37), "S7487C2");
    check_base_class_offset(lv, (S7487C8*)(S7487C7*), ABISELECT(57,37), "S7487C2");
    /*is_ambiguous_... S7487C7::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7487C7*), ABISELECT(58,38), "S7487C2");
    check_base_class_offset(lv, (S7719C4_nt*)(S7487C4*)(S7487C7*), ABISELECT(56,36), "S7487C2");
    check_base_class_offset(lv, (S5266C26*)(S7487C4*)(S7487C7*), ABISELECT(48,32), "S7487C2");
    check_base_class_offset(lv, (S7487C4*)(S7487C7*), ABISELECT(48,32), "S7487C2");
    check_base_class_offset(lv, (S7487C7*), ABISELECT(48,32), "S7487C2");
    /*is_ambiguous_... S7487C9::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7487C9*), ABISELECT(72,48), "S7487C2");
    check_base_class_offset(lv, (S7719C4_nt*)(S7487C10*), ABISELECT(72,48), "S7487C2");
    /*is_ambiguous_... S7487C9::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7487C9*), 0, "S7487C2");
    check_base_class_offset(lv, (S5266C26*)(S7487C8*)(S7487C9*), ABISELECT(8,4), "S7487C2");
    check_base_class_offset(lv, (S7719C4_nt*)(S7487C8*)(S7487C9*), ABISELECT(8,4), "S7487C2");
    check_base_class_offset(lv, (S7487C8*)(S7487C9*), ABISELECT(8,4), "S7487C2");
    check_base_class_offset(lv, (S5266C26*)(S7487C10*), ABISELECT(80,52), "S7487C2");
    check_base_class_offset(lv, (S5266C29*)(S7487C10*), ABISELECT(80,52), "S7487C2");
    check_base_class_offset(lv, (S7487C10*)(S7487C9*), ABISELECT(80,52), "S7487C2");
    check_base_class_offset(lv, (S7487C9*), 0, "S7487C2");
    /*is_ambiguous_... S7487C2::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*), 0, "S7487C2");
    check_field_offset(lv, s7487c2f0, ABISELECT(16,8), "S7487C2.s7487c2f0");
    test_class_info(&lv, &cd_S7487C2);
    dp->~S7487C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7487C2(Test_S7487C2, "S7487C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S7487C2C1Ev();
extern void _ZN7S7487C2D1Ev();
Name_Map name_map_S7487C2[] = {
  NSPAIR(_ZN7S7487C2C1Ev),
  NSPAIR(_ZN7S7487C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7487C4;
extern VTBL_ENTRY _ZTI7S7487C4[];
extern  VTBL_ENTRY _ZTV7S7487C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7487C4[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7487C8;
extern VTBL_ENTRY _ZTI7S7487C8[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7487C4;
extern VTBL_ENTRY _ZTI7S7487C4[];
extern  VTBL_ENTRY _ZTV7S7487C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7487C4[];
extern Class_Descriptor cd_S7487C7;
extern VTBL_ENTRY _ZTI7S7487C7[];
extern  VTBL_ENTRY _ZTV7S7487C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7487C7[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7487C8;
extern VTBL_ENTRY _ZTI7S7487C8[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7487C10;
extern VTBL_ENTRY _ZTI8S7487C10[];
extern  VTBL_ENTRY _ZTV8S7487C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7487C10[];
extern Class_Descriptor cd_S7487C9;
extern VTBL_ENTRY _ZTI7S7487C9[];
extern  VTBL_ENTRY _ZTV7S7487C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7487C9[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
static Base_Class bases_S7487C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    ABISELECT(32,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, 1},
  {&cd_S7719C4_nt,    ABISELECT(40,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
    3, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(32,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
    3, //immediately_derived
  0, 0},
  {&cd_S7487C4,    ABISELECT(32,24), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5266C26,    ABISELECT(57,37), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(57,37), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7487C8,    ABISELECT(57,37), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    ABISELECT(58,38), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(56,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
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7487C4,    ABISELECT(48,32), //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
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7487C7,    ABISELECT(48,32), //bcp->offset
    11, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7719C4_nt,    ABISELECT(72,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
    19, //immediately_derived
  0, 1},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    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
    16, //immediately_derived
  0, 0},
  {&cd_S7719C4_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
    16, //immediately_derived
  0, 0},
  {&cd_S7487C8,    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
    20, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(80,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
    19, //immediately_derived
  0, 0},
  {&cd_S5266C29,    ABISELECT(80,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
    19, //immediately_derived
  0, 0},
  {&cd_S7487C10,    ABISELECT(80,52), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S7487C9,    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_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S7487C2[];
static  VTBL_ENTRY vtc_S7487C2[] = {
  0,
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(32,24),
  ABISELECT(80,52),
  ABISELECT(72,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7487C2[0]),
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S7487C2[0]),
  ABISELECT(-16,-8),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S7487C2[0]),
  ABISELECT(-8,-4),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI7S7487C2[0]),
};
extern VTBL_ENTRY _ZTV7S7487C2[];
static  VTBL_ENTRY _tg__ZTV7S7487C9__7S7487C2[] = {
  ABISELECT(80,52),
  ABISELECT(72,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7487C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7487C10__7S7487C9__7S7487C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI7S7487C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7487C4__7S7487C2[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7487C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7487C7__7S7487C2[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7487C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7487C47S7487C7__A1__7S7487C2[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7487C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7487C10__7S7487C2[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7487C10[0]),
};
static  VTT_ENTRY vtt_S7487C2[] = {
  {&(_ZTV7S7487C2[8]),  8,17},
  {&(_tg__ZTV7S7487C9__7S7487C2[4]),  4,4},
  {&(_tg__ZTV8S7487C10__7S7487C9__7S7487C2[3]),  3,3},
  {&(_ZTV7S7487C2[11]),  11,17},
  {&(_ZTV7S7487C2[14]),  14,17},
  {&(_ZTV7S7487C2[17]),  17,17},
  {&(_tg__ZTV7S7487C4__7S7487C2[3]),  3,3},
  {&(_tg__ZTV7S7487C7__7S7487C2[3]),  3,3},
  {&(_tg__ZTV7S7487C47S7487C7__A1__7S7487C2[3]),  3,3},
  {&(_tg__ZTV8S7487C10__7S7487C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7487C2[];
extern  VTBL_ENTRY _ZTV7S7487C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7487C2[];
Class_Descriptor cd_S7487C2 = {  "S7487C2", // class name
  bases_S7487C2, 22,
  &(vtc_S7487C2[0]), // expected_vtbl_contents
  &(vtt_S7487C2[0]), // expected_vtt_contents
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S7487C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7487C2),17, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7487C2),10, //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  S7487C1  : S7487C2 , S7719C4_nt {
  void *s7487c1f0;
  virtual  ~S7487C1(); // _ZN7S7487C1D2Ev
  S7487C1(); // tgen
};
//SIG(1 S7487C1) C1{ BC2{ VBC3{ m} VBC4{ BC5{ m Fc} BC6{ m} VBC3} VBC7{ BC8{ BC6 BC5} BC6 BC4 FL} BC9{ VBC5 BC3 BC8 VBC10{ BC6 BC3 VBC5 FC3}} VBC6 FL[2]} BC5 vd Fp}


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

static void Test_S7487C1()
{
  extern Class_Descriptor cd_S7487C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,18)];
    init_test(&cd_S7487C1, buf);
    S7487C1 *dp, &lv = *(dp=new (buf) S7487C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,68), "sizeof(S7487C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7487C1)");
    /*is_ambiguous_... S7487C2::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7487C2*), ABISELECT(48,32), "S7487C1");
    /*is_ambiguous_... S7487C1::S7487C4 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7487C4*), ABISELECT(48,32), "S7487C1");
    check_base_class_offset(lv, (S5266C29*)(S7487C4*)(S7487C7*), ABISELECT(48,32), "S7487C1");
    /*is_ambiguous_... S7487C1::S7487C4 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7487C4*), ABISELECT(56,36), "S7487C1");
    /*is_ambiguous_... S7487C1::S7487C4 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7487C4*), ABISELECT(48,32), "S7487C1");
    /*is_ambiguous_... S7487C2::S7487C4 */ AMB_check_base_class_offset(lv, (S7487C4*)(S7487C2*), ABISELECT(48,32), "S7487C1");
    check_base_class_offset(lv, (S5266C26*)(S7487C8*)(S7487C7*), ABISELECT(73,45), "S7487C1");
    check_base_class_offset(lv, (S7719C4_nt*)(S7487C8*)(S7487C7*), ABISELECT(73,45), "S7487C1");
    check_base_class_offset(lv, (S7487C8*)(S7487C7*), ABISELECT(73,45), "S7487C1");
    /*is_ambiguous_... S7487C7::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7487C7*), ABISELECT(74,46), "S7487C1");
    check_base_class_offset(lv, (S7719C4_nt*)(S7487C4*)(S7487C7*), ABISELECT(72,44), "S7487C1");
    check_base_class_offset(lv, (S5266C26*)(S7487C4*)(S7487C7*), ABISELECT(64,40), "S7487C1");
    check_base_class_offset(lv, (S7487C4*)(S7487C7*), ABISELECT(64,40), "S7487C1");
    check_base_class_offset(lv, (S7487C7*)(S7487C2*), ABISELECT(64,40), "S7487C1");
    /*is_ambiguous_... S7487C9::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S7487C9*)(S7487C2*), ABISELECT(88,56), "S7487C1");
    check_base_class_offset(lv, (S7719C4_nt*)(S7487C10*), ABISELECT(88,56), "S7487C1");
    /*is_ambiguous_... S7487C9::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S7487C9*)(S7487C2*), 0, "S7487C1");
    check_base_class_offset(lv, (S5266C26*)(S7487C8*)(S7487C9*)(S7487C2*), ABISELECT(8,4), "S7487C1");
    check_base_class_offset(lv, (S7719C4_nt*)(S7487C8*)(S7487C9*)(S7487C2*), ABISELECT(8,4), "S7487C1");
    check_base_class_offset(lv, (S7487C8*)(S7487C9*)(S7487C2*), ABISELECT(8,4), "S7487C1");
    check_base_class_offset(lv, (S5266C26*)(S7487C10*), ABISELECT(96,60), "S7487C1");
    check_base_class_offset(lv, (S5266C29*)(S7487C10*), ABISELECT(96,60), "S7487C1");
    check_base_class_offset(lv, (S7487C10*)(S7487C9*)(S7487C2*), ABISELECT(96,60), "S7487C1");
    check_base_class_offset(lv, (S7487C9*)(S7487C2*), 0, "S7487C1");
    /*is_ambiguous_... S7487C2::S5266C26 */ AMB_check_base_class_offset(lv, (S5266C26*)(S7487C2*), 0, "S7487C1");
    check_base_class_offset(lv, (S7487C2*), 0, "S7487C1");
    /*is_ambiguous_... S7487C1::S7719C4_nt */ AMB_check_base_class_offset(lv, (S7719C4_nt*), ABISELECT(32,24), "S7487C1");
    check_field_offset(lv, s7487c1f0, ABISELECT(40,28), "S7487C1.s7487c1f0");
    test_class_info(&lv, &cd_S7487C1);
    dp->~S7487C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7487C1(Test_S7487C1, "S7487C1", ABISELECT(112,68));

#else // __cplusplus

extern void _ZN7S7487C1C1Ev();
extern void _ZN7S7487C1D2Ev();
Name_Map name_map_S7487C1[] = {
  NSPAIR(_ZN7S7487C1C1Ev),
  NSPAIR(_ZN7S7487C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7487C4;
extern VTBL_ENTRY _ZTI7S7487C4[];
extern  VTBL_ENTRY _ZTV7S7487C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7487C4[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7487C8;
extern VTBL_ENTRY _ZTI7S7487C8[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7487C4;
extern VTBL_ENTRY _ZTI7S7487C4[];
extern  VTBL_ENTRY _ZTV7S7487C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7487C4[];
extern Class_Descriptor cd_S7487C7;
extern VTBL_ENTRY _ZTI7S7487C7[];
extern  VTBL_ENTRY _ZTV7S7487C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7487C7[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S7487C8;
extern VTBL_ENTRY _ZTI7S7487C8[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7487C10;
extern VTBL_ENTRY _ZTI8S7487C10[];
extern  VTBL_ENTRY _ZTV8S7487C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7487C10[];
extern Class_Descriptor cd_S7487C9;
extern VTBL_ENTRY _ZTI7S7487C9[];
extern  VTBL_ENTRY _ZTV7S7487C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7487C9[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S7487C2;
extern VTBL_ENTRY _ZTI7S7487C2[];
extern  VTBL_ENTRY _ZTV7S7487C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7487C2[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
static Base_Class bases_S7487C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(56,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
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7487C4,    ABISELECT(48,32), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S5266C26,    ABISELECT(73,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(73,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7487C8,    ABISELECT(73,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    ABISELECT(74,46), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(72,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
    10, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7487C4,    ABISELECT(64,40), //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
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7487C7,    ABISELECT(64,40), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S7719C4_nt,    ABISELECT(88,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
    19, //immediately_derived
  0, 1},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    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
    16, //immediately_derived
  0, 0},
  {&cd_S7719C4_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
    16, //immediately_derived
  0, 0},
  {&cd_S7487C8,    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
    20, //immediately_derived
  0, 0},
  {&cd_S5266C26,    ABISELECT(96,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
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S5266C29,    ABISELECT(96,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
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7487C10,    ABISELECT(96,60), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S7487C9,    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
    22, //immediately_derived
  0, 0},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7487C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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_S7719C4_nt,    ABISELECT(32,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}};
extern VTBL_ENTRY _ZTI7S7487C1[];
extern void _ZN7S7487C1D1Ev();
extern void _ZN7S7487C1D0Ev();
static  VTBL_ENTRY vtc_S7487C1[] = {
  0,
  ABISELECT(64,40),
  ABISELECT(48,32),
  ABISELECT(48,32),
  ABISELECT(96,60),
  ABISELECT(88,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7487C1[0]),
  (VTBL_ENTRY)&_ZN7S7487C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7487C1D0Ev,
  0,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S7487C1[0]),
  ABISELECT(-16,-8),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI7S7487C1[0]),
  ABISELECT(-8,-4),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S7487C1[0]),
};
extern VTBL_ENTRY _ZTV7S7487C1[];
static  VTBL_ENTRY _tg__ZTV7S7487C2__7S7487C1[] = {
  0,
  ABISELECT(64,40),
  ABISELECT(48,32),
  ABISELECT(48,32),
  ABISELECT(96,60),
  ABISELECT(88,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7487C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7487C97S7487C2__7S7487C1[] = {
  ABISELECT(96,60),
  ABISELECT(88,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7487C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7487C10__7S7487C97S7487C2__7S7487C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S7487C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7487C4__7S7487C2__7S7487C1[] = {
  0,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S7487C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7487C7__7S7487C2__7S7487C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI7S7487C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7487C10__7S7487C2__7S7487C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S7487C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7487C4__7S7487C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7487C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7487C7__7S7487C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7487C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7487C47S7487C7__A1__7S7487C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7487C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7487C10__7S7487C1[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7487C10[0]),
};
static  VTT_ENTRY vtt_S7487C1[] = {
  {&(_ZTV7S7487C1[8]),  8,19},
  {&(_tg__ZTV7S7487C2__7S7487C1[8]),  8,8},
  {&(_tg__ZTV7S7487C97S7487C2__7S7487C1[4]),  4,4},
  {&(_tg__ZTV8S7487C10__7S7487C97S7487C2__7S7487C1[3]),  3,3},
  {&(_tg__ZTV7S7487C4__7S7487C2__7S7487C1[3]),  3,3},
  {&(_tg__ZTV7S7487C7__7S7487C2__7S7487C1[3]),  3,3},
  {&(_tg__ZTV8S7487C10__7S7487C2__7S7487C1[3]),  3,3},
  {&(_ZTV7S7487C1[13]),  13,19},
  {&(_ZTV7S7487C1[16]),  16,19},
  {&(_ZTV7S7487C1[19]),  19,19},
  {&(_tg__ZTV7S7487C4__7S7487C1[3]),  3,3},
  {&(_tg__ZTV7S7487C7__7S7487C1[3]),  3,3},
  {&(_tg__ZTV7S7487C47S7487C7__A1__7S7487C1[3]),  3,3},
  {&(_tg__ZTV8S7487C10__7S7487C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7487C1[];
extern  VTBL_ENTRY _ZTV7S7487C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7487C1[];
Class_Descriptor cd_S7487C1 = {  "S7487C1", // class name
  bases_S7487C1, 24,
  &(vtc_S7487C1[0]), // expected_vtbl_contents
  &(vtt_S7487C1[0]), // expected_vtt_contents
  ABISELECT(112,68), // object size
  NSPAIRA(_ZTI7S7487C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7487C1),19, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7487C1),14, //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  S3745C2  : S1679C4_nt {
  virtual void  v8(); // _ZN7S3745C22v8Ev
  virtual void  v9(); // _ZN7S3745C22v9Ev
  virtual void  v10(); // _ZN7S3745C23v10Ev
  virtual void  v11(); // _ZN7S3745C23v11Ev
  virtual void  v12(); // _ZN7S3745C23v12Ev
  virtual void  v13(); // _ZN7S3745C23v13Ev
  virtual void  v14(); // _ZN7S3745C23v14Ev
  virtual void  v15(); // _ZN7S3745C23v15Ev
  virtual void  v16(); // _ZN7S3745C23v16Ev
  virtual void  v17(); // _ZN7S3745C23v17Ev
  virtual void  v18(); // _ZN7S3745C23v18Ev
  virtual void  v19(); // _ZN7S3745C23v19Ev
  ~S3745C2(); // tgen
  S3745C2(); // tgen
};
//SIG(-1 S3745C2) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S3745C2 ::v8(){vfunc_called(this, "_ZN7S3745C22v8Ev");}
void  S3745C2 ::v9(){vfunc_called(this, "_ZN7S3745C22v9Ev");}
void  S3745C2 ::v10(){vfunc_called(this, "_ZN7S3745C23v10Ev");}
void  S3745C2 ::v11(){vfunc_called(this, "_ZN7S3745C23v11Ev");}
void  S3745C2 ::v12(){vfunc_called(this, "_ZN7S3745C23v12Ev");}
void  S3745C2 ::v13(){vfunc_called(this, "_ZN7S3745C23v13Ev");}
void  S3745C2 ::v14(){vfunc_called(this, "_ZN7S3745C23v14Ev");}
void  S3745C2 ::v15(){vfunc_called(this, "_ZN7S3745C23v15Ev");}
void  S3745C2 ::v16(){vfunc_called(this, "_ZN7S3745C23v16Ev");}
void  S3745C2 ::v17(){vfunc_called(this, "_ZN7S3745C23v17Ev");}
void  S3745C2 ::v18(){vfunc_called(this, "_ZN7S3745C23v18Ev");}
void  S3745C2 ::v19(){vfunc_called(this, "_ZN7S3745C23v19Ev");}
S3745C2 ::~S3745C2(){ note_dtor("S3745C2", this);} // tgen
S3745C2 ::S3745C2(){ note_ctor("S3745C2", this);} // tgen

static void Test_S3745C2()
{
  extern Class_Descriptor cd_S3745C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3745C2, buf);
    S3745C2 *dp, &lv = *(dp=new (buf) S3745C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3745C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3745C2)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S3745C2");
    test_class_info(&lv, &cd_S3745C2);
    dp->~S3745C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3745C2(Test_S3745C2, "S3745C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3745C2C1Ev();
extern void _ZN7S3745C2D1Ev();
Name_Map name_map_S3745C2[] = {
  NSPAIR(_ZN7S3745C2C1Ev),
  NSPAIR(_ZN7S3745C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S3745C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S3745C2[];
extern void _ZN7S3745C2D1Ev();
extern void _ZN7S3745C2D0Ev();
extern void _ZN7S3745C22v8Ev();
extern void _ZN7S3745C22v9Ev();
extern void _ZN7S3745C23v10Ev();
extern void _ZN7S3745C23v11Ev();
extern void _ZN7S3745C23v12Ev();
extern void _ZN7S3745C23v13Ev();
extern void _ZN7S3745C23v14Ev();
extern void _ZN7S3745C23v15Ev();
extern void _ZN7S3745C23v16Ev();
extern void _ZN7S3745C23v17Ev();
extern void _ZN7S3745C23v18Ev();
extern void _ZN7S3745C23v19Ev();
static  VTBL_ENTRY vtc_S3745C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3745C2[0]),
  (VTBL_ENTRY)&_ZN7S3745C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3745C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3745C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3745C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3745C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3745C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3745C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3745C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3745C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3745C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3745C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3745C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3745C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3745C23v19Ev,
};
extern VTBL_ENTRY _ZTI7S3745C2[];
extern  VTBL_ENTRY _ZTV7S3745C2[];
Class_Descriptor cd_S3745C2 = {  "S3745C2", // class name
  bases_S3745C2, 1,
  &(vtc_S3745C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3745C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3745C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3745C1  : S3745C2 {
  ::S3765C5_nt s3745c1f0;
  char s3745c1f1;
  ::S5266C36 s3745c1f2;
  virtual  ~S3745C1(); // _ZN7S3745C1D1Ev
  virtual void  v1(); // _ZN7S3745C12v1Ev
  virtual void  v2(); // _ZN7S3745C12v2Ev
  virtual void  v3(); // _ZN7S3745C12v3Ev
  virtual void  v4(); // _ZN7S3745C12v4Ev
  virtual void  v5(); // _ZN7S3745C12v5Ev
  virtual void  v6(); // _ZN7S3745C12v6Ev
  virtual void  v7(); // _ZN7S3745C12v7Ev
  S3745C1(); // tgen
};
//SIG(1 S3745C1) C1{ BC2{ BC3{ vd m Fi} v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19} vd v1 v2 v3 v4 v5 v6 v7 FC4{ m Fp[2]} Fc FC5{ m Fp Fi[2] FC6{ m}}}


 S3745C1 ::~S3745C1(){ note_dtor("S3745C1", this);}
void  S3745C1 ::v1(){vfunc_called(this, "_ZN7S3745C12v1Ev");}
void  S3745C1 ::v2(){vfunc_called(this, "_ZN7S3745C12v2Ev");}
void  S3745C1 ::v3(){vfunc_called(this, "_ZN7S3745C12v3Ev");}
void  S3745C1 ::v4(){vfunc_called(this, "_ZN7S3745C12v4Ev");}
void  S3745C1 ::v5(){vfunc_called(this, "_ZN7S3745C12v5Ev");}
void  S3745C1 ::v6(){vfunc_called(this, "_ZN7S3745C12v6Ev");}
void  S3745C1 ::v7(){vfunc_called(this, "_ZN7S3745C12v7Ev");}
S3745C1 ::S3745C1(){ note_ctor("S3745C1", this);} // tgen

static void Test_S3745C1()
{
  extern Class_Descriptor cd_S3745C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S3745C1, buf);
    S3745C1 *dp, &lv = *(dp=new (buf) S3745C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S3745C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3745C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S3745C2*), 0, "S3745C1");
    check_base_class_offset(lv, (S3745C2*), 0, "S3745C1");
    check_field_offset(lv, s3745c1f0, ABISELECT(16,8), "S3745C1.s3745c1f0");
    check_field_offset(lv, s3745c1f1, ABISELECT(32,16), "S3745C1.s3745c1f1");
    check_field_offset(lv, s3745c1f2, ABISELECT(40,20), "S3745C1.s3745c1f2");
    test_class_info(&lv, &cd_S3745C1);
    dp->~S3745C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3745C1(Test_S3745C1, "S3745C1", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S3745C1C1Ev();
extern void _ZN7S3745C1D1Ev();
Name_Map name_map_S3745C1[] = {
  NSPAIR(_ZN7S3745C1C1Ev),
  NSPAIR(_ZN7S3745C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S3745C2;
extern VTBL_ENTRY _ZTI7S3745C2[];
extern  VTBL_ENTRY _ZTV7S3745C2[];
static Base_Class bases_S3745C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S3745C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3745C1[];
extern void _ZN7S3745C1D1Ev();
extern void _ZN7S3745C1D0Ev();
extern void _ZN7S3745C22v8Ev();
extern void _ZN7S3745C22v9Ev();
extern void _ZN7S3745C23v10Ev();
extern void _ZN7S3745C23v11Ev();
extern void _ZN7S3745C23v12Ev();
extern void _ZN7S3745C23v13Ev();
extern void _ZN7S3745C23v14Ev();
extern void _ZN7S3745C23v15Ev();
extern void _ZN7S3745C23v16Ev();
extern void _ZN7S3745C23v17Ev();
extern void _ZN7S3745C23v18Ev();
extern void _ZN7S3745C23v19Ev();
extern void _ZN7S3745C12v1Ev();
extern void _ZN7S3745C12v2Ev();
extern void _ZN7S3745C12v3Ev();
extern void _ZN7S3745C12v4Ev();
extern void _ZN7S3745C12v5Ev();
extern void _ZN7S3745C12v6Ev();
extern void _ZN7S3745C12v7Ev();
static  VTBL_ENTRY vtc_S3745C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3745C1[0]),
  (VTBL_ENTRY)&_ZN7S3745C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3745C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3745C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3745C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3745C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3745C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3745C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3745C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3745C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3745C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3745C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3745C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3745C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3745C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3745C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3745C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3745C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3745C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3745C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3745C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3745C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S3745C1[];
extern  VTBL_ENTRY _ZTV7S3745C1[];
Class_Descriptor cd_S3745C1 = {  "S3745C1", // class name
  bases_S3745C1, 2,
  &(vtc_S3745C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S3745C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3745C1),23, //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  S19901C4  {
  virtual void  v9(); // _ZN8S19901C42v9Ev
  virtual void  v10(); // _ZN8S19901C43v10Ev
  virtual void  v11(); // _ZN8S19901C43v11Ev
  virtual void  v12(); // _ZN8S19901C43v12Ev
  virtual void  v13(); // _ZN8S19901C43v13Ev
  virtual void  v14(); // _ZN8S19901C43v14Ev
  virtual void  v15(); // _ZN8S19901C43v15Ev
  virtual void  v16(); // _ZN8S19901C43v16Ev
  virtual void  v17(); // _ZN8S19901C43v17Ev
  ~S19901C4(); // tgen
  S19901C4(); // tgen
};
//SIG(-1 S19901C4) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S19901C4 ::v9(){vfunc_called(this, "_ZN8S19901C42v9Ev");}
void  S19901C4 ::v10(){vfunc_called(this, "_ZN8S19901C43v10Ev");}
void  S19901C4 ::v11(){vfunc_called(this, "_ZN8S19901C43v11Ev");}
void  S19901C4 ::v12(){vfunc_called(this, "_ZN8S19901C43v12Ev");}
void  S19901C4 ::v13(){vfunc_called(this, "_ZN8S19901C43v13Ev");}
void  S19901C4 ::v14(){vfunc_called(this, "_ZN8S19901C43v14Ev");}
void  S19901C4 ::v15(){vfunc_called(this, "_ZN8S19901C43v15Ev");}
void  S19901C4 ::v16(){vfunc_called(this, "_ZN8S19901C43v16Ev");}
void  S19901C4 ::v17(){vfunc_called(this, "_ZN8S19901C43v17Ev");}
S19901C4 ::~S19901C4(){ note_dtor("S19901C4", this);} // tgen
S19901C4 ::S19901C4(){ note_ctor("S19901C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19901C4C1Ev();
extern void _ZN8S19901C4D1Ev();
Name_Map name_map_S19901C4[] = {
  NSPAIR(_ZN8S19901C4C1Ev),
  NSPAIR(_ZN8S19901C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19901C4[];
extern void _ZN8S19901C42v9Ev();
extern void _ZN8S19901C43v10Ev();
extern void _ZN8S19901C43v11Ev();
extern void _ZN8S19901C43v12Ev();
extern void _ZN8S19901C43v13Ev();
extern void _ZN8S19901C43v14Ev();
extern void _ZN8S19901C43v15Ev();
extern void _ZN8S19901C43v16Ev();
extern void _ZN8S19901C43v17Ev();
static  VTBL_ENTRY vtc_S19901C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19901C4[0]),
  (VTBL_ENTRY)&_ZN8S19901C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v17Ev,
};
extern VTBL_ENTRY _ZTI8S19901C4[];
extern  VTBL_ENTRY _ZTV8S19901C4[];
Class_Descriptor cd_S19901C4 = {  "S19901C4", // class name
  0,0,//no base classes
  &(vtc_S19901C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19901C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19901C4),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  S19901C3  : virtual S19901C4 {
  void *s19901c3f0;
  long double s19901c3f1;
  int s19901c3f2;
  virtual void  v18(); // _ZN8S19901C33v18Ev
  virtual void  v19(); // _ZN8S19901C33v19Ev
  virtual void  v20(); // _ZN8S19901C33v20Ev
  ~S19901C3(); // tgen
  S19901C3(); // tgen
};
//SIG(-1 S19901C3) C1{ VBC2{ v4 v5 v6 v7 v8 v9 v10 v11 v12} v1 v2 v3 Fp FD Fi}


void  S19901C3 ::v18(){vfunc_called(this, "_ZN8S19901C33v18Ev");}
void  S19901C3 ::v19(){vfunc_called(this, "_ZN8S19901C33v19Ev");}
void  S19901C3 ::v20(){vfunc_called(this, "_ZN8S19901C33v20Ev");}
S19901C3 ::~S19901C3(){ note_dtor("S19901C3", this);} // tgen
S19901C3 ::S19901C3(){ note_ctor("S19901C3", this);} // tgen

static void Test_S19901C3()
{
  extern Class_Descriptor cd_S19901C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S19901C3, buf);
    S19901C3 *dp, &lv = *(dp=new (buf) S19901C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19901C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19901C3)");
    check_base_class_offset(lv, (S19901C4*), 0, "S19901C3");
    check_field_offset(lv, s19901c3f0, ABISELECT(8,4), "S19901C3.s19901c3f0");
    check_field_offset(lv, s19901c3f1, ABISELECT(16,8), "S19901C3.s19901c3f1");
    check_field_offset(lv, s19901c3f2, ABISELECT(32,20), "S19901C3.s19901c3f2");
    test_class_info(&lv, &cd_S19901C3);
    dp->~S19901C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19901C3(Test_S19901C3, "S19901C3", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19901C3C1Ev();
extern void _ZN8S19901C3D1Ev();
Name_Map name_map_S19901C3[] = {
  NSPAIR(_ZN8S19901C3C1Ev),
  NSPAIR(_ZN8S19901C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19901C4;
extern VTBL_ENTRY _ZTI8S19901C4[];
extern  VTBL_ENTRY _ZTV8S19901C4[];
static Base_Class bases_S19901C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19901C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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 _ZTI8S19901C3[];
extern void _ZN8S19901C42v9Ev();
extern void _ZN8S19901C43v10Ev();
extern void _ZN8S19901C43v11Ev();
extern void _ZN8S19901C43v12Ev();
extern void _ZN8S19901C43v13Ev();
extern void _ZN8S19901C43v14Ev();
extern void _ZN8S19901C43v15Ev();
extern void _ZN8S19901C43v16Ev();
extern void _ZN8S19901C43v17Ev();
extern void _ZN8S19901C33v18Ev();
extern void _ZN8S19901C33v19Ev();
extern void _ZN8S19901C33v20Ev();
static  VTBL_ENTRY vtc_S19901C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19901C3[0]),
  (VTBL_ENTRY)&_ZN8S19901C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19901C33v18Ev,
  (VTBL_ENTRY)&_ZN8S19901C33v19Ev,
  (VTBL_ENTRY)&_ZN8S19901C33v20Ev,
};
extern VTBL_ENTRY _ZTV8S19901C3[];
static  VTT_ENTRY vtt_S19901C3[] = {
  {&(_ZTV8S19901C3[12]),  12,24},
  {&(_ZTV8S19901C3[12]),  12,24},
};
extern VTBL_ENTRY _ZTI8S19901C3[];
extern  VTBL_ENTRY _ZTV8S19901C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19901C3[];
Class_Descriptor cd_S19901C3 = {  "S19901C3", // class name
  bases_S19901C3, 1,
  &(vtc_S19901C3[0]), // expected_vtbl_contents
  &(vtt_S19901C3[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19901C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19901C3),24, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19901C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19901C1  : virtual S5266C29 , virtual S19901C3 {
  ::S7297C16 s19901c1f0;
  virtual void  v1(); // _ZN8S19901C12v1Ev
  virtual void  v2(); // _ZN8S19901C12v2Ev
  virtual void  v3(); // _ZN8S19901C12v3Ev
  virtual void  v4(); // _ZN8S19901C12v4Ev
  virtual void  v5(); // _ZN8S19901C12v5Ev
  virtual void  v6(); // _ZN8S19901C12v6Ev
  virtual void  v7(); // _ZN8S19901C12v7Ev
  virtual void  v8(); // _ZN8S19901C12v8Ev
  ~S19901C1(); // tgen
  S19901C1(); // tgen
};
//SIG(1 S19901C1) C1{ VBC2{ m} VBC3{ VBC4{ v9 v10 v11 v12 v13 v14 v15 v16 v17} v18 v19 v20 Fp FD Fi} v1 v2 v3 v4 v5 v6 v7 v8 FC5{ v21 v22 Fc[7] Fi[2]}}


void  S19901C1 ::v1(){vfunc_called(this, "_ZN8S19901C12v1Ev");}
void  S19901C1 ::v2(){vfunc_called(this, "_ZN8S19901C12v2Ev");}
void  S19901C1 ::v3(){vfunc_called(this, "_ZN8S19901C12v3Ev");}
void  S19901C1 ::v4(){vfunc_called(this, "_ZN8S19901C12v4Ev");}
void  S19901C1 ::v5(){vfunc_called(this, "_ZN8S19901C12v5Ev");}
void  S19901C1 ::v6(){vfunc_called(this, "_ZN8S19901C12v6Ev");}
void  S19901C1 ::v7(){vfunc_called(this, "_ZN8S19901C12v7Ev");}
void  S19901C1 ::v8(){vfunc_called(this, "_ZN8S19901C12v8Ev");}
S19901C1 ::~S19901C1(){ note_dtor("S19901C1", this);} // tgen
S19901C1 ::S19901C1(){ note_ctor("S19901C1", this);} // tgen

static void Test_S19901C1()
{
  extern Class_Descriptor cd_S19901C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,13)];
    init_test(&cd_S19901C1, buf);
    S19901C1 *dp, &lv = *(dp=new (buf) S19901C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S19901C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19901C1)");
    check_base_class_offset(lv, (S5266C29*), 0, "S19901C1");
    check_base_class_offset(lv, (S19901C4*)(S19901C3*), 0, "S19901C1");
    check_base_class_offset(lv, (S19901C3*), ABISELECT(32,24), "S19901C1");
    check_field_offset(lv, s19901c1f0, ABISELECT(8,4), "S19901C1.s19901c1f0");
    test_class_info(&lv, &cd_S19901C1);
    dp->~S19901C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19901C1(Test_S19901C1, "S19901C1", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN8S19901C1C1Ev();
extern void _ZN8S19901C1D1Ev();
Name_Map name_map_S19901C1[] = {
  NSPAIR(_ZN8S19901C1C1Ev),
  NSPAIR(_ZN8S19901C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19901C4;
extern VTBL_ENTRY _ZTI8S19901C4[];
extern  VTBL_ENTRY _ZTV8S19901C4[];
extern Class_Descriptor cd_S19901C3;
extern VTBL_ENTRY _ZTI8S19901C3[];
extern  VTBL_ENTRY _ZTV8S19901C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19901C3[];
static Base_Class bases_S19901C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19901C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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
    2, //immediately_derived
  0, 1},
  {&cd_S19901C3,    ABISELECT(32,24), //bcp->offset
    31, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S19901C1[];
extern void _ZN8S19901C42v9Ev();
extern void _ZN8S19901C43v10Ev();
extern void _ZN8S19901C43v11Ev();
extern void _ZN8S19901C43v12Ev();
extern void _ZN8S19901C43v13Ev();
extern void _ZN8S19901C43v14Ev();
extern void _ZN8S19901C43v15Ev();
extern void _ZN8S19901C43v16Ev();
extern void _ZN8S19901C43v17Ev();
extern void _ZN8S19901C12v1Ev();
extern void _ZN8S19901C12v2Ev();
extern void _ZN8S19901C12v3Ev();
extern void _ZN8S19901C12v4Ev();
extern void _ZN8S19901C12v5Ev();
extern void _ZN8S19901C12v6Ev();
extern void _ZN8S19901C12v7Ev();
extern void _ZN8S19901C12v8Ev();
extern void _ZN8S19901C42v9Ev();
extern void _ZN8S19901C43v10Ev();
extern void _ZN8S19901C43v11Ev();
extern void _ZN8S19901C43v12Ev();
extern void _ZN8S19901C43v13Ev();
extern void _ZN8S19901C43v14Ev();
extern void _ZN8S19901C43v15Ev();
extern void _ZN8S19901C43v16Ev();
extern void _ZN8S19901C43v17Ev();
extern void _ZN8S19901C33v18Ev();
extern void _ZN8S19901C33v19Ev();
extern void _ZN8S19901C33v20Ev();
static  VTBL_ENTRY vtc_S19901C1[] = {
  0,
  ABISELECT(32,24),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19901C1[0]),
  (VTBL_ENTRY)&_ZN8S19901C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19901C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19901C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19901C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19901C12v4Ev,
  (VTBL_ENTRY)&_ZN8S19901C12v5Ev,
  (VTBL_ENTRY)&_ZN8S19901C12v6Ev,
  (VTBL_ENTRY)&_ZN8S19901C12v7Ev,
  (VTBL_ENTRY)&_ZN8S19901C12v8Ev,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S19901C1[0]),
  (VTBL_ENTRY)&_ZN8S19901C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19901C33v18Ev,
  (VTBL_ENTRY)&_ZN8S19901C33v19Ev,
  (VTBL_ENTRY)&_ZN8S19901C33v20Ev,
};
extern VTBL_ENTRY _ZTV8S19901C1[];
extern void _ZN8S19901C42v9Ev();
extern void _ZN8S19901C43v10Ev();
extern void _ZN8S19901C43v11Ev();
extern void _ZN8S19901C43v12Ev();
extern void _ZN8S19901C43v13Ev();
extern void _ZN8S19901C43v14Ev();
extern void _ZN8S19901C43v15Ev();
extern void _ZN8S19901C43v16Ev();
extern void _ZN8S19901C43v17Ev();
extern void _ZN8S19901C33v18Ev();
extern void _ZN8S19901C33v19Ev();
extern void _ZN8S19901C33v20Ev();
static  VTBL_ENTRY _tg__ZTV8S19901C3__8S19901C1[] = {
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19901C3[0]),
  (VTBL_ENTRY)&_ZN8S19901C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19901C33v18Ev,
  (VTBL_ENTRY)&_ZN8S19901C33v19Ev,
  (VTBL_ENTRY)&_ZN8S19901C33v20Ev,
};
extern void _ZN8S19901C42v9Ev();
extern void _ZN8S19901C43v10Ev();
extern void _ZN8S19901C43v11Ev();
extern void _ZN8S19901C43v12Ev();
extern void _ZN8S19901C43v13Ev();
extern void _ZN8S19901C43v14Ev();
extern void _ZN8S19901C43v15Ev();
extern void _ZN8S19901C43v16Ev();
extern void _ZN8S19901C43v17Ev();
static  VTBL_ENTRY _tg__ZTV8S19901C4__8S19901C3__8S19901C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,24),
  (VTBL_ENTRY)&(_ZTI8S19901C3[0]),
  (VTBL_ENTRY)&_ZN8S19901C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19901C43v17Ev,
};
static  VTT_ENTRY vtt_S19901C1[] = {
  {&(_ZTV8S19901C1[14]),  14,58},
  {&(_ZTV8S19901C1[46]),  46,58},
  {&(_ZTV8S19901C1[14]),  14,58},
  {&(_tg__ZTV8S19901C3__8S19901C1[12]),  12,24},
  {&(_tg__ZTV8S19901C4__8S19901C3__8S19901C1[11]),  11,20},
};
extern VTBL_ENTRY _ZTI8S19901C1[];
extern  VTBL_ENTRY _ZTV8S19901C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19901C1[];
Class_Descriptor cd_S19901C1 = {  "S19901C1", // class name
  bases_S19901C1, 3,
  &(vtc_S19901C1[0]), // expected_vtbl_contents
  &(vtt_S19901C1[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI8S19901C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19901C1),58, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19901C1),5, //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  S3186C3  {
  virtual void  v3(); // _ZN7S3186C32v3Ev
  ~S3186C3(); // tgen
  S3186C3(); // tgen
};
//SIG(-1 S3186C3) C1{ v1}


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

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

#else // __cplusplus

extern void _ZN7S3186C3C1Ev();
extern void _ZN7S3186C3D1Ev();
Name_Map name_map_S3186C3[] = {
  NSPAIR(_ZN7S3186C3C1Ev),
  NSPAIR(_ZN7S3186C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3186C3[];
extern void _ZN7S3186C32v3Ev();
static  VTBL_ENTRY vtc_S3186C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3186C3[0]),
  (VTBL_ENTRY)&_ZN7S3186C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S3186C3[];
extern  VTBL_ENTRY _ZTV7S3186C3[];
Class_Descriptor cd_S3186C3 = {  "S3186C3", // class name
  0,0,//no base classes
  &(vtc_S3186C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3186C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3186C3),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  S3186C4  : S3186C3 {
  virtual void  v4(); // _ZN7S3186C42v4Ev
  virtual void  v5(); // _ZN7S3186C42v5Ev
  virtual void  v6(); // _ZN7S3186C42v6Ev
  ~S3186C4(); // tgen
  S3186C4(); // tgen
};
//SIG(-1 S3186C4) C1{ BC2{ v4} v1 v2 v3}


void  S3186C4 ::v4(){vfunc_called(this, "_ZN7S3186C42v4Ev");}
void  S3186C4 ::v5(){vfunc_called(this, "_ZN7S3186C42v5Ev");}
void  S3186C4 ::v6(){vfunc_called(this, "_ZN7S3186C42v6Ev");}
S3186C4 ::~S3186C4(){ note_dtor("S3186C4", this);} // tgen
S3186C4 ::S3186C4(){ note_ctor("S3186C4", this);} // tgen

static void Test_S3186C4()
{
  extern Class_Descriptor cd_S3186C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3186C4, buf);
    S3186C4 *dp, &lv = *(dp=new (buf) S3186C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3186C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3186C4)");
    check_base_class_offset(lv, (S3186C3*), 0, "S3186C4");
    test_class_info(&lv, &cd_S3186C4);
    dp->~S3186C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3186C4(Test_S3186C4, "S3186C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3186C4C1Ev();
extern void _ZN7S3186C4D1Ev();
Name_Map name_map_S3186C4[] = {
  NSPAIR(_ZN7S3186C4C1Ev),
  NSPAIR(_ZN7S3186C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3186C3;
extern VTBL_ENTRY _ZTI7S3186C3[];
extern  VTBL_ENTRY _ZTV7S3186C3[];
static Base_Class bases_S3186C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3186C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S3186C4[];
extern void _ZN7S3186C32v3Ev();
extern void _ZN7S3186C42v4Ev();
extern void _ZN7S3186C42v5Ev();
extern void _ZN7S3186C42v6Ev();
static  VTBL_ENTRY vtc_S3186C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3186C4[0]),
  (VTBL_ENTRY)&_ZN7S3186C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3186C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3186C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3186C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S3186C4[];
extern  VTBL_ENTRY _ZTV7S3186C4[];
Class_Descriptor cd_S3186C4 = {  "S3186C4", // class name
  bases_S3186C4, 1,
  &(vtc_S3186C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3186C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3186C4),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  S3186C5  : virtual S3186C4 , S3186C3 {
  int s3186c5f0;
  virtual void  v7(); // _ZN7S3186C52v7Ev
  virtual void  v8(); // _ZN7S3186C52v8Ev
  virtual void  v9(); // _ZN7S3186C52v9Ev
  virtual void  v10(); // _ZN7S3186C53v10Ev
  virtual void  v11(); // _ZN7S3186C53v11Ev
  virtual void  v12(); // _ZN7S3186C53v12Ev
  ~S3186C5(); // tgen
  S3186C5(); // tgen
};
//SIG(-1 S3186C5) C1{ VBC2{ BC3{ v7} v8 v9 v10} BC3 v1 v2 v3 v4 v5 v6 Fi}


void  S3186C5 ::v7(){vfunc_called(this, "_ZN7S3186C52v7Ev");}
void  S3186C5 ::v8(){vfunc_called(this, "_ZN7S3186C52v8Ev");}
void  S3186C5 ::v9(){vfunc_called(this, "_ZN7S3186C52v9Ev");}
void  S3186C5 ::v10(){vfunc_called(this, "_ZN7S3186C53v10Ev");}
void  S3186C5 ::v11(){vfunc_called(this, "_ZN7S3186C53v11Ev");}
void  S3186C5 ::v12(){vfunc_called(this, "_ZN7S3186C53v12Ev");}
S3186C5 ::~S3186C5(){ note_dtor("S3186C5", this);} // tgen
S3186C5 ::S3186C5(){ note_ctor("S3186C5", this);} // tgen

static void Test_S3186C5()
{
  extern Class_Descriptor cd_S3186C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3186C5, buf);
    S3186C5 *dp, &lv = *(dp=new (buf) S3186C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3186C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3186C5)");
    check_base_class_offset(lv, (S3186C3*)(S3186C4*), ABISELECT(16,8), "S3186C5");
    check_base_class_offset(lv, (S3186C4*), ABISELECT(16,8), "S3186C5");
    /*is_ambiguous_... S3186C5::S3186C3 */ AMB_check_base_class_offset(lv, (S3186C3*), 0, "S3186C5");
    check_field_offset(lv, s3186c5f0, ABISELECT(8,4), "S3186C5.s3186c5f0");
    test_class_info(&lv, &cd_S3186C5);
    dp->~S3186C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3186C5(Test_S3186C5, "S3186C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S3186C5C1Ev();
extern void _ZN7S3186C5D1Ev();
Name_Map name_map_S3186C5[] = {
  NSPAIR(_ZN7S3186C5C1Ev),
  NSPAIR(_ZN7S3186C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3186C3;
extern VTBL_ENTRY _ZTI7S3186C3[];
extern  VTBL_ENTRY _ZTV7S3186C3[];
extern Class_Descriptor cd_S3186C4;
extern VTBL_ENTRY _ZTI7S3186C4[];
extern  VTBL_ENTRY _ZTV7S3186C4[];
extern Class_Descriptor cd_S3186C3;
extern VTBL_ENTRY _ZTI7S3186C3[];
extern  VTBL_ENTRY _ZTV7S3186C3[];
static Base_Class bases_S3186C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3186C3,    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
  0, 0},
  {&cd_S3186C4,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //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},
  {&cd_S3186C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3186C5[];
extern void _ZN7S3186C32v3Ev();
extern void _ZN7S3186C52v7Ev();
extern void _ZN7S3186C52v8Ev();
extern void _ZN7S3186C52v9Ev();
extern void _ZN7S3186C53v10Ev();
extern void _ZN7S3186C53v11Ev();
extern void _ZN7S3186C53v12Ev();
extern void _ZN7S3186C32v3Ev();
extern void _ZN7S3186C42v4Ev();
extern void _ZN7S3186C42v5Ev();
extern void _ZN7S3186C42v6Ev();
static  VTBL_ENTRY vtc_S3186C5[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3186C5[0]),
  (VTBL_ENTRY)&_ZN7S3186C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3186C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3186C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3186C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3186C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3186C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3186C53v12Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3186C5[0]),
  (VTBL_ENTRY)&_ZN7S3186C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3186C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3186C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3186C42v6Ev,
};
extern VTBL_ENTRY _ZTV7S3186C5[];
static  VTT_ENTRY vtt_S3186C5[] = {
  {&(_ZTV7S3186C5[3]),  3,20},
  {&(_ZTV7S3186C5[16]),  16,20},
};
extern VTBL_ENTRY _ZTI7S3186C5[];
extern  VTBL_ENTRY _ZTV7S3186C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3186C5[];
Class_Descriptor cd_S3186C5 = {  "S3186C5", // class name
  bases_S3186C5, 3,
  &(vtc_S3186C5[0]), // expected_vtbl_contents
  &(vtt_S3186C5[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S3186C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3186C5),20, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3186C5),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3186C2  : S3186C3 , virtual S3186C4 , S3186C5 {
  char s3186c2f0;
  virtual void  v13(); // _ZN7S3186C23v13Ev
  virtual void  v14(); // _ZN7S3186C23v14Ev
  virtual void  v15(); // _ZN7S3186C23v15Ev
  virtual void  v16(); // _ZN7S3186C23v16Ev
  virtual void  v17(); // _ZN7S3186C23v17Ev
  virtual void  v18(); // _ZN7S3186C23v18Ev
  virtual void  v19(); // _ZN7S3186C23v19Ev
  ~S3186C2(); // tgen
  S3186C2(); // tgen
};
//SIG(-1 S3186C2) C1{ BC2{ v8} VBC3{ BC2 v9 v10 v11} BC4{ VBC3 BC2 v12 v13 v14 v15 v16 v17 Fi} v1 v2 v3 v4 v5 v6 v7 Fc}


void  S3186C2 ::v13(){vfunc_called(this, "_ZN7S3186C23v13Ev");}
void  S3186C2 ::v14(){vfunc_called(this, "_ZN7S3186C23v14Ev");}
void  S3186C2 ::v15(){vfunc_called(this, "_ZN7S3186C23v15Ev");}
void  S3186C2 ::v16(){vfunc_called(this, "_ZN7S3186C23v16Ev");}
void  S3186C2 ::v17(){vfunc_called(this, "_ZN7S3186C23v17Ev");}
void  S3186C2 ::v18(){vfunc_called(this, "_ZN7S3186C23v18Ev");}
void  S3186C2 ::v19(){vfunc_called(this, "_ZN7S3186C23v19Ev");}
S3186C2 ::~S3186C2(){ note_dtor("S3186C2", this);} // tgen
S3186C2 ::S3186C2(){ note_ctor("S3186C2", this);} // tgen

static void Test_S3186C2()
{
  extern Class_Descriptor cd_S3186C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S3186C2, buf);
    S3186C2 *dp, &lv = *(dp=new (buf) S3186C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S3186C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3186C2)");
    /*is_ambiguous_... S3186C2::S3186C3 */ AMB_check_base_class_offset(lv, (S3186C3*), 0, "S3186C2");
    check_base_class_offset(lv, (S3186C3*)(S3186C4*), ABISELECT(24,16), "S3186C2");
    check_base_class_offset(lv, (S3186C4*), ABISELECT(24,16), "S3186C2");
    check_base_class_offset(lv, (S3186C4*)(S3186C5*), ABISELECT(24,16), "S3186C2");
    /*is_ambiguous_... S3186C5::S3186C3 */ AMB_check_base_class_offset(lv, (S3186C3*)(S3186C5*), ABISELECT(8,4), "S3186C2");
    check_base_class_offset(lv, (S3186C5*), ABISELECT(8,4), "S3186C2");
    check_field_offset(lv, s3186c2f0, ABISELECT(20,12), "S3186C2.s3186c2f0");
    test_class_info(&lv, &cd_S3186C2);
    dp->~S3186C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3186C2(Test_S3186C2, "S3186C2", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S3186C2C1Ev();
extern void _ZN7S3186C2D1Ev();
Name_Map name_map_S3186C2[] = {
  NSPAIR(_ZN7S3186C2C1Ev),
  NSPAIR(_ZN7S3186C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3186C3;
extern VTBL_ENTRY _ZTI7S3186C3[];
extern  VTBL_ENTRY _ZTV7S3186C3[];
extern Class_Descriptor cd_S3186C3;
extern VTBL_ENTRY _ZTI7S3186C3[];
extern  VTBL_ENTRY _ZTV7S3186C3[];
extern Class_Descriptor cd_S3186C4;
extern VTBL_ENTRY _ZTI7S3186C4[];
extern  VTBL_ENTRY _ZTV7S3186C4[];
extern Class_Descriptor cd_S3186C3;
extern VTBL_ENTRY _ZTI7S3186C3[];
extern  VTBL_ENTRY _ZTV7S3186C3[];
extern Class_Descriptor cd_S3186C5;
extern VTBL_ENTRY _ZTI7S3186C5[];
extern  VTBL_ENTRY _ZTV7S3186C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3186C5[];
static Base_Class bases_S3186C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3186C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3186C3,    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
    2, //immediately_derived
  0, 0},
  {&cd_S3186C4,    ABISELECT(24,16), //bcp->offset
    21, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S3186C3,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3186C5,    ABISELECT(8,4), //bcp->offset
    11, //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3186C2[];
extern void _ZN7S3186C32v3Ev();
extern void _ZN7S3186C23v13Ev();
extern void _ZN7S3186C23v14Ev();
extern void _ZN7S3186C23v15Ev();
extern void _ZN7S3186C23v16Ev();
extern void _ZN7S3186C23v17Ev();
extern void _ZN7S3186C23v18Ev();
extern void _ZN7S3186C23v19Ev();
extern void _ZN7S3186C32v3Ev();
extern void _ZN7S3186C52v7Ev();
extern void _ZN7S3186C52v8Ev();
extern void _ZN7S3186C52v9Ev();
extern void _ZN7S3186C53v10Ev();
extern void _ZN7S3186C53v11Ev();
extern void _ZN7S3186C53v12Ev();
extern void _ZN7S3186C32v3Ev();
extern void _ZN7S3186C42v4Ev();
extern void _ZN7S3186C42v5Ev();
extern void _ZN7S3186C42v6Ev();
static  VTBL_ENTRY vtc_S3186C2[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3186C2[0]),
  (VTBL_ENTRY)&_ZN7S3186C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3186C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3186C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3186C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3186C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3186C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3186C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3186C23v19Ev,
  ABISELECT(16,12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3186C2[0]),
  (VTBL_ENTRY)&_ZN7S3186C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3186C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3186C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3186C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3186C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3186C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3186C53v12Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S3186C2[0]),
  (VTBL_ENTRY)&_ZN7S3186C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3186C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3186C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3186C42v6Ev,
};
extern VTBL_ENTRY _ZTV7S3186C2[];
extern void _ZN7S3186C32v3Ev();
extern void _ZN7S3186C52v7Ev();
extern void _ZN7S3186C52v8Ev();
extern void _ZN7S3186C52v9Ev();
extern void _ZN7S3186C53v10Ev();
extern void _ZN7S3186C53v11Ev();
extern void _ZN7S3186C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S3186C5__7S3186C2[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3186C5[0]),
  (VTBL_ENTRY)&_ZN7S3186C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3186C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3186C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3186C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3186C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3186C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3186C53v12Ev,
};
extern void _ZN7S3186C32v3Ev();
extern void _ZN7S3186C42v4Ev();
extern void _ZN7S3186C42v5Ev();
extern void _ZN7S3186C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3186C4__7S3186C5__7S3186C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S3186C5[0]),
  (VTBL_ENTRY)&_ZN7S3186C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3186C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3186C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3186C42v6Ev,
};
static  VTT_ENTRY vtt_S3186C2[] = {
  {&(_ZTV7S3186C2[3]),  3,31},
  {&(_tg__ZTV7S3186C5__7S3186C2[3]),  3,10},
  {&(_tg__ZTV7S3186C4__7S3186C5__7S3186C2[6]),  6,10},
  {&(_ZTV7S3186C2[27]),  27,31},
  {&(_ZTV7S3186C2[14]),  14,31},
};
extern VTBL_ENTRY _ZTI7S3186C2[];
extern  VTBL_ENTRY _ZTV7S3186C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3186C2[];
Class_Descriptor cd_S3186C2 = {  "S3186C2", // class name
  bases_S3186C2, 5,
  &(vtc_S3186C2[0]), // expected_vtbl_contents
  &(vtt_S3186C2[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S3186C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3186C2),31, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3186C2),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3186C1  : S3186C2 {
  ::S19905C17_nt s3186c1f0;
  int s3186c1f1;
  void *s3186c1f2;
  virtual void  v1(); // _ZN7S3186C12v1Ev
  virtual void  v2(); // _ZN7S3186C12v2Ev
  ~S3186C1(); // tgen
  S3186C1(); // tgen
};
//SIG(1 S3186C1) C1{ BC2{ BC3{ v3} VBC4{ BC3 v4 v5 v6} BC5{ VBC4 BC3 v7 v8 v9 v10 v11 v12 Fi} v13 v14 v15 v16 v17 v18 v19 Fc} v1 v2 FC6{} Fi Fp}


void  S3186C1 ::v1(){vfunc_called(this, "_ZN7S3186C12v1Ev");}
void  S3186C1 ::v2(){vfunc_called(this, "_ZN7S3186C12v2Ev");}
S3186C1 ::~S3186C1(){ note_dtor("S3186C1", this);} // tgen
S3186C1 ::S3186C1(){ note_ctor("S3186C1", this);} // tgen

static void Test_S3186C1()
{
  extern Class_Descriptor cd_S3186C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S3186C1, buf);
    S3186C1 *dp, &lv = *(dp=new (buf) S3186C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S3186C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3186C1)");
    /*is_ambiguous_... S3186C2::S3186C3 */ AMB_check_base_class_offset(lv, (S3186C3*)(S3186C2*), 0, "S3186C1");
    check_base_class_offset(lv, (S3186C3*)(S3186C4*), ABISELECT(40,24), "S3186C1");
    check_base_class_offset(lv, (S3186C4*)(S3186C2*), ABISELECT(40,24), "S3186C1");
    check_base_class_offset(lv, (S3186C4*)(S3186C5*)(S3186C2*), ABISELECT(40,24), "S3186C1");
    /*is_ambiguous_... S3186C5::S3186C3 */ AMB_check_base_class_offset(lv, (S3186C3*)(S3186C5*)(S3186C2*), ABISELECT(8,4), "S3186C1");
    check_base_class_offset(lv, (S3186C5*)(S3186C2*), ABISELECT(8,4), "S3186C1");
    check_base_class_offset(lv, (S3186C2*), 0, "S3186C1");
    check_field_offset(lv, s3186c1f0, ABISELECT(21,13), "S3186C1.s3186c1f0");
    check_field_offset(lv, s3186c1f1, ABISELECT(24,16), "S3186C1.s3186c1f1");
    check_field_offset(lv, s3186c1f2, ABISELECT(32,20), "S3186C1.s3186c1f2");
    test_class_info(&lv, &cd_S3186C1);
    dp->~S3186C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3186C1(Test_S3186C1, "S3186C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S3186C1C1Ev();
extern void _ZN7S3186C1D1Ev();
Name_Map name_map_S3186C1[] = {
  NSPAIR(_ZN7S3186C1C1Ev),
  NSPAIR(_ZN7S3186C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3186C3;
extern VTBL_ENTRY _ZTI7S3186C3[];
extern  VTBL_ENTRY _ZTV7S3186C3[];
extern Class_Descriptor cd_S3186C3;
extern VTBL_ENTRY _ZTI7S3186C3[];
extern  VTBL_ENTRY _ZTV7S3186C3[];
extern Class_Descriptor cd_S3186C4;
extern VTBL_ENTRY _ZTI7S3186C4[];
extern  VTBL_ENTRY _ZTV7S3186C4[];
extern Class_Descriptor cd_S3186C3;
extern VTBL_ENTRY _ZTI7S3186C3[];
extern  VTBL_ENTRY _ZTV7S3186C3[];
extern Class_Descriptor cd_S3186C5;
extern VTBL_ENTRY _ZTI7S3186C5[];
extern  VTBL_ENTRY _ZTV7S3186C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3186C5[];
extern Class_Descriptor cd_S3186C2;
extern VTBL_ENTRY _ZTI7S3186C2[];
extern  VTBL_ENTRY _ZTV7S3186C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3186C2[];
static Base_Class bases_S3186C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3186C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S3186C3,    ABISELECT(40,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
    2, //immediately_derived
  0, 0},
  {&cd_S3186C4,    ABISELECT(40,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3186C3,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3186C5,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3186C2,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3186C1[];
extern void _ZN7S3186C32v3Ev();
extern void _ZN7S3186C23v13Ev();
extern void _ZN7S3186C23v14Ev();
extern void _ZN7S3186C23v15Ev();
extern void _ZN7S3186C23v16Ev();
extern void _ZN7S3186C23v17Ev();
extern void _ZN7S3186C23v18Ev();
extern void _ZN7S3186C23v19Ev();
extern void _ZN7S3186C12v1Ev();
extern void _ZN7S3186C12v2Ev();
extern void _ZN7S3186C32v3Ev();
extern void _ZN7S3186C52v7Ev();
extern void _ZN7S3186C52v8Ev();
extern void _ZN7S3186C52v9Ev();
extern void _ZN7S3186C53v10Ev();
extern void _ZN7S3186C53v11Ev();
extern void _ZN7S3186C53v12Ev();
extern void _ZN7S3186C32v3Ev();
extern void _ZN7S3186C42v4Ev();
extern void _ZN7S3186C42v5Ev();
extern void _ZN7S3186C42v6Ev();
static  VTBL_ENTRY vtc_S3186C1[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S3186C1[0]),
  (VTBL_ENTRY)&_ZN7S3186C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3186C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3186C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3186C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3186C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3186C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3186C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3186C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3186C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3186C12v2Ev,
  ABISELECT(32,20),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3186C1[0]),
  (VTBL_ENTRY)&_ZN7S3186C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3186C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3186C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3186C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3186C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3186C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3186C53v12Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S3186C1[0]),
  (VTBL_ENTRY)&_ZN7S3186C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3186C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3186C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3186C42v6Ev,
};
extern VTBL_ENTRY _ZTV7S3186C1[];
extern void _ZN7S3186C32v3Ev();
extern void _ZN7S3186C23v13Ev();
extern void _ZN7S3186C23v14Ev();
extern void _ZN7S3186C23v15Ev();
extern void _ZN7S3186C23v16Ev();
extern void _ZN7S3186C23v17Ev();
extern void _ZN7S3186C23v18Ev();
extern void _ZN7S3186C23v19Ev();
static  VTBL_ENTRY _tg__ZTV7S3186C2__7S3186C1[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S3186C2[0]),
  (VTBL_ENTRY)&_ZN7S3186C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3186C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3186C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3186C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3186C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3186C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3186C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3186C23v19Ev,
};
extern void _ZN7S3186C32v3Ev();
extern void _ZN7S3186C52v7Ev();
extern void _ZN7S3186C52v8Ev();
extern void _ZN7S3186C52v9Ev();
extern void _ZN7S3186C53v10Ev();
extern void _ZN7S3186C53v11Ev();
extern void _ZN7S3186C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S3186C57S3186C2__7S3186C1[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3186C5[0]),
  (VTBL_ENTRY)&_ZN7S3186C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3186C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3186C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3186C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3186C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3186C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3186C53v12Ev,
};
extern void _ZN7S3186C32v3Ev();
extern void _ZN7S3186C42v4Ev();
extern void _ZN7S3186C42v5Ev();
extern void _ZN7S3186C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3186C4__7S3186C57S3186C2__7S3186C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S3186C5[0]),
  (VTBL_ENTRY)&_ZN7S3186C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3186C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3186C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3186C42v6Ev,
};
extern void _ZN7S3186C32v3Ev();
extern void _ZN7S3186C42v4Ev();
extern void _ZN7S3186C42v5Ev();
extern void _ZN7S3186C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3186C4__7S3186C2__7S3186C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S3186C2[0]),
  (VTBL_ENTRY)&_ZN7S3186C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3186C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3186C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3186C42v6Ev,
};
extern void _ZN7S3186C32v3Ev();
extern void _ZN7S3186C52v7Ev();
extern void _ZN7S3186C52v8Ev();
extern void _ZN7S3186C52v9Ev();
extern void _ZN7S3186C53v10Ev();
extern void _ZN7S3186C53v11Ev();
extern void _ZN7S3186C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S3186C5__7S3186C2__7S3186C1[] = {
  ABISELECT(32,20),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3186C2[0]),
  (VTBL_ENTRY)&_ZN7S3186C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3186C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3186C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3186C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3186C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3186C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3186C53v12Ev,
};
static  VTT_ENTRY vtt_S3186C1[] = {
  {&(_ZTV7S3186C1[3]),  3,33},
  {&(_tg__ZTV7S3186C2__7S3186C1[3]),  3,11},
  {&(_tg__ZTV7S3186C57S3186C2__7S3186C1[3]),  3,10},
  {&(_tg__ZTV7S3186C4__7S3186C57S3186C2__7S3186C1[6]),  6,10},
  {&(_tg__ZTV7S3186C4__7S3186C2__7S3186C1[6]),  6,10},
  {&(_tg__ZTV7S3186C5__7S3186C2__7S3186C1[3]),  3,10},
  {&(_ZTV7S3186C1[29]),  29,33},
  {&(_ZTV7S3186C1[16]),  16,33},
};
extern VTBL_ENTRY _ZTI7S3186C1[];
extern  VTBL_ENTRY _ZTV7S3186C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3186C1[];
Class_Descriptor cd_S3186C1 = {  "S3186C1", // class name
  bases_S3186C1, 6,
  &(vtc_S3186C1[0]), // expected_vtbl_contents
  &(vtt_S3186C1[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S3186C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3186C1),33, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3186C1),8, //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  S6695C2  {
  virtual void  v3(); // _ZN7S6695C22v3Ev
  virtual void  v4(); // _ZN7S6695C22v4Ev
  virtual void  v5(); // _ZN7S6695C22v5Ev
  virtual void  v6(); // _ZN7S6695C22v6Ev
  virtual void  v7(); // _ZN7S6695C22v7Ev
  virtual void  v8(); // _ZN7S6695C22v8Ev
  virtual void  v9(); // _ZN7S6695C22v9Ev
  virtual void  v10(); // _ZN7S6695C23v10Ev
  virtual void  v11(); // _ZN7S6695C23v11Ev
  ~S6695C2(); // tgen
  S6695C2(); // tgen
};
//SIG(-1 S6695C2) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S6695C2 ::v3(){vfunc_called(this, "_ZN7S6695C22v3Ev");}
void  S6695C2 ::v4(){vfunc_called(this, "_ZN7S6695C22v4Ev");}
void  S6695C2 ::v5(){vfunc_called(this, "_ZN7S6695C22v5Ev");}
void  S6695C2 ::v6(){vfunc_called(this, "_ZN7S6695C22v6Ev");}
void  S6695C2 ::v7(){vfunc_called(this, "_ZN7S6695C22v7Ev");}
void  S6695C2 ::v8(){vfunc_called(this, "_ZN7S6695C22v8Ev");}
void  S6695C2 ::v9(){vfunc_called(this, "_ZN7S6695C22v9Ev");}
void  S6695C2 ::v10(){vfunc_called(this, "_ZN7S6695C23v10Ev");}
void  S6695C2 ::v11(){vfunc_called(this, "_ZN7S6695C23v11Ev");}
S6695C2 ::~S6695C2(){ note_dtor("S6695C2", this);} // tgen
S6695C2 ::S6695C2(){ note_ctor("S6695C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6695C2C1Ev();
extern void _ZN7S6695C2D1Ev();
Name_Map name_map_S6695C2[] = {
  NSPAIR(_ZN7S6695C2C1Ev),
  NSPAIR(_ZN7S6695C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6695C2[];
extern void _ZN7S6695C22v3Ev();
extern void _ZN7S6695C22v4Ev();
extern void _ZN7S6695C22v5Ev();
extern void _ZN7S6695C22v6Ev();
extern void _ZN7S6695C22v7Ev();
extern void _ZN7S6695C22v8Ev();
extern void _ZN7S6695C22v9Ev();
extern void _ZN7S6695C23v10Ev();
extern void _ZN7S6695C23v11Ev();
static  VTBL_ENTRY vtc_S6695C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6695C2[0]),
  (VTBL_ENTRY)&_ZN7S6695C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S6695C2[];
extern  VTBL_ENTRY _ZTV7S6695C2[];
Class_Descriptor cd_S6695C2 = {  "S6695C2", // class name
  0,0,//no base classes
  &(vtc_S6695C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6695C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6695C2),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  S6695C4  {
  virtual void  v12(); // _ZN7S6695C43v12Ev
  ~S6695C4(); // tgen
  S6695C4(); // tgen
};
//SIG(-1 S6695C4) C1{ v1}


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

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

#else // __cplusplus

extern void _ZN7S6695C4C1Ev();
extern void _ZN7S6695C4D1Ev();
Name_Map name_map_S6695C4[] = {
  NSPAIR(_ZN7S6695C4C1Ev),
  NSPAIR(_ZN7S6695C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6695C4[];
extern void _ZN7S6695C43v12Ev();
static  VTBL_ENTRY vtc_S6695C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6695C4[0]),
  (VTBL_ENTRY)&_ZN7S6695C43v12Ev,
};
extern VTBL_ENTRY _ZTI7S6695C4[];
extern  VTBL_ENTRY _ZTV7S6695C4[];
Class_Descriptor cd_S6695C4 = {  "S6695C4", // class name
  0,0,//no base classes
  &(vtc_S6695C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6695C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6695C4),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  S6695C6  : virtual S6695C2 {
  __tsi64 s6695c6f0;
  virtual void  v13(); // _ZN7S6695C63v13Ev
  virtual void  v14(); // _ZN7S6695C63v14Ev
  virtual void  v15(); // _ZN7S6695C63v15Ev
  virtual void  v16(); // _ZN7S6695C63v16Ev
  ~S6695C6(); // tgen
  S6695C6(); // tgen
};
//SIG(-1 S6695C6) C1{ VBC2{ v5 v6 v7 v8 v9 v10 v11 v12 v13} v1 v2 v3 v4 FL}


void  S6695C6 ::v13(){vfunc_called(this, "_ZN7S6695C63v13Ev");}
void  S6695C6 ::v14(){vfunc_called(this, "_ZN7S6695C63v14Ev");}
void  S6695C6 ::v15(){vfunc_called(this, "_ZN7S6695C63v15Ev");}
void  S6695C6 ::v16(){vfunc_called(this, "_ZN7S6695C63v16Ev");}
S6695C6 ::~S6695C6(){ note_dtor("S6695C6", this);} // tgen
S6695C6 ::S6695C6(){ note_ctor("S6695C6", this);} // tgen

static void Test_S6695C6()
{
  extern Class_Descriptor cd_S6695C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S6695C6, buf);
    S6695C6 *dp, &lv = *(dp=new (buf) S6695C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S6695C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6695C6)");
    check_base_class_offset(lv, (S6695C2*), 0, "S6695C6");
    check_field_offset(lv, s6695c6f0, ABISELECT(8,4), "S6695C6.s6695c6f0");
    test_class_info(&lv, &cd_S6695C6);
    dp->~S6695C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6695C6(Test_S6695C6, "S6695C6", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S6695C6C1Ev();
extern void _ZN7S6695C6D1Ev();
Name_Map name_map_S6695C6[] = {
  NSPAIR(_ZN7S6695C6C1Ev),
  NSPAIR(_ZN7S6695C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6695C2;
extern VTBL_ENTRY _ZTI7S6695C2[];
extern  VTBL_ENTRY _ZTV7S6695C2[];
static Base_Class bases_S6695C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6695C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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 _ZTI7S6695C6[];
extern void _ZN7S6695C22v3Ev();
extern void _ZN7S6695C22v4Ev();
extern void _ZN7S6695C22v5Ev();
extern void _ZN7S6695C22v6Ev();
extern void _ZN7S6695C22v7Ev();
extern void _ZN7S6695C22v8Ev();
extern void _ZN7S6695C22v9Ev();
extern void _ZN7S6695C23v10Ev();
extern void _ZN7S6695C23v11Ev();
extern void _ZN7S6695C63v13Ev();
extern void _ZN7S6695C63v14Ev();
extern void _ZN7S6695C63v15Ev();
extern void _ZN7S6695C63v16Ev();
static  VTBL_ENTRY vtc_S6695C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6695C6[0]),
  (VTBL_ENTRY)&_ZN7S6695C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v14Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v15Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v16Ev,
};
extern VTBL_ENTRY _ZTV7S6695C6[];
static  VTT_ENTRY vtt_S6695C6[] = {
  {&(_ZTV7S6695C6[12]),  12,25},
  {&(_ZTV7S6695C6[12]),  12,25},
};
extern VTBL_ENTRY _ZTI7S6695C6[];
extern  VTBL_ENTRY _ZTV7S6695C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6695C6[];
Class_Descriptor cd_S6695C6 = {  "S6695C6", // class name
  bases_S6695C6, 1,
  &(vtc_S6695C6[0]), // expected_vtbl_contents
  &(vtt_S6695C6[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S6695C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S6695C6),25, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6695C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6695C5  : S6695C2 , S6695C6 {
  virtual void  v17(); // _ZN7S6695C53v17Ev
  virtual void  v18(); // _ZN7S6695C53v18Ev
  ~S6695C5(); // tgen
  S6695C5(); // tgen
};
//SIG(-1 S6695C5) C1{ BC2{ v3 v4 v5 v6 v7 v8 v9 v10 v11} BC3{ VBC2 v12 v13 v14 v15 FL} v1 v2}


void  S6695C5 ::v17(){vfunc_called(this, "_ZN7S6695C53v17Ev");}
void  S6695C5 ::v18(){vfunc_called(this, "_ZN7S6695C53v18Ev");}
S6695C5 ::~S6695C5(){ note_dtor("S6695C5", this);} // tgen
S6695C5 ::S6695C5(){ note_ctor("S6695C5", this);} // tgen

static void Test_S6695C5()
{
  extern Class_Descriptor cd_S6695C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S6695C5, buf);
    S6695C5 *dp, &lv = *(dp=new (buf) S6695C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S6695C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6695C5)");
    /*is_ambiguous_... S6695C5::S6695C2 */ AMB_check_base_class_offset(lv, (S6695C2*), 0, "S6695C5");
    check_base_class_offset(lv, (S6695C2*)(S6695C6*), ABISELECT(8,4), "S6695C5");
    check_base_class_offset(lv, (S6695C6*), ABISELECT(8,4), "S6695C5");
    test_class_info(&lv, &cd_S6695C5);
    dp->~S6695C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6695C5(Test_S6695C5, "S6695C5", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S6695C5C1Ev();
extern void _ZN7S6695C5D1Ev();
Name_Map name_map_S6695C5[] = {
  NSPAIR(_ZN7S6695C5C1Ev),
  NSPAIR(_ZN7S6695C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6695C2;
extern VTBL_ENTRY _ZTI7S6695C2[];
extern  VTBL_ENTRY _ZTV7S6695C2[];
extern Class_Descriptor cd_S6695C2;
extern VTBL_ENTRY _ZTI7S6695C2[];
extern  VTBL_ENTRY _ZTV7S6695C2[];
extern Class_Descriptor cd_S6695C6;
extern VTBL_ENTRY _ZTI7S6695C6[];
extern  VTBL_ENTRY _ZTV7S6695C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6695C6[];
static Base_Class bases_S6695C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6695C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6695C2,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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
    2, //immediately_derived
  0, 1},
  {&cd_S6695C6,    ABISELECT(8,4), //bcp->offset
    14, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    4, //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 _ZTI7S6695C5[];
extern void _ZN7S6695C22v3Ev();
extern void _ZN7S6695C22v4Ev();
extern void _ZN7S6695C22v5Ev();
extern void _ZN7S6695C22v6Ev();
extern void _ZN7S6695C22v7Ev();
extern void _ZN7S6695C22v8Ev();
extern void _ZN7S6695C22v9Ev();
extern void _ZN7S6695C23v10Ev();
extern void _ZN7S6695C23v11Ev();
extern void _ZN7S6695C53v17Ev();
extern void _ZN7S6695C53v18Ev();
extern void _ZN7S6695C22v3Ev();
extern void _ZN7S6695C22v4Ev();
extern void _ZN7S6695C22v5Ev();
extern void _ZN7S6695C22v6Ev();
extern void _ZN7S6695C22v7Ev();
extern void _ZN7S6695C22v8Ev();
extern void _ZN7S6695C22v9Ev();
extern void _ZN7S6695C23v10Ev();
extern void _ZN7S6695C23v11Ev();
extern void _ZN7S6695C63v13Ev();
extern void _ZN7S6695C63v14Ev();
extern void _ZN7S6695C63v15Ev();
extern void _ZN7S6695C63v16Ev();
static  VTBL_ENTRY vtc_S6695C5[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6695C5[0]),
  (VTBL_ENTRY)&_ZN7S6695C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6695C53v17Ev,
  (VTBL_ENTRY)&_ZN7S6695C53v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6695C5[0]),
  (VTBL_ENTRY)&_ZN7S6695C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v14Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v15Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v16Ev,
};
extern VTBL_ENTRY _ZTV7S6695C5[];
extern void _ZN7S6695C22v3Ev();
extern void _ZN7S6695C22v4Ev();
extern void _ZN7S6695C22v5Ev();
extern void _ZN7S6695C22v6Ev();
extern void _ZN7S6695C22v7Ev();
extern void _ZN7S6695C22v8Ev();
extern void _ZN7S6695C22v9Ev();
extern void _ZN7S6695C23v10Ev();
extern void _ZN7S6695C23v11Ev();
extern void _ZN7S6695C63v13Ev();
extern void _ZN7S6695C63v14Ev();
extern void _ZN7S6695C63v15Ev();
extern void _ZN7S6695C63v16Ev();
static  VTBL_ENTRY _tg__ZTV7S6695C6__7S6695C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6695C6[0]),
  (VTBL_ENTRY)&_ZN7S6695C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v14Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v15Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v16Ev,
};
static  VTT_ENTRY vtt_S6695C5[] = {
  {&(_ZTV7S6695C5[3]),  3,39},
  {&(_tg__ZTV7S6695C6__7S6695C5[12]),  12,25},
  {&(_tg__ZTV7S6695C6__7S6695C5[12]),  12,25},
  {&(_ZTV7S6695C5[26]),  26,39},
  {&(_ZTV7S6695C5[26]),  26,39},
};
extern VTBL_ENTRY _ZTI7S6695C5[];
extern  VTBL_ENTRY _ZTV7S6695C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6695C5[];
Class_Descriptor cd_S6695C5 = {  "S6695C5", // class name
  bases_S6695C5, 3,
  &(vtc_S6695C5[0]), // expected_vtbl_contents
  &(vtt_S6695C5[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S6695C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6695C5),39, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6695C5),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6695C3  : S6695C4 , S6695C5 {
  virtual  ~S6695C3(); // _ZN7S6695C3D2Ev
  virtual void  v19(); // _ZN7S6695C33v19Ev
  virtual void  v20(); // _ZN7S6695C33v20Ev
  S6695C3(); // tgen
};
//SIG(-1 S6695C3) C1{ BC2{ v3} BC3{ BC4{ v4 v5 v6 v7 v8 v9 v10 v11 v12} BC5{ VBC4 v13 v14 v15 v16 FL} v17 v18} vd v1 v2}


 S6695C3 ::~S6695C3(){ note_dtor("S6695C3", this);}
void  S6695C3 ::v19(){vfunc_called(this, "_ZN7S6695C33v19Ev");}
void  S6695C3 ::v20(){vfunc_called(this, "_ZN7S6695C33v20Ev");}
S6695C3 ::S6695C3(){ note_ctor("S6695C3", this);} // tgen

static void Test_S6695C3()
{
  extern Class_Descriptor cd_S6695C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S6695C3, buf);
    S6695C3 *dp, &lv = *(dp=new (buf) S6695C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S6695C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6695C3)");
    check_base_class_offset(lv, (S6695C4*), 0, "S6695C3");
    /*is_ambiguous_... S6695C5::S6695C2 */ AMB_check_base_class_offset(lv, (S6695C2*)(S6695C5*), ABISELECT(8,4), "S6695C3");
    check_base_class_offset(lv, (S6695C2*)(S6695C6*)(S6695C5*), ABISELECT(16,8), "S6695C3");
    check_base_class_offset(lv, (S6695C6*)(S6695C5*), ABISELECT(16,8), "S6695C3");
    check_base_class_offset(lv, (S6695C5*), ABISELECT(8,4), "S6695C3");
    test_class_info(&lv, &cd_S6695C3);
    dp->~S6695C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6695C3(Test_S6695C3, "S6695C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S6695C3C1Ev();
extern void _ZN7S6695C3D2Ev();
Name_Map name_map_S6695C3[] = {
  NSPAIR(_ZN7S6695C3C1Ev),
  NSPAIR(_ZN7S6695C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6695C4;
extern VTBL_ENTRY _ZTI7S6695C4[];
extern  VTBL_ENTRY _ZTV7S6695C4[];
extern Class_Descriptor cd_S6695C2;
extern VTBL_ENTRY _ZTI7S6695C2[];
extern  VTBL_ENTRY _ZTV7S6695C2[];
extern Class_Descriptor cd_S6695C2;
extern VTBL_ENTRY _ZTI7S6695C2[];
extern  VTBL_ENTRY _ZTV7S6695C2[];
extern Class_Descriptor cd_S6695C6;
extern VTBL_ENTRY _ZTI7S6695C6[];
extern  VTBL_ENTRY _ZTV7S6695C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6695C6[];
extern Class_Descriptor cd_S6695C5;
extern VTBL_ENTRY _ZTI7S6695C5[];
extern  VTBL_ENTRY _ZTV7S6695C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6695C5[];
static Base_Class bases_S6695C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6695C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6695C2,    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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6695C2,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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_S6695C6,    ABISELECT(16,8), //bcp->offset
    22, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6695C5,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //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 _ZTI7S6695C3[];
extern void _ZN7S6695C43v12Ev();
extern void _ZN7S6695C3D1Ev();
extern void _ZN7S6695C3D0Ev();
extern void _ZN7S6695C33v19Ev();
extern void _ZN7S6695C33v20Ev();
extern void _ZN7S6695C22v3Ev();
extern void _ZN7S6695C22v4Ev();
extern void _ZN7S6695C22v5Ev();
extern void _ZN7S6695C22v6Ev();
extern void _ZN7S6695C22v7Ev();
extern void _ZN7S6695C22v8Ev();
extern void _ZN7S6695C22v9Ev();
extern void _ZN7S6695C23v10Ev();
extern void _ZN7S6695C23v11Ev();
extern void _ZN7S6695C53v17Ev();
extern void _ZN7S6695C53v18Ev();
extern void _ZN7S6695C22v3Ev();
extern void _ZN7S6695C22v4Ev();
extern void _ZN7S6695C22v5Ev();
extern void _ZN7S6695C22v6Ev();
extern void _ZN7S6695C22v7Ev();
extern void _ZN7S6695C22v8Ev();
extern void _ZN7S6695C22v9Ev();
extern void _ZN7S6695C23v10Ev();
extern void _ZN7S6695C23v11Ev();
extern void _ZN7S6695C63v13Ev();
extern void _ZN7S6695C63v14Ev();
extern void _ZN7S6695C63v15Ev();
extern void _ZN7S6695C63v16Ev();
static  VTBL_ENTRY vtc_S6695C3[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6695C3[0]),
  (VTBL_ENTRY)&_ZN7S6695C43v12Ev,
  (VTBL_ENTRY)&_ZN7S6695C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6695C3D0Ev,
  (VTBL_ENTRY)&_ZN7S6695C33v19Ev,
  (VTBL_ENTRY)&_ZN7S6695C33v20Ev,
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6695C3[0]),
  (VTBL_ENTRY)&_ZN7S6695C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6695C53v17Ev,
  (VTBL_ENTRY)&_ZN7S6695C53v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6695C3[0]),
  (VTBL_ENTRY)&_ZN7S6695C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v14Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v15Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v16Ev,
};
extern VTBL_ENTRY _ZTV7S6695C3[];
extern void _ZN7S6695C22v3Ev();
extern void _ZN7S6695C22v4Ev();
extern void _ZN7S6695C22v5Ev();
extern void _ZN7S6695C22v6Ev();
extern void _ZN7S6695C22v7Ev();
extern void _ZN7S6695C22v8Ev();
extern void _ZN7S6695C22v9Ev();
extern void _ZN7S6695C23v10Ev();
extern void _ZN7S6695C23v11Ev();
extern void _ZN7S6695C53v17Ev();
extern void _ZN7S6695C53v18Ev();
static  VTBL_ENTRY _tg__ZTV7S6695C5__7S6695C3[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6695C5[0]),
  (VTBL_ENTRY)&_ZN7S6695C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6695C53v17Ev,
  (VTBL_ENTRY)&_ZN7S6695C53v18Ev,
};
extern void _ZN7S6695C22v3Ev();
extern void _ZN7S6695C22v4Ev();
extern void _ZN7S6695C22v5Ev();
extern void _ZN7S6695C22v6Ev();
extern void _ZN7S6695C22v7Ev();
extern void _ZN7S6695C22v8Ev();
extern void _ZN7S6695C22v9Ev();
extern void _ZN7S6695C23v10Ev();
extern void _ZN7S6695C23v11Ev();
extern void _ZN7S6695C63v13Ev();
extern void _ZN7S6695C63v14Ev();
extern void _ZN7S6695C63v15Ev();
extern void _ZN7S6695C63v16Ev();
static  VTBL_ENTRY _tg__ZTV7S6695C67S6695C5__7S6695C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6695C6[0]),
  (VTBL_ENTRY)&_ZN7S6695C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v14Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v15Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v16Ev,
};
extern void _ZN7S6695C22v3Ev();
extern void _ZN7S6695C22v4Ev();
extern void _ZN7S6695C22v5Ev();
extern void _ZN7S6695C22v6Ev();
extern void _ZN7S6695C22v7Ev();
extern void _ZN7S6695C22v8Ev();
extern void _ZN7S6695C22v9Ev();
extern void _ZN7S6695C23v10Ev();
extern void _ZN7S6695C23v11Ev();
extern void _ZN7S6695C63v13Ev();
extern void _ZN7S6695C63v14Ev();
extern void _ZN7S6695C63v15Ev();
extern void _ZN7S6695C63v16Ev();
static  VTBL_ENTRY _tg__ZTV7S6695C6__7S6695C5__7S6695C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6695C5[0]),
  (VTBL_ENTRY)&_ZN7S6695C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v14Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v15Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v16Ev,
};
static  VTT_ENTRY vtt_S6695C3[] = {
  {&(_ZTV7S6695C3[3]),  3,47},
  {&(_tg__ZTV7S6695C5__7S6695C3[3]),  3,14},
  {&(_tg__ZTV7S6695C67S6695C5__7S6695C3[12]),  12,25},
  {&(_tg__ZTV7S6695C67S6695C5__7S6695C3[12]),  12,25},
  {&(_tg__ZTV7S6695C6__7S6695C5__7S6695C3[12]),  12,25},
  {&(_tg__ZTV7S6695C6__7S6695C5__7S6695C3[12]),  12,25},
  {&(_ZTV7S6695C3[11]),  11,47},
  {&(_ZTV7S6695C3[34]),  34,47},
  {&(_ZTV7S6695C3[34]),  34,47},
};
extern VTBL_ENTRY _ZTI7S6695C3[];
extern  VTBL_ENTRY _ZTV7S6695C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6695C3[];
Class_Descriptor cd_S6695C3 = {  "S6695C3", // class name
  bases_S6695C3, 5,
  &(vtc_S6695C3[0]), // expected_vtbl_contents
  &(vtt_S6695C3[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S6695C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6695C3),47, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6695C3),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6695C1  : S6695C2 , virtual S6695C3 {
  int s6695c1f0;
  virtual  ~S6695C1(); // _ZN7S6695C1D2Ev
  virtual void  v1(); // _ZN7S6695C12v1Ev
  virtual void  v2(); // _ZN7S6695C12v2Ev
  S6695C1(); // tgen
};
//SIG(1 S6695C1) C1{ BC2{ v3 v4 v5 v6 v7 v8 v9 v10 v11} VBC3{ BC4{ v12} BC5{ BC2 BC6{ VBC2 v13 v14 v15 v16 FL} v17 v18} vd v19 v20} vd v1 v2 Fi}


 S6695C1 ::~S6695C1(){ note_dtor("S6695C1", this);}
void  S6695C1 ::v1(){vfunc_called(this, "_ZN7S6695C12v1Ev");}
void  S6695C1 ::v2(){vfunc_called(this, "_ZN7S6695C12v2Ev");}
S6695C1 ::S6695C1(){ note_ctor("S6695C1", this);} // tgen

static void Test_S6695C1()
{
  extern Class_Descriptor cd_S6695C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S6695C1, buf);
    S6695C1 *dp, &lv = *(dp=new (buf) S6695C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S6695C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6695C1)");
    /*is_ambiguous_... S6695C1::S6695C2 */ AMB_check_base_class_offset(lv, (S6695C2*), 0, "S6695C1");
    check_base_class_offset(lv, (S6695C4*)(S6695C3*), ABISELECT(16,8), "S6695C1");
    /*is_ambiguous_... S6695C5::S6695C2 */ AMB_check_base_class_offset(lv, (S6695C2*)(S6695C5*)(S6695C3*), ABISELECT(24,12), "S6695C1");
    check_base_class_offset(lv, (S6695C2*)(S6695C6*)(S6695C5*)(S6695C3*), ABISELECT(32,16), "S6695C1");
    check_base_class_offset(lv, (S6695C6*)(S6695C5*)(S6695C3*), ABISELECT(32,16), "S6695C1");
    check_base_class_offset(lv, (S6695C5*)(S6695C3*), ABISELECT(24,12), "S6695C1");
    check_base_class_offset(lv, (S6695C3*), ABISELECT(16,8), "S6695C1");
    check_field_offset(lv, s6695c1f0, ABISELECT(8,4), "S6695C1.s6695c1f0");
    test_class_info(&lv, &cd_S6695C1);
    dp->~S6695C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6695C1(Test_S6695C1, "S6695C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S6695C1C1Ev();
extern void _ZN7S6695C1D2Ev();
Name_Map name_map_S6695C1[] = {
  NSPAIR(_ZN7S6695C1C1Ev),
  NSPAIR(_ZN7S6695C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6695C2;
extern VTBL_ENTRY _ZTI7S6695C2[];
extern  VTBL_ENTRY _ZTV7S6695C2[];
extern Class_Descriptor cd_S6695C4;
extern VTBL_ENTRY _ZTI7S6695C4[];
extern  VTBL_ENTRY _ZTV7S6695C4[];
extern Class_Descriptor cd_S6695C2;
extern VTBL_ENTRY _ZTI7S6695C2[];
extern  VTBL_ENTRY _ZTV7S6695C2[];
extern Class_Descriptor cd_S6695C2;
extern VTBL_ENTRY _ZTI7S6695C2[];
extern  VTBL_ENTRY _ZTV7S6695C2[];
extern Class_Descriptor cd_S6695C6;
extern VTBL_ENTRY _ZTI7S6695C6[];
extern  VTBL_ENTRY _ZTV7S6695C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6695C6[];
extern Class_Descriptor cd_S6695C5;
extern VTBL_ENTRY _ZTI7S6695C5[];
extern  VTBL_ENTRY _ZTV7S6695C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6695C5[];
extern Class_Descriptor cd_S6695C3;
extern VTBL_ENTRY _ZTI7S6695C3[];
extern  VTBL_ENTRY _ZTV7S6695C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6695C3[];
static Base_Class bases_S6695C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6695C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S6695C4,    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
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6695C2,    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
    5, //immediately_derived
  0, 0},
  {&cd_S6695C2,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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
    4, //immediately_derived
  0, 1},
  {&cd_S6695C6,    ABISELECT(32,16), //bcp->offset
    58, //bcp->virtual_function_table_offset
    12, //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
    5, //immediately_derived
  0, 0},
  {&cd_S6695C5,    ABISELECT(24,12), //bcp->offset
    44, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6695C3,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_offset
    22, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6695C1[];
extern void _ZN7S6695C22v3Ev();
extern void _ZN7S6695C22v4Ev();
extern void _ZN7S6695C22v5Ev();
extern void _ZN7S6695C22v6Ev();
extern void _ZN7S6695C22v7Ev();
extern void _ZN7S6695C22v8Ev();
extern void _ZN7S6695C22v9Ev();
extern void _ZN7S6695C23v10Ev();
extern void _ZN7S6695C23v11Ev();
extern void _ZN7S6695C1D1Ev();
extern void _ZN7S6695C1D0Ev();
extern void _ZN7S6695C12v1Ev();
extern void _ZN7S6695C12v2Ev();
extern void _ZN7S6695C43v12Ev();
extern void ABISELECT(_ZTv0_n40_N7S6695C1D1Ev,_ZTv0_n20_N7S6695C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S6695C1D1Ev,_ZThn8_N7S6695C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6695C1D0Ev,_ZTv0_n20_N7S6695C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S6695C1D0Ev,_ZThn8_N7S6695C1D0Ev)() __attribute__((weak));
extern void _ZN7S6695C33v19Ev();
extern void _ZN7S6695C33v20Ev();
extern void _ZN7S6695C22v3Ev();
extern void _ZN7S6695C22v4Ev();
extern void _ZN7S6695C22v5Ev();
extern void _ZN7S6695C22v6Ev();
extern void _ZN7S6695C22v7Ev();
extern void _ZN7S6695C22v8Ev();
extern void _ZN7S6695C22v9Ev();
extern void _ZN7S6695C23v10Ev();
extern void _ZN7S6695C23v11Ev();
extern void _ZN7S6695C53v17Ev();
extern void _ZN7S6695C53v18Ev();
extern void _ZN7S6695C22v3Ev();
extern void _ZN7S6695C22v4Ev();
extern void _ZN7S6695C22v5Ev();
extern void _ZN7S6695C22v6Ev();
extern void _ZN7S6695C22v7Ev();
extern void _ZN7S6695C22v8Ev();
extern void _ZN7S6695C22v9Ev();
extern void _ZN7S6695C23v10Ev();
extern void _ZN7S6695C23v11Ev();
extern void _ZN7S6695C63v13Ev();
extern void _ZN7S6695C63v14Ev();
extern void _ZN7S6695C63v15Ev();
extern void _ZN7S6695C63v16Ev();
static  VTBL_ENTRY vtc_S6695C1[] = {
  ABISELECT(32,16),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6695C1[0]),
  (VTBL_ENTRY)&_ZN7S6695C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6695C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6695C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6695C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6695C12v2Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  ABISELECT(-16,-8),
  0,
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6695C1[0]),
  (VTBL_ENTRY)&_ZN7S6695C43v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6695C1D1Ev,_ZTv0_n20_N7S6695C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6695C1D0Ev,_ZTv0_n20_N7S6695C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6695C33v19Ev,
  (VTBL_ENTRY)&_ZN7S6695C33v20Ev,
  ABISELECT(8,4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6695C1[0]),
  (VTBL_ENTRY)&_ZN7S6695C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6695C53v17Ev,
  (VTBL_ENTRY)&_ZN7S6695C53v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6695C1[0]),
  (VTBL_ENTRY)&_ZN7S6695C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v14Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v15Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v16Ev,
};
extern VTBL_ENTRY _ZTV7S6695C1[];
extern void _ZN7S6695C43v12Ev();
extern void _ZN7S6695C3D1Ev();
extern void _ZN7S6695C3D0Ev();
extern void _ZN7S6695C33v19Ev();
extern void _ZN7S6695C33v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6695C3__7S6695C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6695C3[0]),
  (VTBL_ENTRY)&_ZN7S6695C43v12Ev,
  (VTBL_ENTRY)&_ZN7S6695C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6695C3D0Ev,
  (VTBL_ENTRY)&_ZN7S6695C33v19Ev,
  (VTBL_ENTRY)&_ZN7S6695C33v20Ev,
};
extern void _ZN7S6695C22v3Ev();
extern void _ZN7S6695C22v4Ev();
extern void _ZN7S6695C22v5Ev();
extern void _ZN7S6695C22v6Ev();
extern void _ZN7S6695C22v7Ev();
extern void _ZN7S6695C22v8Ev();
extern void _ZN7S6695C22v9Ev();
extern void _ZN7S6695C23v10Ev();
extern void _ZN7S6695C23v11Ev();
extern void _ZN7S6695C53v17Ev();
extern void _ZN7S6695C53v18Ev();
static  VTBL_ENTRY _tg__ZTV7S6695C57S6695C3__7S6695C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6695C5[0]),
  (VTBL_ENTRY)&_ZN7S6695C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6695C53v17Ev,
  (VTBL_ENTRY)&_ZN7S6695C53v18Ev,
};
extern void _ZN7S6695C22v3Ev();
extern void _ZN7S6695C22v4Ev();
extern void _ZN7S6695C22v5Ev();
extern void _ZN7S6695C22v6Ev();
extern void _ZN7S6695C22v7Ev();
extern void _ZN7S6695C22v8Ev();
extern void _ZN7S6695C22v9Ev();
extern void _ZN7S6695C23v10Ev();
extern void _ZN7S6695C23v11Ev();
extern void _ZN7S6695C63v13Ev();
extern void _ZN7S6695C63v14Ev();
extern void _ZN7S6695C63v15Ev();
extern void _ZN7S6695C63v16Ev();
static  VTBL_ENTRY _tg__ZTV7S6695C67S6695C57S6695C3__7S6695C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6695C6[0]),
  (VTBL_ENTRY)&_ZN7S6695C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v14Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v15Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v16Ev,
};
extern void _ZN7S6695C22v3Ev();
extern void _ZN7S6695C22v4Ev();
extern void _ZN7S6695C22v5Ev();
extern void _ZN7S6695C22v6Ev();
extern void _ZN7S6695C22v7Ev();
extern void _ZN7S6695C22v8Ev();
extern void _ZN7S6695C22v9Ev();
extern void _ZN7S6695C23v10Ev();
extern void _ZN7S6695C23v11Ev();
extern void _ZN7S6695C63v13Ev();
extern void _ZN7S6695C63v14Ev();
extern void _ZN7S6695C63v15Ev();
extern void _ZN7S6695C63v16Ev();
static  VTBL_ENTRY _tg__ZTV7S6695C6__7S6695C57S6695C3__7S6695C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6695C5[0]),
  (VTBL_ENTRY)&_ZN7S6695C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v14Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v15Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v16Ev,
};
extern void _ZN7S6695C22v3Ev();
extern void _ZN7S6695C22v4Ev();
extern void _ZN7S6695C22v5Ev();
extern void _ZN7S6695C22v6Ev();
extern void _ZN7S6695C22v7Ev();
extern void _ZN7S6695C22v8Ev();
extern void _ZN7S6695C22v9Ev();
extern void _ZN7S6695C23v10Ev();
extern void _ZN7S6695C23v11Ev();
extern void _ZN7S6695C53v17Ev();
extern void _ZN7S6695C53v18Ev();
static  VTBL_ENTRY _tg__ZTV7S6695C5__7S6695C3__7S6695C1[] = {
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6695C3[0]),
  (VTBL_ENTRY)&_ZN7S6695C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6695C53v17Ev,
  (VTBL_ENTRY)&_ZN7S6695C53v18Ev,
};
extern void _ZN7S6695C22v3Ev();
extern void _ZN7S6695C22v4Ev();
extern void _ZN7S6695C22v5Ev();
extern void _ZN7S6695C22v6Ev();
extern void _ZN7S6695C22v7Ev();
extern void _ZN7S6695C22v8Ev();
extern void _ZN7S6695C22v9Ev();
extern void _ZN7S6695C23v10Ev();
extern void _ZN7S6695C23v11Ev();
extern void _ZN7S6695C63v13Ev();
extern void _ZN7S6695C63v14Ev();
extern void _ZN7S6695C63v15Ev();
extern void _ZN7S6695C63v16Ev();
static  VTBL_ENTRY _tg__ZTV7S6695C67S6695C5__7S6695C3__7S6695C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6695C3[0]),
  (VTBL_ENTRY)&_ZN7S6695C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6695C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6695C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v13Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v14Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v15Ev,
  (VTBL_ENTRY)&_ZN7S6695C63v16Ev,
};
static  VTT_ENTRY vtt_S6695C1[] = {
  {&(_ZTV7S6695C1[4]),  4,83},
  {&(_ZTV7S6695C1[39]),  39,83},
  {&(_ZTV7S6695C1[47]),  47,83},
  {&(_ZTV7S6695C1[70]),  70,83},
  {&(_ZTV7S6695C1[70]),  70,83},
  {&(_tg__ZTV7S6695C3__7S6695C1[3]),  3,8},
  {&(_tg__ZTV7S6695C57S6695C3__7S6695C1[3]),  3,14},
  {&(_tg__ZTV7S6695C67S6695C57S6695C3__7S6695C1[12]),  12,25},
  {&(_tg__ZTV7S6695C67S6695C57S6695C3__7S6695C1[12]),  12,25},
  {&(_tg__ZTV7S6695C6__7S6695C57S6695C3__7S6695C1[12]),  12,25},
  {&(_tg__ZTV7S6695C6__7S6695C57S6695C3__7S6695C1[12]),  12,25},
  {&(_tg__ZTV7S6695C5__7S6695C3__7S6695C1[3]),  3,14},
  {&(_tg__ZTV7S6695C67S6695C5__7S6695C3__7S6695C1[12]),  12,25},
  {&(_tg__ZTV7S6695C67S6695C5__7S6695C3__7S6695C1[12]),  12,25},
};
extern VTBL_ENTRY _ZTI7S6695C1[];
extern  VTBL_ENTRY _ZTV7S6695C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6695C1[];
static VTBL_ENTRY alt_thunk_names120[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6695C1D0Ev,_ZTv0_n20_N7S6695C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S6695C1D0Ev,_ZThn8_N7S6695C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6695C1D1Ev,_ZTv0_n20_N7S6695C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S6695C1D1Ev,_ZThn8_N7S6695C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6695C1 = {  "S6695C1", // class name
  bases_S6695C1, 7,
  &(vtc_S6695C1[0]), // expected_vtbl_contents
  &(vtt_S6695C1[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S6695C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6695C1),83, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6695C1),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names120,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3759C2  : S1679C4_nt {
  virtual void  v8(); // _ZN7S3759C22v8Ev
  virtual void  v9(); // _ZN7S3759C22v9Ev
  virtual void  v10(); // _ZN7S3759C23v10Ev
  virtual void  v11(); // _ZN7S3759C23v11Ev
  virtual void  v12(); // _ZN7S3759C23v12Ev
  virtual void  v13(); // _ZN7S3759C23v13Ev
  virtual void  v14(); // _ZN7S3759C23v14Ev
  virtual void  v15(); // _ZN7S3759C23v15Ev
  virtual void  v16(); // _ZN7S3759C23v16Ev
  virtual void  v17(); // _ZN7S3759C23v17Ev
  virtual void  v18(); // _ZN7S3759C23v18Ev
  virtual void  v19(); // _ZN7S3759C23v19Ev
  ~S3759C2(); // tgen
  S3759C2(); // tgen
};
//SIG(-1 S3759C2) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S3759C2 ::v8(){vfunc_called(this, "_ZN7S3759C22v8Ev");}
void  S3759C2 ::v9(){vfunc_called(this, "_ZN7S3759C22v9Ev");}
void  S3759C2 ::v10(){vfunc_called(this, "_ZN7S3759C23v10Ev");}
void  S3759C2 ::v11(){vfunc_called(this, "_ZN7S3759C23v11Ev");}
void  S3759C2 ::v12(){vfunc_called(this, "_ZN7S3759C23v12Ev");}
void  S3759C2 ::v13(){vfunc_called(this, "_ZN7S3759C23v13Ev");}
void  S3759C2 ::v14(){vfunc_called(this, "_ZN7S3759C23v14Ev");}
void  S3759C2 ::v15(){vfunc_called(this, "_ZN7S3759C23v15Ev");}
void  S3759C2 ::v16(){vfunc_called(this, "_ZN7S3759C23v16Ev");}
void  S3759C2 ::v17(){vfunc_called(this, "_ZN7S3759C23v17Ev");}
void  S3759C2 ::v18(){vfunc_called(this, "_ZN7S3759C23v18Ev");}
void  S3759C2 ::v19(){vfunc_called(this, "_ZN7S3759C23v19Ev");}
S3759C2 ::~S3759C2(){ note_dtor("S3759C2", this);} // tgen
S3759C2 ::S3759C2(){ note_ctor("S3759C2", this);} // tgen

static void Test_S3759C2()
{
  extern Class_Descriptor cd_S3759C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3759C2, buf);
    S3759C2 *dp, &lv = *(dp=new (buf) S3759C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3759C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3759C2)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S3759C2");
    test_class_info(&lv, &cd_S3759C2);
    dp->~S3759C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3759C2(Test_S3759C2, "S3759C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3759C2C1Ev();
extern void _ZN7S3759C2D1Ev();
Name_Map name_map_S3759C2[] = {
  NSPAIR(_ZN7S3759C2C1Ev),
  NSPAIR(_ZN7S3759C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S3759C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S3759C2[];
extern void _ZN7S3759C2D1Ev();
extern void _ZN7S3759C2D0Ev();
extern void _ZN7S3759C22v8Ev();
extern void _ZN7S3759C22v9Ev();
extern void _ZN7S3759C23v10Ev();
extern void _ZN7S3759C23v11Ev();
extern void _ZN7S3759C23v12Ev();
extern void _ZN7S3759C23v13Ev();
extern void _ZN7S3759C23v14Ev();
extern void _ZN7S3759C23v15Ev();
extern void _ZN7S3759C23v16Ev();
extern void _ZN7S3759C23v17Ev();
extern void _ZN7S3759C23v18Ev();
extern void _ZN7S3759C23v19Ev();
static  VTBL_ENTRY vtc_S3759C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3759C2[0]),
  (VTBL_ENTRY)&_ZN7S3759C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3759C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3759C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3759C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3759C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3759C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3759C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3759C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3759C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3759C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3759C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3759C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3759C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3759C23v19Ev,
};
extern VTBL_ENTRY _ZTI7S3759C2[];
extern  VTBL_ENTRY _ZTV7S3759C2[];
Class_Descriptor cd_S3759C2 = {  "S3759C2", // class name
  bases_S3759C2, 1,
  &(vtc_S3759C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3759C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3759C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3759C1  : S3759C2 {
  ::S3765C5_nt s3759c1f0;
  void *s3759c1f1;
  int s3759c1f2[2];
  char s3759c1f3;
  virtual  ~S3759C1(); // _ZN7S3759C1D1Ev
  virtual void  v1(); // _ZN7S3759C12v1Ev
  virtual void  v2(); // _ZN7S3759C12v2Ev
  virtual void  v3(); // _ZN7S3759C12v3Ev
  virtual void  v4(); // _ZN7S3759C12v4Ev
  virtual void  v5(); // _ZN7S3759C12v5Ev
  virtual void  v6(); // _ZN7S3759C12v6Ev
  virtual void  v7(); // _ZN7S3759C12v7Ev
  S3759C1(); // tgen
};
//SIG(1 S3759C1) C1{ BC2{ BC3{ vd m Fi} v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19} vd v1 v2 v3 v4 v5 v6 v7 FC4{ m Fp[2]} Fp Fi[2] Fc}


 S3759C1 ::~S3759C1(){ note_dtor("S3759C1", this);}
void  S3759C1 ::v1(){vfunc_called(this, "_ZN7S3759C12v1Ev");}
void  S3759C1 ::v2(){vfunc_called(this, "_ZN7S3759C12v2Ev");}
void  S3759C1 ::v3(){vfunc_called(this, "_ZN7S3759C12v3Ev");}
void  S3759C1 ::v4(){vfunc_called(this, "_ZN7S3759C12v4Ev");}
void  S3759C1 ::v5(){vfunc_called(this, "_ZN7S3759C12v5Ev");}
void  S3759C1 ::v6(){vfunc_called(this, "_ZN7S3759C12v6Ev");}
void  S3759C1 ::v7(){vfunc_called(this, "_ZN7S3759C12v7Ev");}
S3759C1 ::S3759C1(){ note_ctor("S3759C1", this);} // tgen

static void Test_S3759C1()
{
  extern Class_Descriptor cd_S3759C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S3759C1, buf);
    S3759C1 *dp, &lv = *(dp=new (buf) S3759C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S3759C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3759C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S3759C2*), 0, "S3759C1");
    check_base_class_offset(lv, (S3759C2*), 0, "S3759C1");
    check_field_offset(lv, s3759c1f0, ABISELECT(16,8), "S3759C1.s3759c1f0");
    check_field_offset(lv, s3759c1f1, ABISELECT(32,16), "S3759C1.s3759c1f1");
    check_field_offset(lv, s3759c1f2, ABISELECT(40,20), "S3759C1.s3759c1f2");
    check_field_offset(lv, s3759c1f3, ABISELECT(48,28), "S3759C1.s3759c1f3");
    test_class_info(&lv, &cd_S3759C1);
    dp->~S3759C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3759C1(Test_S3759C1, "S3759C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S3759C1C1Ev();
extern void _ZN7S3759C1D1Ev();
Name_Map name_map_S3759C1[] = {
  NSPAIR(_ZN7S3759C1C1Ev),
  NSPAIR(_ZN7S3759C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S3759C2;
extern VTBL_ENTRY _ZTI7S3759C2[];
extern  VTBL_ENTRY _ZTV7S3759C2[];
static Base_Class bases_S3759C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S3759C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3759C1[];
extern void _ZN7S3759C1D1Ev();
extern void _ZN7S3759C1D0Ev();
extern void _ZN7S3759C22v8Ev();
extern void _ZN7S3759C22v9Ev();
extern void _ZN7S3759C23v10Ev();
extern void _ZN7S3759C23v11Ev();
extern void _ZN7S3759C23v12Ev();
extern void _ZN7S3759C23v13Ev();
extern void _ZN7S3759C23v14Ev();
extern void _ZN7S3759C23v15Ev();
extern void _ZN7S3759C23v16Ev();
extern void _ZN7S3759C23v17Ev();
extern void _ZN7S3759C23v18Ev();
extern void _ZN7S3759C23v19Ev();
extern void _ZN7S3759C12v1Ev();
extern void _ZN7S3759C12v2Ev();
extern void _ZN7S3759C12v3Ev();
extern void _ZN7S3759C12v4Ev();
extern void _ZN7S3759C12v5Ev();
extern void _ZN7S3759C12v6Ev();
extern void _ZN7S3759C12v7Ev();
static  VTBL_ENTRY vtc_S3759C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3759C1[0]),
  (VTBL_ENTRY)&_ZN7S3759C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3759C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3759C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3759C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3759C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3759C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3759C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3759C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3759C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3759C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3759C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3759C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3759C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3759C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3759C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3759C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3759C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3759C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3759C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3759C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3759C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S3759C1[];
extern  VTBL_ENTRY _ZTV7S3759C1[];
Class_Descriptor cd_S3759C1 = {  "S3759C1", // class name
  bases_S3759C1, 2,
  &(vtc_S3759C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S3759C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3759C1),23, //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  S20156C2  {
  int s20156c2f0;
  __tsi64 s20156c2f1;
  virtual  ~S20156C2(); // _ZN8S20156C2D1Ev
  virtual void  v3(); // _ZN8S20156C22v3Ev
  virtual void  v4(); // _ZN8S20156C22v4Ev
  virtual void  v5(); // _ZN8S20156C22v5Ev
  S20156C2(); // tgen
};
//SIG(-1 S20156C2) C1{ vd v1 v2 v3 Fi FL}


 S20156C2 ::~S20156C2(){ note_dtor("S20156C2", this);}
void  S20156C2 ::v3(){vfunc_called(this, "_ZN8S20156C22v3Ev");}
void  S20156C2 ::v4(){vfunc_called(this, "_ZN8S20156C22v4Ev");}
void  S20156C2 ::v5(){vfunc_called(this, "_ZN8S20156C22v5Ev");}
S20156C2 ::S20156C2(){ note_ctor("S20156C2", this);} // tgen

static void Test_S20156C2()
{
  extern Class_Descriptor cd_S20156C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20156C2, buf);
    S20156C2 *dp, &lv = *(dp=new (buf) S20156C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20156C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20156C2)");
    check_field_offset(lv, s20156c2f0, ABISELECT(8,4), "S20156C2.s20156c2f0");
    check_field_offset(lv, s20156c2f1, ABISELECT(16,8), "S20156C2.s20156c2f1");
    test_class_info(&lv, &cd_S20156C2);
    dp->~S20156C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20156C2(Test_S20156C2, "S20156C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S20156C2C1Ev();
extern void _ZN8S20156C2D1Ev();
Name_Map name_map_S20156C2[] = {
  NSPAIR(_ZN8S20156C2C1Ev),
  NSPAIR(_ZN8S20156C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20156C2[];
extern void _ZN8S20156C2D1Ev();
extern void _ZN8S20156C2D0Ev();
extern void _ZN8S20156C22v3Ev();
extern void _ZN8S20156C22v4Ev();
extern void _ZN8S20156C22v5Ev();
static  VTBL_ENTRY vtc_S20156C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20156C2[0]),
  (VTBL_ENTRY)&_ZN8S20156C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20156C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20156C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20156C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20156C22v5Ev,
};
extern VTBL_ENTRY _ZTI8S20156C2[];
extern  VTBL_ENTRY _ZTV8S20156C2[];
Class_Descriptor cd_S20156C2 = {  "S20156C2", // class name
  0,0,//no base classes
  &(vtc_S20156C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S20156C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20156C2),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  S20156C5  : virtual S20156C2 {
  virtual void  v6(); // _ZN8S20156C52v6Ev
  virtual void  v7(); // _ZN8S20156C52v7Ev
  virtual void  v8(); // _ZN8S20156C52v8Ev
  virtual void  v9(); // _ZN8S20156C52v9Ev
  virtual void  v10(); // _ZN8S20156C53v10Ev
  ~S20156C5(); // tgen
  S20156C5(); // tgen
};
//SIG(-1 S20156C5) C1{ VBC2{ vd v6 v7 v8 Fi FL} v1 v2 v3 v4 v5}


void  S20156C5 ::v6(){vfunc_called(this, "_ZN8S20156C52v6Ev");}
void  S20156C5 ::v7(){vfunc_called(this, "_ZN8S20156C52v7Ev");}
void  S20156C5 ::v8(){vfunc_called(this, "_ZN8S20156C52v8Ev");}
void  S20156C5 ::v9(){vfunc_called(this, "_ZN8S20156C52v9Ev");}
void  S20156C5 ::v10(){vfunc_called(this, "_ZN8S20156C53v10Ev");}
S20156C5 ::~S20156C5(){ note_dtor("S20156C5", this);} // tgen
S20156C5 ::S20156C5(){ note_ctor("S20156C5", this);} // tgen

static void Test_S20156C5()
{
  extern Class_Descriptor cd_S20156C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S20156C5, buf);
    S20156C5 *dp, &lv = *(dp=new (buf) S20156C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S20156C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20156C5)");
    check_base_class_offset(lv, (S20156C2*), ABISELECT(8,4), "S20156C5");
    test_class_info(&lv, &cd_S20156C5);
    dp->~S20156C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20156C5(Test_S20156C5, "S20156C5", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S20156C5C1Ev();
extern void _ZN8S20156C5D1Ev();
Name_Map name_map_S20156C5[] = {
  NSPAIR(_ZN8S20156C5C1Ev),
  NSPAIR(_ZN8S20156C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20156C2;
extern VTBL_ENTRY _ZTI8S20156C2[];
extern  VTBL_ENTRY _ZTV8S20156C2[];
static Base_Class bases_S20156C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20156C2,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //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 _ZTI8S20156C5[];
extern void _ZN8S20156C52v6Ev();
extern void _ZN8S20156C52v7Ev();
extern void _ZN8S20156C52v8Ev();
extern void _ZN8S20156C52v9Ev();
extern void _ZN8S20156C53v10Ev();
extern void _ZN8S20156C5D1Ev();
extern void _ZN8S20156C5D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20156C5D1Ev,_ZTv0_n12_N8S20156C5D1Ev)();
extern void ABISELECT(_ZThn8_N8S20156C5D1Ev,_ZThn4_N8S20156C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20156C5D0Ev,_ZTv0_n12_N8S20156C5D0Ev)();
extern void ABISELECT(_ZThn8_N8S20156C5D0Ev,_ZThn4_N8S20156C5D0Ev)() __attribute__((weak));
extern void _ZN8S20156C22v3Ev();
extern void _ZN8S20156C22v4Ev();
extern void _ZN8S20156C22v5Ev();
static  VTBL_ENTRY vtc_S20156C5[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20156C5[0]),
  (VTBL_ENTRY)&_ZN8S20156C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20156C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20156C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20156C5D0Ev,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20156C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20156C5D1Ev,_ZTv0_n12_N8S20156C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20156C5D0Ev,_ZTv0_n12_N8S20156C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20156C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20156C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20156C22v5Ev,
};
extern VTBL_ENTRY _ZTV8S20156C5[];
static  VTT_ENTRY vtt_S20156C5[] = {
  {&(_ZTV8S20156C5[3]),  3,21},
  {&(_ZTV8S20156C5[16]),  16,21},
};
extern VTBL_ENTRY _ZTI8S20156C5[];
extern  VTBL_ENTRY _ZTV8S20156C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20156C5[];
static VTBL_ENTRY alt_thunk_names121[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20156C5D0Ev,_ZTv0_n12_N8S20156C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20156C5D0Ev,_ZThn4_N8S20156C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20156C5D1Ev,_ZTv0_n12_N8S20156C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20156C5D1Ev,_ZThn4_N8S20156C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20156C5 = {  "S20156C5", // class name
  bases_S20156C5, 1,
  &(vtc_S20156C5[0]), // expected_vtbl_contents
  &(vtt_S20156C5[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S20156C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20156C5),21, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20156C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names121,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20156C4  : virtual S20156C2 , S20156C5 {
  int s20156c4f0;
  void *s20156c4f1;
  char s20156c4f2[8];
  virtual  ~S20156C4(); // _ZN8S20156C4D2Ev
  virtual void  v11(); // _ZN8S20156C43v11Ev
  virtual void  v12(); // _ZN8S20156C43v12Ev
  virtual void  v13(); // _ZN8S20156C43v13Ev
  virtual void  v14(); // _ZN8S20156C43v14Ev
  virtual void  v15(); // _ZN8S20156C43v15Ev
  S20156C4(); // tgen
};
//SIG(-1 S20156C4) C1{ VBC2{ vd v6 v7 v8 Fi FL} BC3{ VBC2 v9 v10 v11 v12 v13} vd v1 v2 v3 v4 v5 Fi Fp Fc[8]}


 S20156C4 ::~S20156C4(){ note_dtor("S20156C4", this);}
void  S20156C4 ::v11(){vfunc_called(this, "_ZN8S20156C43v11Ev");}
void  S20156C4 ::v12(){vfunc_called(this, "_ZN8S20156C43v12Ev");}
void  S20156C4 ::v13(){vfunc_called(this, "_ZN8S20156C43v13Ev");}
void  S20156C4 ::v14(){vfunc_called(this, "_ZN8S20156C43v14Ev");}
void  S20156C4 ::v15(){vfunc_called(this, "_ZN8S20156C43v15Ev");}
S20156C4 ::S20156C4(){ note_ctor("S20156C4", this);} // tgen

static void Test_S20156C4()
{
  extern Class_Descriptor cd_S20156C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S20156C4, buf);
    S20156C4 *dp, &lv = *(dp=new (buf) S20156C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S20156C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20156C4)");
    check_base_class_offset(lv, (S20156C2*), ABISELECT(32,20), "S20156C4");
    check_base_class_offset(lv, (S20156C2*)(S20156C5*), ABISELECT(32,20), "S20156C4");
    check_base_class_offset(lv, (S20156C5*), 0, "S20156C4");
    check_field_offset(lv, s20156c4f0, ABISELECT(8,4), "S20156C4.s20156c4f0");
    check_field_offset(lv, s20156c4f1, ABISELECT(16,8), "S20156C4.s20156c4f1");
    check_field_offset(lv, s20156c4f2, ABISELECT(24,12), "S20156C4.s20156c4f2");
    test_class_info(&lv, &cd_S20156C4);
    dp->~S20156C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20156C4(Test_S20156C4, "S20156C4", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN8S20156C4C1Ev();
extern void _ZN8S20156C4D2Ev();
Name_Map name_map_S20156C4[] = {
  NSPAIR(_ZN8S20156C4C1Ev),
  NSPAIR(_ZN8S20156C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20156C2;
extern VTBL_ENTRY _ZTI8S20156C2[];
extern  VTBL_ENTRY _ZTV8S20156C2[];
extern Class_Descriptor cd_S20156C5;
extern VTBL_ENTRY _ZTI8S20156C5[];
extern  VTBL_ENTRY _ZTV8S20156C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20156C5[];
static Base_Class bases_S20156C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20156C2,    ABISELECT(32,20), //bcp->offset
    15, //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_S20156C5,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20156C4[];
extern void _ZN8S20156C52v6Ev();
extern void _ZN8S20156C52v7Ev();
extern void _ZN8S20156C52v8Ev();
extern void _ZN8S20156C52v9Ev();
extern void _ZN8S20156C53v10Ev();
extern void _ZN8S20156C4D1Ev();
extern void _ZN8S20156C4D0Ev();
extern void _ZN8S20156C43v11Ev();
extern void _ZN8S20156C43v12Ev();
extern void _ZN8S20156C43v13Ev();
extern void _ZN8S20156C43v14Ev();
extern void _ZN8S20156C43v15Ev();
extern void ABISELECT(_ZTv0_n24_N8S20156C4D1Ev,_ZTv0_n12_N8S20156C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S20156C4D1Ev,_ZThn20_N8S20156C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20156C4D0Ev,_ZTv0_n12_N8S20156C4D0Ev)();
extern void ABISELECT(_ZThn32_N8S20156C4D0Ev,_ZThn20_N8S20156C4D0Ev)() __attribute__((weak));
extern void _ZN8S20156C22v3Ev();
extern void _ZN8S20156C22v4Ev();
extern void _ZN8S20156C22v5Ev();
static  VTBL_ENTRY vtc_S20156C4[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20156C4[0]),
  (VTBL_ENTRY)&_ZN8S20156C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20156C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20156C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20156C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20156C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20156C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20156C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20156C43v14Ev,
  (VTBL_ENTRY)&_ZN8S20156C43v15Ev,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20156C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20156C4D1Ev,_ZTv0_n12_N8S20156C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20156C4D0Ev,_ZTv0_n12_N8S20156C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20156C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20156C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20156C22v5Ev,
};
extern VTBL_ENTRY _ZTV8S20156C4[];
extern void _ZN8S20156C52v6Ev();
extern void _ZN8S20156C52v7Ev();
extern void _ZN8S20156C52v8Ev();
extern void _ZN8S20156C52v9Ev();
extern void _ZN8S20156C53v10Ev();
extern void _ZN8S20156C5D1Ev();
extern void _ZN8S20156C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20156C5__8S20156C4[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20156C5[0]),
  (VTBL_ENTRY)&_ZN8S20156C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20156C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20156C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20156C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20156C5D1Ev,_ZTv0_n12_N8S20156C5D1Ev)();
extern void ABISELECT(_ZThn32_N8S20156C5D1Ev,_ZThn20_N8S20156C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20156C5D0Ev,_ZTv0_n12_N8S20156C5D0Ev)();
extern void ABISELECT(_ZThn32_N8S20156C5D0Ev,_ZThn20_N8S20156C5D0Ev)() __attribute__((weak));
extern void _ZN8S20156C22v3Ev();
extern void _ZN8S20156C22v4Ev();
extern void _ZN8S20156C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20156C2__8S20156C5__8S20156C4[] = {
  0,
  0,
  0,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20156C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20156C5D1Ev,_ZTv0_n12_N8S20156C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20156C5D0Ev,_ZTv0_n12_N8S20156C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20156C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20156C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20156C22v5Ev,
};
static  VTT_ENTRY vtt_S20156C4[] = {
  {&(_ZTV8S20156C4[3]),  3,26},
  {&(_tg__ZTV8S20156C5__8S20156C4[3]),  3,10},
  {&(_tg__ZTV8S20156C2__8S20156C5__8S20156C4[6]),  6,11},
  {&(_ZTV8S20156C4[21]),  21,26},
};
extern VTBL_ENTRY _ZTI8S20156C4[];
extern  VTBL_ENTRY _ZTV8S20156C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20156C4[];
static VTBL_ENTRY alt_thunk_names122[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20156C5D0Ev,_ZTv0_n12_N8S20156C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20156C5D0Ev,_ZThn20_N8S20156C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20156C5D1Ev,_ZTv0_n12_N8S20156C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20156C5D1Ev,_ZThn20_N8S20156C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20156C4D0Ev,_ZTv0_n12_N8S20156C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20156C4D0Ev,_ZThn20_N8S20156C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20156C4D1Ev,_ZTv0_n12_N8S20156C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20156C4D1Ev,_ZThn20_N8S20156C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20156C4 = {  "S20156C4", // class name
  bases_S20156C4, 2,
  &(vtc_S20156C4[0]), // expected_vtbl_contents
  &(vtt_S20156C4[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI8S20156C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20156C4),26, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20156C4),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names122,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20156C3  : virtual S20156C4 {
  int s20156c3f0;
  virtual  ~S20156C3(); // _ZN8S20156C3D2Ev
  S20156C3(); // tgen
};
//SIG(-1 S20156C3) C1{ VBC2{ VBC3{ vd v1 v2 v3 Fi FL} BC4{ VBC3 v4 v5 v6 v7 v8} vd v9 v10 v11 v12 v13 Fi Fp Fc[8]} vd Fi}


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

static void Test_S20156C3()
{
  extern Class_Descriptor cd_S20156C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S20156C3, buf);
    S20156C3 *dp, &lv = *(dp=new (buf) S20156C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S20156C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20156C3)");
    check_base_class_offset(lv, (S20156C2*)(S20156C4*), ABISELECT(48,28), "S20156C3");
    check_base_class_offset(lv, (S20156C2*)(S20156C5*)(S20156C4*), ABISELECT(48,28), "S20156C3");
    check_base_class_offset(lv, (S20156C5*)(S20156C4*), ABISELECT(16,8), "S20156C3");
    check_base_class_offset(lv, (S20156C4*), ABISELECT(16,8), "S20156C3");
    check_field_offset(lv, s20156c3f0, ABISELECT(8,4), "S20156C3.s20156c3f0");
    test_class_info(&lv, &cd_S20156C3);
    dp->~S20156C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20156C3(Test_S20156C3, "S20156C3", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN8S20156C3C1Ev();
extern void _ZN8S20156C3D2Ev();
Name_Map name_map_S20156C3[] = {
  NSPAIR(_ZN8S20156C3C1Ev),
  NSPAIR(_ZN8S20156C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20156C2;
extern VTBL_ENTRY _ZTI8S20156C2[];
extern  VTBL_ENTRY _ZTV8S20156C2[];
extern Class_Descriptor cd_S20156C5;
extern VTBL_ENTRY _ZTI8S20156C5[];
extern  VTBL_ENTRY _ZTV8S20156C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20156C5[];
extern Class_Descriptor cd_S20156C4;
extern VTBL_ENTRY _ZTI8S20156C4[];
extern  VTBL_ENTRY _ZTV8S20156C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20156C4[];
static Base_Class bases_S20156C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20156C2,    ABISELECT(48,28), //bcp->offset
    32, //bcp->virtual_function_table_offset
    6, //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_S20156C5,    ABISELECT(16,8), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20156C4,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20156C3[];
extern void _ZN8S20156C3D1Ev();
extern void _ZN8S20156C3D0Ev();
extern void _ZN8S20156C52v6Ev();
extern void _ZN8S20156C52v7Ev();
extern void _ZN8S20156C52v8Ev();
extern void _ZN8S20156C52v9Ev();
extern void _ZN8S20156C53v10Ev();
extern void ABISELECT(_ZTv0_n72_N8S20156C3D1Ev,_ZTv0_n36_N8S20156C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S20156C3D1Ev,_ZThn8_N8S20156C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20156C3D0Ev,_ZTv0_n36_N8S20156C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S20156C3D0Ev,_ZThn8_N8S20156C3D0Ev)() __attribute__((weak));
extern void _ZN8S20156C43v11Ev();
extern void _ZN8S20156C43v12Ev();
extern void _ZN8S20156C43v13Ev();
extern void _ZN8S20156C43v14Ev();
extern void _ZN8S20156C43v15Ev();
extern void ABISELECT(_ZTv0_n24_N8S20156C3D1Ev,_ZTv0_n12_N8S20156C3D1Ev)();
extern void ABISELECT(_ZThn48_N8S20156C3D1Ev,_ZThn28_N8S20156C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20156C3D0Ev,_ZTv0_n12_N8S20156C3D0Ev)();
extern void ABISELECT(_ZThn48_N8S20156C3D0Ev,_ZThn28_N8S20156C3D0Ev)() __attribute__((weak));
extern void _ZN8S20156C22v3Ev();
extern void _ZN8S20156C22v4Ev();
extern void _ZN8S20156C22v5Ev();
static  VTBL_ENTRY vtc_S20156C3[] = {
  ABISELECT(48,28),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20156C3[0]),
  (VTBL_ENTRY)&_ZN8S20156C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20156C3D0Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20156C3[0]),
  (VTBL_ENTRY)&_ZN8S20156C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20156C53v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20156C3D1Ev,_ZTv0_n36_N8S20156C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20156C3D0Ev,_ZTv0_n36_N8S20156C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20156C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20156C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20156C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20156C43v14Ev,
  (VTBL_ENTRY)&_ZN8S20156C43v15Ev,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20156C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20156C3D1Ev,_ZTv0_n12_N8S20156C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20156C3D0Ev,_ZTv0_n12_N8S20156C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20156C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20156C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20156C22v5Ev,
};
extern VTBL_ENTRY _ZTV8S20156C3[];
extern void _ZN8S20156C52v6Ev();
extern void _ZN8S20156C52v7Ev();
extern void _ZN8S20156C52v8Ev();
extern void _ZN8S20156C52v9Ev();
extern void _ZN8S20156C53v10Ev();
extern void _ZN8S20156C4D1Ev();
extern void _ZN8S20156C4D0Ev();
extern void _ZN8S20156C43v11Ev();
extern void _ZN8S20156C43v12Ev();
extern void _ZN8S20156C43v13Ev();
extern void _ZN8S20156C43v14Ev();
extern void _ZN8S20156C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20156C4__8S20156C3[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20156C4[0]),
  (VTBL_ENTRY)&_ZN8S20156C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20156C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20156C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20156C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20156C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20156C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20156C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20156C43v14Ev,
  (VTBL_ENTRY)&_ZN8S20156C43v15Ev,
};
extern void _ZN8S20156C52v6Ev();
extern void _ZN8S20156C52v7Ev();
extern void _ZN8S20156C52v8Ev();
extern void _ZN8S20156C52v9Ev();
extern void _ZN8S20156C53v10Ev();
extern void _ZN8S20156C5D1Ev();
extern void _ZN8S20156C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20156C58S20156C4__8S20156C3[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20156C5[0]),
  (VTBL_ENTRY)&_ZN8S20156C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20156C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20156C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20156C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20156C5D1Ev,_ZTv0_n12_N8S20156C5D1Ev)();
extern void ABISELECT(_ZThn32_N8S20156C5D1Ev,_ZThn20_N8S20156C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20156C5D0Ev,_ZTv0_n12_N8S20156C5D0Ev)();
extern void ABISELECT(_ZThn32_N8S20156C5D0Ev,_ZThn20_N8S20156C5D0Ev)() __attribute__((weak));
extern void _ZN8S20156C22v3Ev();
extern void _ZN8S20156C22v4Ev();
extern void _ZN8S20156C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20156C2__8S20156C58S20156C4__8S20156C3[] = {
  0,
  0,
  0,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20156C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20156C5D1Ev,_ZTv0_n12_N8S20156C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20156C5D0Ev,_ZTv0_n12_N8S20156C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20156C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20156C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20156C22v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20156C4D1Ev,_ZTv0_n12_N8S20156C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S20156C4D1Ev,_ZThn20_N8S20156C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20156C4D0Ev,_ZTv0_n12_N8S20156C4D0Ev)();
extern void ABISELECT(_ZThn32_N8S20156C4D0Ev,_ZThn20_N8S20156C4D0Ev)() __attribute__((weak));
extern void _ZN8S20156C22v3Ev();
extern void _ZN8S20156C22v4Ev();
extern void _ZN8S20156C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20156C2__8S20156C4__8S20156C3[] = {
  0,
  0,
  0,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20156C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20156C4D1Ev,_ZTv0_n12_N8S20156C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20156C4D0Ev,_ZTv0_n12_N8S20156C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20156C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20156C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20156C22v5Ev,
};
static  VTT_ENTRY vtt_S20156C3[] = {
  {&(_ZTV8S20156C3[4]),  4,43},
  {&(_ZTV8S20156C3[20]),  20,43},
  {&(_ZTV8S20156C3[38]),  38,43},
  {&(_tg__ZTV8S20156C4__8S20156C3[3]),  3,15},
  {&(_tg__ZTV8S20156C58S20156C4__8S20156C3[3]),  3,10},
  {&(_tg__ZTV8S20156C2__8S20156C58S20156C4__8S20156C3[6]),  6,11},
  {&(_tg__ZTV8S20156C2__8S20156C4__8S20156C3[6]),  6,11},
};
extern VTBL_ENTRY _ZTI8S20156C3[];
extern  VTBL_ENTRY _ZTV8S20156C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20156C3[];
static VTBL_ENTRY alt_thunk_names123[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20156C4D0Ev,_ZTv0_n12_N8S20156C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20156C4D0Ev,_ZThn20_N8S20156C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20156C4D1Ev,_ZTv0_n12_N8S20156C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20156C4D1Ev,_ZThn20_N8S20156C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20156C5D0Ev,_ZTv0_n12_N8S20156C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20156C5D0Ev,_ZThn20_N8S20156C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20156C5D1Ev,_ZTv0_n12_N8S20156C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20156C5D1Ev,_ZThn20_N8S20156C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20156C3D0Ev,_ZTv0_n12_N8S20156C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20156C3D0Ev,_ZThn28_N8S20156C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20156C3D1Ev,_ZTv0_n12_N8S20156C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20156C3D1Ev,_ZThn28_N8S20156C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20156C3D0Ev,_ZTv0_n36_N8S20156C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20156C3D0Ev,_ZThn8_N8S20156C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20156C3D1Ev,_ZTv0_n36_N8S20156C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20156C3D1Ev,_ZThn8_N8S20156C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20156C3 = {  "S20156C3", // class name
  bases_S20156C3, 3,
  &(vtc_S20156C3[0]), // expected_vtbl_contents
  &(vtt_S20156C3[0]), // expected_vtt_contents
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI8S20156C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20156C3),43, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20156C3),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names123,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20156C1  : virtual S20156C2 , S20156C3 {
  virtual void  v1(); // _ZN8S20156C12v1Ev
  virtual void  v2(); // _ZN8S20156C12v2Ev
  ~S20156C1(); // tgen
  S20156C1(); // tgen
};
//SIG(1 S20156C1) C1{ VBC2{ vd v3 v4 v5 Fi FL} BC3{ VBC4{ VBC2 BC5{ VBC2 v6 v7 v8 v9 v10} vd v11 v12 v13 v14 v15 Fi Fp Fc[8]} vd Fi} v1 v2}


void  S20156C1 ::v1(){vfunc_called(this, "_ZN8S20156C12v1Ev");}
void  S20156C1 ::v2(){vfunc_called(this, "_ZN8S20156C12v2Ev");}
S20156C1 ::~S20156C1(){ note_dtor("S20156C1", this);} // tgen
S20156C1 ::S20156C1(){ note_ctor("S20156C1", this);} // tgen

static void Test_S20156C1()
{
  extern Class_Descriptor cd_S20156C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S20156C1, buf);
    S20156C1 *dp, &lv = *(dp=new (buf) S20156C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S20156C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20156C1)");
    check_base_class_offset(lv, (S20156C2*), ABISELECT(16,8), "S20156C1");
    check_base_class_offset(lv, (S20156C2*)(S20156C4*), ABISELECT(16,8), "S20156C1");
    check_base_class_offset(lv, (S20156C2*)(S20156C5*)(S20156C4*), ABISELECT(16,8), "S20156C1");
    check_base_class_offset(lv, (S20156C5*)(S20156C4*), ABISELECT(40,24), "S20156C1");
    check_base_class_offset(lv, (S20156C4*)(S20156C3*), ABISELECT(40,24), "S20156C1");
    check_base_class_offset(lv, (S20156C3*), 0, "S20156C1");
    test_class_info(&lv, &cd_S20156C1);
    dp->~S20156C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20156C1(Test_S20156C1, "S20156C1", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN8S20156C1C1Ev();
extern void _ZN8S20156C1D1Ev();
Name_Map name_map_S20156C1[] = {
  NSPAIR(_ZN8S20156C1C1Ev),
  NSPAIR(_ZN8S20156C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20156C2;
extern VTBL_ENTRY _ZTI8S20156C2[];
extern  VTBL_ENTRY _ZTV8S20156C2[];
extern Class_Descriptor cd_S20156C5;
extern VTBL_ENTRY _ZTI8S20156C5[];
extern  VTBL_ENTRY _ZTV8S20156C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20156C5[];
extern Class_Descriptor cd_S20156C4;
extern VTBL_ENTRY _ZTI8S20156C4[];
extern  VTBL_ENTRY _ZTV8S20156C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20156C4[];
extern Class_Descriptor cd_S20156C3;
extern VTBL_ENTRY _ZTI8S20156C3[];
extern  VTBL_ENTRY _ZTV8S20156C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20156C3[];
static Base_Class bases_S20156C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20156C2,    ABISELECT(16,8), //bcp->offset
    8, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20156C5,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20156C4,    ABISELECT(40,24), //bcp->offset
    19, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20156C3,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20156C1[];
extern void _ZN8S20156C1D1Ev();
extern void _ZN8S20156C1D0Ev();
extern void _ZN8S20156C12v1Ev();
extern void _ZN8S20156C12v2Ev();
extern void ABISELECT(_ZTv0_n24_N8S20156C1D1Ev,_ZTv0_n12_N8S20156C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S20156C1D1Ev,_ZThn8_N8S20156C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20156C1D0Ev,_ZTv0_n12_N8S20156C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S20156C1D0Ev,_ZThn8_N8S20156C1D0Ev)() __attribute__((weak));
extern void _ZN8S20156C22v3Ev();
extern void _ZN8S20156C22v4Ev();
extern void _ZN8S20156C22v5Ev();
extern void _ZN8S20156C52v6Ev();
extern void _ZN8S20156C52v7Ev();
extern void _ZN8S20156C52v8Ev();
extern void _ZN8S20156C52v9Ev();
extern void _ZN8S20156C53v10Ev();
extern void ABISELECT(_ZTv0_n72_N8S20156C1D1Ev,_ZTv0_n36_N8S20156C1D1Ev)();
extern void ABISELECT(_ZThn40_N8S20156C1D1Ev,_ZThn24_N8S20156C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20156C1D0Ev,_ZTv0_n36_N8S20156C1D0Ev)();
extern void ABISELECT(_ZThn40_N8S20156C1D0Ev,_ZThn24_N8S20156C1D0Ev)() __attribute__((weak));
extern void _ZN8S20156C43v11Ev();
extern void _ZN8S20156C43v12Ev();
extern void _ZN8S20156C43v13Ev();
extern void _ZN8S20156C43v14Ev();
extern void _ZN8S20156C43v15Ev();
static  VTBL_ENTRY vtc_S20156C1[] = {
  ABISELECT(16,8),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20156C1[0]),
  (VTBL_ENTRY)&_ZN8S20156C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20156C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20156C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20156C12v2Ev,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20156C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20156C1D1Ev,_ZTv0_n12_N8S20156C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20156C1D0Ev,_ZTv0_n12_N8S20156C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20156C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20156C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20156C22v5Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20156C1[0]),
  (VTBL_ENTRY)&_ZN8S20156C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20156C53v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20156C1D1Ev,_ZTv0_n36_N8S20156C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20156C1D0Ev,_ZTv0_n36_N8S20156C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20156C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20156C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20156C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20156C43v14Ev,
  (VTBL_ENTRY)&_ZN8S20156C43v15Ev,
};
extern VTBL_ENTRY _ZTV8S20156C1[];
extern void _ZN8S20156C3D1Ev();
extern void _ZN8S20156C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20156C3__8S20156C1[] = {
  ABISELECT(16,8),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20156C3[0]),
  (VTBL_ENTRY)&_ZN8S20156C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20156C3D0Ev,
};
extern void _ZN8S20156C52v6Ev();
extern void _ZN8S20156C52v7Ev();
extern void _ZN8S20156C52v8Ev();
extern void _ZN8S20156C52v9Ev();
extern void _ZN8S20156C53v10Ev();
extern void ABISELECT(_ZTv0_n72_N8S20156C3D1Ev,_ZTv0_n36_N8S20156C3D1Ev)();
extern void ABISELECT(_ZThn40_N8S20156C3D1Ev,_ZThn24_N8S20156C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20156C3D0Ev,_ZTv0_n36_N8S20156C3D0Ev)();
extern void ABISELECT(_ZThn40_N8S20156C3D0Ev,_ZThn24_N8S20156C3D0Ev)() __attribute__((weak));
extern void _ZN8S20156C43v11Ev();
extern void _ZN8S20156C43v12Ev();
extern void _ZN8S20156C43v13Ev();
extern void _ZN8S20156C43v14Ev();
extern void _ZN8S20156C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20156C4__8S20156C3__8S20156C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20156C3[0]),
  (VTBL_ENTRY)&_ZN8S20156C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20156C53v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20156C3D1Ev,_ZTv0_n36_N8S20156C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20156C3D0Ev,_ZTv0_n36_N8S20156C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20156C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20156C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20156C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20156C43v14Ev,
  (VTBL_ENTRY)&_ZN8S20156C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20156C3D1Ev,_ZTv0_n12_N8S20156C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S20156C3D1Ev,_ZThn8_N8S20156C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20156C3D0Ev,_ZTv0_n12_N8S20156C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S20156C3D0Ev,_ZThn8_N8S20156C3D0Ev)() __attribute__((weak));
extern void _ZN8S20156C22v3Ev();
extern void _ZN8S20156C22v4Ev();
extern void _ZN8S20156C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20156C2__8S20156C3__8S20156C1[] = {
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20156C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20156C3D1Ev,_ZTv0_n12_N8S20156C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20156C3D0Ev,_ZTv0_n12_N8S20156C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20156C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20156C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20156C22v5Ev,
};
extern void _ZN8S20156C52v6Ev();
extern void _ZN8S20156C52v7Ev();
extern void _ZN8S20156C52v8Ev();
extern void _ZN8S20156C52v9Ev();
extern void _ZN8S20156C53v10Ev();
extern void _ZN8S20156C4D1Ev();
extern void _ZN8S20156C4D0Ev();
extern void _ZN8S20156C43v11Ev();
extern void _ZN8S20156C43v12Ev();
extern void _ZN8S20156C43v13Ev();
extern void _ZN8S20156C43v14Ev();
extern void _ZN8S20156C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20156C4__8S20156C1[] = {
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20156C4[0]),
  (VTBL_ENTRY)&_ZN8S20156C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20156C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20156C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20156C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20156C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20156C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20156C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20156C43v14Ev,
  (VTBL_ENTRY)&_ZN8S20156C43v15Ev,
};
extern void _ZN8S20156C52v6Ev();
extern void _ZN8S20156C52v7Ev();
extern void _ZN8S20156C52v8Ev();
extern void _ZN8S20156C52v9Ev();
extern void _ZN8S20156C53v10Ev();
extern void _ZN8S20156C5D1Ev();
extern void _ZN8S20156C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20156C58S20156C4__8S20156C1[] = {
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20156C5[0]),
  (VTBL_ENTRY)&_ZN8S20156C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20156C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20156C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20156C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20156C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20156C5D1Ev,_ZTv0_n12_N8S20156C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20156C5D0Ev,_ZTv0_n12_N8S20156C5D0Ev)();
extern void _ZN8S20156C22v3Ev();
extern void _ZN8S20156C22v4Ev();
extern void _ZN8S20156C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20156C2__8S20156C58S20156C4__8S20156C1[] = {
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI8S20156C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20156C5D1Ev,_ZTv0_n12_N8S20156C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20156C5D0Ev,_ZTv0_n12_N8S20156C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20156C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20156C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20156C22v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20156C4D1Ev,_ZTv0_n12_N8S20156C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20156C4D0Ev,_ZTv0_n12_N8S20156C4D0Ev)();
extern void _ZN8S20156C22v3Ev();
extern void _ZN8S20156C22v4Ev();
extern void _ZN8S20156C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20156C2__8S20156C4__8S20156C1[] = {
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI8S20156C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20156C4D1Ev,_ZTv0_n12_N8S20156C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20156C4D0Ev,_ZTv0_n12_N8S20156C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20156C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20156C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20156C22v5Ev,
};
static  VTT_ENTRY vtt_S20156C1[] = {
  {&(_ZTV8S20156C1[4]),  4,45},
  {&(_tg__ZTV8S20156C3__8S20156C1[4]),  4,6},
  {&(_tg__ZTV8S20156C4__8S20156C3__8S20156C1[14]),  14,26},
  {&(_tg__ZTV8S20156C2__8S20156C3__8S20156C1[6]),  6,11},
  {&(_ZTV8S20156C1[14]),  14,45},
  {&(_ZTV8S20156C1[33]),  33,45},
  {&(_tg__ZTV8S20156C4__8S20156C1[3]),  3,15},
  {&(_tg__ZTV8S20156C58S20156C4__8S20156C1[3]),  3,10},
  {&(_tg__ZTV8S20156C2__8S20156C58S20156C4__8S20156C1[6]),  6,11},
  {&(_tg__ZTV8S20156C2__8S20156C4__8S20156C1[6]),  6,11},
};
extern VTBL_ENTRY _ZTI8S20156C1[];
extern  VTBL_ENTRY _ZTV8S20156C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20156C1[];
static VTBL_ENTRY alt_thunk_names124[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20156C3D0Ev,_ZTv0_n12_N8S20156C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20156C3D0Ev,_ZThn8_N8S20156C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20156C3D1Ev,_ZTv0_n12_N8S20156C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20156C3D1Ev,_ZThn8_N8S20156C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20156C3D0Ev,_ZTv0_n36_N8S20156C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20156C3D0Ev,_ZThn24_N8S20156C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20156C3D1Ev,_ZTv0_n36_N8S20156C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20156C3D1Ev,_ZThn24_N8S20156C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20156C1D0Ev,_ZTv0_n36_N8S20156C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20156C1D0Ev,_ZThn24_N8S20156C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20156C1D1Ev,_ZTv0_n36_N8S20156C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20156C1D1Ev,_ZThn24_N8S20156C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20156C1D0Ev,_ZTv0_n12_N8S20156C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20156C1D0Ev,_ZThn8_N8S20156C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20156C1D1Ev,_ZTv0_n12_N8S20156C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20156C1D1Ev,_ZThn8_N8S20156C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20156C1 = {  "S20156C1", // class name
  bases_S20156C1, 4,
  &(vtc_S20156C1[0]), // expected_vtbl_contents
  &(vtt_S20156C1[0]), // expected_vtt_contents
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI8S20156C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20156C1),45, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20156C1),10, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names124,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3187C3  {
  virtual void  v3(); // _ZN7S3187C32v3Ev
  ~S3187C3(); // tgen
  S3187C3(); // tgen
};
//SIG(-1 S3187C3) C1{ v1}


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

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

#else // __cplusplus

extern void _ZN7S3187C3C1Ev();
extern void _ZN7S3187C3D1Ev();
Name_Map name_map_S3187C3[] = {
  NSPAIR(_ZN7S3187C3C1Ev),
  NSPAIR(_ZN7S3187C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3187C3[];
extern void _ZN7S3187C32v3Ev();
static  VTBL_ENTRY vtc_S3187C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3187C3[0]),
  (VTBL_ENTRY)&_ZN7S3187C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S3187C3[];
extern  VTBL_ENTRY _ZTV7S3187C3[];
Class_Descriptor cd_S3187C3 = {  "S3187C3", // class name
  0,0,//no base classes
  &(vtc_S3187C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3187C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3187C3),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  S3187C4  : S3187C3 {
  virtual void  v4(); // _ZN7S3187C42v4Ev
  virtual void  v5(); // _ZN7S3187C42v5Ev
  virtual void  v6(); // _ZN7S3187C42v6Ev
  ~S3187C4(); // tgen
  S3187C4(); // tgen
};
//SIG(-1 S3187C4) C1{ BC2{ v4} v1 v2 v3}


void  S3187C4 ::v4(){vfunc_called(this, "_ZN7S3187C42v4Ev");}
void  S3187C4 ::v5(){vfunc_called(this, "_ZN7S3187C42v5Ev");}
void  S3187C4 ::v6(){vfunc_called(this, "_ZN7S3187C42v6Ev");}
S3187C4 ::~S3187C4(){ note_dtor("S3187C4", this);} // tgen
S3187C4 ::S3187C4(){ note_ctor("S3187C4", this);} // tgen

static void Test_S3187C4()
{
  extern Class_Descriptor cd_S3187C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3187C4, buf);
    S3187C4 *dp, &lv = *(dp=new (buf) S3187C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3187C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3187C4)");
    check_base_class_offset(lv, (S3187C3*), 0, "S3187C4");
    test_class_info(&lv, &cd_S3187C4);
    dp->~S3187C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3187C4(Test_S3187C4, "S3187C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3187C4C1Ev();
extern void _ZN7S3187C4D1Ev();
Name_Map name_map_S3187C4[] = {
  NSPAIR(_ZN7S3187C4C1Ev),
  NSPAIR(_ZN7S3187C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3187C3;
extern VTBL_ENTRY _ZTI7S3187C3[];
extern  VTBL_ENTRY _ZTV7S3187C3[];
static Base_Class bases_S3187C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3187C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S3187C4[];
extern void _ZN7S3187C32v3Ev();
extern void _ZN7S3187C42v4Ev();
extern void _ZN7S3187C42v5Ev();
extern void _ZN7S3187C42v6Ev();
static  VTBL_ENTRY vtc_S3187C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3187C4[0]),
  (VTBL_ENTRY)&_ZN7S3187C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3187C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3187C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3187C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S3187C4[];
extern  VTBL_ENTRY _ZTV7S3187C4[];
Class_Descriptor cd_S3187C4 = {  "S3187C4", // class name
  bases_S3187C4, 1,
  &(vtc_S3187C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3187C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3187C4),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  S3187C5  : virtual S3187C4 , S3187C3 {
  int s3187c5f0;
  virtual void  v7(); // _ZN7S3187C52v7Ev
  virtual void  v8(); // _ZN7S3187C52v8Ev
  virtual void  v9(); // _ZN7S3187C52v9Ev
  virtual void  v10(); // _ZN7S3187C53v10Ev
  virtual void  v11(); // _ZN7S3187C53v11Ev
  virtual void  v12(); // _ZN7S3187C53v12Ev
  ~S3187C5(); // tgen
  S3187C5(); // tgen
};
//SIG(-1 S3187C5) C1{ VBC2{ BC3{ v7} v8 v9 v10} BC3 v1 v2 v3 v4 v5 v6 Fi}


void  S3187C5 ::v7(){vfunc_called(this, "_ZN7S3187C52v7Ev");}
void  S3187C5 ::v8(){vfunc_called(this, "_ZN7S3187C52v8Ev");}
void  S3187C5 ::v9(){vfunc_called(this, "_ZN7S3187C52v9Ev");}
void  S3187C5 ::v10(){vfunc_called(this, "_ZN7S3187C53v10Ev");}
void  S3187C5 ::v11(){vfunc_called(this, "_ZN7S3187C53v11Ev");}
void  S3187C5 ::v12(){vfunc_called(this, "_ZN7S3187C53v12Ev");}
S3187C5 ::~S3187C5(){ note_dtor("S3187C5", this);} // tgen
S3187C5 ::S3187C5(){ note_ctor("S3187C5", this);} // tgen

static void Test_S3187C5()
{
  extern Class_Descriptor cd_S3187C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3187C5, buf);
    S3187C5 *dp, &lv = *(dp=new (buf) S3187C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3187C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3187C5)");
    check_base_class_offset(lv, (S3187C3*)(S3187C4*), ABISELECT(16,8), "S3187C5");
    check_base_class_offset(lv, (S3187C4*), ABISELECT(16,8), "S3187C5");
    /*is_ambiguous_... S3187C5::S3187C3 */ AMB_check_base_class_offset(lv, (S3187C3*), 0, "S3187C5");
    check_field_offset(lv, s3187c5f0, ABISELECT(8,4), "S3187C5.s3187c5f0");
    test_class_info(&lv, &cd_S3187C5);
    dp->~S3187C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3187C5(Test_S3187C5, "S3187C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S3187C5C1Ev();
extern void _ZN7S3187C5D1Ev();
Name_Map name_map_S3187C5[] = {
  NSPAIR(_ZN7S3187C5C1Ev),
  NSPAIR(_ZN7S3187C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3187C3;
extern VTBL_ENTRY _ZTI7S3187C3[];
extern  VTBL_ENTRY _ZTV7S3187C3[];
extern Class_Descriptor cd_S3187C4;
extern VTBL_ENTRY _ZTI7S3187C4[];
extern  VTBL_ENTRY _ZTV7S3187C4[];
extern Class_Descriptor cd_S3187C3;
extern VTBL_ENTRY _ZTI7S3187C3[];
extern  VTBL_ENTRY _ZTV7S3187C3[];
static Base_Class bases_S3187C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3187C3,    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
  0, 0},
  {&cd_S3187C4,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //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},
  {&cd_S3187C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3187C5[];
extern void _ZN7S3187C32v3Ev();
extern void _ZN7S3187C52v7Ev();
extern void _ZN7S3187C52v8Ev();
extern void _ZN7S3187C52v9Ev();
extern void _ZN7S3187C53v10Ev();
extern void _ZN7S3187C53v11Ev();
extern void _ZN7S3187C53v12Ev();
extern void _ZN7S3187C32v3Ev();
extern void _ZN7S3187C42v4Ev();
extern void _ZN7S3187C42v5Ev();
extern void _ZN7S3187C42v6Ev();
static  VTBL_ENTRY vtc_S3187C5[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3187C5[0]),
  (VTBL_ENTRY)&_ZN7S3187C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3187C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3187C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3187C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3187C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3187C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3187C53v12Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3187C5[0]),
  (VTBL_ENTRY)&_ZN7S3187C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3187C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3187C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3187C42v6Ev,
};
extern VTBL_ENTRY _ZTV7S3187C5[];
static  VTT_ENTRY vtt_S3187C5[] = {
  {&(_ZTV7S3187C5[3]),  3,20},
  {&(_ZTV7S3187C5[16]),  16,20},
};
extern VTBL_ENTRY _ZTI7S3187C5[];
extern  VTBL_ENTRY _ZTV7S3187C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3187C5[];
Class_Descriptor cd_S3187C5 = {  "S3187C5", // class name
  bases_S3187C5, 3,
  &(vtc_S3187C5[0]), // expected_vtbl_contents
  &(vtt_S3187C5[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S3187C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3187C5),20, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3187C5),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3187C2  : S3187C3 , virtual S3187C4 , S3187C5 {
  char s3187c2f0;
  virtual void  v13(); // _ZN7S3187C23v13Ev
  virtual void  v14(); // _ZN7S3187C23v14Ev
  virtual void  v15(); // _ZN7S3187C23v15Ev
  virtual void  v16(); // _ZN7S3187C23v16Ev
  virtual void  v17(); // _ZN7S3187C23v17Ev
  virtual void  v18(); // _ZN7S3187C23v18Ev
  virtual void  v19(); // _ZN7S3187C23v19Ev
  ~S3187C2(); // tgen
  S3187C2(); // tgen
};
//SIG(-1 S3187C2) C1{ BC2{ v8} VBC3{ BC2 v9 v10 v11} BC4{ VBC3 BC2 v12 v13 v14 v15 v16 v17 Fi} v1 v2 v3 v4 v5 v6 v7 Fc}


void  S3187C2 ::v13(){vfunc_called(this, "_ZN7S3187C23v13Ev");}
void  S3187C2 ::v14(){vfunc_called(this, "_ZN7S3187C23v14Ev");}
void  S3187C2 ::v15(){vfunc_called(this, "_ZN7S3187C23v15Ev");}
void  S3187C2 ::v16(){vfunc_called(this, "_ZN7S3187C23v16Ev");}
void  S3187C2 ::v17(){vfunc_called(this, "_ZN7S3187C23v17Ev");}
void  S3187C2 ::v18(){vfunc_called(this, "_ZN7S3187C23v18Ev");}
void  S3187C2 ::v19(){vfunc_called(this, "_ZN7S3187C23v19Ev");}
S3187C2 ::~S3187C2(){ note_dtor("S3187C2", this);} // tgen
S3187C2 ::S3187C2(){ note_ctor("S3187C2", this);} // tgen

static void Test_S3187C2()
{
  extern Class_Descriptor cd_S3187C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S3187C2, buf);
    S3187C2 *dp, &lv = *(dp=new (buf) S3187C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S3187C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3187C2)");
    /*is_ambiguous_... S3187C2::S3187C3 */ AMB_check_base_class_offset(lv, (S3187C3*), 0, "S3187C2");
    check_base_class_offset(lv, (S3187C3*)(S3187C4*), ABISELECT(24,16), "S3187C2");
    check_base_class_offset(lv, (S3187C4*), ABISELECT(24,16), "S3187C2");
    check_base_class_offset(lv, (S3187C4*)(S3187C5*), ABISELECT(24,16), "S3187C2");
    /*is_ambiguous_... S3187C5::S3187C3 */ AMB_check_base_class_offset(lv, (S3187C3*)(S3187C5*), ABISELECT(8,4), "S3187C2");
    check_base_class_offset(lv, (S3187C5*), ABISELECT(8,4), "S3187C2");
    check_field_offset(lv, s3187c2f0, ABISELECT(20,12), "S3187C2.s3187c2f0");
    test_class_info(&lv, &cd_S3187C2);
    dp->~S3187C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3187C2(Test_S3187C2, "S3187C2", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S3187C2C1Ev();
extern void _ZN7S3187C2D1Ev();
Name_Map name_map_S3187C2[] = {
  NSPAIR(_ZN7S3187C2C1Ev),
  NSPAIR(_ZN7S3187C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3187C3;
extern VTBL_ENTRY _ZTI7S3187C3[];
extern  VTBL_ENTRY _ZTV7S3187C3[];
extern Class_Descriptor cd_S3187C3;
extern VTBL_ENTRY _ZTI7S3187C3[];
extern  VTBL_ENTRY _ZTV7S3187C3[];
extern Class_Descriptor cd_S3187C4;
extern VTBL_ENTRY _ZTI7S3187C4[];
extern  VTBL_ENTRY _ZTV7S3187C4[];
extern Class_Descriptor cd_S3187C3;
extern VTBL_ENTRY _ZTI7S3187C3[];
extern  VTBL_ENTRY _ZTV7S3187C3[];
extern Class_Descriptor cd_S3187C5;
extern VTBL_ENTRY _ZTI7S3187C5[];
extern  VTBL_ENTRY _ZTV7S3187C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3187C5[];
static Base_Class bases_S3187C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3187C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3187C3,    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
    2, //immediately_derived
  0, 0},
  {&cd_S3187C4,    ABISELECT(24,16), //bcp->offset
    21, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S3187C3,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3187C5,    ABISELECT(8,4), //bcp->offset
    11, //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3187C2[];
extern void _ZN7S3187C32v3Ev();
extern void _ZN7S3187C23v13Ev();
extern void _ZN7S3187C23v14Ev();
extern void _ZN7S3187C23v15Ev();
extern void _ZN7S3187C23v16Ev();
extern void _ZN7S3187C23v17Ev();
extern void _ZN7S3187C23v18Ev();
extern void _ZN7S3187C23v19Ev();
extern void _ZN7S3187C32v3Ev();
extern void _ZN7S3187C52v7Ev();
extern void _ZN7S3187C52v8Ev();
extern void _ZN7S3187C52v9Ev();
extern void _ZN7S3187C53v10Ev();
extern void _ZN7S3187C53v11Ev();
extern void _ZN7S3187C53v12Ev();
extern void _ZN7S3187C32v3Ev();
extern void _ZN7S3187C42v4Ev();
extern void _ZN7S3187C42v5Ev();
extern void _ZN7S3187C42v6Ev();
static  VTBL_ENTRY vtc_S3187C2[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3187C2[0]),
  (VTBL_ENTRY)&_ZN7S3187C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3187C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3187C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3187C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3187C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3187C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3187C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3187C23v19Ev,
  ABISELECT(16,12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3187C2[0]),
  (VTBL_ENTRY)&_ZN7S3187C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3187C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3187C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3187C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3187C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3187C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3187C53v12Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S3187C2[0]),
  (VTBL_ENTRY)&_ZN7S3187C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3187C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3187C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3187C42v6Ev,
};
extern VTBL_ENTRY _ZTV7S3187C2[];
extern void _ZN7S3187C32v3Ev();
extern void _ZN7S3187C52v7Ev();
extern void _ZN7S3187C52v8Ev();
extern void _ZN7S3187C52v9Ev();
extern void _ZN7S3187C53v10Ev();
extern void _ZN7S3187C53v11Ev();
extern void _ZN7S3187C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S3187C5__7S3187C2[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3187C5[0]),
  (VTBL_ENTRY)&_ZN7S3187C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3187C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3187C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3187C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3187C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3187C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3187C53v12Ev,
};
extern void _ZN7S3187C32v3Ev();
extern void _ZN7S3187C42v4Ev();
extern void _ZN7S3187C42v5Ev();
extern void _ZN7S3187C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3187C4__7S3187C5__7S3187C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S3187C5[0]),
  (VTBL_ENTRY)&_ZN7S3187C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3187C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3187C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3187C42v6Ev,
};
static  VTT_ENTRY vtt_S3187C2[] = {
  {&(_ZTV7S3187C2[3]),  3,31},
  {&(_tg__ZTV7S3187C5__7S3187C2[3]),  3,10},
  {&(_tg__ZTV7S3187C4__7S3187C5__7S3187C2[6]),  6,10},
  {&(_ZTV7S3187C2[27]),  27,31},
  {&(_ZTV7S3187C2[14]),  14,31},
};
extern VTBL_ENTRY _ZTI7S3187C2[];
extern  VTBL_ENTRY _ZTV7S3187C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3187C2[];
Class_Descriptor cd_S3187C2 = {  "S3187C2", // class name
  bases_S3187C2, 5,
  &(vtc_S3187C2[0]), // expected_vtbl_contents
  &(vtt_S3187C2[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S3187C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3187C2),31, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3187C2),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3187C1  : S3187C2 {
  ::S19905C17_nt s3187c1f0;
  virtual void  v1(); // _ZN7S3187C12v1Ev
  virtual void  v2(); // _ZN7S3187C12v2Ev
  ~S3187C1(); // tgen
  S3187C1(); // tgen
};
//SIG(1 S3187C1) C1{ BC2{ BC3{ v3} VBC4{ BC3 v4 v5 v6} BC5{ VBC4 BC3 v7 v8 v9 v10 v11 v12 Fi} v13 v14 v15 v16 v17 v18 v19 Fc} v1 v2 FC6{}}


void  S3187C1 ::v1(){vfunc_called(this, "_ZN7S3187C12v1Ev");}
void  S3187C1 ::v2(){vfunc_called(this, "_ZN7S3187C12v2Ev");}
S3187C1 ::~S3187C1(){ note_dtor("S3187C1", this);} // tgen
S3187C1 ::S3187C1(){ note_ctor("S3187C1", this);} // tgen

static void Test_S3187C1()
{
  extern Class_Descriptor cd_S3187C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S3187C1, buf);
    S3187C1 *dp, &lv = *(dp=new (buf) S3187C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S3187C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3187C1)");
    /*is_ambiguous_... S3187C2::S3187C3 */ AMB_check_base_class_offset(lv, (S3187C3*)(S3187C2*), 0, "S3187C1");
    check_base_class_offset(lv, (S3187C3*)(S3187C4*), ABISELECT(24,16), "S3187C1");
    check_base_class_offset(lv, (S3187C4*)(S3187C2*), ABISELECT(24,16), "S3187C1");
    check_base_class_offset(lv, (S3187C4*)(S3187C5*)(S3187C2*), ABISELECT(24,16), "S3187C1");
    /*is_ambiguous_... S3187C5::S3187C3 */ AMB_check_base_class_offset(lv, (S3187C3*)(S3187C5*)(S3187C2*), ABISELECT(8,4), "S3187C1");
    check_base_class_offset(lv, (S3187C5*)(S3187C2*), ABISELECT(8,4), "S3187C1");
    check_base_class_offset(lv, (S3187C2*), 0, "S3187C1");
    check_field_offset(lv, s3187c1f0, ABISELECT(21,13), "S3187C1.s3187c1f0");
    test_class_info(&lv, &cd_S3187C1);
    dp->~S3187C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3187C1(Test_S3187C1, "S3187C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S3187C1C1Ev();
extern void _ZN7S3187C1D1Ev();
Name_Map name_map_S3187C1[] = {
  NSPAIR(_ZN7S3187C1C1Ev),
  NSPAIR(_ZN7S3187C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3187C3;
extern VTBL_ENTRY _ZTI7S3187C3[];
extern  VTBL_ENTRY _ZTV7S3187C3[];
extern Class_Descriptor cd_S3187C3;
extern VTBL_ENTRY _ZTI7S3187C3[];
extern  VTBL_ENTRY _ZTV7S3187C3[];
extern Class_Descriptor cd_S3187C4;
extern VTBL_ENTRY _ZTI7S3187C4[];
extern  VTBL_ENTRY _ZTV7S3187C4[];
extern Class_Descriptor cd_S3187C3;
extern VTBL_ENTRY _ZTI7S3187C3[];
extern  VTBL_ENTRY _ZTV7S3187C3[];
extern Class_Descriptor cd_S3187C5;
extern VTBL_ENTRY _ZTI7S3187C5[];
extern  VTBL_ENTRY _ZTV7S3187C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3187C5[];
extern Class_Descriptor cd_S3187C2;
extern VTBL_ENTRY _ZTI7S3187C2[];
extern  VTBL_ENTRY _ZTV7S3187C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3187C2[];
static Base_Class bases_S3187C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3187C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S3187C3,    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
    2, //immediately_derived
  0, 0},
  {&cd_S3187C4,    ABISELECT(24,16), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3187C3,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3187C5,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3187C2,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3187C1[];
extern void _ZN7S3187C32v3Ev();
extern void _ZN7S3187C23v13Ev();
extern void _ZN7S3187C23v14Ev();
extern void _ZN7S3187C23v15Ev();
extern void _ZN7S3187C23v16Ev();
extern void _ZN7S3187C23v17Ev();
extern void _ZN7S3187C23v18Ev();
extern void _ZN7S3187C23v19Ev();
extern void _ZN7S3187C12v1Ev();
extern void _ZN7S3187C12v2Ev();
extern void _ZN7S3187C32v3Ev();
extern void _ZN7S3187C52v7Ev();
extern void _ZN7S3187C52v8Ev();
extern void _ZN7S3187C52v9Ev();
extern void _ZN7S3187C53v10Ev();
extern void _ZN7S3187C53v11Ev();
extern void _ZN7S3187C53v12Ev();
extern void _ZN7S3187C32v3Ev();
extern void _ZN7S3187C42v4Ev();
extern void _ZN7S3187C42v5Ev();
extern void _ZN7S3187C42v6Ev();
static  VTBL_ENTRY vtc_S3187C1[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3187C1[0]),
  (VTBL_ENTRY)&_ZN7S3187C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3187C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3187C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3187C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3187C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3187C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3187C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3187C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3187C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3187C12v2Ev,
  ABISELECT(16,12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3187C1[0]),
  (VTBL_ENTRY)&_ZN7S3187C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3187C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3187C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3187C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3187C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3187C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3187C53v12Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S3187C1[0]),
  (VTBL_ENTRY)&_ZN7S3187C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3187C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3187C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3187C42v6Ev,
};
extern VTBL_ENTRY _ZTV7S3187C1[];
extern void _ZN7S3187C32v3Ev();
extern void _ZN7S3187C23v13Ev();
extern void _ZN7S3187C23v14Ev();
extern void _ZN7S3187C23v15Ev();
extern void _ZN7S3187C23v16Ev();
extern void _ZN7S3187C23v17Ev();
extern void _ZN7S3187C23v18Ev();
extern void _ZN7S3187C23v19Ev();
static  VTBL_ENTRY _tg__ZTV7S3187C2__7S3187C1[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3187C2[0]),
  (VTBL_ENTRY)&_ZN7S3187C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3187C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3187C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3187C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3187C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3187C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3187C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3187C23v19Ev,
};
extern void _ZN7S3187C32v3Ev();
extern void _ZN7S3187C52v7Ev();
extern void _ZN7S3187C52v8Ev();
extern void _ZN7S3187C52v9Ev();
extern void _ZN7S3187C53v10Ev();
extern void _ZN7S3187C53v11Ev();
extern void _ZN7S3187C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S3187C57S3187C2__7S3187C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3187C5[0]),
  (VTBL_ENTRY)&_ZN7S3187C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3187C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3187C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3187C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3187C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3187C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3187C53v12Ev,
};
extern void _ZN7S3187C32v3Ev();
extern void _ZN7S3187C42v4Ev();
extern void _ZN7S3187C42v5Ev();
extern void _ZN7S3187C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3187C4__7S3187C57S3187C2__7S3187C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S3187C5[0]),
  (VTBL_ENTRY)&_ZN7S3187C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3187C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3187C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3187C42v6Ev,
};
extern void _ZN7S3187C32v3Ev();
extern void _ZN7S3187C42v4Ev();
extern void _ZN7S3187C42v5Ev();
extern void _ZN7S3187C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3187C4__7S3187C2__7S3187C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S3187C2[0]),
  (VTBL_ENTRY)&_ZN7S3187C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3187C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3187C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3187C42v6Ev,
};
extern void _ZN7S3187C32v3Ev();
extern void _ZN7S3187C52v7Ev();
extern void _ZN7S3187C52v8Ev();
extern void _ZN7S3187C52v9Ev();
extern void _ZN7S3187C53v10Ev();
extern void _ZN7S3187C53v11Ev();
extern void _ZN7S3187C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S3187C5__7S3187C2__7S3187C1[] = {
  ABISELECT(16,12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3187C2[0]),
  (VTBL_ENTRY)&_ZN7S3187C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3187C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3187C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3187C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3187C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3187C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3187C53v12Ev,
};
static  VTT_ENTRY vtt_S3187C1[] = {
  {&(_ZTV7S3187C1[3]),  3,33},
  {&(_tg__ZTV7S3187C2__7S3187C1[3]),  3,11},
  {&(_tg__ZTV7S3187C57S3187C2__7S3187C1[3]),  3,10},
  {&(_tg__ZTV7S3187C4__7S3187C57S3187C2__7S3187C1[6]),  6,10},
  {&(_tg__ZTV7S3187C4__7S3187C2__7S3187C1[6]),  6,10},
  {&(_tg__ZTV7S3187C5__7S3187C2__7S3187C1[3]),  3,10},
  {&(_ZTV7S3187C1[29]),  29,33},
  {&(_ZTV7S3187C1[16]),  16,33},
};
extern VTBL_ENTRY _ZTI7S3187C1[];
extern  VTBL_ENTRY _ZTV7S3187C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3187C1[];
Class_Descriptor cd_S3187C1 = {  "S3187C1", // class name
  bases_S3187C1, 6,
  &(vtc_S3187C1[0]), // expected_vtbl_contents
  &(vtt_S3187C1[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S3187C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3187C1),33, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3187C1),8, //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  S7116C2  {
  __tsi64 s7116c2f0;
  int s7116c2f1;
  virtual  ~S7116C2(); // _ZN7S7116C2D1Ev
  virtual void  v7(); // _ZN7S7116C22v7Ev
  virtual void  v8(); // _ZN7S7116C22v8Ev
  S7116C2(); // tgen
};
//SIG(-1 S7116C2) C1{ vd v1 v2 FL Fi}


 S7116C2 ::~S7116C2(){ note_dtor("S7116C2", this);}
void  S7116C2 ::v7(){vfunc_called(this, "_ZN7S7116C22v7Ev");}
void  S7116C2 ::v8(){vfunc_called(this, "_ZN7S7116C22v8Ev");}
S7116C2 ::S7116C2(){ note_ctor("S7116C2", this);} // tgen

static void Test_S7116C2()
{
  extern Class_Descriptor cd_S7116C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S7116C2, buf);
    S7116C2 *dp, &lv = *(dp=new (buf) S7116C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S7116C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7116C2)");
    check_field_offset(lv, s7116c2f0, ABISELECT(8,4), "S7116C2.s7116c2f0");
    check_field_offset(lv, s7116c2f1, ABISELECT(16,12), "S7116C2.s7116c2f1");
    test_class_info(&lv, &cd_S7116C2);
    dp->~S7116C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7116C2(Test_S7116C2, "S7116C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S7116C2C1Ev();
extern void _ZN7S7116C2D1Ev();
Name_Map name_map_S7116C2[] = {
  NSPAIR(_ZN7S7116C2C1Ev),
  NSPAIR(_ZN7S7116C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7116C2[];
extern void _ZN7S7116C2D1Ev();
extern void _ZN7S7116C2D0Ev();
extern void _ZN7S7116C22v7Ev();
extern void _ZN7S7116C22v8Ev();
static  VTBL_ENTRY vtc_S7116C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7116C2[0]),
  (VTBL_ENTRY)&_ZN7S7116C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7116C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7116C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7116C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S7116C2[];
extern  VTBL_ENTRY _ZTV7S7116C2[];
Class_Descriptor cd_S7116C2 = {  "S7116C2", // class name
  0,0,//no base classes
  &(vtc_S7116C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S7116C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7116C2),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  S7116C4  {
  virtual void  v9(); // _ZN7S7116C42v9Ev
  virtual void  v10(); // _ZN7S7116C43v10Ev
  virtual void  v11(); // _ZN7S7116C43v11Ev
  virtual void  v12(); // _ZN7S7116C43v12Ev
  virtual void  v13(); // _ZN7S7116C43v13Ev
  virtual void  v14(); // _ZN7S7116C43v14Ev
  virtual void  v15(); // _ZN7S7116C43v15Ev
  virtual void  v16(); // _ZN7S7116C43v16Ev
  virtual void  v17(); // _ZN7S7116C43v17Ev
  ~S7116C4(); // tgen
  S7116C4(); // tgen
};
//SIG(-1 S7116C4) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S7116C4 ::v9(){vfunc_called(this, "_ZN7S7116C42v9Ev");}
void  S7116C4 ::v10(){vfunc_called(this, "_ZN7S7116C43v10Ev");}
void  S7116C4 ::v11(){vfunc_called(this, "_ZN7S7116C43v11Ev");}
void  S7116C4 ::v12(){vfunc_called(this, "_ZN7S7116C43v12Ev");}
void  S7116C4 ::v13(){vfunc_called(this, "_ZN7S7116C43v13Ev");}
void  S7116C4 ::v14(){vfunc_called(this, "_ZN7S7116C43v14Ev");}
void  S7116C4 ::v15(){vfunc_called(this, "_ZN7S7116C43v15Ev");}
void  S7116C4 ::v16(){vfunc_called(this, "_ZN7S7116C43v16Ev");}
void  S7116C4 ::v17(){vfunc_called(this, "_ZN7S7116C43v17Ev");}
S7116C4 ::~S7116C4(){ note_dtor("S7116C4", this);} // tgen
S7116C4 ::S7116C4(){ note_ctor("S7116C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7116C4C1Ev();
extern void _ZN7S7116C4D1Ev();
Name_Map name_map_S7116C4[] = {
  NSPAIR(_ZN7S7116C4C1Ev),
  NSPAIR(_ZN7S7116C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7116C4[];
extern void _ZN7S7116C42v9Ev();
extern void _ZN7S7116C43v10Ev();
extern void _ZN7S7116C43v11Ev();
extern void _ZN7S7116C43v12Ev();
extern void _ZN7S7116C43v13Ev();
extern void _ZN7S7116C43v14Ev();
extern void _ZN7S7116C43v15Ev();
extern void _ZN7S7116C43v16Ev();
extern void _ZN7S7116C43v17Ev();
static  VTBL_ENTRY vtc_S7116C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7116C4[0]),
  (VTBL_ENTRY)&_ZN7S7116C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v17Ev,
};
extern VTBL_ENTRY _ZTI7S7116C4[];
extern  VTBL_ENTRY _ZTV7S7116C4[];
Class_Descriptor cd_S7116C4 = {  "S7116C4", // class name
  0,0,//no base classes
  &(vtc_S7116C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7116C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7116C4),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  S7116C3  : virtual S7116C4 {
  __tsi64 s7116c3f0;
  virtual void  v18(); // _ZN7S7116C33v18Ev
  virtual void  v19(); // _ZN7S7116C33v19Ev
  virtual void  v20(); // _ZN7S7116C33v20Ev
  virtual void  v21(); // _ZN7S7116C33v21Ev
  ~S7116C3(); // tgen
  S7116C3(); // tgen
};
//SIG(-1 S7116C3) C1{ VBC2{ v5 v6 v7 v8 v9 v10 v11 v12 v13} v1 v2 v3 v4 FL}


void  S7116C3 ::v18(){vfunc_called(this, "_ZN7S7116C33v18Ev");}
void  S7116C3 ::v19(){vfunc_called(this, "_ZN7S7116C33v19Ev");}
void  S7116C3 ::v20(){vfunc_called(this, "_ZN7S7116C33v20Ev");}
void  S7116C3 ::v21(){vfunc_called(this, "_ZN7S7116C33v21Ev");}
S7116C3 ::~S7116C3(){ note_dtor("S7116C3", this);} // tgen
S7116C3 ::S7116C3(){ note_ctor("S7116C3", this);} // tgen

static void Test_S7116C3()
{
  extern Class_Descriptor cd_S7116C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S7116C3, buf);
    S7116C3 *dp, &lv = *(dp=new (buf) S7116C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S7116C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7116C3)");
    check_base_class_offset(lv, (S7116C4*), 0, "S7116C3");
    check_field_offset(lv, s7116c3f0, ABISELECT(8,4), "S7116C3.s7116c3f0");
    test_class_info(&lv, &cd_S7116C3);
    dp->~S7116C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7116C3(Test_S7116C3, "S7116C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S7116C3C1Ev();
extern void _ZN7S7116C3D1Ev();
Name_Map name_map_S7116C3[] = {
  NSPAIR(_ZN7S7116C3C1Ev),
  NSPAIR(_ZN7S7116C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7116C4;
extern VTBL_ENTRY _ZTI7S7116C4[];
extern  VTBL_ENTRY _ZTV7S7116C4[];
static Base_Class bases_S7116C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7116C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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 _ZTI7S7116C3[];
extern void _ZN7S7116C42v9Ev();
extern void _ZN7S7116C43v10Ev();
extern void _ZN7S7116C43v11Ev();
extern void _ZN7S7116C43v12Ev();
extern void _ZN7S7116C43v13Ev();
extern void _ZN7S7116C43v14Ev();
extern void _ZN7S7116C43v15Ev();
extern void _ZN7S7116C43v16Ev();
extern void _ZN7S7116C43v17Ev();
extern void _ZN7S7116C33v18Ev();
extern void _ZN7S7116C33v19Ev();
extern void _ZN7S7116C33v20Ev();
extern void _ZN7S7116C33v21Ev();
static  VTBL_ENTRY vtc_S7116C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7116C3[0]),
  (VTBL_ENTRY)&_ZN7S7116C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7116C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7116C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7116C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7116C33v21Ev,
};
extern VTBL_ENTRY _ZTV7S7116C3[];
static  VTT_ENTRY vtt_S7116C3[] = {
  {&(_ZTV7S7116C3[12]),  12,25},
  {&(_ZTV7S7116C3[12]),  12,25},
};
extern VTBL_ENTRY _ZTI7S7116C3[];
extern  VTBL_ENTRY _ZTV7S7116C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7116C3[];
Class_Descriptor cd_S7116C3 = {  "S7116C3", // class name
  bases_S7116C3, 1,
  &(vtc_S7116C3[0]), // expected_vtbl_contents
  &(vtt_S7116C3[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S7116C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7116C3),25, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7116C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7116C1  : S7116C2 , S7116C3 {
  int s7116c1f0[2];
  virtual void  v1(); // _ZN7S7116C12v1Ev
  virtual void  v2(); // _ZN7S7116C12v2Ev
  virtual void  v3(); // _ZN7S7116C12v3Ev
  virtual void  v4(); // _ZN7S7116C12v4Ev
  virtual void  v5(); // _ZN7S7116C12v5Ev
  virtual void  v6(); // _ZN7S7116C12v6Ev
  ~S7116C1(); // tgen
  S7116C1(); // tgen
};
//SIG(1 S7116C1) C1{ BC2{ vd v7 v8 FL Fi} BC3{ VBC4{ v9 v10 v11 v12 v13 v14 v15 v16 v17} v18 v19 v20 v21 FL} v1 v2 v3 v4 v5 v6 Fi[2]}


void  S7116C1 ::v1(){vfunc_called(this, "_ZN7S7116C12v1Ev");}
void  S7116C1 ::v2(){vfunc_called(this, "_ZN7S7116C12v2Ev");}
void  S7116C1 ::v3(){vfunc_called(this, "_ZN7S7116C12v3Ev");}
void  S7116C1 ::v4(){vfunc_called(this, "_ZN7S7116C12v4Ev");}
void  S7116C1 ::v5(){vfunc_called(this, "_ZN7S7116C12v5Ev");}
void  S7116C1 ::v6(){vfunc_called(this, "_ZN7S7116C12v6Ev");}
S7116C1 ::~S7116C1(){ note_dtor("S7116C1", this);} // tgen
S7116C1 ::S7116C1(){ note_ctor("S7116C1", this);} // tgen

static void Test_S7116C1()
{
  extern Class_Descriptor cd_S7116C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S7116C1, buf);
    S7116C1 *dp, &lv = *(dp=new (buf) S7116C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S7116C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7116C1)");
    check_base_class_offset(lv, (S7116C2*), 0, "S7116C1");
    check_base_class_offset(lv, (S7116C4*)(S7116C3*), ABISELECT(24,16), "S7116C1");
    check_base_class_offset(lv, (S7116C3*), ABISELECT(24,16), "S7116C1");
    check_field_offset(lv, s7116c1f0, ABISELECT(40,28), "S7116C1.s7116c1f0");
    test_class_info(&lv, &cd_S7116C1);
    dp->~S7116C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7116C1(Test_S7116C1, "S7116C1", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN7S7116C1C1Ev();
extern void _ZN7S7116C1D1Ev();
Name_Map name_map_S7116C1[] = {
  NSPAIR(_ZN7S7116C1C1Ev),
  NSPAIR(_ZN7S7116C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7116C2;
extern VTBL_ENTRY _ZTI7S7116C2[];
extern  VTBL_ENTRY _ZTV7S7116C2[];
extern Class_Descriptor cd_S7116C4;
extern VTBL_ENTRY _ZTI7S7116C4[];
extern  VTBL_ENTRY _ZTV7S7116C4[];
extern Class_Descriptor cd_S7116C3;
extern VTBL_ENTRY _ZTI7S7116C3[];
extern  VTBL_ENTRY _ZTV7S7116C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7116C3[];
static Base_Class bases_S7116C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7116C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7116C4,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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
    2, //immediately_derived
  0, 1},
  {&cd_S7116C3,    ABISELECT(24,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    4, //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 _ZTI7S7116C1[];
extern void _ZN7S7116C1D1Ev();
extern void _ZN7S7116C1D0Ev();
extern void _ZN7S7116C22v7Ev();
extern void _ZN7S7116C22v8Ev();
extern void _ZN7S7116C12v1Ev();
extern void _ZN7S7116C12v2Ev();
extern void _ZN7S7116C12v3Ev();
extern void _ZN7S7116C12v4Ev();
extern void _ZN7S7116C12v5Ev();
extern void _ZN7S7116C12v6Ev();
extern void _ZN7S7116C42v9Ev();
extern void _ZN7S7116C43v10Ev();
extern void _ZN7S7116C43v11Ev();
extern void _ZN7S7116C43v12Ev();
extern void _ZN7S7116C43v13Ev();
extern void _ZN7S7116C43v14Ev();
extern void _ZN7S7116C43v15Ev();
extern void _ZN7S7116C43v16Ev();
extern void _ZN7S7116C43v17Ev();
extern void _ZN7S7116C33v18Ev();
extern void _ZN7S7116C33v19Ev();
extern void _ZN7S7116C33v20Ev();
extern void _ZN7S7116C33v21Ev();
static  VTBL_ENTRY vtc_S7116C1[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7116C1[0]),
  (VTBL_ENTRY)&_ZN7S7116C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7116C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7116C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7116C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7116C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7116C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7116C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7116C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7116C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7116C12v6Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7116C1[0]),
  (VTBL_ENTRY)&_ZN7S7116C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7116C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7116C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7116C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7116C33v21Ev,
};
extern VTBL_ENTRY _ZTV7S7116C1[];
extern void _ZN7S7116C42v9Ev();
extern void _ZN7S7116C43v10Ev();
extern void _ZN7S7116C43v11Ev();
extern void _ZN7S7116C43v12Ev();
extern void _ZN7S7116C43v13Ev();
extern void _ZN7S7116C43v14Ev();
extern void _ZN7S7116C43v15Ev();
extern void _ZN7S7116C43v16Ev();
extern void _ZN7S7116C43v17Ev();
extern void _ZN7S7116C33v18Ev();
extern void _ZN7S7116C33v19Ev();
extern void _ZN7S7116C33v20Ev();
extern void _ZN7S7116C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7116C3__7S7116C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7116C3[0]),
  (VTBL_ENTRY)&_ZN7S7116C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7116C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7116C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7116C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7116C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7116C33v21Ev,
};
static  VTT_ENTRY vtt_S7116C1[] = {
  {&(_ZTV7S7116C1[3]),  3,38},
  {&(_tg__ZTV7S7116C3__7S7116C1[12]),  12,25},
  {&(_tg__ZTV7S7116C3__7S7116C1[12]),  12,25},
  {&(_ZTV7S7116C1[25]),  25,38},
  {&(_ZTV7S7116C1[25]),  25,38},
};
extern VTBL_ENTRY _ZTI7S7116C1[];
extern  VTBL_ENTRY _ZTV7S7116C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7116C1[];
Class_Descriptor cd_S7116C1 = {  "S7116C1", // class name
  bases_S7116C1, 3,
  &(vtc_S7116C1[0]), // expected_vtbl_contents
  &(vtt_S7116C1[0]), // expected_vtt_contents
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI7S7116C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7116C1),38, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7116C1),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3744C2  : S1679C4_nt {
  virtual void  v8(); // _ZN7S3744C22v8Ev
  virtual void  v9(); // _ZN7S3744C22v9Ev
  virtual void  v10(); // _ZN7S3744C23v10Ev
  virtual void  v11(); // _ZN7S3744C23v11Ev
  virtual void  v12(); // _ZN7S3744C23v12Ev
  virtual void  v13(); // _ZN7S3744C23v13Ev
  virtual void  v14(); // _ZN7S3744C23v14Ev
  virtual void  v15(); // _ZN7S3744C23v15Ev
  virtual void  v16(); // _ZN7S3744C23v16Ev
  virtual void  v17(); // _ZN7S3744C23v17Ev
  virtual void  v18(); // _ZN7S3744C23v18Ev
  virtual void  v19(); // _ZN7S3744C23v19Ev
  ~S3744C2(); // tgen
  S3744C2(); // tgen
};
//SIG(-1 S3744C2) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S3744C2 ::v8(){vfunc_called(this, "_ZN7S3744C22v8Ev");}
void  S3744C2 ::v9(){vfunc_called(this, "_ZN7S3744C22v9Ev");}
void  S3744C2 ::v10(){vfunc_called(this, "_ZN7S3744C23v10Ev");}
void  S3744C2 ::v11(){vfunc_called(this, "_ZN7S3744C23v11Ev");}
void  S3744C2 ::v12(){vfunc_called(this, "_ZN7S3744C23v12Ev");}
void  S3744C2 ::v13(){vfunc_called(this, "_ZN7S3744C23v13Ev");}
void  S3744C2 ::v14(){vfunc_called(this, "_ZN7S3744C23v14Ev");}
void  S3744C2 ::v15(){vfunc_called(this, "_ZN7S3744C23v15Ev");}
void  S3744C2 ::v16(){vfunc_called(this, "_ZN7S3744C23v16Ev");}
void  S3744C2 ::v17(){vfunc_called(this, "_ZN7S3744C23v17Ev");}
void  S3744C2 ::v18(){vfunc_called(this, "_ZN7S3744C23v18Ev");}
void  S3744C2 ::v19(){vfunc_called(this, "_ZN7S3744C23v19Ev");}
S3744C2 ::~S3744C2(){ note_dtor("S3744C2", this);} // tgen
S3744C2 ::S3744C2(){ note_ctor("S3744C2", this);} // tgen

static void Test_S3744C2()
{
  extern Class_Descriptor cd_S3744C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3744C2, buf);
    S3744C2 *dp, &lv = *(dp=new (buf) S3744C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3744C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3744C2)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S3744C2");
    test_class_info(&lv, &cd_S3744C2);
    dp->~S3744C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3744C2(Test_S3744C2, "S3744C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3744C2C1Ev();
extern void _ZN7S3744C2D1Ev();
Name_Map name_map_S3744C2[] = {
  NSPAIR(_ZN7S3744C2C1Ev),
  NSPAIR(_ZN7S3744C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S3744C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S3744C2[];
extern void _ZN7S3744C2D1Ev();
extern void _ZN7S3744C2D0Ev();
extern void _ZN7S3744C22v8Ev();
extern void _ZN7S3744C22v9Ev();
extern void _ZN7S3744C23v10Ev();
extern void _ZN7S3744C23v11Ev();
extern void _ZN7S3744C23v12Ev();
extern void _ZN7S3744C23v13Ev();
extern void _ZN7S3744C23v14Ev();
extern void _ZN7S3744C23v15Ev();
extern void _ZN7S3744C23v16Ev();
extern void _ZN7S3744C23v17Ev();
extern void _ZN7S3744C23v18Ev();
extern void _ZN7S3744C23v19Ev();
static  VTBL_ENTRY vtc_S3744C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3744C2[0]),
  (VTBL_ENTRY)&_ZN7S3744C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3744C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3744C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3744C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3744C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3744C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3744C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3744C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3744C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3744C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3744C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3744C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3744C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3744C23v19Ev,
};
extern VTBL_ENTRY _ZTI7S3744C2[];
extern  VTBL_ENTRY _ZTV7S3744C2[];
Class_Descriptor cd_S3744C2 = {  "S3744C2", // class name
  bases_S3744C2, 1,
  &(vtc_S3744C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3744C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3744C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3744C1  : S3744C2 {
  char s3744c1f0[2];
  ::S3765C5_nt s3744c1f1;
  virtual  ~S3744C1(); // _ZN7S3744C1D1Ev
  virtual void  v1(); // _ZN7S3744C12v1Ev
  virtual void  v2(); // _ZN7S3744C12v2Ev
  virtual void  v3(); // _ZN7S3744C12v3Ev
  virtual void  v4(); // _ZN7S3744C12v4Ev
  virtual void  v5(); // _ZN7S3744C12v5Ev
  virtual void  v6(); // _ZN7S3744C12v6Ev
  virtual void  v7(); // _ZN7S3744C12v7Ev
  S3744C1(); // tgen
};
//SIG(1 S3744C1) C1{ BC2{ BC3{ vd m Fi} v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19} vd v1 v2 v3 v4 v5 v6 v7 Fc[2] FC4{ m Fp[2]}}


 S3744C1 ::~S3744C1(){ note_dtor("S3744C1", this);}
void  S3744C1 ::v1(){vfunc_called(this, "_ZN7S3744C12v1Ev");}
void  S3744C1 ::v2(){vfunc_called(this, "_ZN7S3744C12v2Ev");}
void  S3744C1 ::v3(){vfunc_called(this, "_ZN7S3744C12v3Ev");}
void  S3744C1 ::v4(){vfunc_called(this, "_ZN7S3744C12v4Ev");}
void  S3744C1 ::v5(){vfunc_called(this, "_ZN7S3744C12v5Ev");}
void  S3744C1 ::v6(){vfunc_called(this, "_ZN7S3744C12v6Ev");}
void  S3744C1 ::v7(){vfunc_called(this, "_ZN7S3744C12v7Ev");}
S3744C1 ::S3744C1(){ note_ctor("S3744C1", this);} // tgen

static void Test_S3744C1()
{
  extern Class_Descriptor cd_S3744C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S3744C1, buf);
    S3744C1 *dp, &lv = *(dp=new (buf) S3744C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S3744C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3744C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S3744C2*), 0, "S3744C1");
    check_base_class_offset(lv, (S3744C2*), 0, "S3744C1");
    check_field_offset(lv, s3744c1f0, ABISELECT(12,8), "S3744C1.s3744c1f0");
    check_field_offset(lv, s3744c1f1, ABISELECT(16,12), "S3744C1.s3744c1f1");
    test_class_info(&lv, &cd_S3744C1);
    dp->~S3744C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3744C1(Test_S3744C1, "S3744C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S3744C1C1Ev();
extern void _ZN7S3744C1D1Ev();
Name_Map name_map_S3744C1[] = {
  NSPAIR(_ZN7S3744C1C1Ev),
  NSPAIR(_ZN7S3744C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S3744C2;
extern VTBL_ENTRY _ZTI7S3744C2[];
extern  VTBL_ENTRY _ZTV7S3744C2[];
static Base_Class bases_S3744C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S3744C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3744C1[];
extern void _ZN7S3744C1D1Ev();
extern void _ZN7S3744C1D0Ev();
extern void _ZN7S3744C22v8Ev();
extern void _ZN7S3744C22v9Ev();
extern void _ZN7S3744C23v10Ev();
extern void _ZN7S3744C23v11Ev();
extern void _ZN7S3744C23v12Ev();
extern void _ZN7S3744C23v13Ev();
extern void _ZN7S3744C23v14Ev();
extern void _ZN7S3744C23v15Ev();
extern void _ZN7S3744C23v16Ev();
extern void _ZN7S3744C23v17Ev();
extern void _ZN7S3744C23v18Ev();
extern void _ZN7S3744C23v19Ev();
extern void _ZN7S3744C12v1Ev();
extern void _ZN7S3744C12v2Ev();
extern void _ZN7S3744C12v3Ev();
extern void _ZN7S3744C12v4Ev();
extern void _ZN7S3744C12v5Ev();
extern void _ZN7S3744C12v6Ev();
extern void _ZN7S3744C12v7Ev();
static  VTBL_ENTRY vtc_S3744C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3744C1[0]),
  (VTBL_ENTRY)&_ZN7S3744C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3744C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3744C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3744C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3744C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3744C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3744C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3744C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3744C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3744C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3744C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3744C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3744C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3744C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3744C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3744C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3744C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3744C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3744C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3744C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3744C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S3744C1[];
extern  VTBL_ENTRY _ZTV7S3744C1[];
Class_Descriptor cd_S3744C1 = {  "S3744C1", // class name
  bases_S3744C1, 2,
  &(vtc_S3744C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S3744C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3744C1),23, //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  S3746C2  : S1679C4_nt {
  virtual void  v8(); // _ZN7S3746C22v8Ev
  virtual void  v9(); // _ZN7S3746C22v9Ev
  virtual void  v10(); // _ZN7S3746C23v10Ev
  virtual void  v11(); // _ZN7S3746C23v11Ev
  virtual void  v12(); // _ZN7S3746C23v12Ev
  virtual void  v13(); // _ZN7S3746C23v13Ev
  virtual void  v14(); // _ZN7S3746C23v14Ev
  virtual void  v15(); // _ZN7S3746C23v15Ev
  virtual void  v16(); // _ZN7S3746C23v16Ev
  virtual void  v17(); // _ZN7S3746C23v17Ev
  virtual void  v18(); // _ZN7S3746C23v18Ev
  virtual void  v19(); // _ZN7S3746C23v19Ev
  ~S3746C2(); // tgen
  S3746C2(); // tgen
};
//SIG(-1 S3746C2) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S3746C2 ::v8(){vfunc_called(this, "_ZN7S3746C22v8Ev");}
void  S3746C2 ::v9(){vfunc_called(this, "_ZN7S3746C22v9Ev");}
void  S3746C2 ::v10(){vfunc_called(this, "_ZN7S3746C23v10Ev");}
void  S3746C2 ::v11(){vfunc_called(this, "_ZN7S3746C23v11Ev");}
void  S3746C2 ::v12(){vfunc_called(this, "_ZN7S3746C23v12Ev");}
void  S3746C2 ::v13(){vfunc_called(this, "_ZN7S3746C23v13Ev");}
void  S3746C2 ::v14(){vfunc_called(this, "_ZN7S3746C23v14Ev");}
void  S3746C2 ::v15(){vfunc_called(this, "_ZN7S3746C23v15Ev");}
void  S3746C2 ::v16(){vfunc_called(this, "_ZN7S3746C23v16Ev");}
void  S3746C2 ::v17(){vfunc_called(this, "_ZN7S3746C23v17Ev");}
void  S3746C2 ::v18(){vfunc_called(this, "_ZN7S3746C23v18Ev");}
void  S3746C2 ::v19(){vfunc_called(this, "_ZN7S3746C23v19Ev");}
S3746C2 ::~S3746C2(){ note_dtor("S3746C2", this);} // tgen
S3746C2 ::S3746C2(){ note_ctor("S3746C2", this);} // tgen

static void Test_S3746C2()
{
  extern Class_Descriptor cd_S3746C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3746C2, buf);
    S3746C2 *dp, &lv = *(dp=new (buf) S3746C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3746C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3746C2)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S3746C2");
    test_class_info(&lv, &cd_S3746C2);
    dp->~S3746C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3746C2(Test_S3746C2, "S3746C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3746C2C1Ev();
extern void _ZN7S3746C2D1Ev();
Name_Map name_map_S3746C2[] = {
  NSPAIR(_ZN7S3746C2C1Ev),
  NSPAIR(_ZN7S3746C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S3746C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S3746C2[];
extern void _ZN7S3746C2D1Ev();
extern void _ZN7S3746C2D0Ev();
extern void _ZN7S3746C22v8Ev();
extern void _ZN7S3746C22v9Ev();
extern void _ZN7S3746C23v10Ev();
extern void _ZN7S3746C23v11Ev();
extern void _ZN7S3746C23v12Ev();
extern void _ZN7S3746C23v13Ev();
extern void _ZN7S3746C23v14Ev();
extern void _ZN7S3746C23v15Ev();
extern void _ZN7S3746C23v16Ev();
extern void _ZN7S3746C23v17Ev();
extern void _ZN7S3746C23v18Ev();
extern void _ZN7S3746C23v19Ev();
static  VTBL_ENTRY vtc_S3746C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3746C2[0]),
  (VTBL_ENTRY)&_ZN7S3746C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3746C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3746C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3746C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3746C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3746C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3746C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3746C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3746C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3746C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3746C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3746C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3746C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3746C23v19Ev,
};
extern VTBL_ENTRY _ZTI7S3746C2[];
extern  VTBL_ENTRY _ZTV7S3746C2[];
Class_Descriptor cd_S3746C2 = {  "S3746C2", // class name
  bases_S3746C2, 1,
  &(vtc_S3746C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3746C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3746C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3746C1  : S3746C2 {
  ::S3765C5_nt s3746c1f0;
  char s3746c1f1[2];
  virtual  ~S3746C1(); // _ZN7S3746C1D1Ev
  virtual void  v1(); // _ZN7S3746C12v1Ev
  virtual void  v2(); // _ZN7S3746C12v2Ev
  virtual void  v3(); // _ZN7S3746C12v3Ev
  virtual void  v4(); // _ZN7S3746C12v4Ev
  virtual void  v5(); // _ZN7S3746C12v5Ev
  virtual void  v6(); // _ZN7S3746C12v6Ev
  virtual void  v7(); // _ZN7S3746C12v7Ev
  S3746C1(); // tgen
};
//SIG(1 S3746C1) C1{ BC2{ BC3{ vd m Fi} v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19} vd v1 v2 v3 v4 v5 v6 v7 FC4{ m Fp[2]} Fc[2]}


 S3746C1 ::~S3746C1(){ note_dtor("S3746C1", this);}
void  S3746C1 ::v1(){vfunc_called(this, "_ZN7S3746C12v1Ev");}
void  S3746C1 ::v2(){vfunc_called(this, "_ZN7S3746C12v2Ev");}
void  S3746C1 ::v3(){vfunc_called(this, "_ZN7S3746C12v3Ev");}
void  S3746C1 ::v4(){vfunc_called(this, "_ZN7S3746C12v4Ev");}
void  S3746C1 ::v5(){vfunc_called(this, "_ZN7S3746C12v5Ev");}
void  S3746C1 ::v6(){vfunc_called(this, "_ZN7S3746C12v6Ev");}
void  S3746C1 ::v7(){vfunc_called(this, "_ZN7S3746C12v7Ev");}
S3746C1 ::S3746C1(){ note_ctor("S3746C1", this);} // tgen

static void Test_S3746C1()
{
  extern Class_Descriptor cd_S3746C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S3746C1, buf);
    S3746C1 *dp, &lv = *(dp=new (buf) S3746C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S3746C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3746C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S3746C2*), 0, "S3746C1");
    check_base_class_offset(lv, (S3746C2*), 0, "S3746C1");
    check_field_offset(lv, s3746c1f0, ABISELECT(16,8), "S3746C1.s3746c1f0");
    check_field_offset(lv, s3746c1f1, ABISELECT(32,16), "S3746C1.s3746c1f1");
    test_class_info(&lv, &cd_S3746C1);
    dp->~S3746C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3746C1(Test_S3746C1, "S3746C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S3746C1C1Ev();
extern void _ZN7S3746C1D1Ev();
Name_Map name_map_S3746C1[] = {
  NSPAIR(_ZN7S3746C1C1Ev),
  NSPAIR(_ZN7S3746C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S3746C2;
extern VTBL_ENTRY _ZTI7S3746C2[];
extern  VTBL_ENTRY _ZTV7S3746C2[];
static Base_Class bases_S3746C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S3746C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3746C1[];
extern void _ZN7S3746C1D1Ev();
extern void _ZN7S3746C1D0Ev();
extern void _ZN7S3746C22v8Ev();
extern void _ZN7S3746C22v9Ev();
extern void _ZN7S3746C23v10Ev();
extern void _ZN7S3746C23v11Ev();
extern void _ZN7S3746C23v12Ev();
extern void _ZN7S3746C23v13Ev();
extern void _ZN7S3746C23v14Ev();
extern void _ZN7S3746C23v15Ev();
extern void _ZN7S3746C23v16Ev();
extern void _ZN7S3746C23v17Ev();
extern void _ZN7S3746C23v18Ev();
extern void _ZN7S3746C23v19Ev();
extern void _ZN7S3746C12v1Ev();
extern void _ZN7S3746C12v2Ev();
extern void _ZN7S3746C12v3Ev();
extern void _ZN7S3746C12v4Ev();
extern void _ZN7S3746C12v5Ev();
extern void _ZN7S3746C12v6Ev();
extern void _ZN7S3746C12v7Ev();
static  VTBL_ENTRY vtc_S3746C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3746C1[0]),
  (VTBL_ENTRY)&_ZN7S3746C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3746C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3746C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3746C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3746C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3746C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3746C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3746C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3746C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3746C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3746C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3746C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3746C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3746C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3746C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3746C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3746C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3746C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3746C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3746C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3746C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S3746C1[];
extern  VTBL_ENTRY _ZTV7S3746C1[];
Class_Descriptor cd_S3746C1 = {  "S3746C1", // class name
  bases_S3746C1, 2,
  &(vtc_S3746C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S3746C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3746C1),23, //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  S3754C2  : S1679C4_nt {
  virtual void  v8(); // _ZN7S3754C22v8Ev
  virtual void  v9(); // _ZN7S3754C22v9Ev
  virtual void  v10(); // _ZN7S3754C23v10Ev
  virtual void  v11(); // _ZN7S3754C23v11Ev
  virtual void  v12(); // _ZN7S3754C23v12Ev
  virtual void  v13(); // _ZN7S3754C23v13Ev
  virtual void  v14(); // _ZN7S3754C23v14Ev
  virtual void  v15(); // _ZN7S3754C23v15Ev
  virtual void  v16(); // _ZN7S3754C23v16Ev
  virtual void  v17(); // _ZN7S3754C23v17Ev
  virtual void  v18(); // _ZN7S3754C23v18Ev
  virtual void  v19(); // _ZN7S3754C23v19Ev
  ~S3754C2(); // tgen
  S3754C2(); // tgen
};
//SIG(-1 S3754C2) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S3754C2 ::v8(){vfunc_called(this, "_ZN7S3754C22v8Ev");}
void  S3754C2 ::v9(){vfunc_called(this, "_ZN7S3754C22v9Ev");}
void  S3754C2 ::v10(){vfunc_called(this, "_ZN7S3754C23v10Ev");}
void  S3754C2 ::v11(){vfunc_called(this, "_ZN7S3754C23v11Ev");}
void  S3754C2 ::v12(){vfunc_called(this, "_ZN7S3754C23v12Ev");}
void  S3754C2 ::v13(){vfunc_called(this, "_ZN7S3754C23v13Ev");}
void  S3754C2 ::v14(){vfunc_called(this, "_ZN7S3754C23v14Ev");}
void  S3754C2 ::v15(){vfunc_called(this, "_ZN7S3754C23v15Ev");}
void  S3754C2 ::v16(){vfunc_called(this, "_ZN7S3754C23v16Ev");}
void  S3754C2 ::v17(){vfunc_called(this, "_ZN7S3754C23v17Ev");}
void  S3754C2 ::v18(){vfunc_called(this, "_ZN7S3754C23v18Ev");}
void  S3754C2 ::v19(){vfunc_called(this, "_ZN7S3754C23v19Ev");}
S3754C2 ::~S3754C2(){ note_dtor("S3754C2", this);} // tgen
S3754C2 ::S3754C2(){ note_ctor("S3754C2", this);} // tgen

static void Test_S3754C2()
{
  extern Class_Descriptor cd_S3754C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3754C2, buf);
    S3754C2 *dp, &lv = *(dp=new (buf) S3754C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3754C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3754C2)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S3754C2");
    test_class_info(&lv, &cd_S3754C2);
    dp->~S3754C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3754C2(Test_S3754C2, "S3754C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3754C2C1Ev();
extern void _ZN7S3754C2D1Ev();
Name_Map name_map_S3754C2[] = {
  NSPAIR(_ZN7S3754C2C1Ev),
  NSPAIR(_ZN7S3754C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S3754C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S3754C2[];
extern void _ZN7S3754C2D1Ev();
extern void _ZN7S3754C2D0Ev();
extern void _ZN7S3754C22v8Ev();
extern void _ZN7S3754C22v9Ev();
extern void _ZN7S3754C23v10Ev();
extern void _ZN7S3754C23v11Ev();
extern void _ZN7S3754C23v12Ev();
extern void _ZN7S3754C23v13Ev();
extern void _ZN7S3754C23v14Ev();
extern void _ZN7S3754C23v15Ev();
extern void _ZN7S3754C23v16Ev();
extern void _ZN7S3754C23v17Ev();
extern void _ZN7S3754C23v18Ev();
extern void _ZN7S3754C23v19Ev();
static  VTBL_ENTRY vtc_S3754C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3754C2[0]),
  (VTBL_ENTRY)&_ZN7S3754C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3754C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3754C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3754C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3754C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3754C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3754C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3754C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3754C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3754C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3754C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3754C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3754C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3754C23v19Ev,
};
extern VTBL_ENTRY _ZTI7S3754C2[];
extern  VTBL_ENTRY _ZTV7S3754C2[];
Class_Descriptor cd_S3754C2 = {  "S3754C2", // class name
  bases_S3754C2, 1,
  &(vtc_S3754C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3754C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3754C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3754C1  : S3754C2 {
  ::S3765C5_nt s3754c1f0;
  int s3754c1f1[3];
  virtual  ~S3754C1(); // _ZN7S3754C1D1Ev
  virtual void  v1(); // _ZN7S3754C12v1Ev
  virtual void  v2(); // _ZN7S3754C12v2Ev
  virtual void  v3(); // _ZN7S3754C12v3Ev
  virtual void  v4(); // _ZN7S3754C12v4Ev
  virtual void  v5(); // _ZN7S3754C12v5Ev
  virtual void  v6(); // _ZN7S3754C12v6Ev
  virtual void  v7(); // _ZN7S3754C12v7Ev
  S3754C1(); // tgen
};
//SIG(1 S3754C1) C1{ BC2{ BC3{ vd m Fi} v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19} vd v1 v2 v3 v4 v5 v6 v7 FC4{ m Fp[2]} Fi[3]}


 S3754C1 ::~S3754C1(){ note_dtor("S3754C1", this);}
void  S3754C1 ::v1(){vfunc_called(this, "_ZN7S3754C12v1Ev");}
void  S3754C1 ::v2(){vfunc_called(this, "_ZN7S3754C12v2Ev");}
void  S3754C1 ::v3(){vfunc_called(this, "_ZN7S3754C12v3Ev");}
void  S3754C1 ::v4(){vfunc_called(this, "_ZN7S3754C12v4Ev");}
void  S3754C1 ::v5(){vfunc_called(this, "_ZN7S3754C12v5Ev");}
void  S3754C1 ::v6(){vfunc_called(this, "_ZN7S3754C12v6Ev");}
void  S3754C1 ::v7(){vfunc_called(this, "_ZN7S3754C12v7Ev");}
S3754C1 ::S3754C1(){ note_ctor("S3754C1", this);} // tgen

static void Test_S3754C1()
{
  extern Class_Descriptor cd_S3754C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S3754C1, buf);
    S3754C1 *dp, &lv = *(dp=new (buf) S3754C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S3754C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3754C1)");
    check_base_class_offset(lv, (S1679C4_nt*)(S3754C2*), 0, "S3754C1");
    check_base_class_offset(lv, (S3754C2*), 0, "S3754C1");
    check_field_offset(lv, s3754c1f0, ABISELECT(16,8), "S3754C1.s3754c1f0");
    check_field_offset(lv, s3754c1f1, ABISELECT(32,16), "S3754C1.s3754c1f1");
    test_class_info(&lv, &cd_S3754C1);
    dp->~S3754C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3754C1(Test_S3754C1, "S3754C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S3754C1C1Ev();
extern void _ZN7S3754C1D1Ev();
Name_Map name_map_S3754C1[] = {
  NSPAIR(_ZN7S3754C1C1Ev),
  NSPAIR(_ZN7S3754C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
extern Class_Descriptor cd_S3754C2;
extern VTBL_ENTRY _ZTI7S3754C2[];
extern  VTBL_ENTRY _ZTV7S3754C2[];
static Base_Class bases_S3754C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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_S3754C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3754C1[];
extern void _ZN7S3754C1D1Ev();
extern void _ZN7S3754C1D0Ev();
extern void _ZN7S3754C22v8Ev();
extern void _ZN7S3754C22v9Ev();
extern void _ZN7S3754C23v10Ev();
extern void _ZN7S3754C23v11Ev();
extern void _ZN7S3754C23v12Ev();
extern void _ZN7S3754C23v13Ev();
extern void _ZN7S3754C23v14Ev();
extern void _ZN7S3754C23v15Ev();
extern void _ZN7S3754C23v16Ev();
extern void _ZN7S3754C23v17Ev();
extern void _ZN7S3754C23v18Ev();
extern void _ZN7S3754C23v19Ev();
extern void _ZN7S3754C12v1Ev();
extern void _ZN7S3754C12v2Ev();
extern void _ZN7S3754C12v3Ev();
extern void _ZN7S3754C12v4Ev();
extern void _ZN7S3754C12v5Ev();
extern void _ZN7S3754C12v6Ev();
extern void _ZN7S3754C12v7Ev();
static  VTBL_ENTRY vtc_S3754C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3754C1[0]),
  (VTBL_ENTRY)&_ZN7S3754C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3754C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3754C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3754C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3754C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3754C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3754C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3754C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3754C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3754C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3754C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3754C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3754C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3754C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3754C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3754C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3754C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3754C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3754C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3754C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3754C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S3754C1[];
extern  VTBL_ENTRY _ZTV7S3754C1[];
Class_Descriptor cd_S3754C1 = {  "S3754C1", // class name
  bases_S3754C1, 2,
  &(vtc_S3754C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S3754C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3754C1),23, //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  S19521C4  {
  void *s19521c4f0[2];
  int s19521c4f1;
  short s19521c4f2;
  int s19521c4f3;
  virtual void  v3(); // _ZN8S19521C42v3Ev
  ~S19521C4(); // tgen
  S19521C4(); // tgen
};
//SIG(-1 S19521C4) C1{ v1 Fp[2] Fi Fs Fi}


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

static void Test_S19521C4()
{
  extern Class_Descriptor cd_S19521C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S19521C4, buf);
    S19521C4 *dp, &lv = *(dp=new (buf) S19521C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S19521C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19521C4)");
    check_field_offset(lv, s19521c4f0, ABISELECT(8,4), "S19521C4.s19521c4f0");
    check_field_offset(lv, s19521c4f1, ABISELECT(24,12), "S19521C4.s19521c4f1");
    check_field_offset(lv, s19521c4f2, ABISELECT(28,16), "S19521C4.s19521c4f2");
    check_field_offset(lv, s19521c4f3, ABISELECT(32,20), "S19521C4.s19521c4f3");
    test_class_info(&lv, &cd_S19521C4);
    dp->~S19521C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19521C4(Test_S19521C4, "S19521C4", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S19521C4C1Ev();
extern void _ZN8S19521C4D1Ev();
Name_Map name_map_S19521C4[] = {
  NSPAIR(_ZN8S19521C4C1Ev),
  NSPAIR(_ZN8S19521C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19521C4[];
extern void _ZN8S19521C42v3Ev();
static  VTBL_ENTRY vtc_S19521C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19521C4[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
};
extern VTBL_ENTRY _ZTI8S19521C4[];
extern  VTBL_ENTRY _ZTV8S19521C4[];
Class_Descriptor cd_S19521C4 = {  "S19521C4", // class name
  0,0,//no base classes
  &(vtc_S19521C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S19521C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19521C4),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  S19521C3  : virtual S19521C4 {
  ::S19521C4 s19521c3f0;
  int s19521c3f1[9];
  virtual void  v4(); // _ZN8S19521C32v4Ev
  ~S19521C3(); // tgen
  S19521C3(); // tgen
};
//SIG(-1 S19521C3) C1{ VBC2{ v2 Fp[2] Fi Fs Fi} v1 FC2 Fi[9]}


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

static void Test_S19521C3()
{
  extern Class_Descriptor cd_S19521C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,23)];
    init_test(&cd_S19521C3, buf);
    S19521C3 *dp, &lv = *(dp=new (buf) S19521C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,88), "sizeof(S19521C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19521C3)");
    check_base_class_offset(lv, (S19521C4*), ABISELECT(88,64), "S19521C3");
    check_field_offset(lv, s19521c3f0, ABISELECT(8,4), "S19521C3.s19521c3f0");
    check_field_offset(lv, s19521c3f1, ABISELECT(48,28), "S19521C3.s19521c3f1");
    test_class_info(&lv, &cd_S19521C3);
    dp->~S19521C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19521C3(Test_S19521C3, "S19521C3", ABISELECT(128,88));

#else // __cplusplus

extern void _ZN8S19521C3C1Ev();
extern void _ZN8S19521C3D1Ev();
Name_Map name_map_S19521C3[] = {
  NSPAIR(_ZN8S19521C3C1Ev),
  NSPAIR(_ZN8S19521C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19521C4;
extern VTBL_ENTRY _ZTI8S19521C4[];
extern  VTBL_ENTRY _ZTV8S19521C4[];
static Base_Class bases_S19521C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19521C4,    ABISELECT(88,64), //bcp->offset
    4, //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 _ZTI8S19521C3[];
extern void _ZN8S19521C32v4Ev();
extern void _ZN8S19521C42v3Ev();
static  VTBL_ENTRY vtc_S19521C3[] = {
  ABISELECT(88,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19521C3[0]),
  (VTBL_ENTRY)&_ZN8S19521C32v4Ev,
  0,
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI8S19521C3[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S19521C3[];
static  VTT_ENTRY vtt_S19521C3[] = {
  {&(_ZTV8S19521C3[3]),  3,8},
  {&(_ZTV8S19521C3[7]),  7,8},
};
extern VTBL_ENTRY _ZTI8S19521C3[];
extern  VTBL_ENTRY _ZTV8S19521C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19521C3[];
Class_Descriptor cd_S19521C3 = {  "S19521C3", // class name
  bases_S19521C3, 1,
  &(vtc_S19521C3[0]), // expected_vtbl_contents
  &(vtt_S19521C3[0]), // expected_vtt_contents
  ABISELECT(128,88), // object size
  NSPAIRA(_ZTI8S19521C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19521C3),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19521C3),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  S19521C2  : S19521C3 , S19521C4 {
  ~S19521C2(); // tgen
  S19521C2(); // tgen
};
//SIG(-1 S19521C2) C1{ BC2{ VBC3{ v1 Fp[2] Fi Fs Fi} v2 FC3 Fi[9]} BC3}


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

static void Test_S19521C2()
{
  extern Class_Descriptor cd_S19521C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,29)];
    init_test(&cd_S19521C2, buf);
    S19521C2 *dp, &lv = *(dp=new (buf) S19521C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,112), "sizeof(S19521C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19521C2)");
    check_base_class_offset(lv, (S19521C4*)(S19521C3*), ABISELECT(128,88), "S19521C2");
    check_base_class_offset(lv, (S19521C3*), 0, "S19521C2");
    /*is_ambiguous_... S19521C2::S19521C4 */ AMB_check_base_class_offset(lv, (S19521C4*), ABISELECT(88,64), "S19521C2");
    test_class_info(&lv, &cd_S19521C2);
    dp->~S19521C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19521C2(Test_S19521C2, "S19521C2", ABISELECT(168,112));

#else // __cplusplus

extern void _ZN8S19521C2C1Ev();
extern void _ZN8S19521C2D1Ev();
Name_Map name_map_S19521C2[] = {
  NSPAIR(_ZN8S19521C2C1Ev),
  NSPAIR(_ZN8S19521C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19521C4;
extern VTBL_ENTRY _ZTI8S19521C4[];
extern  VTBL_ENTRY _ZTV8S19521C4[];
extern Class_Descriptor cd_S19521C3;
extern VTBL_ENTRY _ZTI8S19521C3[];
extern  VTBL_ENTRY _ZTV8S19521C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19521C3[];
extern Class_Descriptor cd_S19521C4;
extern VTBL_ENTRY _ZTI8S19521C4[];
extern  VTBL_ENTRY _ZTV8S19521C4[];
static Base_Class bases_S19521C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19521C4,    ABISELECT(128,88), //bcp->offset
    7, //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_S19521C3,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19521C4,    ABISELECT(88,64), //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 _ZTI8S19521C2[];
extern void _ZN8S19521C32v4Ev();
extern void _ZN8S19521C42v3Ev();
extern void _ZN8S19521C42v3Ev();
static  VTBL_ENTRY vtc_S19521C2[] = {
  ABISELECT(128,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S19521C2[0]),
  (VTBL_ENTRY)&_ZN8S19521C32v4Ev,
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI8S19521C2[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
  0,
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI8S19521C2[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S19521C2[];
extern void _ZN8S19521C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C3__8S19521C2[] = {
  ABISELECT(128,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S19521C3[0]),
  (VTBL_ENTRY)&_ZN8S19521C32v4Ev,
};
extern void _ZN8S19521C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C4__8S19521C3__8S19521C2[] = {
  0,
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI8S19521C3[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
};
static  VTT_ENTRY vtt_S19521C2[] = {
  {&(_ZTV8S19521C2[3]),  3,11},
  {&(_tg__ZTV8S19521C3__8S19521C2[3]),  3,4},
  {&(_tg__ZTV8S19521C4__8S19521C3__8S19521C2[3]),  3,4},
  {&(_ZTV8S19521C2[10]),  10,11},
};
extern VTBL_ENTRY _ZTI8S19521C2[];
extern  VTBL_ENTRY _ZTV8S19521C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19521C2[];
Class_Descriptor cd_S19521C2 = {  "S19521C2", // class name
  bases_S19521C2, 3,
  &(vtc_S19521C2[0]), // expected_vtbl_contents
  &(vtt_S19521C2[0]), // expected_vtt_contents
  ABISELECT(168,112), // object size
  NSPAIRA(_ZTI8S19521C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19521C2),11, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19521C2),4, //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  S19521C6  : S19521C4 , S19521C3 , virtual S19521C2 {
  virtual void  v5(); // _ZN8S19521C62v5Ev
  virtual void  v6(); // _ZN8S19521C62v6Ev
  ~S19521C6(); // tgen
  S19521C6(); // tgen
};
//SIG(-1 S19521C6) C1{ BC2{ v3 Fp[2] Fi Fs Fi} BC3{ VBC2 v4 FC2 Fi[9]} VBC4{ BC3 BC2} v1 v2}


void  S19521C6 ::v5(){vfunc_called(this, "_ZN8S19521C62v5Ev");}
void  S19521C6 ::v6(){vfunc_called(this, "_ZN8S19521C62v6Ev");}
S19521C6 ::~S19521C6(){ note_dtor("S19521C6", this);} // tgen
S19521C6 ::S19521C6(){ note_ctor("S19521C6", this);} // tgen

static void Test_S19521C6()
{
  extern Class_Descriptor cd_S19521C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,51)];
    init_test(&cd_S19521C6, buf);
    S19521C6 *dp, &lv = *(dp=new (buf) S19521C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,200), "sizeof(S19521C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19521C6)");
    /*is_ambiguous_... S19521C6::S19521C4 */ AMB_check_base_class_offset(lv, (S19521C4*), 0, "S19521C6");
    /*is_ambiguous_... S19521C6::S19521C3 */ AMB_check_base_class_offset(lv, (S19521C4*)(S19521C3*), ABISELECT(128,88), "S19521C6");
    check_base_class_offset(lv, (S19521C4*)(S19521C3*)(S19521C2*), ABISELECT(128,88), "S19521C6");
    /*is_ambiguous_... S19521C6::S19521C3 */ AMB_check_base_class_offset(lv, (S19521C3*), ABISELECT(40,24), "S19521C6");
    check_base_class_offset(lv, (S19521C3*)(S19521C2*), ABISELECT(168,112), "S19521C6");
    /*is_ambiguous_... S19521C2::S19521C4 */ AMB_check_base_class_offset(lv, (S19521C4*)(S19521C2*), ABISELECT(256,176), "S19521C6");
    check_base_class_offset(lv, (S19521C2*), ABISELECT(168,112), "S19521C6");
    test_class_info(&lv, &cd_S19521C6);
    dp->~S19521C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19521C6(Test_S19521C6, "S19521C6", ABISELECT(296,200));

#else // __cplusplus

extern void _ZN8S19521C6C1Ev();
extern void _ZN8S19521C6D1Ev();
Name_Map name_map_S19521C6[] = {
  NSPAIR(_ZN8S19521C6C1Ev),
  NSPAIR(_ZN8S19521C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19521C4;
extern VTBL_ENTRY _ZTI8S19521C4[];
extern  VTBL_ENTRY _ZTV8S19521C4[];
extern Class_Descriptor cd_S19521C4;
extern VTBL_ENTRY _ZTI8S19521C4[];
extern  VTBL_ENTRY _ZTV8S19521C4[];
extern Class_Descriptor cd_S19521C3;
extern VTBL_ENTRY _ZTI8S19521C3[];
extern  VTBL_ENTRY _ZTV8S19521C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19521C3[];
extern Class_Descriptor cd_S19521C3;
extern VTBL_ENTRY _ZTI8S19521C3[];
extern  VTBL_ENTRY _ZTV8S19521C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19521C3[];
extern Class_Descriptor cd_S19521C4;
extern VTBL_ENTRY _ZTI8S19521C4[];
extern  VTBL_ENTRY _ZTV8S19521C4[];
extern Class_Descriptor cd_S19521C2;
extern VTBL_ENTRY _ZTI8S19521C2[];
extern  VTBL_ENTRY _ZTV8S19521C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19521C2[];
static Base_Class bases_S19521C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19521C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19521C4,    ABISELECT(128,88), //bcp->offset
    11, //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
    2, //immediately_derived
  0, 1},
  {&cd_S19521C3,    ABISELECT(40,24), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19521C3,    ABISELECT(168,112), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19521C4,    ABISELECT(256,176), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //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
    5, //immediately_derived
  0, 0},
  {&cd_S19521C2,    ABISELECT(168,112), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //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 _ZTI8S19521C6[];
extern void _ZN8S19521C42v3Ev();
extern void _ZN8S19521C62v5Ev();
extern void _ZN8S19521C62v6Ev();
extern void _ZN8S19521C32v4Ev();
extern void _ZN8S19521C42v3Ev();
extern void _ZN8S19521C32v4Ev();
extern void _ZN8S19521C42v3Ev();
static  VTBL_ENTRY vtc_S19521C6[] = {
  ABISELECT(168,112),
  ABISELECT(128,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S19521C6[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19521C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19521C62v6Ev,
  ABISELECT(88,64),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19521C6[0]),
  (VTBL_ENTRY)&_ZN8S19521C32v4Ev,
  0,
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI8S19521C6[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
  ABISELECT(88,64),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-168,-112),
  (VTBL_ENTRY)&(_ZTI8S19521C6[0]),
  (VTBL_ENTRY)&_ZN8S19521C32v4Ev,
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI8S19521C6[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S19521C6[];
extern void _ZN8S19521C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C3__8S19521C6[] = {
  ABISELECT(88,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19521C3[0]),
  (VTBL_ENTRY)&_ZN8S19521C32v4Ev,
};
extern void _ZN8S19521C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C4__8S19521C3__8S19521C6[] = {
  0,
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI8S19521C3[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
};
extern void _ZN8S19521C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C2__8S19521C6[] = {
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19521C2[0]),
  (VTBL_ENTRY)&_ZN8S19521C32v4Ev,
};
extern void _ZN8S19521C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C38S19521C2__A1__8S19521C6[] = {
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19521C3[0]),
  (VTBL_ENTRY)&_ZN8S19521C32v4Ev,
};
extern void _ZN8S19521C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C4__8S19521C38S19521C2__A1__8S19521C6[] = {
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S19521C3[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
};
extern void _ZN8S19521C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C4__8S19521C2__8S19521C6[] = {
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S19521C2[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
};
static  VTT_ENTRY vtt_S19521C6[] = {
  {&(_ZTV8S19521C6[4]),  4,24},
  {&(_tg__ZTV8S19521C3__8S19521C6[3]),  3,4},
  {&(_tg__ZTV8S19521C4__8S19521C3__8S19521C6[3]),  3,4},
  {&(_ZTV8S19521C6[10]),  10,24},
  {&(_ZTV8S19521C6[14]),  14,24},
  {&(_ZTV8S19521C6[20]),  20,24},
  {&(_ZTV8S19521C6[23]),  23,24},
  {&(_tg__ZTV8S19521C2__8S19521C6[3]),  3,4},
  {&(_tg__ZTV8S19521C38S19521C2__A1__8S19521C6[3]),  3,4},
  {&(_tg__ZTV8S19521C4__8S19521C38S19521C2__A1__8S19521C6[3]),  3,4},
  {&(_tg__ZTV8S19521C4__8S19521C2__8S19521C6[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19521C6[];
extern  VTBL_ENTRY _ZTV8S19521C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19521C6[];
Class_Descriptor cd_S19521C6 = {  "S19521C6", // class name
  bases_S19521C6, 6,
  &(vtc_S19521C6[0]), // expected_vtbl_contents
  &(vtt_S19521C6[0]), // expected_vtt_contents
  ABISELECT(296,200), // object size
  NSPAIRA(_ZTI8S19521C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19521C6),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19521C6),11, //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  S19521C5  : virtual S19521C4 , S19521C6 {
  int s19521c5f0[2];
  virtual void  v7(); // _ZN8S19521C52v7Ev
  ~S19521C5(); // tgen
  S19521C5(); // tgen
};
//SIG(-1 S19521C5) C1{ VBC2{ v2 Fp[2] Fi Fs Fi} BC3{ BC2 BC4{ VBC2 v3 FC2 Fi[9]} VBC5{ BC4 BC2} v4 v5} v1 Fi[2]}


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

static void Test_S19521C5()
{
  extern Class_Descriptor cd_S19521C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,53)];
    init_test(&cd_S19521C5, buf);
    S19521C5 *dp, &lv = *(dp=new (buf) S19521C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,208), "sizeof(S19521C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19521C5)");
    /*is_ambiguous_... S19521C5::S19521C4 */ AMB_check_base_class_offset(lv, (S19521C4*), ABISELECT(136,96), "S19521C5");
    /*is_ambiguous_... S19521C6::S19521C3 */ AMB_check_base_class_offset(lv, (S19521C4*)(S19521C3*)(S19521C6*), ABISELECT(136,96), "S19521C5");
    check_base_class_offset(lv, (S19521C4*)(S19521C3*)(S19521C2*), ABISELECT(136,96), "S19521C5");
    /*is_ambiguous_... S19521C6::S19521C4 */ AMB_check_base_class_offset(lv, (S19521C4*)(S19521C6*), 0, "S19521C5");
    /*is_ambiguous_... S19521C6::S19521C3 */ AMB_check_base_class_offset(lv, (S19521C3*)(S19521C6*), ABISELECT(40,24), "S19521C5");
    check_base_class_offset(lv, (S19521C3*)(S19521C2*), ABISELECT(176,120), "S19521C5");
    /*is_ambiguous_... S19521C2::S19521C4 */ AMB_check_base_class_offset(lv, (S19521C4*)(S19521C2*), ABISELECT(264,184), "S19521C5");
    check_base_class_offset(lv, (S19521C2*)(S19521C6*), ABISELECT(176,120), "S19521C5");
    check_base_class_offset(lv, (S19521C6*), 0, "S19521C5");
    check_field_offset(lv, s19521c5f0, ABISELECT(124,88), "S19521C5.s19521c5f0");
    test_class_info(&lv, &cd_S19521C5);
    dp->~S19521C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19521C5(Test_S19521C5, "S19521C5", ABISELECT(304,208));

#else // __cplusplus

extern void _ZN8S19521C5C1Ev();
extern void _ZN8S19521C5D1Ev();
Name_Map name_map_S19521C5[] = {
  NSPAIR(_ZN8S19521C5C1Ev),
  NSPAIR(_ZN8S19521C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19521C4;
extern VTBL_ENTRY _ZTI8S19521C4[];
extern  VTBL_ENTRY _ZTV8S19521C4[];
extern Class_Descriptor cd_S19521C4;
extern VTBL_ENTRY _ZTI8S19521C4[];
extern  VTBL_ENTRY _ZTV8S19521C4[];
extern Class_Descriptor cd_S19521C3;
extern VTBL_ENTRY _ZTI8S19521C3[];
extern  VTBL_ENTRY _ZTV8S19521C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19521C3[];
extern Class_Descriptor cd_S19521C3;
extern VTBL_ENTRY _ZTI8S19521C3[];
extern  VTBL_ENTRY _ZTV8S19521C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19521C3[];
extern Class_Descriptor cd_S19521C4;
extern VTBL_ENTRY _ZTI8S19521C4[];
extern  VTBL_ENTRY _ZTV8S19521C4[];
extern Class_Descriptor cd_S19521C2;
extern VTBL_ENTRY _ZTI8S19521C2[];
extern  VTBL_ENTRY _ZTV8S19521C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19521C2[];
extern Class_Descriptor cd_S19521C6;
extern VTBL_ENTRY _ZTI8S19521C6[];
extern  VTBL_ENTRY _ZTV8S19521C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19521C6[];
static Base_Class bases_S19521C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19521C4,    ABISELECT(136,96), //bcp->offset
    12, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S19521C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S19521C3,    ABISELECT(40,24), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19521C3,    ABISELECT(176,120), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19521C4,    ABISELECT(264,184), //bcp->offset
    22, //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
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19521C2,    ABISELECT(176,120), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //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_S19521C6,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19521C5[];
extern void _ZN8S19521C42v3Ev();
extern void _ZN8S19521C62v5Ev();
extern void _ZN8S19521C62v6Ev();
extern void _ZN8S19521C52v7Ev();
extern void _ZN8S19521C32v4Ev();
extern void _ZN8S19521C42v3Ev();
extern void _ZN8S19521C32v4Ev();
extern void _ZN8S19521C42v3Ev();
static  VTBL_ENTRY vtc_S19521C5[] = {
  ABISELECT(176,120),
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19521C5[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19521C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19521C62v6Ev,
  (VTBL_ENTRY)&_ZN8S19521C52v7Ev,
  ABISELECT(96,72),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19521C5[0]),
  (VTBL_ENTRY)&_ZN8S19521C32v4Ev,
  0,
  ABISELECT(-136,-96),
  (VTBL_ENTRY)&(_ZTI8S19521C5[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
  ABISELECT(88,64),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-176,-120),
  (VTBL_ENTRY)&(_ZTI8S19521C5[0]),
  (VTBL_ENTRY)&_ZN8S19521C32v4Ev,
  ABISELECT(-264,-184),
  (VTBL_ENTRY)&(_ZTI8S19521C5[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S19521C5[];
extern void _ZN8S19521C42v3Ev();
extern void _ZN8S19521C62v5Ev();
extern void _ZN8S19521C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C6__8S19521C5[] = {
  ABISELECT(176,120),
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19521C6[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19521C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19521C62v6Ev,
};
extern void _ZN8S19521C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C38S19521C6__8S19521C5[] = {
  ABISELECT(96,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19521C3[0]),
  (VTBL_ENTRY)&_ZN8S19521C32v4Ev,
};
extern void _ZN8S19521C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C4__8S19521C38S19521C6__8S19521C5[] = {
  0,
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI8S19521C3[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
};
extern void _ZN8S19521C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C3__8S19521C6__8S19521C5[] = {
  ABISELECT(96,72),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19521C6[0]),
  (VTBL_ENTRY)&_ZN8S19521C32v4Ev,
};
extern void _ZN8S19521C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C4__A1__8S19521C6__8S19521C5[] = {
  0,
  ABISELECT(-136,-96),
  (VTBL_ENTRY)&(_ZTI8S19521C6[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
};
extern void _ZN8S19521C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C2__8S19521C6__8S19521C5[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-176,-120),
  (VTBL_ENTRY)&(_ZTI8S19521C6[0]),
  (VTBL_ENTRY)&_ZN8S19521C32v4Ev,
};
extern void _ZN8S19521C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C48S19521C2__A2__8S19521C6__8S19521C5[] = {
  ABISELECT(-264,-184),
  (VTBL_ENTRY)&(_ZTI8S19521C6[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
};
extern void _ZN8S19521C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C2__8S19521C5[] = {
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19521C2[0]),
  (VTBL_ENTRY)&_ZN8S19521C32v4Ev,
};
extern void _ZN8S19521C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C38S19521C2__A1__8S19521C5[] = {
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19521C3[0]),
  (VTBL_ENTRY)&_ZN8S19521C32v4Ev,
};
extern void _ZN8S19521C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C4__8S19521C38S19521C2__A1__8S19521C5[] = {
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S19521C3[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
};
extern void _ZN8S19521C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C4__8S19521C2__8S19521C5[] = {
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S19521C2[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
};
static  VTT_ENTRY vtt_S19521C5[] = {
  {&(_ZTV8S19521C5[4]),  4,25},
  {&(_tg__ZTV8S19521C6__8S19521C5[4]),  4,7},
  {&(_tg__ZTV8S19521C38S19521C6__8S19521C5[3]),  3,4},
  {&(_tg__ZTV8S19521C4__8S19521C38S19521C6__8S19521C5[3]),  3,4},
  {&(_tg__ZTV8S19521C3__8S19521C6__8S19521C5[3]),  3,4},
  {&(_tg__ZTV8S19521C4__A1__8S19521C6__8S19521C5[3]),  3,4},
  {&(_tg__ZTV8S19521C2__8S19521C6__8S19521C5[5]),  5,6},
  {&(_tg__ZTV8S19521C48S19521C2__A2__8S19521C6__8S19521C5[2]),  2,3},
  {&(_ZTV8S19521C5[15]),  15,25},
  {&(_ZTV8S19521C5[11]),  11,25},
  {&(_ZTV8S19521C5[21]),  21,25},
  {&(_ZTV8S19521C5[24]),  24,25},
  {&(_tg__ZTV8S19521C2__8S19521C5[3]),  3,4},
  {&(_tg__ZTV8S19521C38S19521C2__A1__8S19521C5[3]),  3,4},
  {&(_tg__ZTV8S19521C4__8S19521C38S19521C2__A1__8S19521C5[3]),  3,4},
  {&(_tg__ZTV8S19521C4__8S19521C2__8S19521C5[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19521C5[];
extern  VTBL_ENTRY _ZTV8S19521C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19521C5[];
Class_Descriptor cd_S19521C5 = {  "S19521C5", // class name
  bases_S19521C5, 7,
  &(vtc_S19521C5[0]), // expected_vtbl_contents
  &(vtt_S19521C5[0]), // expected_vtt_contents
  ABISELECT(304,208), // object size
  NSPAIRA(_ZTI8S19521C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19521C5),25, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19521C5),16, //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  S19521C1  : virtual S19521C2 , S19521C5 , virtual S19521C3 {
  virtual void  v1(); // _ZN8S19521C12v1Ev
  virtual void  v2(); // _ZN8S19521C12v2Ev
  ~S19521C1(); // tgen
  S19521C1(); // tgen
};
//SIG(1 S19521C1) C1{ VBC2{ BC3{ VBC4{ v3 Fp[2] Fi Fs Fi} v4 FC4 Fi[9]} BC4} BC5{ VBC4 BC6{ BC4 BC3 VBC2 v5 v6} v7 Fi[2]} VBC3 v1 v2}


void  S19521C1 ::v1(){vfunc_called(this, "_ZN8S19521C12v1Ev");}
void  S19521C1 ::v2(){vfunc_called(this, "_ZN8S19521C12v2Ev");}
S19521C1 ::~S19521C1(){ note_dtor("S19521C1", this);} // tgen
S19521C1 ::S19521C1(){ note_ctor("S19521C1", this);} // tgen

static void Test_S19521C1()
{
  extern Class_Descriptor cd_S19521C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,69)];
    init_test(&cd_S19521C1, buf);
    S19521C1 *dp, &lv = *(dp=new (buf) S19521C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,272), "sizeof(S19521C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19521C1)");
    check_base_class_offset(lv, (S19521C4*)(S19521C3*)(S19521C2*), ABISELECT(264,184), "S19521C1");
    /*is_ambiguous_... S19521C5::S19521C4 */ AMB_check_base_class_offset(lv, (S19521C4*)(S19521C5*), ABISELECT(264,184), "S19521C1");
    /*is_ambiguous_... S19521C6::S19521C3 */ AMB_check_base_class_offset(lv, (S19521C4*)(S19521C3*)(S19521C6*)(S19521C5*), ABISELECT(264,184), "S19521C1");
    /*is_ambiguous_... S19521C1::S19521C3 */ AMB_check_base_class_offset(lv, (S19521C4*)(S19521C3*), ABISELECT(264,184), "S19521C1");
    check_base_class_offset(lv, (S19521C3*)(S19521C2*), ABISELECT(136,96), "S19521C1");
    /*is_ambiguous_... S19521C2::S19521C4 */ AMB_check_base_class_offset(lv, (S19521C4*)(S19521C2*), ABISELECT(224,160), "S19521C1");
    check_base_class_offset(lv, (S19521C2*), ABISELECT(136,96), "S19521C1");
    check_base_class_offset(lv, (S19521C2*)(S19521C6*)(S19521C5*), ABISELECT(136,96), "S19521C1");
    /*is_ambiguous_... S19521C6::S19521C4 */ AMB_check_base_class_offset(lv, (S19521C4*)(S19521C6*)(S19521C5*), 0, "S19521C1");
    /*is_ambiguous_... S19521C6::S19521C3 */ AMB_check_base_class_offset(lv, (S19521C3*)(S19521C6*)(S19521C5*), ABISELECT(40,24), "S19521C1");
    check_base_class_offset(lv, (S19521C6*)(S19521C5*), 0, "S19521C1");
    check_base_class_offset(lv, (S19521C5*), 0, "S19521C1");
    /*is_ambiguous_... S19521C1::S19521C3 */ AMB_check_base_class_offset(lv, (S19521C3*), ABISELECT(304,208), "S19521C1");
    test_class_info(&lv, &cd_S19521C1);
    dp->~S19521C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19521C1(Test_S19521C1, "S19521C1", ABISELECT(392,272));

#else // __cplusplus

extern void _ZN8S19521C1C1Ev();
extern void _ZN8S19521C1D1Ev();
Name_Map name_map_S19521C1[] = {
  NSPAIR(_ZN8S19521C1C1Ev),
  NSPAIR(_ZN8S19521C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19521C4;
extern VTBL_ENTRY _ZTI8S19521C4[];
extern  VTBL_ENTRY _ZTV8S19521C4[];
extern Class_Descriptor cd_S19521C3;
extern VTBL_ENTRY _ZTI8S19521C3[];
extern  VTBL_ENTRY _ZTV8S19521C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19521C3[];
extern Class_Descriptor cd_S19521C4;
extern VTBL_ENTRY _ZTI8S19521C4[];
extern  VTBL_ENTRY _ZTV8S19521C4[];
extern Class_Descriptor cd_S19521C2;
extern VTBL_ENTRY _ZTI8S19521C2[];
extern  VTBL_ENTRY _ZTV8S19521C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19521C2[];
extern Class_Descriptor cd_S19521C4;
extern VTBL_ENTRY _ZTI8S19521C4[];
extern  VTBL_ENTRY _ZTV8S19521C4[];
extern Class_Descriptor cd_S19521C3;
extern VTBL_ENTRY _ZTI8S19521C3[];
extern  VTBL_ENTRY _ZTV8S19521C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19521C3[];
extern Class_Descriptor cd_S19521C6;
extern VTBL_ENTRY _ZTI8S19521C6[];
extern  VTBL_ENTRY _ZTV8S19521C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19521C6[];
extern Class_Descriptor cd_S19521C5;
extern VTBL_ENTRY _ZTI8S19521C5[];
extern  VTBL_ENTRY _ZTV8S19521C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19521C5[];
extern Class_Descriptor cd_S19521C3;
extern VTBL_ENTRY _ZTI8S19521C3[];
extern  VTBL_ENTRY _ZTV8S19521C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19521C3[];
static Base_Class bases_S19521C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19521C4,    ABISELECT(264,184), //bcp->offset
    24, //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
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19521C3,    ABISELECT(136,96), //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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19521C4,    ABISELECT(224,160), //bcp->offset
    21, //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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19521C2,    ABISELECT(136,96), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19521C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19521C3,    ABISELECT(40,24), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19521C6,    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
    8, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19521C5,    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_S19521C3,    ABISELECT(304,208), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19521C1[];
extern void _ZN8S19521C42v3Ev();
extern void _ZN8S19521C62v5Ev();
extern void _ZN8S19521C62v6Ev();
extern void _ZN8S19521C52v7Ev();
extern void _ZN8S19521C12v1Ev();
extern void _ZN8S19521C12v2Ev();
extern void _ZN8S19521C32v4Ev();
extern void _ZN8S19521C32v4Ev();
extern void _ZN8S19521C42v3Ev();
extern void _ZN8S19521C42v3Ev();
extern void _ZN8S19521C32v4Ev();
static  VTBL_ENTRY vtc_S19521C1[] = {
  ABISELECT(304,208),
  ABISELECT(136,96),
  ABISELECT(264,184),
  0,
  (VTBL_ENTRY)&(_ZTI8S19521C1[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19521C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19521C62v6Ev,
  (VTBL_ENTRY)&_ZN8S19521C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19521C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19521C12v2Ev,
  ABISELECT(224,160),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19521C1[0]),
  (VTBL_ENTRY)&_ZN8S19521C32v4Ev,
  ABISELECT(88,64),
  0,
  ABISELECT(128,88),
  ABISELECT(-136,-96),
  (VTBL_ENTRY)&(_ZTI8S19521C1[0]),
  (VTBL_ENTRY)&_ZN8S19521C32v4Ev,
  ABISELECT(-224,-160),
  (VTBL_ENTRY)&(_ZTI8S19521C1[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
  0,
  ABISELECT(-264,-184),
  (VTBL_ENTRY)&(_ZTI8S19521C1[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-304,-208),
  (VTBL_ENTRY)&(_ZTI8S19521C1[0]),
  (VTBL_ENTRY)&_ZN8S19521C32v4Ev,
};
extern VTBL_ENTRY _ZTV8S19521C1[];
extern void _ZN8S19521C42v3Ev();
extern void _ZN8S19521C62v5Ev();
extern void _ZN8S19521C62v6Ev();
extern void _ZN8S19521C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C5__8S19521C1[] = {
  ABISELECT(136,96),
  ABISELECT(264,184),
  0,
  (VTBL_ENTRY)&(_ZTI8S19521C5[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19521C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19521C62v6Ev,
  (VTBL_ENTRY)&_ZN8S19521C52v7Ev,
};
extern void _ZN8S19521C42v3Ev();
extern void _ZN8S19521C62v5Ev();
extern void _ZN8S19521C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C68S19521C5__8S19521C1[] = {
  ABISELECT(136,96),
  ABISELECT(264,184),
  0,
  (VTBL_ENTRY)&(_ZTI8S19521C6[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19521C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19521C62v6Ev,
};
extern void _ZN8S19521C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C38S19521C68S19521C5__A1__8S19521C1[] = {
  ABISELECT(224,160),
  0,
  (VTBL_ENTRY)&(_ZTI8S19521C3[0]),
  (VTBL_ENTRY)&_ZN8S19521C32v4Ev,
};
extern void _ZN8S19521C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C4__8S19521C38S19521C68S19521C5__A1__8S19521C1[] = {
  0,
  ABISELECT(-224,-160),
  (VTBL_ENTRY)&(_ZTI8S19521C3[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
};
extern void _ZN8S19521C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C3__8S19521C68S19521C5__8S19521C1[] = {
  ABISELECT(224,160),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19521C6[0]),
  (VTBL_ENTRY)&_ZN8S19521C32v4Ev,
};
extern void _ZN8S19521C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C4__A1__8S19521C68S19521C5__8S19521C1[] = {
  0,
  ABISELECT(-264,-184),
  (VTBL_ENTRY)&(_ZTI8S19521C6[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
};
extern void _ZN8S19521C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C2__8S19521C68S19521C5__8S19521C1[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(128,88),
  ABISELECT(-136,-96),
  (VTBL_ENTRY)&(_ZTI8S19521C6[0]),
  (VTBL_ENTRY)&_ZN8S19521C32v4Ev,
};
extern void _ZN8S19521C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C48S19521C2__A2__8S19521C68S19521C5__8S19521C1[] = {
  ABISELECT(-224,-160),
  (VTBL_ENTRY)&(_ZTI8S19521C6[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
};
extern void _ZN8S19521C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C4__8S19521C5__8S19521C1[] = {
  0,
  ABISELECT(-264,-184),
  (VTBL_ENTRY)&(_ZTI8S19521C5[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
};
extern void _ZN8S19521C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C38S19521C6__8S19521C5__8S19521C1[] = {
  ABISELECT(224,160),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19521C5[0]),
  (VTBL_ENTRY)&_ZN8S19521C32v4Ev,
};
extern void _ZN8S19521C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C2__8S19521C5__8S19521C1[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(128,88),
  ABISELECT(-136,-96),
  (VTBL_ENTRY)&(_ZTI8S19521C5[0]),
  (VTBL_ENTRY)&_ZN8S19521C32v4Ev,
};
extern void _ZN8S19521C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C48S19521C2__A2__8S19521C5__8S19521C1[] = {
  ABISELECT(-224,-160),
  (VTBL_ENTRY)&(_ZTI8S19521C5[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
};
extern void _ZN8S19521C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C2__8S19521C1[] = {
  ABISELECT(128,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S19521C2[0]),
  (VTBL_ENTRY)&_ZN8S19521C32v4Ev,
};
extern void _ZN8S19521C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C38S19521C2__8S19521C1[] = {
  ABISELECT(128,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S19521C3[0]),
  (VTBL_ENTRY)&_ZN8S19521C32v4Ev,
};
extern void _ZN8S19521C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C4__8S19521C38S19521C2__8S19521C1[] = {
  0,
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI8S19521C3[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
};
extern void _ZN8S19521C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C4__8S19521C2__8S19521C1[] = {
  0,
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI8S19521C2[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
};
extern void _ZN8S19521C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C3__A2__8S19521C1[] = {
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19521C3[0]),
  (VTBL_ENTRY)&_ZN8S19521C32v4Ev,
};
extern void _ZN8S19521C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19521C4__8S19521C3__A2__8S19521C1[] = {
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S19521C3[0]),
  (VTBL_ENTRY)&_ZN8S19521C42v3Ev,
};
static  VTT_ENTRY vtt_S19521C1[] = {
  {&(_ZTV8S19521C1[5]),  5,33},
  {&(_tg__ZTV8S19521C5__8S19521C1[4]),  4,8},
  {&(_tg__ZTV8S19521C68S19521C5__8S19521C1[4]),  4,7},
  {&(_tg__ZTV8S19521C38S19521C68S19521C5__A1__8S19521C1[3]),  3,4},
  {&(_tg__ZTV8S19521C4__8S19521C38S19521C68S19521C5__A1__8S19521C1[3]),  3,4},
  {&(_tg__ZTV8S19521C3__8S19521C68S19521C5__8S19521C1[3]),  3,4},
  {&(_tg__ZTV8S19521C4__A1__8S19521C68S19521C5__8S19521C1[3]),  3,4},
  {&(_tg__ZTV8S19521C2__8S19521C68S19521C5__8S19521C1[5]),  5,6},
  {&(_tg__ZTV8S19521C48S19521C2__A2__8S19521C68S19521C5__8S19521C1[2]),  2,3},
  {&(_tg__ZTV8S19521C4__8S19521C5__8S19521C1[3]),  3,4},
  {&(_tg__ZTV8S19521C38S19521C6__8S19521C5__8S19521C1[3]),  3,4},
  {&(_tg__ZTV8S19521C2__8S19521C5__8S19521C1[5]),  5,6},
  {&(_tg__ZTV8S19521C48S19521C2__A2__8S19521C5__8S19521C1[2]),  2,3},
  {&(_ZTV8S19521C1[20]),  20,33},
  {&(_ZTV8S19521C1[27]),  27,33},
  {&(_ZTV8S19521C1[23]),  23,33},
  {&(_ZTV8S19521C1[14]),  14,33},
  {&(_ZTV8S19521C1[32]),  32,33},
  {&(_tg__ZTV8S19521C2__8S19521C1[3]),  3,4},
  {&(_tg__ZTV8S19521C38S19521C2__8S19521C1[3]),  3,4},
  {&(_tg__ZTV8S19521C4__8S19521C38S19521C2__8S19521C1[3]),  3,4},
  {&(_tg__ZTV8S19521C4__8S19521C2__8S19521C1[3]),  3,4},
  {&(_tg__ZTV8S19521C3__A2__8S19521C1[3]),  3,4},
  {&(_tg__ZTV8S19521C4__8S19521C3__A2__8S19521C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19521C1[];
extern  VTBL_ENTRY _ZTV8S19521C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19521C1[];
Class_Descriptor cd_S19521C1 = {  "S19521C1", // class name
  bases_S19521C1, 9,
  &(vtc_S19521C1[0]), // expected_vtbl_contents
  &(vtt_S19521C1[0]), // expected_vtt_contents
  ABISELECT(392,272), // object size
  NSPAIRA(_ZTI8S19521C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19521C1),33, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19521C1),24, //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  S2990C3  {
  virtual  ~S2990C3(); // _ZN7S2990C3D1Ev
  virtual void  v1(); // _ZN7S2990C32v1Ev
  virtual void  v2(); // _ZN7S2990C32v2Ev
  S2990C3(); // tgen
};
//SIG(-1 S2990C3) C1{ vd v1 v2}


 S2990C3 ::~S2990C3(){ note_dtor("S2990C3", this);}
void  S2990C3 ::v1(){vfunc_called(this, "_ZN7S2990C32v1Ev");}
void  S2990C3 ::v2(){vfunc_called(this, "_ZN7S2990C32v2Ev");}
S2990C3 ::S2990C3(){ note_ctor("S2990C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2990C3C1Ev();
extern void _ZN7S2990C3D1Ev();
Name_Map name_map_S2990C3[] = {
  NSPAIR(_ZN7S2990C3C1Ev),
  NSPAIR(_ZN7S2990C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2990C3[];
extern void _ZN7S2990C3D1Ev();
extern void _ZN7S2990C3D0Ev();
extern void _ZN7S2990C32v1Ev();
extern void _ZN7S2990C32v2Ev();
static  VTBL_ENTRY vtc_S2990C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2990C3[0]),
  (VTBL_ENTRY)&_ZN7S2990C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2990C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2990C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2990C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S2990C3[];
extern  VTBL_ENTRY _ZTV7S2990C3[];
Class_Descriptor cd_S2990C3 = {  "S2990C3", // class name
  0,0,//no base classes
  &(vtc_S2990C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2990C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2990C3),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  S2990C5  {
  virtual void  v3(); // _ZN7S2990C52v3Ev
  virtual void  v4(); // _ZN7S2990C52v4Ev
  virtual void  v5(); // _ZN7S2990C52v5Ev
  virtual void  v6(); // _ZN7S2990C52v6Ev
  virtual void  v7(); // _ZN7S2990C52v7Ev
  virtual void  v8(); // _ZN7S2990C52v8Ev
  virtual void  v9(); // _ZN7S2990C52v9Ev
  virtual void  v10(); // _ZN7S2990C53v10Ev
  virtual void  v11(); // _ZN7S2990C53v11Ev
  ~S2990C5(); // tgen
  S2990C5(); // tgen
};
//SIG(-1 S2990C5) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S2990C5 ::v3(){vfunc_called(this, "_ZN7S2990C52v3Ev");}
void  S2990C5 ::v4(){vfunc_called(this, "_ZN7S2990C52v4Ev");}
void  S2990C5 ::v5(){vfunc_called(this, "_ZN7S2990C52v5Ev");}
void  S2990C5 ::v6(){vfunc_called(this, "_ZN7S2990C52v6Ev");}
void  S2990C5 ::v7(){vfunc_called(this, "_ZN7S2990C52v7Ev");}
void  S2990C5 ::v8(){vfunc_called(this, "_ZN7S2990C52v8Ev");}
void  S2990C5 ::v9(){vfunc_called(this, "_ZN7S2990C52v9Ev");}
void  S2990C5 ::v10(){vfunc_called(this, "_ZN7S2990C53v10Ev");}
void  S2990C5 ::v11(){vfunc_called(this, "_ZN7S2990C53v11Ev");}
S2990C5 ::~S2990C5(){ note_dtor("S2990C5", this);} // tgen
S2990C5 ::S2990C5(){ note_ctor("S2990C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2990C5C1Ev();
extern void _ZN7S2990C5D1Ev();
Name_Map name_map_S2990C5[] = {
  NSPAIR(_ZN7S2990C5C1Ev),
  NSPAIR(_ZN7S2990C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2990C5[];
extern void _ZN7S2990C52v3Ev();
extern void _ZN7S2990C52v4Ev();
extern void _ZN7S2990C52v5Ev();
extern void _ZN7S2990C52v6Ev();
extern void _ZN7S2990C52v7Ev();
extern void _ZN7S2990C52v8Ev();
extern void _ZN7S2990C52v9Ev();
extern void _ZN7S2990C53v10Ev();
extern void _ZN7S2990C53v11Ev();
static  VTBL_ENTRY vtc_S2990C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2990C5[0]),
  (VTBL_ENTRY)&_ZN7S2990C52v3Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v4Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v5Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v8Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v9Ev,
  (VTBL_ENTRY)&_ZN7S2990C53v10Ev,
  (VTBL_ENTRY)&_ZN7S2990C53v11Ev,
};
extern VTBL_ENTRY _ZTI7S2990C5[];
extern  VTBL_ENTRY _ZTV7S2990C5[];
Class_Descriptor cd_S2990C5 = {  "S2990C5", // class name
  0,0,//no base classes
  &(vtc_S2990C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2990C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2990C5),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  S2990C4  : virtual S2990C5 {
  __tsi64 s2990c4f0;
  virtual void  v12(); // _ZN7S2990C43v12Ev
  virtual void  v13(); // _ZN7S2990C43v13Ev
  virtual void  v14(); // _ZN7S2990C43v14Ev
  virtual void  v15(); // _ZN7S2990C43v15Ev
  ~S2990C4(); // tgen
  S2990C4(); // tgen
};
//SIG(-1 S2990C4) C1{ VBC2{ v5 v6 v7 v8 v9 v10 v11 v12 v13} v1 v2 v3 v4 FL}


void  S2990C4 ::v12(){vfunc_called(this, "_ZN7S2990C43v12Ev");}
void  S2990C4 ::v13(){vfunc_called(this, "_ZN7S2990C43v13Ev");}
void  S2990C4 ::v14(){vfunc_called(this, "_ZN7S2990C43v14Ev");}
void  S2990C4 ::v15(){vfunc_called(this, "_ZN7S2990C43v15Ev");}
S2990C4 ::~S2990C4(){ note_dtor("S2990C4", this);} // tgen
S2990C4 ::S2990C4(){ note_ctor("S2990C4", this);} // tgen

static void Test_S2990C4()
{
  extern Class_Descriptor cd_S2990C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2990C4, buf);
    S2990C4 *dp, &lv = *(dp=new (buf) S2990C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2990C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2990C4)");
    check_base_class_offset(lv, (S2990C5*), 0, "S2990C4");
    check_field_offset(lv, s2990c4f0, ABISELECT(8,4), "S2990C4.s2990c4f0");
    test_class_info(&lv, &cd_S2990C4);
    dp->~S2990C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2990C4(Test_S2990C4, "S2990C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2990C4C1Ev();
extern void _ZN7S2990C4D1Ev();
Name_Map name_map_S2990C4[] = {
  NSPAIR(_ZN7S2990C4C1Ev),
  NSPAIR(_ZN7S2990C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2990C5;
extern VTBL_ENTRY _ZTI7S2990C5[];
extern  VTBL_ENTRY _ZTV7S2990C5[];
static Base_Class bases_S2990C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2990C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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 _ZTI7S2990C4[];
extern void _ZN7S2990C52v3Ev();
extern void _ZN7S2990C52v4Ev();
extern void _ZN7S2990C52v5Ev();
extern void _ZN7S2990C52v6Ev();
extern void _ZN7S2990C52v7Ev();
extern void _ZN7S2990C52v8Ev();
extern void _ZN7S2990C52v9Ev();
extern void _ZN7S2990C53v10Ev();
extern void _ZN7S2990C53v11Ev();
extern void _ZN7S2990C43v12Ev();
extern void _ZN7S2990C43v13Ev();
extern void _ZN7S2990C43v14Ev();
extern void _ZN7S2990C43v15Ev();
static  VTBL_ENTRY vtc_S2990C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2990C4[0]),
  (VTBL_ENTRY)&_ZN7S2990C52v3Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v4Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v5Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v8Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v9Ev,
  (VTBL_ENTRY)&_ZN7S2990C53v10Ev,
  (VTBL_ENTRY)&_ZN7S2990C53v11Ev,
  (VTBL_ENTRY)&_ZN7S2990C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2990C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2990C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2990C43v15Ev,
};
extern VTBL_ENTRY _ZTV7S2990C4[];
static  VTT_ENTRY vtt_S2990C4[] = {
  {&(_ZTV7S2990C4[12]),  12,25},
  {&(_ZTV7S2990C4[12]),  12,25},
};
extern VTBL_ENTRY _ZTI7S2990C4[];
extern  VTBL_ENTRY _ZTV7S2990C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2990C4[];
Class_Descriptor cd_S2990C4 = {  "S2990C4", // class name
  bases_S2990C4, 1,
  &(vtc_S2990C4[0]), // expected_vtbl_contents
  &(vtt_S2990C4[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2990C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S2990C4),25, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2990C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2990C2  : S2990C3 , S2990C4 {
  void *s2990c2f0;
  virtual void  v16(); // _ZN7S2990C23v16Ev
  virtual void  v17(); // _ZN7S2990C23v17Ev
  virtual void  v18(); // _ZN7S2990C23v18Ev
  virtual void  v19(); // _ZN7S2990C23v19Ev
  ~S2990C2(); // tgen
  S2990C2(); // tgen
};
//SIG(-1 S2990C2) C1{ BC2{ vd v5 v6} BC3{ VBC4{ v7 v8 v9 v10 v11 v12 v13 v14 v15} v16 v17 v18 v19 FL} v1 v2 v3 v4 Fp}


void  S2990C2 ::v16(){vfunc_called(this, "_ZN7S2990C23v16Ev");}
void  S2990C2 ::v17(){vfunc_called(this, "_ZN7S2990C23v17Ev");}
void  S2990C2 ::v18(){vfunc_called(this, "_ZN7S2990C23v18Ev");}
void  S2990C2 ::v19(){vfunc_called(this, "_ZN7S2990C23v19Ev");}
S2990C2 ::~S2990C2(){ note_dtor("S2990C2", this);} // tgen
S2990C2 ::S2990C2(){ note_ctor("S2990C2", this);} // tgen

static void Test_S2990C2()
{
  extern Class_Descriptor cd_S2990C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2990C2, buf);
    S2990C2 *dp, &lv = *(dp=new (buf) S2990C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2990C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2990C2)");
    check_base_class_offset(lv, (S2990C3*), 0, "S2990C2");
    check_base_class_offset(lv, (S2990C5*)(S2990C4*), ABISELECT(8,4), "S2990C2");
    check_base_class_offset(lv, (S2990C4*), ABISELECT(8,4), "S2990C2");
    check_field_offset(lv, s2990c2f0, ABISELECT(24,16), "S2990C2.s2990c2f0");
    test_class_info(&lv, &cd_S2990C2);
    dp->~S2990C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2990C2(Test_S2990C2, "S2990C2", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S2990C2C1Ev();
extern void _ZN7S2990C2D1Ev();
Name_Map name_map_S2990C2[] = {
  NSPAIR(_ZN7S2990C2C1Ev),
  NSPAIR(_ZN7S2990C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2990C3;
extern VTBL_ENTRY _ZTI7S2990C3[];
extern  VTBL_ENTRY _ZTV7S2990C3[];
extern Class_Descriptor cd_S2990C5;
extern VTBL_ENTRY _ZTI7S2990C5[];
extern  VTBL_ENTRY _ZTV7S2990C5[];
extern Class_Descriptor cd_S2990C4;
extern VTBL_ENTRY _ZTI7S2990C4[];
extern  VTBL_ENTRY _ZTV7S2990C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2990C4[];
static Base_Class bases_S2990C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2990C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2990C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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
    2, //immediately_derived
  0, 1},
  {&cd_S2990C4,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    4, //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 _ZTI7S2990C2[];
extern void _ZN7S2990C2D1Ev();
extern void _ZN7S2990C2D0Ev();
extern void _ZN7S2990C32v1Ev();
extern void _ZN7S2990C32v2Ev();
extern void _ZN7S2990C23v16Ev();
extern void _ZN7S2990C23v17Ev();
extern void _ZN7S2990C23v18Ev();
extern void _ZN7S2990C23v19Ev();
extern void _ZN7S2990C52v3Ev();
extern void _ZN7S2990C52v4Ev();
extern void _ZN7S2990C52v5Ev();
extern void _ZN7S2990C52v6Ev();
extern void _ZN7S2990C52v7Ev();
extern void _ZN7S2990C52v8Ev();
extern void _ZN7S2990C52v9Ev();
extern void _ZN7S2990C53v10Ev();
extern void _ZN7S2990C53v11Ev();
extern void _ZN7S2990C43v12Ev();
extern void _ZN7S2990C43v13Ev();
extern void _ZN7S2990C43v14Ev();
extern void _ZN7S2990C43v15Ev();
static  VTBL_ENTRY vtc_S2990C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2990C2[0]),
  (VTBL_ENTRY)&_ZN7S2990C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2990C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2990C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2990C32v2Ev,
  (VTBL_ENTRY)&_ZN7S2990C23v16Ev,
  (VTBL_ENTRY)&_ZN7S2990C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2990C23v18Ev,
  (VTBL_ENTRY)&_ZN7S2990C23v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S2990C2[0]),
  (VTBL_ENTRY)&_ZN7S2990C52v3Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v4Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v5Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v8Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v9Ev,
  (VTBL_ENTRY)&_ZN7S2990C53v10Ev,
  (VTBL_ENTRY)&_ZN7S2990C53v11Ev,
  (VTBL_ENTRY)&_ZN7S2990C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2990C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2990C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2990C43v15Ev,
};
extern VTBL_ENTRY _ZTV7S2990C2[];
extern void _ZN7S2990C52v3Ev();
extern void _ZN7S2990C52v4Ev();
extern void _ZN7S2990C52v5Ev();
extern void _ZN7S2990C52v6Ev();
extern void _ZN7S2990C52v7Ev();
extern void _ZN7S2990C52v8Ev();
extern void _ZN7S2990C52v9Ev();
extern void _ZN7S2990C53v10Ev();
extern void _ZN7S2990C53v11Ev();
extern void _ZN7S2990C43v12Ev();
extern void _ZN7S2990C43v13Ev();
extern void _ZN7S2990C43v14Ev();
extern void _ZN7S2990C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S2990C4__7S2990C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2990C4[0]),
  (VTBL_ENTRY)&_ZN7S2990C52v3Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v4Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v5Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v8Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v9Ev,
  (VTBL_ENTRY)&_ZN7S2990C53v10Ev,
  (VTBL_ENTRY)&_ZN7S2990C53v11Ev,
  (VTBL_ENTRY)&_ZN7S2990C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2990C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2990C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2990C43v15Ev,
};
static  VTT_ENTRY vtt_S2990C2[] = {
  {&(_ZTV7S2990C2[3]),  3,36},
  {&(_tg__ZTV7S2990C4__7S2990C2[12]),  12,25},
  {&(_tg__ZTV7S2990C4__7S2990C2[12]),  12,25},
  {&(_ZTV7S2990C2[23]),  23,36},
  {&(_ZTV7S2990C2[23]),  23,36},
};
extern VTBL_ENTRY _ZTI7S2990C2[];
extern  VTBL_ENTRY _ZTV7S2990C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2990C2[];
Class_Descriptor cd_S2990C2 = {  "S2990C2", // class name
  bases_S2990C2, 3,
  &(vtc_S2990C2[0]), // expected_vtbl_contents
  &(vtt_S2990C2[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S2990C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2990C2),36, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2990C2),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2990C1  : S2990C2 {
  ::S5266C29 s2990c1f0;
  ~S2990C1(); // tgen
  S2990C1(); // tgen
};
//SIG(1 S2990C1) C1{ BC2{ BC3{ vd v1 v2} BC4{ VBC5{ v3 v4 v5 v6 v7 v8 v9 v10 v11} v12 v13 v14 v15 FL} v16 v17 v18 v19 Fp} FC6{ m}}


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

static void Test_S2990C1()
{
  extern Class_Descriptor cd_S2990C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S2990C1, buf);
    S2990C1 *dp, &lv = *(dp=new (buf) S2990C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S2990C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2990C1)");
    check_base_class_offset(lv, (S2990C3*)(S2990C2*), 0, "S2990C1");
    check_base_class_offset(lv, (S2990C5*)(S2990C4*)(S2990C2*), ABISELECT(8,4), "S2990C1");
    check_base_class_offset(lv, (S2990C4*)(S2990C2*), ABISELECT(8,4), "S2990C1");
    check_base_class_offset(lv, (S2990C2*), 0, "S2990C1");
    check_field_offset(lv, s2990c1f0, ABISELECT(32,20), "S2990C1.s2990c1f0");
    test_class_info(&lv, &cd_S2990C1);
    dp->~S2990C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2990C1(Test_S2990C1, "S2990C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S2990C1C1Ev();
extern void _ZN7S2990C1D1Ev();
Name_Map name_map_S2990C1[] = {
  NSPAIR(_ZN7S2990C1C1Ev),
  NSPAIR(_ZN7S2990C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2990C3;
extern VTBL_ENTRY _ZTI7S2990C3[];
extern  VTBL_ENTRY _ZTV7S2990C3[];
extern Class_Descriptor cd_S2990C5;
extern VTBL_ENTRY _ZTI7S2990C5[];
extern  VTBL_ENTRY _ZTV7S2990C5[];
extern Class_Descriptor cd_S2990C4;
extern VTBL_ENTRY _ZTI7S2990C4[];
extern  VTBL_ENTRY _ZTV7S2990C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2990C4[];
extern Class_Descriptor cd_S2990C2;
extern VTBL_ENTRY _ZTI7S2990C2[];
extern  VTBL_ENTRY _ZTV7S2990C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2990C2[];
static Base_Class bases_S2990C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2990C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2990C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S2990C4,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2990C2,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2990C1[];
extern void _ZN7S2990C1D1Ev();
extern void _ZN7S2990C1D0Ev();
extern void _ZN7S2990C32v1Ev();
extern void _ZN7S2990C32v2Ev();
extern void _ZN7S2990C23v16Ev();
extern void _ZN7S2990C23v17Ev();
extern void _ZN7S2990C23v18Ev();
extern void _ZN7S2990C23v19Ev();
extern void _ZN7S2990C52v3Ev();
extern void _ZN7S2990C52v4Ev();
extern void _ZN7S2990C52v5Ev();
extern void _ZN7S2990C52v6Ev();
extern void _ZN7S2990C52v7Ev();
extern void _ZN7S2990C52v8Ev();
extern void _ZN7S2990C52v9Ev();
extern void _ZN7S2990C53v10Ev();
extern void _ZN7S2990C53v11Ev();
extern void _ZN7S2990C43v12Ev();
extern void _ZN7S2990C43v13Ev();
extern void _ZN7S2990C43v14Ev();
extern void _ZN7S2990C43v15Ev();
static  VTBL_ENTRY vtc_S2990C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2990C1[0]),
  (VTBL_ENTRY)&_ZN7S2990C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2990C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2990C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2990C32v2Ev,
  (VTBL_ENTRY)&_ZN7S2990C23v16Ev,
  (VTBL_ENTRY)&_ZN7S2990C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2990C23v18Ev,
  (VTBL_ENTRY)&_ZN7S2990C23v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S2990C1[0]),
  (VTBL_ENTRY)&_ZN7S2990C52v3Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v4Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v5Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v8Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v9Ev,
  (VTBL_ENTRY)&_ZN7S2990C53v10Ev,
  (VTBL_ENTRY)&_ZN7S2990C53v11Ev,
  (VTBL_ENTRY)&_ZN7S2990C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2990C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2990C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2990C43v15Ev,
};
extern VTBL_ENTRY _ZTV7S2990C1[];
extern void _ZN7S2990C2D1Ev();
extern void _ZN7S2990C2D0Ev();
extern void _ZN7S2990C32v1Ev();
extern void _ZN7S2990C32v2Ev();
extern void _ZN7S2990C23v16Ev();
extern void _ZN7S2990C23v17Ev();
extern void _ZN7S2990C23v18Ev();
extern void _ZN7S2990C23v19Ev();
static  VTBL_ENTRY _tg__ZTV7S2990C2__7S2990C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2990C2[0]),
  (VTBL_ENTRY)&_ZN7S2990C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2990C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2990C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2990C32v2Ev,
  (VTBL_ENTRY)&_ZN7S2990C23v16Ev,
  (VTBL_ENTRY)&_ZN7S2990C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2990C23v18Ev,
  (VTBL_ENTRY)&_ZN7S2990C23v19Ev,
};
extern void _ZN7S2990C52v3Ev();
extern void _ZN7S2990C52v4Ev();
extern void _ZN7S2990C52v5Ev();
extern void _ZN7S2990C52v6Ev();
extern void _ZN7S2990C52v7Ev();
extern void _ZN7S2990C52v8Ev();
extern void _ZN7S2990C52v9Ev();
extern void _ZN7S2990C53v10Ev();
extern void _ZN7S2990C53v11Ev();
extern void _ZN7S2990C43v12Ev();
extern void _ZN7S2990C43v13Ev();
extern void _ZN7S2990C43v14Ev();
extern void _ZN7S2990C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S2990C47S2990C2__7S2990C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2990C4[0]),
  (VTBL_ENTRY)&_ZN7S2990C52v3Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v4Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v5Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v8Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v9Ev,
  (VTBL_ENTRY)&_ZN7S2990C53v10Ev,
  (VTBL_ENTRY)&_ZN7S2990C53v11Ev,
  (VTBL_ENTRY)&_ZN7S2990C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2990C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2990C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2990C43v15Ev,
};
extern void _ZN7S2990C52v3Ev();
extern void _ZN7S2990C52v4Ev();
extern void _ZN7S2990C52v5Ev();
extern void _ZN7S2990C52v6Ev();
extern void _ZN7S2990C52v7Ev();
extern void _ZN7S2990C52v8Ev();
extern void _ZN7S2990C52v9Ev();
extern void _ZN7S2990C53v10Ev();
extern void _ZN7S2990C53v11Ev();
extern void _ZN7S2990C43v12Ev();
extern void _ZN7S2990C43v13Ev();
extern void _ZN7S2990C43v14Ev();
extern void _ZN7S2990C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S2990C4__7S2990C2__7S2990C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S2990C2[0]),
  (VTBL_ENTRY)&_ZN7S2990C52v3Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v4Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v5Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v8Ev,
  (VTBL_ENTRY)&_ZN7S2990C52v9Ev,
  (VTBL_ENTRY)&_ZN7S2990C53v10Ev,
  (VTBL_ENTRY)&_ZN7S2990C53v11Ev,
  (VTBL_ENTRY)&_ZN7S2990C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2990C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2990C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2990C43v15Ev,
};
static  VTT_ENTRY vtt_S2990C1[] = {
  {&(_ZTV7S2990C1[3]),  3,36},
  {&(_tg__ZTV7S2990C2__7S2990C1[3]),  3,11},
  {&(_tg__ZTV7S2990C47S2990C2__7S2990C1[12]),  12,25},
  {&(_tg__ZTV7S2990C47S2990C2__7S2990C1[12]),  12,25},
  {&(_tg__ZTV7S2990C4__7S2990C2__7S2990C1[12]),  12,25},
  {&(_tg__ZTV7S2990C4__7S2990C2__7S2990C1[12]),  12,25},
  {&(_ZTV7S2990C1[23]),  23,36},
  {&(_ZTV7S2990C1[23]),  23,36},
};
extern VTBL_ENTRY _ZTI7S2990C1[];
extern  VTBL_ENTRY _ZTV7S2990C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2990C1[];
Class_Descriptor cd_S2990C1 = {  "S2990C1", // class name
  bases_S2990C1, 4,
  &(vtc_S2990C1[0]), // expected_vtbl_contents
  &(vtt_S2990C1[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S2990C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2990C1),36, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2990C1),8, //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  S20823C3  {
  int s20823c3f0;
  __tsi64 s20823c3f1;
  virtual  ~S20823C3(); // _ZN8S20823C3D1Ev
  virtual void  v2(); // _ZN8S20823C32v2Ev
  virtual void  v3(); // _ZN8S20823C32v3Ev
  virtual void  v4(); // _ZN8S20823C32v4Ev
  S20823C3(); // tgen
};
//SIG(-1 S20823C3) C1{ vd v1 v2 v3 Fi FL}


 S20823C3 ::~S20823C3(){ note_dtor("S20823C3", this);}
void  S20823C3 ::v2(){vfunc_called(this, "_ZN8S20823C32v2Ev");}
void  S20823C3 ::v3(){vfunc_called(this, "_ZN8S20823C32v3Ev");}
void  S20823C3 ::v4(){vfunc_called(this, "_ZN8S20823C32v4Ev");}
S20823C3 ::S20823C3(){ note_ctor("S20823C3", this);} // tgen

static void Test_S20823C3()
{
  extern Class_Descriptor cd_S20823C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20823C3, buf);
    S20823C3 *dp, &lv = *(dp=new (buf) S20823C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20823C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20823C3)");
    check_field_offset(lv, s20823c3f0, ABISELECT(8,4), "S20823C3.s20823c3f0");
    check_field_offset(lv, s20823c3f1, ABISELECT(16,8), "S20823C3.s20823c3f1");
    test_class_info(&lv, &cd_S20823C3);
    dp->~S20823C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20823C3(Test_S20823C3, "S20823C3", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S20823C3C1Ev();
extern void _ZN8S20823C3D1Ev();
Name_Map name_map_S20823C3[] = {
  NSPAIR(_ZN8S20823C3C1Ev),
  NSPAIR(_ZN8S20823C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20823C3[];
extern void _ZN8S20823C3D1Ev();
extern void _ZN8S20823C3D0Ev();
extern void _ZN8S20823C32v2Ev();
extern void _ZN8S20823C32v3Ev();
extern void _ZN8S20823C32v4Ev();
static  VTBL_ENTRY vtc_S20823C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20823C3[0]),
  (VTBL_ENTRY)&_ZN8S20823C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20823C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20823C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20823C32v3Ev,
  (VTBL_ENTRY)&_ZN8S20823C32v4Ev,
};
extern VTBL_ENTRY _ZTI8S20823C3[];
extern  VTBL_ENTRY _ZTV8S20823C3[];
Class_Descriptor cd_S20823C3 = {  "S20823C3", // class name
  0,0,//no base classes
  &(vtc_S20823C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S20823C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20823C3),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  S20823C4  : virtual S20823C3 {
  virtual void  v5(); // _ZN8S20823C42v5Ev
  virtual void  v6(); // _ZN8S20823C42v6Ev
  virtual void  v7(); // _ZN8S20823C42v7Ev
  virtual void  v8(); // _ZN8S20823C42v8Ev
  virtual void  v9(); // _ZN8S20823C42v9Ev
  ~S20823C4(); // tgen
  S20823C4(); // tgen
};
//SIG(-1 S20823C4) C1{ VBC2{ vd v6 v7 v8 Fi FL} v1 v2 v3 v4 v5}


void  S20823C4 ::v5(){vfunc_called(this, "_ZN8S20823C42v5Ev");}
void  S20823C4 ::v6(){vfunc_called(this, "_ZN8S20823C42v6Ev");}
void  S20823C4 ::v7(){vfunc_called(this, "_ZN8S20823C42v7Ev");}
void  S20823C4 ::v8(){vfunc_called(this, "_ZN8S20823C42v8Ev");}
void  S20823C4 ::v9(){vfunc_called(this, "_ZN8S20823C42v9Ev");}
S20823C4 ::~S20823C4(){ note_dtor("S20823C4", this);} // tgen
S20823C4 ::S20823C4(){ note_ctor("S20823C4", this);} // tgen

static void Test_S20823C4()
{
  extern Class_Descriptor cd_S20823C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S20823C4, buf);
    S20823C4 *dp, &lv = *(dp=new (buf) S20823C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S20823C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20823C4)");
    check_base_class_offset(lv, (S20823C3*), ABISELECT(8,4), "S20823C4");
    test_class_info(&lv, &cd_S20823C4);
    dp->~S20823C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20823C4(Test_S20823C4, "S20823C4", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S20823C4C1Ev();
extern void _ZN8S20823C4D1Ev();
Name_Map name_map_S20823C4[] = {
  NSPAIR(_ZN8S20823C4C1Ev),
  NSPAIR(_ZN8S20823C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20823C3;
extern VTBL_ENTRY _ZTI8S20823C3[];
extern  VTBL_ENTRY _ZTV8S20823C3[];
static Base_Class bases_S20823C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20823C3,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //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 _ZTI8S20823C4[];
extern void _ZN8S20823C42v5Ev();
extern void _ZN8S20823C42v6Ev();
extern void _ZN8S20823C42v7Ev();
extern void _ZN8S20823C42v8Ev();
extern void _ZN8S20823C42v9Ev();
extern void _ZN8S20823C4D1Ev();
extern void _ZN8S20823C4D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20823C4D1Ev,_ZTv0_n12_N8S20823C4D1Ev)();
extern void ABISELECT(_ZThn8_N8S20823C4D1Ev,_ZThn4_N8S20823C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20823C4D0Ev,_ZTv0_n12_N8S20823C4D0Ev)();
extern void ABISELECT(_ZThn8_N8S20823C4D0Ev,_ZThn4_N8S20823C4D0Ev)() __attribute__((weak));
extern void _ZN8S20823C32v2Ev();
extern void _ZN8S20823C32v3Ev();
extern void _ZN8S20823C32v4Ev();
static  VTBL_ENTRY vtc_S20823C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20823C4[0]),
  (VTBL_ENTRY)&_ZN8S20823C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20823C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20823C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20823C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20823C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20823C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20823C4D0Ev,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20823C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20823C4D1Ev,_ZTv0_n12_N8S20823C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20823C4D0Ev,_ZTv0_n12_N8S20823C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20823C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20823C32v3Ev,
  (VTBL_ENTRY)&_ZN8S20823C32v4Ev,
};
extern VTBL_ENTRY _ZTV8S20823C4[];
static  VTT_ENTRY vtt_S20823C4[] = {
  {&(_ZTV8S20823C4[3]),  3,21},
  {&(_ZTV8S20823C4[16]),  16,21},
};
extern VTBL_ENTRY _ZTI8S20823C4[];
extern  VTBL_ENTRY _ZTV8S20823C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20823C4[];
static VTBL_ENTRY alt_thunk_names125[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20823C4D0Ev,_ZTv0_n12_N8S20823C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20823C4D0Ev,_ZThn4_N8S20823C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20823C4D1Ev,_ZTv0_n12_N8S20823C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20823C4D1Ev,_ZThn4_N8S20823C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20823C4 = {  "S20823C4", // class name
  bases_S20823C4, 1,
  &(vtc_S20823C4[0]), // expected_vtbl_contents
  &(vtt_S20823C4[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S20823C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20823C4),21, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20823C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names125,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20823C2  : virtual S20823C3 , S20823C4 {
  int s20823c2f0;
  void *s20823c2f1;
  char s20823c2f2[8];
  virtual  ~S20823C2(); // _ZN8S20823C2D2Ev
  virtual void  v10(); // _ZN8S20823C23v10Ev
  virtual void  v11(); // _ZN8S20823C23v11Ev
  virtual void  v12(); // _ZN8S20823C23v12Ev
  virtual void  v13(); // _ZN8S20823C23v13Ev
  virtual void  v14(); // _ZN8S20823C23v14Ev
  S20823C2(); // tgen
};
//SIG(-1 S20823C2) C1{ VBC2{ vd v6 v7 v8 Fi FL} BC3{ VBC2 v9 v10 v11 v12 v13} vd v1 v2 v3 v4 v5 Fi Fp Fc[8]}


 S20823C2 ::~S20823C2(){ note_dtor("S20823C2", this);}
void  S20823C2 ::v10(){vfunc_called(this, "_ZN8S20823C23v10Ev");}
void  S20823C2 ::v11(){vfunc_called(this, "_ZN8S20823C23v11Ev");}
void  S20823C2 ::v12(){vfunc_called(this, "_ZN8S20823C23v12Ev");}
void  S20823C2 ::v13(){vfunc_called(this, "_ZN8S20823C23v13Ev");}
void  S20823C2 ::v14(){vfunc_called(this, "_ZN8S20823C23v14Ev");}
S20823C2 ::S20823C2(){ note_ctor("S20823C2", this);} // tgen

static void Test_S20823C2()
{
  extern Class_Descriptor cd_S20823C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S20823C2, buf);
    S20823C2 *dp, &lv = *(dp=new (buf) S20823C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S20823C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20823C2)");
    check_base_class_offset(lv, (S20823C3*), ABISELECT(32,20), "S20823C2");
    check_base_class_offset(lv, (S20823C3*)(S20823C4*), ABISELECT(32,20), "S20823C2");
    check_base_class_offset(lv, (S20823C4*), 0, "S20823C2");
    check_field_offset(lv, s20823c2f0, ABISELECT(8,4), "S20823C2.s20823c2f0");
    check_field_offset(lv, s20823c2f1, ABISELECT(16,8), "S20823C2.s20823c2f1");
    check_field_offset(lv, s20823c2f2, ABISELECT(24,12), "S20823C2.s20823c2f2");
    test_class_info(&lv, &cd_S20823C2);
    dp->~S20823C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20823C2(Test_S20823C2, "S20823C2", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN8S20823C2C1Ev();
extern void _ZN8S20823C2D2Ev();
Name_Map name_map_S20823C2[] = {
  NSPAIR(_ZN8S20823C2C1Ev),
  NSPAIR(_ZN8S20823C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20823C3;
extern VTBL_ENTRY _ZTI8S20823C3[];
extern  VTBL_ENTRY _ZTV8S20823C3[];
extern Class_Descriptor cd_S20823C4;
extern VTBL_ENTRY _ZTI8S20823C4[];
extern  VTBL_ENTRY _ZTV8S20823C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20823C4[];
static Base_Class bases_S20823C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20823C3,    ABISELECT(32,20), //bcp->offset
    15, //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_S20823C4,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20823C2[];
extern void _ZN8S20823C42v5Ev();
extern void _ZN8S20823C42v6Ev();
extern void _ZN8S20823C42v7Ev();
extern void _ZN8S20823C42v8Ev();
extern void _ZN8S20823C42v9Ev();
extern void _ZN8S20823C2D1Ev();
extern void _ZN8S20823C2D0Ev();
extern void _ZN8S20823C23v10Ev();
extern void _ZN8S20823C23v11Ev();
extern void _ZN8S20823C23v12Ev();
extern void _ZN8S20823C23v13Ev();
extern void _ZN8S20823C23v14Ev();
extern void ABISELECT(_ZTv0_n24_N8S20823C2D1Ev,_ZTv0_n12_N8S20823C2D1Ev)();
extern void ABISELECT(_ZThn32_N8S20823C2D1Ev,_ZThn20_N8S20823C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20823C2D0Ev,_ZTv0_n12_N8S20823C2D0Ev)();
extern void ABISELECT(_ZThn32_N8S20823C2D0Ev,_ZThn20_N8S20823C2D0Ev)() __attribute__((weak));
extern void _ZN8S20823C32v2Ev();
extern void _ZN8S20823C32v3Ev();
extern void _ZN8S20823C32v4Ev();
static  VTBL_ENTRY vtc_S20823C2[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20823C2[0]),
  (VTBL_ENTRY)&_ZN8S20823C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20823C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20823C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20823C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20823C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20823C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20823C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20823C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20823C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20823C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20823C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20823C23v14Ev,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20823C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20823C2D1Ev,_ZTv0_n12_N8S20823C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20823C2D0Ev,_ZTv0_n12_N8S20823C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20823C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20823C32v3Ev,
  (VTBL_ENTRY)&_ZN8S20823C32v4Ev,
};
extern VTBL_ENTRY _ZTV8S20823C2[];
extern void _ZN8S20823C42v5Ev();
extern void _ZN8S20823C42v6Ev();
extern void _ZN8S20823C42v7Ev();
extern void _ZN8S20823C42v8Ev();
extern void _ZN8S20823C42v9Ev();
extern void _ZN8S20823C4D1Ev();
extern void _ZN8S20823C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20823C4__8S20823C2[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20823C4[0]),
  (VTBL_ENTRY)&_ZN8S20823C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20823C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20823C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20823C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20823C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20823C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20823C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20823C4D1Ev,_ZTv0_n12_N8S20823C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S20823C4D1Ev,_ZThn20_N8S20823C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20823C4D0Ev,_ZTv0_n12_N8S20823C4D0Ev)();
extern void ABISELECT(_ZThn32_N8S20823C4D0Ev,_ZThn20_N8S20823C4D0Ev)() __attribute__((weak));
extern void _ZN8S20823C32v2Ev();
extern void _ZN8S20823C32v3Ev();
extern void _ZN8S20823C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20823C3__8S20823C4__8S20823C2[] = {
  0,
  0,
  0,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20823C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20823C4D1Ev,_ZTv0_n12_N8S20823C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20823C4D0Ev,_ZTv0_n12_N8S20823C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20823C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20823C32v3Ev,
  (VTBL_ENTRY)&_ZN8S20823C32v4Ev,
};
static  VTT_ENTRY vtt_S20823C2[] = {
  {&(_ZTV8S20823C2[3]),  3,26},
  {&(_tg__ZTV8S20823C4__8S20823C2[3]),  3,10},
  {&(_tg__ZTV8S20823C3__8S20823C4__8S20823C2[6]),  6,11},
  {&(_ZTV8S20823C2[21]),  21,26},
};
extern VTBL_ENTRY _ZTI8S20823C2[];
extern  VTBL_ENTRY _ZTV8S20823C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20823C2[];
static VTBL_ENTRY alt_thunk_names126[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20823C4D0Ev,_ZTv0_n12_N8S20823C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20823C4D0Ev,_ZThn20_N8S20823C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20823C4D1Ev,_ZTv0_n12_N8S20823C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20823C4D1Ev,_ZThn20_N8S20823C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20823C2D0Ev,_ZTv0_n12_N8S20823C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20823C2D0Ev,_ZThn20_N8S20823C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20823C2D1Ev,_ZTv0_n12_N8S20823C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20823C2D1Ev,_ZThn20_N8S20823C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20823C2 = {  "S20823C2", // class name
  bases_S20823C2, 2,
  &(vtc_S20823C2[0]), // expected_vtbl_contents
  &(vtt_S20823C2[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI8S20823C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20823C2),26, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20823C2),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names126,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20823C1  : virtual S20823C2 {
  virtual  ~S20823C1(); // _ZN8S20823C1D2Ev
  virtual void  v1(); // _ZN8S20823C12v1Ev
  S20823C1(); // tgen
};
//SIG(1 S20823C1) C1{ VBC2{ VBC3{ vd v2 v3 v4 Fi FL} BC4{ VBC3 v5 v6 v7 v8 v9} vd v10 v11 v12 v13 v14 Fi Fp Fc[8]} vd v1}


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

static void Test_S20823C1()
{
  extern Class_Descriptor cd_S20823C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S20823C1, buf);
    S20823C1 *dp, &lv = *(dp=new (buf) S20823C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S20823C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20823C1)");
    check_base_class_offset(lv, (S20823C3*)(S20823C2*), ABISELECT(40,24), "S20823C1");
    check_base_class_offset(lv, (S20823C3*)(S20823C4*)(S20823C2*), ABISELECT(40,24), "S20823C1");
    check_base_class_offset(lv, (S20823C4*)(S20823C2*), ABISELECT(8,4), "S20823C1");
    check_base_class_offset(lv, (S20823C2*), ABISELECT(8,4), "S20823C1");
    test_class_info(&lv, &cd_S20823C1);
    dp->~S20823C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20823C1(Test_S20823C1, "S20823C1", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S20823C1C1Ev();
extern void _ZN8S20823C1D2Ev();
Name_Map name_map_S20823C1[] = {
  NSPAIR(_ZN8S20823C1C1Ev),
  NSPAIR(_ZN8S20823C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20823C3;
extern VTBL_ENTRY _ZTI8S20823C3[];
extern  VTBL_ENTRY _ZTV8S20823C3[];
extern Class_Descriptor cd_S20823C4;
extern VTBL_ENTRY _ZTI8S20823C4[];
extern  VTBL_ENTRY _ZTV8S20823C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20823C4[];
extern Class_Descriptor cd_S20823C2;
extern VTBL_ENTRY _ZTI8S20823C2[];
extern  VTBL_ENTRY _ZTV8S20823C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20823C2[];
static Base_Class bases_S20823C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20823C3,    ABISELECT(40,24), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //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_S20823C4,    ABISELECT(8,4), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20823C2,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20823C1[];
extern void _ZN8S20823C1D1Ev();
extern void _ZN8S20823C1D0Ev();
extern void _ZN8S20823C12v1Ev();
extern void _ZN8S20823C42v5Ev();
extern void _ZN8S20823C42v6Ev();
extern void _ZN8S20823C42v7Ev();
extern void _ZN8S20823C42v8Ev();
extern void _ZN8S20823C42v9Ev();
extern void ABISELECT(_ZTv0_n72_N8S20823C1D1Ev,_ZTv0_n36_N8S20823C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20823C1D1Ev,_ZThn4_N8S20823C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20823C1D0Ev,_ZTv0_n36_N8S20823C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S20823C1D0Ev,_ZThn4_N8S20823C1D0Ev)() __attribute__((weak));
extern void _ZN8S20823C23v10Ev();
extern void _ZN8S20823C23v11Ev();
extern void _ZN8S20823C23v12Ev();
extern void _ZN8S20823C23v13Ev();
extern void _ZN8S20823C23v14Ev();
extern void ABISELECT(_ZTv0_n24_N8S20823C1D1Ev,_ZTv0_n12_N8S20823C1D1Ev)();
extern void ABISELECT(_ZThn40_N8S20823C1D1Ev,_ZThn24_N8S20823C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20823C1D0Ev,_ZTv0_n12_N8S20823C1D0Ev)();
extern void ABISELECT(_ZThn40_N8S20823C1D0Ev,_ZThn24_N8S20823C1D0Ev)() __attribute__((weak));
extern void _ZN8S20823C32v2Ev();
extern void _ZN8S20823C32v3Ev();
extern void _ZN8S20823C32v4Ev();
static  VTBL_ENTRY vtc_S20823C1[] = {
  ABISELECT(40,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20823C1[0]),
  (VTBL_ENTRY)&_ZN8S20823C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20823C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20823C12v1Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20823C1[0]),
  (VTBL_ENTRY)&_ZN8S20823C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20823C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20823C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20823C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20823C42v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20823C1D1Ev,_ZTv0_n36_N8S20823C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20823C1D0Ev,_ZTv0_n36_N8S20823C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20823C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20823C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20823C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20823C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20823C23v14Ev,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20823C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20823C1D1Ev,_ZTv0_n12_N8S20823C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20823C1D0Ev,_ZTv0_n12_N8S20823C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20823C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20823C32v3Ev,
  (VTBL_ENTRY)&_ZN8S20823C32v4Ev,
};
extern VTBL_ENTRY _ZTV8S20823C1[];
extern void _ZN8S20823C42v5Ev();
extern void _ZN8S20823C42v6Ev();
extern void _ZN8S20823C42v7Ev();
extern void _ZN8S20823C42v8Ev();
extern void _ZN8S20823C42v9Ev();
extern void _ZN8S20823C2D1Ev();
extern void _ZN8S20823C2D0Ev();
extern void _ZN8S20823C23v10Ev();
extern void _ZN8S20823C23v11Ev();
extern void _ZN8S20823C23v12Ev();
extern void _ZN8S20823C23v13Ev();
extern void _ZN8S20823C23v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20823C2__8S20823C1[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20823C2[0]),
  (VTBL_ENTRY)&_ZN8S20823C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20823C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20823C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20823C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20823C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20823C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20823C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20823C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20823C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20823C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20823C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20823C23v14Ev,
};
extern void _ZN8S20823C42v5Ev();
extern void _ZN8S20823C42v6Ev();
extern void _ZN8S20823C42v7Ev();
extern void _ZN8S20823C42v8Ev();
extern void _ZN8S20823C42v9Ev();
extern void _ZN8S20823C4D1Ev();
extern void _ZN8S20823C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20823C48S20823C2__8S20823C1[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20823C4[0]),
  (VTBL_ENTRY)&_ZN8S20823C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20823C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20823C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20823C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20823C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20823C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20823C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20823C4D1Ev,_ZTv0_n12_N8S20823C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S20823C4D1Ev,_ZThn20_N8S20823C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20823C4D0Ev,_ZTv0_n12_N8S20823C4D0Ev)();
extern void ABISELECT(_ZThn32_N8S20823C4D0Ev,_ZThn20_N8S20823C4D0Ev)() __attribute__((weak));
extern void _ZN8S20823C32v2Ev();
extern void _ZN8S20823C32v3Ev();
extern void _ZN8S20823C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20823C3__8S20823C48S20823C2__8S20823C1[] = {
  0,
  0,
  0,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20823C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20823C4D1Ev,_ZTv0_n12_N8S20823C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20823C4D0Ev,_ZTv0_n12_N8S20823C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20823C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20823C32v3Ev,
  (VTBL_ENTRY)&_ZN8S20823C32v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20823C2D1Ev,_ZTv0_n12_N8S20823C2D1Ev)();
extern void ABISELECT(_ZThn32_N8S20823C2D1Ev,_ZThn20_N8S20823C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20823C2D0Ev,_ZTv0_n12_N8S20823C2D0Ev)();
extern void ABISELECT(_ZThn32_N8S20823C2D0Ev,_ZThn20_N8S20823C2D0Ev)() __attribute__((weak));
extern void _ZN8S20823C32v2Ev();
extern void _ZN8S20823C32v3Ev();
extern void _ZN8S20823C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20823C3__8S20823C2__8S20823C1[] = {
  0,
  0,
  0,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20823C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20823C2D1Ev,_ZTv0_n12_N8S20823C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20823C2D0Ev,_ZTv0_n12_N8S20823C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20823C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20823C32v3Ev,
  (VTBL_ENTRY)&_ZN8S20823C32v4Ev,
};
static  VTT_ENTRY vtt_S20823C1[] = {
  {&(_ZTV8S20823C1[4]),  4,44},
  {&(_ZTV8S20823C1[21]),  21,44},
  {&(_ZTV8S20823C1[39]),  39,44},
  {&(_tg__ZTV8S20823C2__8S20823C1[3]),  3,15},
  {&(_tg__ZTV8S20823C48S20823C2__8S20823C1[3]),  3,10},
  {&(_tg__ZTV8S20823C3__8S20823C48S20823C2__8S20823C1[6]),  6,11},
  {&(_tg__ZTV8S20823C3__8S20823C2__8S20823C1[6]),  6,11},
};
extern VTBL_ENTRY _ZTI8S20823C1[];
extern  VTBL_ENTRY _ZTV8S20823C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20823C1[];
static VTBL_ENTRY alt_thunk_names127[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20823C2D0Ev,_ZTv0_n12_N8S20823C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20823C2D0Ev,_ZThn20_N8S20823C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20823C2D1Ev,_ZTv0_n12_N8S20823C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20823C2D1Ev,_ZThn20_N8S20823C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20823C4D0Ev,_ZTv0_n12_N8S20823C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20823C4D0Ev,_ZThn20_N8S20823C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20823C4D1Ev,_ZTv0_n12_N8S20823C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20823C4D1Ev,_ZThn20_N8S20823C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20823C1D0Ev,_ZTv0_n12_N8S20823C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20823C1D0Ev,_ZThn24_N8S20823C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20823C1D1Ev,_ZTv0_n12_N8S20823C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20823C1D1Ev,_ZThn24_N8S20823C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20823C1D0Ev,_ZTv0_n36_N8S20823C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20823C1D0Ev,_ZThn4_N8S20823C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20823C1D1Ev,_ZTv0_n36_N8S20823C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20823C1D1Ev,_ZThn4_N8S20823C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20823C1 = {  "S20823C1", // class name
  bases_S20823C1, 3,
  &(vtc_S20823C1[0]), // expected_vtbl_contents
  &(vtt_S20823C1[0]), // expected_vtt_contents
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S20823C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20823C1),44, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20823C1),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names127,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6564C2  {
  virtual void  v2(); // _ZN7S6564C22v2Ev
  virtual void  v3(); // _ZN7S6564C22v3Ev
  virtual void  v4(); // _ZN7S6564C22v4Ev
  virtual void  v5(); // _ZN7S6564C22v5Ev
  virtual void  v6(); // _ZN7S6564C22v6Ev
  virtual void  v7(); // _ZN7S6564C22v7Ev
  virtual void  v8(); // _ZN7S6564C22v8Ev
  virtual void  v9(); // _ZN7S6564C22v9Ev
  virtual void  v10(); // _ZN7S6564C23v10Ev
  ~S6564C2(); // tgen
  S6564C2(); // tgen
};
//SIG(-1 S6564C2) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S6564C2 ::v2(){vfunc_called(this, "_ZN7S6564C22v2Ev");}
void  S6564C2 ::v3(){vfunc_called(this, "_ZN7S6564C22v3Ev");}
void  S6564C2 ::v4(){vfunc_called(this, "_ZN7S6564C22v4Ev");}
void  S6564C2 ::v5(){vfunc_called(this, "_ZN7S6564C22v5Ev");}
void  S6564C2 ::v6(){vfunc_called(this, "_ZN7S6564C22v6Ev");}
void  S6564C2 ::v7(){vfunc_called(this, "_ZN7S6564C22v7Ev");}
void  S6564C2 ::v8(){vfunc_called(this, "_ZN7S6564C22v8Ev");}
void  S6564C2 ::v9(){vfunc_called(this, "_ZN7S6564C22v9Ev");}
void  S6564C2 ::v10(){vfunc_called(this, "_ZN7S6564C23v10Ev");}
S6564C2 ::~S6564C2(){ note_dtor("S6564C2", this);} // tgen
S6564C2 ::S6564C2(){ note_ctor("S6564C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6564C2C1Ev();
extern void _ZN7S6564C2D1Ev();
Name_Map name_map_S6564C2[] = {
  NSPAIR(_ZN7S6564C2C1Ev),
  NSPAIR(_ZN7S6564C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6564C2[];
extern void _ZN7S6564C22v2Ev();
extern void _ZN7S6564C22v3Ev();
extern void _ZN7S6564C22v4Ev();
extern void _ZN7S6564C22v5Ev();
extern void _ZN7S6564C22v6Ev();
extern void _ZN7S6564C22v7Ev();
extern void _ZN7S6564C22v8Ev();
extern void _ZN7S6564C22v9Ev();
extern void _ZN7S6564C23v10Ev();
static  VTBL_ENTRY vtc_S6564C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6564C2[0]),
  (VTBL_ENTRY)&_ZN7S6564C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6564C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S6564C2[];
extern  VTBL_ENTRY _ZTV7S6564C2[];
Class_Descriptor cd_S6564C2 = {  "S6564C2", // class name
  0,0,//no base classes
  &(vtc_S6564C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6564C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6564C2),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  S6564C3  : virtual S6564C2 {
  virtual  ~S6564C3(); // _ZN7S6564C3D2Ev
  virtual void  v11(); // _ZN7S6564C33v11Ev
  virtual void  v12(); // _ZN7S6564C33v12Ev
  virtual void  v13(); // _ZN7S6564C33v13Ev
  virtual void  v14(); // _ZN7S6564C33v14Ev
  virtual void  v15(); // _ZN7S6564C33v15Ev
  virtual void  v16(); // _ZN7S6564C33v16Ev
  virtual void  v17(); // _ZN7S6564C33v17Ev
  virtual void  v18(); // _ZN7S6564C33v18Ev
  virtual void  v19(); // _ZN7S6564C33v19Ev
  S6564C3(); // tgen
};
//SIG(-1 S6564C3) C1{ VBC2{ v10 v11 v12 v13 v14 v15 v16 v17 v18} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S6564C3 ::~S6564C3(){ note_dtor("S6564C3", this);}
void  S6564C3 ::v11(){vfunc_called(this, "_ZN7S6564C33v11Ev");}
void  S6564C3 ::v12(){vfunc_called(this, "_ZN7S6564C33v12Ev");}
void  S6564C3 ::v13(){vfunc_called(this, "_ZN7S6564C33v13Ev");}
void  S6564C3 ::v14(){vfunc_called(this, "_ZN7S6564C33v14Ev");}
void  S6564C3 ::v15(){vfunc_called(this, "_ZN7S6564C33v15Ev");}
void  S6564C3 ::v16(){vfunc_called(this, "_ZN7S6564C33v16Ev");}
void  S6564C3 ::v17(){vfunc_called(this, "_ZN7S6564C33v17Ev");}
void  S6564C3 ::v18(){vfunc_called(this, "_ZN7S6564C33v18Ev");}
void  S6564C3 ::v19(){vfunc_called(this, "_ZN7S6564C33v19Ev");}
S6564C3 ::S6564C3(){ note_ctor("S6564C3", this);} // tgen

static void Test_S6564C3()
{
  extern Class_Descriptor cd_S6564C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6564C3, buf);
    S6564C3 *dp, &lv = *(dp=new (buf) S6564C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6564C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6564C3)");
    check_base_class_offset(lv, (S6564C2*), 0, "S6564C3");
    test_class_info(&lv, &cd_S6564C3);
    dp->~S6564C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6564C3(Test_S6564C3, "S6564C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6564C3C1Ev();
extern void _ZN7S6564C3D2Ev();
Name_Map name_map_S6564C3[] = {
  NSPAIR(_ZN7S6564C3C1Ev),
  NSPAIR(_ZN7S6564C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6564C2;
extern VTBL_ENTRY _ZTI7S6564C2[];
extern  VTBL_ENTRY _ZTV7S6564C2[];
static Base_Class bases_S6564C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6564C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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 _ZTI7S6564C3[];
extern void _ZN7S6564C22v2Ev();
extern void _ZN7S6564C22v3Ev();
extern void _ZN7S6564C22v4Ev();
extern void _ZN7S6564C22v5Ev();
extern void _ZN7S6564C22v6Ev();
extern void _ZN7S6564C22v7Ev();
extern void _ZN7S6564C22v8Ev();
extern void _ZN7S6564C22v9Ev();
extern void _ZN7S6564C23v10Ev();
extern void _ZN7S6564C3D1Ev();
extern void _ZN7S6564C3D0Ev();
extern void _ZN7S6564C33v11Ev();
extern void _ZN7S6564C33v12Ev();
extern void _ZN7S6564C33v13Ev();
extern void _ZN7S6564C33v14Ev();
extern void _ZN7S6564C33v15Ev();
extern void _ZN7S6564C33v16Ev();
extern void _ZN7S6564C33v17Ev();
extern void _ZN7S6564C33v18Ev();
extern void _ZN7S6564C33v19Ev();
static  VTBL_ENTRY vtc_S6564C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6564C3[0]),
  (VTBL_ENTRY)&_ZN7S6564C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6564C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6564C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6564C3D0Ev,
  (VTBL_ENTRY)&_ZN7S6564C33v11Ev,
  (VTBL_ENTRY)&_ZN7S6564C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6564C33v13Ev,
  (VTBL_ENTRY)&_ZN7S6564C33v14Ev,
  (VTBL_ENTRY)&_ZN7S6564C33v15Ev,
  (VTBL_ENTRY)&_ZN7S6564C33v16Ev,
  (VTBL_ENTRY)&_ZN7S6564C33v17Ev,
  (VTBL_ENTRY)&_ZN7S6564C33v18Ev,
  (VTBL_ENTRY)&_ZN7S6564C33v19Ev,
};
extern VTBL_ENTRY _ZTV7S6564C3[];
static  VTT_ENTRY vtt_S6564C3[] = {
  {&(_ZTV7S6564C3[12]),  12,32},
  {&(_ZTV7S6564C3[12]),  12,32},
};
extern VTBL_ENTRY _ZTI7S6564C3[];
extern  VTBL_ENTRY _ZTV7S6564C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6564C3[];
Class_Descriptor cd_S6564C3 = {  "S6564C3", // class name
  bases_S6564C3, 1,
  &(vtc_S6564C3[0]), // expected_vtbl_contents
  &(vtt_S6564C3[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6564C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S6564C3),32, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6564C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6564C1  : S6564C2 , S6564C3 {
  void *s6564c1f0;
  virtual  ~S6564C1(); // _ZN7S6564C1D2Ev
  virtual void  v1(); // _ZN7S6564C12v1Ev
  S6564C1(); // tgen
};
//SIG(1 S6564C1) C1{ BC2{ v2 v3 v4 v5 v6 v7 v8 v9 v10} BC3{ VBC2 vd v11 v12 v13 v14 v15 v16 v17 v18 v19} vd v1 Fp}


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

static void Test_S6564C1()
{
  extern Class_Descriptor cd_S6564C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S6564C1, buf);
    S6564C1 *dp, &lv = *(dp=new (buf) S6564C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S6564C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6564C1)");
    /*is_ambiguous_... S6564C1::S6564C2 */ AMB_check_base_class_offset(lv, (S6564C2*), 0, "S6564C1");
    check_base_class_offset(lv, (S6564C2*)(S6564C3*), ABISELECT(8,4), "S6564C1");
    check_base_class_offset(lv, (S6564C3*), ABISELECT(8,4), "S6564C1");
    check_field_offset(lv, s6564c1f0, ABISELECT(16,8), "S6564C1.s6564c1f0");
    test_class_info(&lv, &cd_S6564C1);
    dp->~S6564C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6564C1(Test_S6564C1, "S6564C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S6564C1C1Ev();
extern void _ZN7S6564C1D2Ev();
Name_Map name_map_S6564C1[] = {
  NSPAIR(_ZN7S6564C1C1Ev),
  NSPAIR(_ZN7S6564C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6564C2;
extern VTBL_ENTRY _ZTI7S6564C2[];
extern  VTBL_ENTRY _ZTV7S6564C2[];
extern Class_Descriptor cd_S6564C2;
extern VTBL_ENTRY _ZTI7S6564C2[];
extern  VTBL_ENTRY _ZTV7S6564C2[];
extern Class_Descriptor cd_S6564C3;
extern VTBL_ENTRY _ZTI7S6564C3[];
extern  VTBL_ENTRY _ZTV7S6564C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6564C3[];
static Base_Class bases_S6564C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6564C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6564C2,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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
    2, //immediately_derived
  0, 1},
  {&cd_S6564C3,    ABISELECT(8,4), //bcp->offset
    15, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    4, //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 _ZTI7S6564C1[];
extern void _ZN7S6564C22v2Ev();
extern void _ZN7S6564C22v3Ev();
extern void _ZN7S6564C22v4Ev();
extern void _ZN7S6564C22v5Ev();
extern void _ZN7S6564C22v6Ev();
extern void _ZN7S6564C22v7Ev();
extern void _ZN7S6564C22v8Ev();
extern void _ZN7S6564C22v9Ev();
extern void _ZN7S6564C23v10Ev();
extern void _ZN7S6564C1D1Ev();
extern void _ZN7S6564C1D0Ev();
extern void _ZN7S6564C12v1Ev();
extern void _ZN7S6564C22v2Ev();
extern void _ZN7S6564C22v3Ev();
extern void _ZN7S6564C22v4Ev();
extern void _ZN7S6564C22v5Ev();
extern void _ZN7S6564C22v6Ev();
extern void _ZN7S6564C22v7Ev();
extern void _ZN7S6564C22v8Ev();
extern void _ZN7S6564C22v9Ev();
extern void _ZN7S6564C23v10Ev();
extern void ABISELECT(_ZThn8_N7S6564C1D1Ev,_ZThn4_N7S6564C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S6564C1D0Ev,_ZThn4_N7S6564C1D0Ev)();
extern void _ZN7S6564C33v11Ev();
extern void _ZN7S6564C33v12Ev();
extern void _ZN7S6564C33v13Ev();
extern void _ZN7S6564C33v14Ev();
extern void _ZN7S6564C33v15Ev();
extern void _ZN7S6564C33v16Ev();
extern void _ZN7S6564C33v17Ev();
extern void _ZN7S6564C33v18Ev();
extern void _ZN7S6564C33v19Ev();
static  VTBL_ENTRY vtc_S6564C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6564C1[0]),
  (VTBL_ENTRY)&_ZN7S6564C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6564C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6564C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6564C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6564C12v1Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6564C1[0]),
  (VTBL_ENTRY)&_ZN7S6564C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6564C23v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S6564C1D1Ev,_ZThn4_N7S6564C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S6564C1D0Ev,_ZThn4_N7S6564C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6564C33v11Ev,
  (VTBL_ENTRY)&_ZN7S6564C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6564C33v13Ev,
  (VTBL_ENTRY)&_ZN7S6564C33v14Ev,
  (VTBL_ENTRY)&_ZN7S6564C33v15Ev,
  (VTBL_ENTRY)&_ZN7S6564C33v16Ev,
  (VTBL_ENTRY)&_ZN7S6564C33v17Ev,
  (VTBL_ENTRY)&_ZN7S6564C33v18Ev,
  (VTBL_ENTRY)&_ZN7S6564C33v19Ev,
};
extern VTBL_ENTRY _ZTV7S6564C1[];
extern void _ZN7S6564C22v2Ev();
extern void _ZN7S6564C22v3Ev();
extern void _ZN7S6564C22v4Ev();
extern void _ZN7S6564C22v5Ev();
extern void _ZN7S6564C22v6Ev();
extern void _ZN7S6564C22v7Ev();
extern void _ZN7S6564C22v8Ev();
extern void _ZN7S6564C22v9Ev();
extern void _ZN7S6564C23v10Ev();
extern void _ZN7S6564C3D1Ev();
extern void _ZN7S6564C3D0Ev();
extern void _ZN7S6564C33v11Ev();
extern void _ZN7S6564C33v12Ev();
extern void _ZN7S6564C33v13Ev();
extern void _ZN7S6564C33v14Ev();
extern void _ZN7S6564C33v15Ev();
extern void _ZN7S6564C33v16Ev();
extern void _ZN7S6564C33v17Ev();
extern void _ZN7S6564C33v18Ev();
extern void _ZN7S6564C33v19Ev();
static  VTBL_ENTRY _tg__ZTV7S6564C3__7S6564C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6564C3[0]),
  (VTBL_ENTRY)&_ZN7S6564C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6564C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6564C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6564C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6564C3D0Ev,
  (VTBL_ENTRY)&_ZN7S6564C33v11Ev,
  (VTBL_ENTRY)&_ZN7S6564C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6564C33v13Ev,
  (VTBL_ENTRY)&_ZN7S6564C33v14Ev,
  (VTBL_ENTRY)&_ZN7S6564C33v15Ev,
  (VTBL_ENTRY)&_ZN7S6564C33v16Ev,
  (VTBL_ENTRY)&_ZN7S6564C33v17Ev,
  (VTBL_ENTRY)&_ZN7S6564C33v18Ev,
  (VTBL_ENTRY)&_ZN7S6564C33v19Ev,
};
static  VTT_ENTRY vtt_S6564C1[] = {
  {&(_ZTV7S6564C1[3]),  3,47},
  {&(_tg__ZTV7S6564C3__7S6564C1[12]),  12,32},
  {&(_tg__ZTV7S6564C3__7S6564C1[12]),  12,32},
  {&(_ZTV7S6564C1[27]),  27,47},
  {&(_ZTV7S6564C1[27]),  27,47},
};
extern VTBL_ENTRY _ZTI7S6564C1[];
extern  VTBL_ENTRY _ZTV7S6564C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6564C1[];
Class_Descriptor cd_S6564C1 = {  "S6564C1", // class name
  bases_S6564C1, 3,
  &(vtc_S6564C1[0]), // expected_vtbl_contents
  &(vtt_S6564C1[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S6564C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6564C1),47, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6564C1),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21607C5_nt  {
  void *s21607c5f0;
  int s21607c5f1[2];
  void *s21607c5f2[2];
  void  mf21607c5(); // _ZN11S21607C5_nt9mf21607c5Ev
};
//SIG(-1 S21607C5_nt) C1{ m Fp Fi[2] Fp[2]}


void  S21607C5_nt ::mf21607c5(){}

//skip512 S21607C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21607C1  {
  int s21607c1f0;
  ::S3765C5_nt s21607c1f1;
  void *s21607c1f2;
  ::S5266C19_nt s21607c1f3;
  ::S5266C19_nt s21607c1f4;
  char s21607c1f5[6];
  void *s21607c1f6[2];
  int s21607c1f7;
  ::S21607C5_nt s21607c1f8;
  ::S5266C19_nt s21607c1f9;
  void  mf21607c1(); // _ZN8S21607C19mf21607c1Ev
  virtual  ~S21607C1(); // _ZN8S21607C1D1Ev
  S21607C1(); // tgen
};
//SIG(1 S21607C1) C1{ vd m Fi FC2{ m Fp[2]} Fp FC3{ m Fp Fi FC4{ m}} FC3 Fc[6] Fp[2] Fi FC5{ m Fp Fi[2] Fp[2]} FC3}


void  S21607C1 ::mf21607c1(){}
 S21607C1 ::~S21607C1(){ note_dtor("S21607C1", this);}
S21607C1 ::S21607C1(){ note_ctor("S21607C1", this);} // tgen

static void Test_S21607C1()
{
  extern Class_Descriptor cd_S21607C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,25)];
    init_test(&cd_S21607C1, buf);
    S21607C1 *dp, &lv = *(dp=new (buf) S21607C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,96), "sizeof(S21607C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21607C1)");
    check_field_offset(lv, s21607c1f0, ABISELECT(8,4), "S21607C1.s21607c1f0");
    check_field_offset(lv, s21607c1f1, ABISELECT(16,8), "S21607C1.s21607c1f1");
    check_field_offset(lv, s21607c1f2, ABISELECT(32,16), "S21607C1.s21607c1f2");
    check_field_offset(lv, s21607c1f3, ABISELECT(40,20), "S21607C1.s21607c1f3");
    check_field_offset(lv, s21607c1f4, ABISELECT(56,32), "S21607C1.s21607c1f4");
    check_field_offset(lv, s21607c1f5, ABISELECT(72,44), "S21607C1.s21607c1f5");
    check_field_offset(lv, s21607c1f6, ABISELECT(80,52), "S21607C1.s21607c1f6");
    check_field_offset(lv, s21607c1f7, ABISELECT(96,60), "S21607C1.s21607c1f7");
    check_field_offset(lv, s21607c1f8, ABISELECT(104,64), "S21607C1.s21607c1f8");
    check_field_offset(lv, s21607c1f9, ABISELECT(136,84), "S21607C1.s21607c1f9");
    test_class_info(&lv, &cd_S21607C1);
    dp->~S21607C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21607C1(Test_S21607C1, "S21607C1", ABISELECT(152,96));

#else // __cplusplus

extern void _ZN8S21607C1C1Ev();
extern void _ZN8S21607C1D1Ev();
Name_Map name_map_S21607C1[] = {
  NSPAIR(_ZN8S21607C1C1Ev),
  NSPAIR(_ZN8S21607C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21607C1[];
extern void _ZN8S21607C1D1Ev();
extern void _ZN8S21607C1D0Ev();
static  VTBL_ENTRY vtc_S21607C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21607C1[0]),
  (VTBL_ENTRY)&_ZN8S21607C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21607C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21607C1[];
extern  VTBL_ENTRY _ZTV8S21607C1[];
Class_Descriptor cd_S21607C1 = {  "S21607C1", // class name
  0,0,//no base classes
  &(vtc_S21607C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,96), // object size
  NSPAIRA(_ZTI8S21607C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21607C1),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  S4387C3_nt  {
  ::S5266C19_nt s4387c3f0;
  int s4387c3f1[2];
  char s4387c3f2;
  virtual  ~S4387C3_nt(); // _ZN10S4387C3_ntD1Ev
  virtual void  v2(); // _ZN10S4387C3_nt2v2Ev
  virtual void  v3(); // _ZN10S4387C3_nt2v3Ev
  virtual void  v4(); // _ZN10S4387C3_nt2v4Ev
  S4387C3_nt(); // tgen
};
//SIG(-1 S4387C3_nt) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4387C3_nt ::~S4387C3_nt(){ note_dtor("S4387C3_nt", this);}
void  S4387C3_nt ::v2(){vfunc_called(this, "_ZN10S4387C3_nt2v2Ev");}
void  S4387C3_nt ::v3(){vfunc_called(this, "_ZN10S4387C3_nt2v3Ev");}
void  S4387C3_nt ::v4(){vfunc_called(this, "_ZN10S4387C3_nt2v4Ev");}
S4387C3_nt ::S4387C3_nt(){ note_ctor("S4387C3_nt", this);} // tgen

//skip512 S4387C3_nt

#else // __cplusplus

extern void _ZN10S4387C3_ntC1Ev();
extern void _ZN10S4387C3_ntD1Ev();
Name_Map name_map_S4387C3_nt[] = {
  NSPAIR(_ZN10S4387C3_ntC1Ev),
  NSPAIR(_ZN10S4387C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4387C3_nt[];
extern void _ZN10S4387C3_ntD1Ev();
extern void _ZN10S4387C3_ntD0Ev();
extern void _ZN10S4387C3_nt2v2Ev();
extern void _ZN10S4387C3_nt2v3Ev();
extern void _ZN10S4387C3_nt2v4Ev();
static  VTBL_ENTRY vtc_S4387C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4387C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S4387C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4387C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4387C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S4387C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4387C3_nt2v4Ev,
};
extern VTBL_ENTRY _ZTI10S4387C3_nt[];
VTBL_ENTRY *P__ZTI10S4387C3_nt = _ZTI10S4387C3_nt; 
extern  VTBL_ENTRY _ZTV10S4387C3_nt[];
Class_Descriptor cd_S4387C3_nt = {  "S4387C3_nt", // class name
  0,0,//no base classes
  &(vtc_S4387C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI10S4387C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4387C3_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  S4387C2_nt  : S4387C3_nt {
  void *s4387c2f0;
  virtual void  v5(); // _ZN10S4387C2_nt2v5Ev
  virtual void  v6(); // _ZN10S4387C2_nt2v6Ev
  ~S4387C2_nt(); // tgen
  S4387C2_nt(); // tgen
};
//SIG(-1 S4387C2_nt) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4387C2_nt ::v5(){vfunc_called(this, "_ZN10S4387C2_nt2v5Ev");}
void  S4387C2_nt ::v6(){vfunc_called(this, "_ZN10S4387C2_nt2v6Ev");}
S4387C2_nt ::~S4387C2_nt(){ note_dtor("S4387C2_nt", this);} // tgen
S4387C2_nt ::S4387C2_nt(){ note_ctor("S4387C2_nt", this);} // tgen

//skip512 S4387C2_nt

#else // __cplusplus

extern void _ZN10S4387C2_ntC1Ev();
extern void _ZN10S4387C2_ntD1Ev();
Name_Map name_map_S4387C2_nt[] = {
  NSPAIR(_ZN10S4387C2_ntC1Ev),
  NSPAIR(_ZN10S4387C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4387C3_nt;
extern VTBL_ENTRY _ZTI10S4387C3_nt[];
extern  VTBL_ENTRY _ZTV10S4387C3_nt[];
static Base_Class bases_S4387C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4387C3_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 _ZTI10S4387C2_nt[];
extern void _ZN10S4387C2_ntD1Ev();
extern void _ZN10S4387C2_ntD0Ev();
extern void _ZN10S4387C3_nt2v2Ev();
extern void _ZN10S4387C3_nt2v3Ev();
extern void _ZN10S4387C3_nt2v4Ev();
extern void _ZN10S4387C2_nt2v5Ev();
extern void _ZN10S4387C2_nt2v6Ev();
static  VTBL_ENTRY vtc_S4387C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4387C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S4387C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4387C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4387C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S4387C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4387C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4387C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4387C2_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI10S4387C2_nt[];
VTBL_ENTRY *P__ZTI10S4387C2_nt = _ZTI10S4387C2_nt; 
extern  VTBL_ENTRY _ZTV10S4387C2_nt[];
Class_Descriptor cd_S4387C2_nt = {  "S4387C2_nt", // class name
  bases_S4387C2_nt, 1,
  &(vtc_S4387C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI10S4387C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S4387C2_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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4387C1  : S4387C2_nt {
  ::S3765C5_nt s4387c1f0;
  __tsi64 s4387c1f1;
  ::S17777C6_nt s4387c1f2;
  virtual void  v1(); // _ZN7S4387C12v1Ev
  ~S4387C1(); // tgen
  S4387C1(); // tgen
};
//SIG(1 S4387C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 FC6{ m Fp[2]} FL FC7{ m Fp}}


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

static void Test_S4387C1()
{
  extern Class_Descriptor cd_S4387C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S4387C1, buf);
    S4387C1 *dp, &lv = *(dp=new (buf) S4387C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S4387C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4387C1)");
    check_base_class_offset(lv, (S4387C3_nt*)(S4387C2_nt*), 0, "S4387C1");
    check_base_class_offset(lv, (S4387C2_nt*), 0, "S4387C1");
    check_field_offset(lv, s4387c1f0, ABISELECT(48,32), "S4387C1.s4387c1f0");
    check_field_offset(lv, s4387c1f1, ABISELECT(64,40), "S4387C1.s4387c1f1");
    check_field_offset(lv, s4387c1f2, ABISELECT(72,48), "S4387C1.s4387c1f2");
    test_class_info(&lv, &cd_S4387C1);
    dp->~S4387C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4387C1(Test_S4387C1, "S4387C1", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S4387C1C1Ev();
extern void _ZN7S4387C1D1Ev();
Name_Map name_map_S4387C1[] = {
  NSPAIR(_ZN7S4387C1C1Ev),
  NSPAIR(_ZN7S4387C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4387C3_nt;
extern VTBL_ENTRY _ZTI10S4387C3_nt[];
extern  VTBL_ENTRY _ZTV10S4387C3_nt[];
extern Class_Descriptor cd_S4387C2_nt;
extern VTBL_ENTRY _ZTI10S4387C2_nt[];
extern  VTBL_ENTRY _ZTV10S4387C2_nt[];
static Base_Class bases_S4387C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4387C3_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_S4387C2_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 _ZTI7S4387C1[];
extern void _ZN7S4387C1D1Ev();
extern void _ZN7S4387C1D0Ev();
extern void _ZN10S4387C3_nt2v2Ev();
extern void _ZN10S4387C3_nt2v3Ev();
extern void _ZN10S4387C3_nt2v4Ev();
extern void _ZN10S4387C2_nt2v5Ev();
extern void _ZN10S4387C2_nt2v6Ev();
extern void _ZN7S4387C12v1Ev();
static  VTBL_ENTRY vtc_S4387C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4387C1[0]),
  (VTBL_ENTRY)&_ZN7S4387C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4387C1D0Ev,
  (VTBL_ENTRY)&_ZN10S4387C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S4387C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4387C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4387C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4387C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN7S4387C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4387C1[];
extern  VTBL_ENTRY _ZTV7S4387C1[];
Class_Descriptor cd_S4387C1 = {  "S4387C1", // class name
  bases_S4387C1, 2,
  &(vtc_S4387C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S4387C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4387C1),10, //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  S15924C4_nt  {
  void *s15924c4f0;
  int s15924c4f1;
  void  mf15924c4(); // _ZN11S15924C4_nt9mf15924c4Ev
};
//SIG(-1 S15924C4_nt) C1{ m Fp Fi}


void  S15924C4_nt ::mf15924c4(){}

//skip512 S15924C4_nt

#else // __cplusplus

Class_Descriptor cd_S15924C4_nt = {  "S15924C4_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  S15924C3_nt  : S15924C4_nt {
};
//SIG(-1 S15924C3_nt) C1{ BC2{ m Fp Fi}}



//skip512 S15924C3_nt

#else // __cplusplus

extern Class_Descriptor cd_S15924C4_nt;
static Base_Class bases_S15924C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15924C4_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  S15924C2_nt  {
  int s15924c2f0;
  ::S15924C3_nt s15924c2f1;
  void  mf15924c2(); // _ZN11S15924C2_nt9mf15924c2Ev
};
//SIG(-1 S15924C2_nt) C1{ m Fi FC2{ BC3{ m Fp Fi}}}


void  S15924C2_nt ::mf15924c2(){}

//skip512 S15924C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15924C9_nt  {
  ::S3042C4_nt s15924c9f0;
};
//SIG(-1 S15924C9_nt) C1{ FC2{ FL[4]}}



//skip512 S15924C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15924C8_nt  {
  ::S15924C9_nt s15924c8f0;
  void  mf15924c8(); // _ZN11S15924C8_nt9mf15924c8Ev
};
//SIG(-1 S15924C8_nt) C1{ m FC2{ FC3{ FL[4]}}}


void  S15924C8_nt ::mf15924c8(){}

//skip512 S15924C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15924C1  {
  ::S15924C2_nt s15924c1f0;
  ::S15924C2_nt s15924c1f1;
  char s15924c1f2;
  ::S15924C8_nt s15924c1f3;
  void  mf15924c1(); // _ZN8S15924C19mf15924c1Ev
};
//SIG(1 S15924C1) C1{ m FC2{ m Fi FC3{ BC4{ m Fp Fi}}} FC2 Fc FC5{ m FC6{ FC7{ FL[4]}}}}


void  S15924C1 ::mf15924c1(){}

static void Test_S15924C1()
{
  {
    init_simple_test("S15924C1");
    S15924C1 lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S15924C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15924C1)");
    check_field_offset(lv, s15924c1f0, 0, "S15924C1.s15924c1f0");
    check_field_offset(lv, s15924c1f1, ABISELECT(24,12), "S15924C1.s15924c1f1");
    check_field_offset(lv, s15924c1f2, ABISELECT(48,24), "S15924C1.s15924c1f2");
    check_field_offset(lv, s15924c1f3, ABISELECT(56,28), "S15924C1.s15924c1f3");
  }
}
static Arrange_To_Call_Me vS15924C1(Test_S15924C1, "S15924C1", ABISELECT(88,60));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19304C3  {
  virtual void  v2(); // _ZN8S19304C32v2Ev
  virtual void  v3(); // _ZN8S19304C32v3Ev
  virtual void  v4(); // _ZN8S19304C32v4Ev
  virtual void  v5(); // _ZN8S19304C32v5Ev
  virtual void  v6(); // _ZN8S19304C32v6Ev
  virtual void  v7(); // _ZN8S19304C32v7Ev
  virtual void  v8(); // _ZN8S19304C32v8Ev
  virtual void  v9(); // _ZN8S19304C32v9Ev
  virtual void  v10(); // _ZN8S19304C33v10Ev
  ~S19304C3(); // tgen
  S19304C3(); // tgen
};
//SIG(-1 S19304C3) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S19304C3 ::v2(){vfunc_called(this, "_ZN8S19304C32v2Ev");}
void  S19304C3 ::v3(){vfunc_called(this, "_ZN8S19304C32v3Ev");}
void  S19304C3 ::v4(){vfunc_called(this, "_ZN8S19304C32v4Ev");}
void  S19304C3 ::v5(){vfunc_called(this, "_ZN8S19304C32v5Ev");}
void  S19304C3 ::v6(){vfunc_called(this, "_ZN8S19304C32v6Ev");}
void  S19304C3 ::v7(){vfunc_called(this, "_ZN8S19304C32v7Ev");}
void  S19304C3 ::v8(){vfunc_called(this, "_ZN8S19304C32v8Ev");}
void  S19304C3 ::v9(){vfunc_called(this, "_ZN8S19304C32v9Ev");}
void  S19304C3 ::v10(){vfunc_called(this, "_ZN8S19304C33v10Ev");}
S19304C3 ::~S19304C3(){ note_dtor("S19304C3", this);} // tgen
S19304C3 ::S19304C3(){ note_ctor("S19304C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19304C3C1Ev();
extern void _ZN8S19304C3D1Ev();
Name_Map name_map_S19304C3[] = {
  NSPAIR(_ZN8S19304C3C1Ev),
  NSPAIR(_ZN8S19304C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19304C3[];
extern void _ZN8S19304C32v2Ev();
extern void _ZN8S19304C32v3Ev();
extern void _ZN8S19304C32v4Ev();
extern void _ZN8S19304C32v5Ev();
extern void _ZN8S19304C32v6Ev();
extern void _ZN8S19304C32v7Ev();
extern void _ZN8S19304C32v8Ev();
extern void _ZN8S19304C32v9Ev();
extern void _ZN8S19304C33v10Ev();
static  VTBL_ENTRY vtc_S19304C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19304C3[0]),
  (VTBL_ENTRY)&_ZN8S19304C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19304C33v10Ev,
};
extern VTBL_ENTRY _ZTI8S19304C3[];
extern  VTBL_ENTRY _ZTV8S19304C3[];
Class_Descriptor cd_S19304C3 = {  "S19304C3", // class name
  0,0,//no base classes
  &(vtc_S19304C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19304C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19304C3),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  S19304C4  : virtual S19304C3 {
  __tsi64 s19304c4f0;
  virtual void  v11(); // _ZN8S19304C43v11Ev
  virtual void  v12(); // _ZN8S19304C43v12Ev
  virtual void  v13(); // _ZN8S19304C43v13Ev
  virtual void  v14(); // _ZN8S19304C43v14Ev
  ~S19304C4(); // tgen
  S19304C4(); // tgen
};
//SIG(-1 S19304C4) C1{ VBC2{ v5 v6 v7 v8 v9 v10 v11 v12 v13} v1 v2 v3 v4 FL}


void  S19304C4 ::v11(){vfunc_called(this, "_ZN8S19304C43v11Ev");}
void  S19304C4 ::v12(){vfunc_called(this, "_ZN8S19304C43v12Ev");}
void  S19304C4 ::v13(){vfunc_called(this, "_ZN8S19304C43v13Ev");}
void  S19304C4 ::v14(){vfunc_called(this, "_ZN8S19304C43v14Ev");}
S19304C4 ::~S19304C4(){ note_dtor("S19304C4", this);} // tgen
S19304C4 ::S19304C4(){ note_ctor("S19304C4", this);} // tgen

static void Test_S19304C4()
{
  extern Class_Descriptor cd_S19304C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S19304C4, buf);
    S19304C4 *dp, &lv = *(dp=new (buf) S19304C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S19304C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19304C4)");
    check_base_class_offset(lv, (S19304C3*), 0, "S19304C4");
    check_field_offset(lv, s19304c4f0, ABISELECT(8,4), "S19304C4.s19304c4f0");
    test_class_info(&lv, &cd_S19304C4);
    dp->~S19304C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19304C4(Test_S19304C4, "S19304C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S19304C4C1Ev();
extern void _ZN8S19304C4D1Ev();
Name_Map name_map_S19304C4[] = {
  NSPAIR(_ZN8S19304C4C1Ev),
  NSPAIR(_ZN8S19304C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19304C3;
extern VTBL_ENTRY _ZTI8S19304C3[];
extern  VTBL_ENTRY _ZTV8S19304C3[];
static Base_Class bases_S19304C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19304C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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 _ZTI8S19304C4[];
extern void _ZN8S19304C32v2Ev();
extern void _ZN8S19304C32v3Ev();
extern void _ZN8S19304C32v4Ev();
extern void _ZN8S19304C32v5Ev();
extern void _ZN8S19304C32v6Ev();
extern void _ZN8S19304C32v7Ev();
extern void _ZN8S19304C32v8Ev();
extern void _ZN8S19304C32v9Ev();
extern void _ZN8S19304C33v10Ev();
extern void _ZN8S19304C43v11Ev();
extern void _ZN8S19304C43v12Ev();
extern void _ZN8S19304C43v13Ev();
extern void _ZN8S19304C43v14Ev();
static  VTBL_ENTRY vtc_S19304C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19304C4[0]),
  (VTBL_ENTRY)&_ZN8S19304C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19304C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19304C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19304C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19304C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19304C43v14Ev,
};
extern VTBL_ENTRY _ZTV8S19304C4[];
static  VTT_ENTRY vtt_S19304C4[] = {
  {&(_ZTV8S19304C4[12]),  12,25},
  {&(_ZTV8S19304C4[12]),  12,25},
};
extern VTBL_ENTRY _ZTI8S19304C4[];
extern  VTBL_ENTRY _ZTV8S19304C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19304C4[];
Class_Descriptor cd_S19304C4 = {  "S19304C4", // class name
  bases_S19304C4, 1,
  &(vtc_S19304C4[0]), // expected_vtbl_contents
  &(vtt_S19304C4[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S19304C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19304C4),25, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19304C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19304C2  : S19304C3 , S19304C4 {
  virtual void  v15(); // _ZN8S19304C23v15Ev
  virtual void  v16(); // _ZN8S19304C23v16Ev
  ~S19304C2(); // tgen
  S19304C2(); // tgen
};
//SIG(-1 S19304C2) C1{ BC2{ v3 v4 v5 v6 v7 v8 v9 v10 v11} BC3{ VBC2 v12 v13 v14 v15 FL} v1 v2}


void  S19304C2 ::v15(){vfunc_called(this, "_ZN8S19304C23v15Ev");}
void  S19304C2 ::v16(){vfunc_called(this, "_ZN8S19304C23v16Ev");}
S19304C2 ::~S19304C2(){ note_dtor("S19304C2", this);} // tgen
S19304C2 ::S19304C2(){ note_ctor("S19304C2", this);} // tgen

static void Test_S19304C2()
{
  extern Class_Descriptor cd_S19304C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S19304C2, buf);
    S19304C2 *dp, &lv = *(dp=new (buf) S19304C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S19304C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19304C2)");
    /*is_ambiguous_... S19304C2::S19304C3 */ AMB_check_base_class_offset(lv, (S19304C3*), 0, "S19304C2");
    check_base_class_offset(lv, (S19304C3*)(S19304C4*), ABISELECT(8,4), "S19304C2");
    check_base_class_offset(lv, (S19304C4*), ABISELECT(8,4), "S19304C2");
    test_class_info(&lv, &cd_S19304C2);
    dp->~S19304C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19304C2(Test_S19304C2, "S19304C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S19304C2C1Ev();
extern void _ZN8S19304C2D1Ev();
Name_Map name_map_S19304C2[] = {
  NSPAIR(_ZN8S19304C2C1Ev),
  NSPAIR(_ZN8S19304C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19304C3;
extern VTBL_ENTRY _ZTI8S19304C3[];
extern  VTBL_ENTRY _ZTV8S19304C3[];
extern Class_Descriptor cd_S19304C3;
extern VTBL_ENTRY _ZTI8S19304C3[];
extern  VTBL_ENTRY _ZTV8S19304C3[];
extern Class_Descriptor cd_S19304C4;
extern VTBL_ENTRY _ZTI8S19304C4[];
extern  VTBL_ENTRY _ZTV8S19304C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19304C4[];
static Base_Class bases_S19304C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19304C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19304C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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
    2, //immediately_derived
  0, 1},
  {&cd_S19304C4,    ABISELECT(8,4), //bcp->offset
    14, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    4, //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 _ZTI8S19304C2[];
extern void _ZN8S19304C32v2Ev();
extern void _ZN8S19304C32v3Ev();
extern void _ZN8S19304C32v4Ev();
extern void _ZN8S19304C32v5Ev();
extern void _ZN8S19304C32v6Ev();
extern void _ZN8S19304C32v7Ev();
extern void _ZN8S19304C32v8Ev();
extern void _ZN8S19304C32v9Ev();
extern void _ZN8S19304C33v10Ev();
extern void _ZN8S19304C23v15Ev();
extern void _ZN8S19304C23v16Ev();
extern void _ZN8S19304C32v2Ev();
extern void _ZN8S19304C32v3Ev();
extern void _ZN8S19304C32v4Ev();
extern void _ZN8S19304C32v5Ev();
extern void _ZN8S19304C32v6Ev();
extern void _ZN8S19304C32v7Ev();
extern void _ZN8S19304C32v8Ev();
extern void _ZN8S19304C32v9Ev();
extern void _ZN8S19304C33v10Ev();
extern void _ZN8S19304C43v11Ev();
extern void _ZN8S19304C43v12Ev();
extern void _ZN8S19304C43v13Ev();
extern void _ZN8S19304C43v14Ev();
static  VTBL_ENTRY vtc_S19304C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19304C2[0]),
  (VTBL_ENTRY)&_ZN8S19304C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19304C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19304C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19304C23v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19304C2[0]),
  (VTBL_ENTRY)&_ZN8S19304C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19304C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19304C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19304C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19304C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19304C43v14Ev,
};
extern VTBL_ENTRY _ZTV8S19304C2[];
extern void _ZN8S19304C32v2Ev();
extern void _ZN8S19304C32v3Ev();
extern void _ZN8S19304C32v4Ev();
extern void _ZN8S19304C32v5Ev();
extern void _ZN8S19304C32v6Ev();
extern void _ZN8S19304C32v7Ev();
extern void _ZN8S19304C32v8Ev();
extern void _ZN8S19304C32v9Ev();
extern void _ZN8S19304C33v10Ev();
extern void _ZN8S19304C43v11Ev();
extern void _ZN8S19304C43v12Ev();
extern void _ZN8S19304C43v13Ev();
extern void _ZN8S19304C43v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19304C4__8S19304C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19304C4[0]),
  (VTBL_ENTRY)&_ZN8S19304C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19304C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19304C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19304C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19304C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19304C43v14Ev,
};
static  VTT_ENTRY vtt_S19304C2[] = {
  {&(_ZTV8S19304C2[3]),  3,39},
  {&(_tg__ZTV8S19304C4__8S19304C2[12]),  12,25},
  {&(_tg__ZTV8S19304C4__8S19304C2[12]),  12,25},
  {&(_ZTV8S19304C2[26]),  26,39},
  {&(_ZTV8S19304C2[26]),  26,39},
};
extern VTBL_ENTRY _ZTI8S19304C2[];
extern  VTBL_ENTRY _ZTV8S19304C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19304C2[];
Class_Descriptor cd_S19304C2 = {  "S19304C2", // class name
  bases_S19304C2, 3,
  &(vtc_S19304C2[0]), // expected_vtbl_contents
  &(vtt_S19304C2[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S19304C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19304C2),39, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19304C2),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19304C1  : virtual S19304C2 {
  int s19304c1f0;
  virtual  ~S19304C1(); // _ZN8S19304C1D2Ev
  virtual void  v1(); // _ZN8S19304C12v1Ev
  S19304C1(); // tgen
};
//SIG(1 S19304C1) C1{ VBC2{ BC3{ v2 v3 v4 v5 v6 v7 v8 v9 v10} BC4{ VBC3 v11 v12 v13 v14 FL} v15 v16} vd v1 Fi}


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

static void Test_S19304C1()
{
  extern Class_Descriptor cd_S19304C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S19304C1, buf);
    S19304C1 *dp, &lv = *(dp=new (buf) S19304C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S19304C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19304C1)");
    /*is_ambiguous_... S19304C2::S19304C3 */ AMB_check_base_class_offset(lv, (S19304C3*)(S19304C2*), ABISELECT(16,8), "S19304C1");
    check_base_class_offset(lv, (S19304C3*)(S19304C4*)(S19304C2*), 0, "S19304C1");
    check_base_class_offset(lv, (S19304C4*)(S19304C2*), ABISELECT(24,12), "S19304C1");
    check_base_class_offset(lv, (S19304C2*), ABISELECT(16,8), "S19304C1");
    check_field_offset(lv, s19304c1f0, ABISELECT(8,4), "S19304C1.s19304c1f0");
    test_class_info(&lv, &cd_S19304C1);
    dp->~S19304C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19304C1(Test_S19304C1, "S19304C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S19304C1C1Ev();
extern void _ZN8S19304C1D2Ev();
Name_Map name_map_S19304C1[] = {
  NSPAIR(_ZN8S19304C1C1Ev),
  NSPAIR(_ZN8S19304C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19304C3;
extern VTBL_ENTRY _ZTI8S19304C3[];
extern  VTBL_ENTRY _ZTV8S19304C3[];
extern Class_Descriptor cd_S19304C3;
extern VTBL_ENTRY _ZTI8S19304C3[];
extern  VTBL_ENTRY _ZTV8S19304C3[];
extern Class_Descriptor cd_S19304C4;
extern VTBL_ENTRY _ZTI8S19304C4[];
extern  VTBL_ENTRY _ZTV8S19304C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19304C4[];
extern Class_Descriptor cd_S19304C2;
extern VTBL_ENTRY _ZTI8S19304C2[];
extern  VTBL_ENTRY _ZTV8S19304C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19304C2[];
static Base_Class bases_S19304C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19304C3,    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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19304C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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
    2, //immediately_derived
  0, 1},
  {&cd_S19304C4,    ABISELECT(24,12), //bcp->offset
    54, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19304C2,    ABISELECT(16,8), //bcp->offset
    25, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S19304C1[];
extern void _ZN8S19304C32v2Ev();
extern void _ZN8S19304C32v3Ev();
extern void _ZN8S19304C32v4Ev();
extern void _ZN8S19304C32v5Ev();
extern void _ZN8S19304C32v6Ev();
extern void _ZN8S19304C32v7Ev();
extern void _ZN8S19304C32v8Ev();
extern void _ZN8S19304C32v9Ev();
extern void _ZN8S19304C33v10Ev();
extern void _ZN8S19304C1D1Ev();
extern void _ZN8S19304C1D0Ev();
extern void _ZN8S19304C12v1Ev();
extern void _ZN8S19304C32v2Ev();
extern void _ZN8S19304C32v3Ev();
extern void _ZN8S19304C32v4Ev();
extern void _ZN8S19304C32v5Ev();
extern void _ZN8S19304C32v6Ev();
extern void _ZN8S19304C32v7Ev();
extern void _ZN8S19304C32v8Ev();
extern void _ZN8S19304C32v9Ev();
extern void _ZN8S19304C33v10Ev();
extern void _ZN8S19304C23v15Ev();
extern void _ZN8S19304C23v16Ev();
extern void _ZN8S19304C32v2Ev();
extern void _ZN8S19304C32v3Ev();
extern void _ZN8S19304C32v4Ev();
extern void _ZN8S19304C32v5Ev();
extern void _ZN8S19304C32v6Ev();
extern void _ZN8S19304C32v7Ev();
extern void _ZN8S19304C32v8Ev();
extern void _ZN8S19304C32v9Ev();
extern void _ZN8S19304C33v10Ev();
extern void _ZN8S19304C43v11Ev();
extern void _ZN8S19304C43v12Ev();
extern void _ZN8S19304C43v13Ev();
extern void _ZN8S19304C43v14Ev();
static  VTBL_ENTRY vtc_S19304C1[] = {
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19304C1[0]),
  (VTBL_ENTRY)&_ZN8S19304C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19304C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19304C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19304C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19304C12v1Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19304C1[0]),
  (VTBL_ENTRY)&_ZN8S19304C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19304C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19304C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19304C23v16Ev,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19304C1[0]),
  (VTBL_ENTRY)&_ZN8S19304C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19304C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19304C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19304C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19304C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19304C43v14Ev,
};
extern VTBL_ENTRY _ZTV8S19304C1[];
extern void _ZN8S19304C32v2Ev();
extern void _ZN8S19304C32v3Ev();
extern void _ZN8S19304C32v4Ev();
extern void _ZN8S19304C32v5Ev();
extern void _ZN8S19304C32v6Ev();
extern void _ZN8S19304C32v7Ev();
extern void _ZN8S19304C32v8Ev();
extern void _ZN8S19304C32v9Ev();
extern void _ZN8S19304C33v10Ev();
extern void _ZN8S19304C23v15Ev();
extern void _ZN8S19304C23v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19304C2__8S19304C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19304C2[0]),
  (VTBL_ENTRY)&_ZN8S19304C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19304C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19304C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19304C23v16Ev,
};
extern void _ZN8S19304C32v2Ev();
extern void _ZN8S19304C32v3Ev();
extern void _ZN8S19304C32v4Ev();
extern void _ZN8S19304C32v5Ev();
extern void _ZN8S19304C32v6Ev();
extern void _ZN8S19304C32v7Ev();
extern void _ZN8S19304C32v8Ev();
extern void _ZN8S19304C32v9Ev();
extern void _ZN8S19304C33v10Ev();
extern void _ZN8S19304C43v11Ev();
extern void _ZN8S19304C43v12Ev();
extern void _ZN8S19304C43v13Ev();
extern void _ZN8S19304C43v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19304C48S19304C2__8S19304C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19304C4[0]),
  (VTBL_ENTRY)&_ZN8S19304C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19304C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19304C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19304C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19304C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19304C43v14Ev,
};
extern void _ZN8S19304C32v2Ev();
extern void _ZN8S19304C32v3Ev();
extern void _ZN8S19304C32v4Ev();
extern void _ZN8S19304C32v5Ev();
extern void _ZN8S19304C32v6Ev();
extern void _ZN8S19304C32v7Ev();
extern void _ZN8S19304C32v8Ev();
extern void _ZN8S19304C32v9Ev();
extern void _ZN8S19304C33v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19304C3__8S19304C48S19304C2__8S19304C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S19304C4[0]),
  (VTBL_ENTRY)&_ZN8S19304C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19304C33v10Ev,
};
extern void _ZN8S19304C32v2Ev();
extern void _ZN8S19304C32v3Ev();
extern void _ZN8S19304C32v4Ev();
extern void _ZN8S19304C32v5Ev();
extern void _ZN8S19304C32v6Ev();
extern void _ZN8S19304C32v7Ev();
extern void _ZN8S19304C32v8Ev();
extern void _ZN8S19304C32v9Ev();
extern void _ZN8S19304C33v10Ev();
extern void _ZN8S19304C43v11Ev();
extern void _ZN8S19304C43v12Ev();
extern void _ZN8S19304C43v13Ev();
extern void _ZN8S19304C43v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19304C4__8S19304C2__8S19304C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19304C2[0]),
  (VTBL_ENTRY)&_ZN8S19304C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19304C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19304C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19304C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19304C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19304C43v14Ev,
};
extern void _ZN8S19304C32v2Ev();
extern void _ZN8S19304C32v3Ev();
extern void _ZN8S19304C32v4Ev();
extern void _ZN8S19304C32v5Ev();
extern void _ZN8S19304C32v6Ev();
extern void _ZN8S19304C32v7Ev();
extern void _ZN8S19304C32v8Ev();
extern void _ZN8S19304C32v9Ev();
extern void _ZN8S19304C33v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19304C3__A1__8S19304C2__8S19304C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19304C2[0]),
  (VTBL_ENTRY)&_ZN8S19304C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19304C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19304C33v10Ev,
};
static  VTT_ENTRY vtt_S19304C1[] = {
  {&(_ZTV8S19304C1[13]),  13,79},
  {&(_ZTV8S19304C1[43]),  43,79},
  {&(_ZTV8S19304C1[66]),  66,79},
  {&(_ZTV8S19304C1[13]),  13,79},
  {&(_tg__ZTV8S19304C2__8S19304C1[3]),  3,14},
  {&(_tg__ZTV8S19304C48S19304C2__8S19304C1[12]),  12,25},
  {&(_tg__ZTV8S19304C3__8S19304C48S19304C2__8S19304C1[11]),  11,20},
  {&(_tg__ZTV8S19304C4__8S19304C2__8S19304C1[12]),  12,25},
  {&(_tg__ZTV8S19304C3__A1__8S19304C2__8S19304C1[11]),  11,20},
};
extern VTBL_ENTRY _ZTI8S19304C1[];
extern  VTBL_ENTRY _ZTV8S19304C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19304C1[];
Class_Descriptor cd_S19304C1 = {  "S19304C1", // class name
  bases_S19304C1, 4,
  &(vtc_S19304C1[0]), // expected_vtbl_contents
  &(vtt_S19304C1[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S19304C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19304C1),79, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19304C1),9, //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  S19018C3  : S5266C29 , S7719C4_nt {
};
//SIG(-1 S19018C3) C1{ BC2{ m} BC3{ m Fc}}



static void Test_S19018C3()
{
  extern Class_Descriptor cd_S19018C3;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S19018C3, buf);
    S19018C3 &lv = *(new (buf) S19018C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S19018C3)");
    check2(__alignof__(lv), 1, "__alignof__(S19018C3)");
    check_base_class_offset(lv, (S5266C29*), 0, "S19018C3");
    check_base_class_offset(lv, (S7719C4_nt*), 0, "S19018C3");
    test_class_info(&lv, &cd_S19018C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19018C3(Test_S19018C3, "S19018C3", 1);

#else // __cplusplus

extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
static Base_Class bases_S19018C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7719C4_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 _ZTI8S19018C3[];
Class_Descriptor cd_S19018C3 = {  "S19018C3", // class name
  bases_S19018C3, 2,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S19018C3),ABISELECT(56,32), //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  S19018C6  : S7719C4_nt , S5266C29 , virtual S5266C26 {
  ~S19018C6(); // tgen
  S19018C6(); // tgen
};
//SIG(-1 S19018C6) C1{ BC2{ m Fc} BC3{ m} VBC4{ m}}


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

static void Test_S19018C6()
{
  extern Class_Descriptor cd_S19018C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19018C6, buf);
    S19018C6 *dp, &lv = *(dp=new (buf) S19018C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19018C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19018C6)");
    check_base_class_offset(lv, (S7719C4_nt*), ABISELECT(8,4), "S19018C6");
    check_base_class_offset(lv, (S5266C29*), 0, "S19018C6");
    check_base_class_offset(lv, (S5266C26*), 0, "S19018C6");
    test_class_info(&lv, &cd_S19018C6);
    dp->~S19018C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19018C6(Test_S19018C6, "S19018C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19018C6C1Ev();
extern void _ZN8S19018C6D1Ev();
Name_Map name_map_S19018C6[] = {
  NSPAIR(_ZN8S19018C6C1Ev),
  NSPAIR(_ZN8S19018C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
static Base_Class bases_S19018C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7719C4_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, 0},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S19018C6[];
static  VTBL_ENTRY vtc_S19018C6[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19018C6[0]),
};
extern VTBL_ENTRY _ZTV8S19018C6[];
static  VTT_ENTRY vtt_S19018C6[] = {
  {&(_ZTV8S19018C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19018C6[];
extern  VTBL_ENTRY _ZTV8S19018C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19018C6[];
Class_Descriptor cd_S19018C6 = {  "S19018C6", // class name
  bases_S19018C6, 3,
  &(vtc_S19018C6[0]), // expected_vtbl_contents
  &(vtt_S19018C6[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19018C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19018C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19018C6),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  S19018C2  : S19018C3 , S5266C29 , S19018C6 {
  __tsi64 s19018c2f0;
  ~S19018C2(); // tgen
  S19018C2(); // tgen
};
//SIG(-1 S19018C2) C1{ BC2{ BC3{ m} BC4{ m Fc}} BC3 BC5{ BC4 BC3 VBC6{ m}} FL}


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

static void Test_S19018C2()
{
  extern Class_Descriptor cd_S19018C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S19018C2, buf);
    S19018C2 *dp, &lv = *(dp=new (buf) S19018C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S19018C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19018C2)");
    check_base_class_offset(lv, (S5266C29*)(S19018C3*), ABISELECT(9,5), "S19018C2");
    check_base_class_offset(lv, (S7719C4_nt*)(S19018C3*), ABISELECT(9,5), "S19018C2");
    check_base_class_offset(lv, (S19018C3*), ABISELECT(9,5), "S19018C2");
    /*is_ambiguous_... S19018C2::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*), ABISELECT(10,6), "S19018C2");
    check_base_class_offset(lv, (S7719C4_nt*)(S19018C6*), ABISELECT(8,4), "S19018C2");
    check_base_class_offset(lv, (S5266C29*)(S19018C6*), 0, "S19018C2");
    check_base_class_offset(lv, (S5266C26*)(S19018C6*), 0, "S19018C2");
    check_base_class_offset(lv, (S19018C6*), 0, "S19018C2");
    check_field_offset(lv, s19018c2f0, ABISELECT(16,8), "S19018C2.s19018c2f0");
    test_class_info(&lv, &cd_S19018C2);
    dp->~S19018C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19018C2(Test_S19018C2, "S19018C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S19018C2C1Ev();
extern void _ZN8S19018C2D1Ev();
Name_Map name_map_S19018C2[] = {
  NSPAIR(_ZN8S19018C2C1Ev),
  NSPAIR(_ZN8S19018C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S19018C3;
extern VTBL_ENTRY _ZTI8S19018C3[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S19018C6;
extern VTBL_ENTRY _ZTI8S19018C6[];
extern  VTBL_ENTRY _ZTV8S19018C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19018C6[];
static Base_Class bases_S19018C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19018C3,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C29,    ABISELECT(10,6), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7719C4_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
    7, //immediately_derived
  0, 0},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19018C6,    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 _ZTI8S19018C2[];
static  VTBL_ENTRY vtc_S19018C2[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19018C2[0]),
};
extern VTBL_ENTRY _ZTV8S19018C2[];
static  VTBL_ENTRY _tg__ZTV8S19018C6__8S19018C2[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19018C6[0]),
};
static  VTT_ENTRY vtt_S19018C2[] = {
  {&(_ZTV8S19018C2[3]),  3,3},
  {&(_tg__ZTV8S19018C6__8S19018C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19018C2[];
extern  VTBL_ENTRY _ZTV8S19018C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19018C2[];
Class_Descriptor cd_S19018C2 = {  "S19018C2", // class name
  bases_S19018C2, 8,
  &(vtc_S19018C2[0]), // expected_vtbl_contents
  &(vtt_S19018C2[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S19018C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19018C2),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19018C2),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19018C9  : virtual S19018C6 {
  long double s19018c9f0;
  void *s19018c9f1[8];
  ~S19018C9(); // tgen
  S19018C9(); // tgen
};
//SIG(-1 S19018C9) C1{ VBC2{ BC3{ m Fc} BC4{ m} VBC5{ m}} FD Fp[8]}


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

static void Test_S19018C9()
{
  extern Class_Descriptor cd_S19018C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,15)];
    init_test(&cd_S19018C9, buf);
    S19018C9 *dp, &lv = *(dp=new (buf) S19018C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S19018C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19018C9)");
    check_base_class_offset(lv, (S7719C4_nt*)(S19018C6*), ABISELECT(104,52), "S19018C9");
    check_base_class_offset(lv, (S5266C29*)(S19018C6*), ABISELECT(96,48), "S19018C9");
    check_base_class_offset(lv, (S5266C26*)(S19018C6*), 0, "S19018C9");
    check_base_class_offset(lv, (S19018C6*), ABISELECT(96,48), "S19018C9");
    check_field_offset(lv, s19018c9f0, ABISELECT(16,4), "S19018C9.s19018c9f0");
    check_field_offset(lv, s19018c9f1, ABISELECT(32,16), "S19018C9.s19018c9f1");
    test_class_info(&lv, &cd_S19018C9);
    dp->~S19018C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19018C9(Test_S19018C9, "S19018C9", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN8S19018C9C1Ev();
extern void _ZN8S19018C9D1Ev();
Name_Map name_map_S19018C9[] = {
  NSPAIR(_ZN8S19018C9C1Ev),
  NSPAIR(_ZN8S19018C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S19018C6;
extern VTBL_ENTRY _ZTI8S19018C6[];
extern  VTBL_ENTRY _ZTV8S19018C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19018C6[];
static Base_Class bases_S19018C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7719C4_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
    3, //immediately_derived
  0, 0},
  {&cd_S5266C29,    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
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19018C6,    ABISELECT(96,48), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //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 _ZTI8S19018C9[];
static  VTBL_ENTRY vtc_S19018C9[] = {
  0,
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19018C9[0]),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S19018C9[0]),
};
extern VTBL_ENTRY _ZTV8S19018C9[];
static  VTBL_ENTRY _tg__ZTV8S19018C6__8S19018C9[] = {
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19018C6[0]),
};
static  VTT_ENTRY vtt_S19018C9[] = {
  {&(_ZTV8S19018C9[4]),  4,7},
  {&(_ZTV8S19018C9[7]),  7,7},
  {&(_tg__ZTV8S19018C6__8S19018C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19018C9[];
extern  VTBL_ENTRY _ZTV8S19018C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19018C9[];
Class_Descriptor cd_S19018C9 = {  "S19018C9", // class name
  bases_S19018C9, 4,
  &(vtc_S19018C9[0]), // expected_vtbl_contents
  &(vtt_S19018C9[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI8S19018C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19018C9),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19018C9),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19018C1  : virtual S19018C2 , S5266C22 , S19018C9 , S19018C6 {
  ~S19018C1(); // tgen
  S19018C1(); // tgen
};
//SIG(1 S19018C1) C1{ VBC2{ BC3{ BC4{ m} BC5{ m Fc}} BC4 BC6{ BC5 BC4 VBC7{ m}} FL} BC8{ m} BC9{ VBC6 FD Fp[8]} BC6}


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

static void Test_S19018C1()
{
  extern Class_Descriptor cd_S19018C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,21)];
    init_test(&cd_S19018C1, buf);
    S19018C1 *dp, &lv = *(dp=new (buf) S19018C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,80), "sizeof(S19018C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19018C1)");
    check_base_class_offset(lv, (S5266C29*)(S19018C3*)(S19018C2*), ABISELECT(121,61), "S19018C1");
    check_base_class_offset(lv, (S7719C4_nt*)(S19018C3*)(S19018C2*), ABISELECT(121,61), "S19018C1");
    check_base_class_offset(lv, (S19018C3*)(S19018C2*), ABISELECT(121,61), "S19018C1");
    /*is_ambiguous_... S19018C2::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S19018C2*), ABISELECT(122,62), "S19018C1");
    check_base_class_offset(lv, (S7719C4_nt*)(S19018C6*)(S19018C2*), ABISELECT(120,60), "S19018C1");
    check_base_class_offset(lv, (S5266C29*)(S19018C6*)(S19018C2*), ABISELECT(112,56), "S19018C1");
    check_base_class_offset(lv, (S5266C26*)(S19018C6*)(S19018C2*), 0, "S19018C1");
    /*is_ambiguous_... S19018C1::S19018C6 */ AMB_check_base_class_offset(lv, (S5266C26*)(S19018C6*), 0, "S19018C1");
    /*is_ambiguous_... S19018C1::S19018C6 */ AMB_check_base_class_offset(lv, (S5266C26*)(S19018C6*), 0, "S19018C1");
    check_base_class_offset(lv, (S19018C6*)(S19018C2*), ABISELECT(112,56), "S19018C1");
    check_base_class_offset(lv, (S19018C2*), ABISELECT(112,56), "S19018C1");
    check_base_class_offset(lv, (S5266C22*), 0, "S19018C1");
    /*is_ambiguous_... S19018C1::S19018C6 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S19018C6*), ABISELECT(144,76), "S19018C1");
    /*is_ambiguous_... S19018C1::S19018C6 */ AMB_check_base_class_offset(lv, (S5266C29*)(S19018C6*), ABISELECT(136,72), "S19018C1");
    check_base_class_offset(lv, (S19018C6*)(S19018C9*), ABISELECT(136,72), "S19018C1");
    check_base_class_offset(lv, (S19018C9*), 0, "S19018C1");
    /*is_ambiguous_... S19018C1::S19018C6 */ AMB_check_base_class_offset(lv, (S7719C4_nt*)(S19018C6*), ABISELECT(104,52), "S19018C1");
    /*is_ambiguous_... S19018C1::S19018C6 */ AMB_check_base_class_offset(lv, (S5266C29*)(S19018C6*), ABISELECT(96,48), "S19018C1");
    /*is_ambiguous_... S19018C1::S19018C6 */ AMB_check_base_class_offset(lv, (S19018C6*), ABISELECT(96,48), "S19018C1");
    test_class_info(&lv, &cd_S19018C1);
    dp->~S19018C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19018C1(Test_S19018C1, "S19018C1", ABISELECT(160,80));

#else // __cplusplus

extern void _ZN8S19018C1C1Ev();
extern void _ZN8S19018C1D1Ev();
Name_Map name_map_S19018C1[] = {
  NSPAIR(_ZN8S19018C1C1Ev),
  NSPAIR(_ZN8S19018C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S19018C3;
extern VTBL_ENTRY _ZTI8S19018C3[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S19018C6;
extern VTBL_ENTRY _ZTI8S19018C6[];
extern  VTBL_ENTRY _ZTV8S19018C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19018C6[];
extern Class_Descriptor cd_S19018C2;
extern VTBL_ENTRY _ZTI8S19018C2[];
extern  VTBL_ENTRY _ZTV8S19018C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19018C2[];
extern Class_Descriptor cd_S5266C22;
extern VTBL_ENTRY _ZTI8S5266C22[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19018C6;
extern VTBL_ENTRY _ZTI8S19018C6[];
extern  VTBL_ENTRY _ZTV8S19018C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19018C6[];
extern Class_Descriptor cd_S19018C9;
extern VTBL_ENTRY _ZTI8S19018C9[];
extern  VTBL_ENTRY _ZTV8S19018C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19018C9[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S19018C6;
extern VTBL_ENTRY _ZTI8S19018C6[];
extern  VTBL_ENTRY _ZTV8S19018C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19018C6[];
static Base_Class bases_S19018C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    ABISELECT(121,61), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(121,61), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19018C3,    ABISELECT(121,61), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C29,    ABISELECT(122,62), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_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
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S5266C29,    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
    7, //immediately_derived
  0, 0},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19018C6,    ABISELECT(112,56), //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
    1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19018C2,    ABISELECT(112,56), //bcp->offset
    8, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5266C22,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7719C4_nt,    ABISELECT(144,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
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S5266C29,    ABISELECT(136,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
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19018C6,    ABISELECT(136,72), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19018C9,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7719C4_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
    16, //immediately_derived
  0, 0},
  {&cd_S5266C29,    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
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19018C6,    ABISELECT(96,48), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19018C1[];
static  VTBL_ENTRY vtc_S19018C1[] = {
  ABISELECT(112,56),
  0,
  ABISELECT(136,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19018C1[0]),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S19018C1[0]),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S19018C1[0]),
  ABISELECT(-136,-72),
  ABISELECT(-136,-72),
  (VTBL_ENTRY)&(_ZTI8S19018C1[0]),
};
extern VTBL_ENTRY _ZTV8S19018C1[];
static  VTBL_ENTRY _tg__ZTV8S19018C9__8S19018C1[] = {
  0,
  ABISELECT(136,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19018C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19018C6__8S19018C9__8S19018C1[] = {
  ABISELECT(-136,-72),
  ABISELECT(-136,-72),
  (VTBL_ENTRY)&(_ZTI8S19018C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19018C6__A__8S19018C1[] = {
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19018C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19018C2__8S19018C1[] = {
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19018C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19018C68S19018C2__8S19018C1[] = {
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19018C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19018C6__A1__8S19018C1[] = {
  ABISELECT(-136,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19018C6[0]),
};
static  VTT_ENTRY vtt_S19018C1[] = {
  {&(_ZTV8S19018C1[5]),  5,14},
  {&(_tg__ZTV8S19018C9__8S19018C1[4]),  4,4},
  {&(_tg__ZTV8S19018C6__8S19018C9__8S19018C1[3]),  3,3},
  {&(_tg__ZTV8S19018C6__A__8S19018C1[3]),  3,3},
  {&(_ZTV8S19018C1[11]),  11,14},
  {&(_ZTV8S19018C1[14]),  14,14},
  {&(_ZTV8S19018C1[8]),  8,14},
  {&(_tg__ZTV8S19018C2__8S19018C1[3]),  3,3},
  {&(_tg__ZTV8S19018C68S19018C2__8S19018C1[3]),  3,3},
  {&(_tg__ZTV8S19018C6__A1__8S19018C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19018C1[];
extern  VTBL_ENTRY _ZTV8S19018C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19018C1[];
Class_Descriptor cd_S19018C1 = {  "S19018C1", // class name
  bases_S19018C1, 17,
  &(vtc_S19018C1[0]), // expected_vtbl_contents
  &(vtt_S19018C1[0]), // expected_vtt_contents
  ABISELECT(160,80), // object size
  NSPAIRA(_ZTI8S19018C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19018C1),14, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19018C1),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9307C2  {
  ::S5266C19_nt s9307c2f0;
  int s9307c2f1[2];
  char s9307c2f2;
  virtual  ~S9307C2(); // _ZN7S9307C2D1Ev
  virtual void  v3(); // _ZN7S9307C22v3Ev
  virtual void  v4(); // _ZN7S9307C22v4Ev
  virtual void  v5(); // _ZN7S9307C22v5Ev
  S9307C2(); // tgen
};
//SIG(-1 S9307C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9307C2 ::~S9307C2(){ note_dtor("S9307C2", this);}
void  S9307C2 ::v3(){vfunc_called(this, "_ZN7S9307C22v3Ev");}
void  S9307C2 ::v4(){vfunc_called(this, "_ZN7S9307C22v4Ev");}
void  S9307C2 ::v5(){vfunc_called(this, "_ZN7S9307C22v5Ev");}
S9307C2 ::S9307C2(){ note_ctor("S9307C2", this);} // tgen

static void Test_S9307C2()
{
  extern Class_Descriptor cd_S9307C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9307C2, buf);
    S9307C2 *dp, &lv = *(dp=new (buf) S9307C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9307C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9307C2)");
    check_field_offset(lv, s9307c2f0, ABISELECT(8,4), "S9307C2.s9307c2f0");
    check_field_offset(lv, s9307c2f1, ABISELECT(24,16), "S9307C2.s9307c2f1");
    check_field_offset(lv, s9307c2f2, ABISELECT(32,24), "S9307C2.s9307c2f2");
    test_class_info(&lv, &cd_S9307C2);
    dp->~S9307C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9307C2(Test_S9307C2, "S9307C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9307C2C1Ev();
extern void _ZN7S9307C2D1Ev();
Name_Map name_map_S9307C2[] = {
  NSPAIR(_ZN7S9307C2C1Ev),
  NSPAIR(_ZN7S9307C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9307C2[];
extern void _ZN7S9307C2D1Ev();
extern void _ZN7S9307C2D0Ev();
extern void _ZN7S9307C22v3Ev();
extern void _ZN7S9307C22v4Ev();
extern void _ZN7S9307C22v5Ev();
static  VTBL_ENTRY vtc_S9307C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9307C2[0]),
  (VTBL_ENTRY)&_ZN7S9307C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9307C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9307C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9307C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9307C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9307C2[];
extern  VTBL_ENTRY _ZTV7S9307C2[];
Class_Descriptor cd_S9307C2 = {  "S9307C2", // class name
  0,0,//no base classes
  &(vtc_S9307C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9307C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9307C2),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  S9307C6  {
  char s9307c6f0[961];
  __tsi64 s9307c6f1;
};
//SIG(-1 S9307C6) C1{ Fc[961] FL}



static void Test_S9307C6()
{
  {
    init_simple_test("S9307C6");
    S9307C6 lv;
    check2(sizeof(lv), ABISELECT(976,972), "sizeof(S9307C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9307C6)");
    check_field_offset(lv, s9307c6f0, 0, "S9307C6.s9307c6f0");
    check_field_offset(lv, s9307c6f1, ABISELECT(968,964), "S9307C6.s9307c6f1");
  }
}
static Arrange_To_Call_Me vS9307C6(Test_S9307C6, "S9307C6", ABISELECT(976,972));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9307C1  : S9307C2 {
  ::S17777C6_nt s9307c1f0;
  ::S9307C6 s9307c1f1;
  virtual  ~S9307C1(); // _ZN7S9307C1D1Ev
  virtual void  v1(); // _ZN7S9307C12v1Ev
  virtual void  v2(); // _ZN7S9307C12v2Ev
  S9307C1(); // tgen
};
//SIG(1 S9307C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 FC5{ m Fp} FC6{ Fc[961] FL}}


 S9307C1 ::~S9307C1(){ note_dtor("S9307C1", this);}
void  S9307C1 ::v1(){vfunc_called(this, "_ZN7S9307C12v1Ev");}
void  S9307C1 ::v2(){vfunc_called(this, "_ZN7S9307C12v2Ev");}
S9307C1 ::S9307C1(){ note_ctor("S9307C1", this);} // tgen

static void Test_S9307C1()
{
  extern Class_Descriptor cd_S9307C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(129,252)];
    init_test(&cd_S9307C1, buf);
    S9307C1 *dp, &lv = *(dp=new (buf) S9307C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1024,1004), "sizeof(S9307C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9307C1)");
    check_base_class_offset(lv, (S9307C2*), 0, "S9307C1");
    check_field_offset(lv, s9307c1f0, ABISELECT(40,28), "S9307C1.s9307c1f0");
    check_field_offset(lv, s9307c1f1, ABISELECT(48,32), "S9307C1.s9307c1f1");
    test_class_info(&lv, &cd_S9307C1);
    dp->~S9307C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9307C1(Test_S9307C1, "S9307C1", ABISELECT(1024,1004));

#else // __cplusplus

extern void _ZN7S9307C1C1Ev();
extern void _ZN7S9307C1D1Ev();
Name_Map name_map_S9307C1[] = {
  NSPAIR(_ZN7S9307C1C1Ev),
  NSPAIR(_ZN7S9307C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9307C2;
extern VTBL_ENTRY _ZTI7S9307C2[];
extern  VTBL_ENTRY _ZTV7S9307C2[];
static Base_Class bases_S9307C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9307C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S9307C1[];
extern void _ZN7S9307C1D1Ev();
extern void _ZN7S9307C1D0Ev();
extern void _ZN7S9307C22v3Ev();
extern void _ZN7S9307C22v4Ev();
extern void _ZN7S9307C22v5Ev();
extern void _ZN7S9307C12v1Ev();
extern void _ZN7S9307C12v2Ev();
static  VTBL_ENTRY vtc_S9307C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9307C1[0]),
  (VTBL_ENTRY)&_ZN7S9307C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9307C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9307C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9307C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9307C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9307C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9307C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9307C1[];
extern  VTBL_ENTRY _ZTV7S9307C1[];
Class_Descriptor cd_S9307C1 = {  "S9307C1", // class name
  bases_S9307C1, 1,
  &(vtc_S9307C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1024,1004), // object size
  NSPAIRA(_ZTI7S9307C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9307C1),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  S21732C5_nt  {
  int s21732c5f0[5];
  void  mf21732c5(); // _ZN11S21732C5_nt9mf21732c5Ev
};
//SIG(-1 S21732C5_nt) C1{ m Fi[5]}


void  S21732C5_nt ::mf21732c5(){}

//skip512 S21732C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21732C1  {
  void *s21732c1f0;
  ::S5266C19_nt s21732c1f1;
  int s21732c1f2;
  ::S17777C6_nt s21732c1f3;
  int s21732c1f4[5];
  ::S5266C19_nt s21732c1f5;
  char s21732c1f6[3];
  ::S21732C5_nt s21732c1f7;
  ::S4533C11_nt s21732c1f8;
  void  mf21732c1(); // _ZN8S21732C19mf21732c1Ev
  virtual  ~S21732C1(); // _ZN8S21732C1D1Ev
  S21732C1(); // tgen
};
//SIG(1 S21732C1) C1{ vd m Fp FC2{ m Fp Fi FC3{ m}} Fi FC4{ m Fp} Fi[5] FC2 Fc[3] FC5{ m Fi[5]} FC6{ m Fp}}


void  S21732C1 ::mf21732c1(){}
 S21732C1 ::~S21732C1(){ note_dtor("S21732C1", this);}
S21732C1 ::S21732C1(){ note_ctor("S21732C1", this);} // tgen

static void Test_S21732C1()
{
  extern Class_Descriptor cd_S21732C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,23)];
    init_test(&cd_S21732C1, buf);
    S21732C1 *dp, &lv = *(dp=new (buf) S21732C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,88), "sizeof(S21732C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21732C1)");
    check_field_offset(lv, s21732c1f0, ABISELECT(8,4), "S21732C1.s21732c1f0");
    check_field_offset(lv, s21732c1f1, ABISELECT(16,8), "S21732C1.s21732c1f1");
    check_field_offset(lv, s21732c1f2, ABISELECT(32,20), "S21732C1.s21732c1f2");
    check_field_offset(lv, s21732c1f3, ABISELECT(40,24), "S21732C1.s21732c1f3");
    check_field_offset(lv, s21732c1f4, ABISELECT(48,28), "S21732C1.s21732c1f4");
    check_field_offset(lv, s21732c1f5, ABISELECT(72,48), "S21732C1.s21732c1f5");
    check_field_offset(lv, s21732c1f6, ABISELECT(88,60), "S21732C1.s21732c1f6");
    check_field_offset(lv, s21732c1f7, ABISELECT(92,64), "S21732C1.s21732c1f7");
    check_field_offset(lv, s21732c1f8, ABISELECT(112,84), "S21732C1.s21732c1f8");
    test_class_info(&lv, &cd_S21732C1);
    dp->~S21732C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21732C1(Test_S21732C1, "S21732C1", ABISELECT(120,88));

#else // __cplusplus

extern void _ZN8S21732C1C1Ev();
extern void _ZN8S21732C1D1Ev();
Name_Map name_map_S21732C1[] = {
  NSPAIR(_ZN8S21732C1C1Ev),
  NSPAIR(_ZN8S21732C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21732C1[];
extern void _ZN8S21732C1D1Ev();
extern void _ZN8S21732C1D0Ev();
static  VTBL_ENTRY vtc_S21732C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21732C1[0]),
  (VTBL_ENTRY)&_ZN8S21732C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21732C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21732C1[];
extern  VTBL_ENTRY _ZTV8S21732C1[];
Class_Descriptor cd_S21732C1 = {  "S21732C1", // class name
  0,0,//no base classes
  &(vtc_S21732C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,88), // object size
  NSPAIRA(_ZTI8S21732C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21732C1),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  S2631C2_nt  : S7719C17_nt {
};
//SIG(-1 S2631C2_nt) C1{ BC2{ m Fi}}



//skip512 S2631C2_nt

#else // __cplusplus

extern Class_Descriptor cd_S7719C17_nt;
extern VTBL_ENTRY _ZTI11S7719C17_nt[];
static Base_Class bases_S2631C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7719C17_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_S2631C2_nt = {  "S2631C2_nt", // class name
  bases_S2631C2_nt, 1,
  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  S2631C4_nt  {
  ::S17777C6_nt s2631c4f0;
  void  mf2631c4(); // _ZN10S2631C4_nt8mf2631c4Ev
};
//SIG(-1 S2631C4_nt) C1{ m FC2{ m Fp}}


void  S2631C4_nt ::mf2631c4(){}

//skip512 S2631C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2631C6_nt  {
  int s2631c6f0;
  void  mf2631c6(); // _ZN10S2631C6_nt8mf2631c6Ev
};
//SIG(-1 S2631C6_nt) C1{ m Fi}


void  S2631C6_nt ::mf2631c6(){}

//skip512 S2631C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2631C7_nt  {
  short s2631c7f0[2];
  void *s2631c7f1[19];
};
//SIG(-1 S2631C7_nt) C1{ Fs[2] Fp[19]}



//skip512 S2631C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2631C1  : S2631C2_nt {
  ::S2631C4_nt s2631c1f0;
  char s2631c1f1;
  int s2631c1f2;
  ::S2631C6_nt s2631c1f3;
  void *s2631c1f4;
  ::S2631C7_nt s2631c1f5;
  ::S4533C11_nt s2631c1f6;
};
//SIG(1 S2631C1) C1{ BC2{ BC3{ m Fi}} FC4{ m FC5{ m Fp}} Fc Fi FC6{ m Fi} Fp FC7{ Fs[2] Fp[19]} FC8{ m Fp}}



static void Test_S2631C1()
{
  extern Class_Descriptor cd_S2631C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,28)];
    init_test(&cd_S2631C1, buf);
    S2631C1 &lv = *(new (buf) S2631C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,108), "sizeof(S2631C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2631C1)");
    check_base_class_offset(lv, (S7719C17_nt*)(S2631C2_nt*), 0, "S2631C1");
    check_base_class_offset(lv, (S2631C2_nt*), 0, "S2631C1");
    check_field_offset(lv, s2631c1f0, ABISELECT(8,4), "S2631C1.s2631c1f0");
    check_field_offset(lv, s2631c1f1, ABISELECT(16,8), "S2631C1.s2631c1f1");
    check_field_offset(lv, s2631c1f2, ABISELECT(20,12), "S2631C1.s2631c1f2");
    check_field_offset(lv, s2631c1f3, ABISELECT(24,16), "S2631C1.s2631c1f3");
    check_field_offset(lv, s2631c1f4, ABISELECT(32,20), "S2631C1.s2631c1f4");
    check_field_offset(lv, s2631c1f5, ABISELECT(40,24), "S2631C1.s2631c1f5");
    check_field_offset(lv, s2631c1f6, ABISELECT(200,104), "S2631C1.s2631c1f6");
    test_class_info(&lv, &cd_S2631C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2631C1(Test_S2631C1, "S2631C1", ABISELECT(208,108));

#else // __cplusplus

extern Class_Descriptor cd_S7719C17_nt;
extern VTBL_ENTRY _ZTI11S7719C17_nt[];
extern Class_Descriptor cd_S2631C2_nt;
static Base_Class bases_S2631C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7719C17_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_S2631C2_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_S2631C1 = {  "S2631C1", // class name
  bases_S2631C1, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(208,108), // 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  S11199C2_nt  {
  char s11199c2f0[64];
};
//SIG(-1 S11199C2_nt) C1{ Fc[64]}



//skip512 S11199C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11199C5_nt  {
  char s11199c5f0[20];
};
//SIG(-1 S11199C5_nt) C1{ Fc[20]}



//skip512 S11199C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11199C4_nt  {
  ::S11199C5_nt s11199c4f0;
  char s11199c4f1[16];
};
//SIG(-1 S11199C4_nt) C1{ FC2{ Fc[20]} Fc[16]}



//skip512 S11199C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11199C6_nt  {
  char s11199c6f0[12];
};
//SIG(-1 S11199C6_nt) C1{ Fc[12]}



//skip512 S11199C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11199C7_nt  {
  long s11199c7f0;
};
//SIG(-1 S11199C7_nt) C1{ Fl}



//skip512 S11199C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11199C3  {
  __tsi64 s11199c3f0;
  int s11199c3f1;
  ::S11199C4_nt s11199c3f2;
  ::S11199C6_nt s11199c3f3;
  ::S11199C7_nt s11199c3f4;
};
//SIG(-1 S11199C3) C1{ FL Fi FC2{ FC3{ Fc[20]} Fc[16]} FC4{ Fc[12]} FC5{ Fl}}



static void Test_S11199C3()
{
  {
    init_simple_test("S11199C3");
    S11199C3 lv;
    check2(sizeof(lv), ABISELECT(72,64), "sizeof(S11199C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11199C3)");
    check_field_offset(lv, s11199c3f0, 0, "S11199C3.s11199c3f0");
    check_field_offset(lv, s11199c3f1, 8, "S11199C3.s11199c3f1");
    check_field_offset(lv, s11199c3f2, 12, "S11199C3.s11199c3f2");
    check_field_offset(lv, s11199c3f3, 48, "S11199C3.s11199c3f3");
    check_field_offset(lv, s11199c3f4, ABISELECT(64,60), "S11199C3.s11199c3f4");
  }
}
static Arrange_To_Call_Me vS11199C3(Test_S11199C3, "S11199C3", ABISELECT(72,64));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11199C1  {
  ::S11199C2_nt s11199c1f0;
  ::S11199C3 s11199c1f1;
  __tsi64 s11199c1f2;
  void *s11199c1f3;
  char s11199c1f4[4];
};
//SIG(1 S11199C1) C1{ FC2{ Fc[64]} FC3{ FL Fi FC4{ FC5{ Fc[20]} Fc[16]} FC6{ Fc[12]} FC7{ Fl}} FL Fp Fc[4]}



static void Test_S11199C1()
{
  {
    init_simple_test("S11199C1");
    S11199C1 lv;
    check2(sizeof(lv), ABISELECT(160,144), "sizeof(S11199C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11199C1)");
    check_field_offset(lv, s11199c1f0, 0, "S11199C1.s11199c1f0");
    check_field_offset(lv, s11199c1f1, 64, "S11199C1.s11199c1f1");
    check_field_offset(lv, s11199c1f2, ABISELECT(136,128), "S11199C1.s11199c1f2");
    check_field_offset(lv, s11199c1f3, ABISELECT(144,136), "S11199C1.s11199c1f3");
    check_field_offset(lv, s11199c1f4, ABISELECT(152,140), "S11199C1.s11199c1f4");
  }
}
static Arrange_To_Call_Me vS11199C1(Test_S11199C1, "S11199C1", ABISELECT(160,144));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4094C2_nt  : S19905C19 {
  short s4094c2f0[2];
  virtual  ~S4094C2_nt(); // _ZN10S4094C2_ntD1Ev
  virtual void  v5(); // _ZN10S4094C2_nt2v5Ev
  S4094C2_nt(); // tgen
};
//SIG(-1 S4094C2_nt) C1{ BC2{ vd m} vd v1 Fs[2]}


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

//skip512 S4094C2_nt

#else // __cplusplus

extern void _ZN10S4094C2_ntC1Ev();
extern void _ZN10S4094C2_ntD1Ev();
Name_Map name_map_S4094C2_nt[] = {
  NSPAIR(_ZN10S4094C2_ntC1Ev),
  NSPAIR(_ZN10S4094C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
static Base_Class bases_S4094C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI10S4094C2_nt[];
extern void _ZN10S4094C2_ntD1Ev();
extern void _ZN10S4094C2_ntD0Ev();
extern void _ZN10S4094C2_nt2v5Ev();
static  VTBL_ENTRY vtc_S4094C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4094C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S4094C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4094C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4094C2_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S4094C2_nt[];
VTBL_ENTRY *P__ZTI10S4094C2_nt = _ZTI10S4094C2_nt; 
extern  VTBL_ENTRY _ZTV10S4094C2_nt[];
Class_Descriptor cd_S4094C2_nt = {  "S4094C2_nt", // class name
  bases_S4094C2_nt, 1,
  &(vtc_S4094C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S4094C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S4094C2_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  S4094C5_nt  {
  char s4094c5f0;
  void  mf4094c5(); // _ZN10S4094C5_nt8mf4094c5Ev
};
//SIG(-1 S4094C5_nt) C1{ m Fc}


void  S4094C5_nt ::mf4094c5(){}

//skip512 S4094C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4094C1  : S4094C2_nt {
  void *s4094c1f0[5];
  ::S7719C4_nt s4094c1f1;
  ::S4094C5_nt s4094c1f2;
  void *s4094c1f3;
  int s4094c1f4;
  void *s4094c1f5;
  virtual  ~S4094C1(); // _ZN7S4094C1D1Ev
  virtual void  v1(); // _ZN7S4094C12v1Ev
  virtual void  v2(); // _ZN7S4094C12v2Ev
  virtual void  v3(); // _ZN7S4094C12v3Ev
  virtual void  v4(); // _ZN7S4094C12v4Ev
  S4094C1(); // tgen
};
//SIG(1 S4094C1) C1{ BC2{ BC3{ vd m} vd v5 Fs[2]} vd v1 v2 v3 v4 Fp[5] FC4{ m Fc} FC5{ m Fc} Fp Fi Fp}


 S4094C1 ::~S4094C1(){ note_dtor("S4094C1", this);}
void  S4094C1 ::v1(){vfunc_called(this, "_ZN7S4094C12v1Ev");}
void  S4094C1 ::v2(){vfunc_called(this, "_ZN7S4094C12v2Ev");}
void  S4094C1 ::v3(){vfunc_called(this, "_ZN7S4094C12v3Ev");}
void  S4094C1 ::v4(){vfunc_called(this, "_ZN7S4094C12v4Ev");}
S4094C1 ::S4094C1(){ note_ctor("S4094C1", this);} // tgen

static void Test_S4094C1()
{
  extern Class_Descriptor cd_S4094C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[12];
    init_test(&cd_S4094C1, buf);
    S4094C1 *dp, &lv = *(dp=new (buf) S4094C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,44), "sizeof(S4094C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4094C1)");
    check_base_class_offset(lv, (S19905C19*)(S4094C2_nt*), 0, "S4094C1");
    check_base_class_offset(lv, (S4094C2_nt*), 0, "S4094C1");
    check_field_offset(lv, s4094c1f0, ABISELECT(16,8), "S4094C1.s4094c1f0");
    check_field_offset(lv, s4094c1f1, ABISELECT(56,28), "S4094C1.s4094c1f1");
    check_field_offset(lv, s4094c1f2, ABISELECT(57,29), "S4094C1.s4094c1f2");
    check_field_offset(lv, s4094c1f3, ABISELECT(64,32), "S4094C1.s4094c1f3");
    check_field_offset(lv, s4094c1f4, ABISELECT(72,36), "S4094C1.s4094c1f4");
    check_field_offset(lv, s4094c1f5, ABISELECT(80,40), "S4094C1.s4094c1f5");
    test_class_info(&lv, &cd_S4094C1);
    dp->~S4094C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4094C1(Test_S4094C1, "S4094C1", ABISELECT(88,44));

#else // __cplusplus

extern void _ZN7S4094C1C1Ev();
extern void _ZN7S4094C1D1Ev();
Name_Map name_map_S4094C1[] = {
  NSPAIR(_ZN7S4094C1C1Ev),
  NSPAIR(_ZN7S4094C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
extern Class_Descriptor cd_S4094C2_nt;
extern VTBL_ENTRY _ZTI10S4094C2_nt[];
extern  VTBL_ENTRY _ZTV10S4094C2_nt[];
static Base_Class bases_S4094C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4094C2_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 _ZTI7S4094C1[];
extern void _ZN7S4094C1D1Ev();
extern void _ZN7S4094C1D0Ev();
extern void _ZN10S4094C2_nt2v5Ev();
extern void _ZN7S4094C12v1Ev();
extern void _ZN7S4094C12v2Ev();
extern void _ZN7S4094C12v3Ev();
extern void _ZN7S4094C12v4Ev();
static  VTBL_ENTRY vtc_S4094C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4094C1[0]),
  (VTBL_ENTRY)&_ZN7S4094C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4094C1D0Ev,
  (VTBL_ENTRY)&_ZN10S4094C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S4094C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4094C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4094C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4094C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S4094C1[];
extern  VTBL_ENTRY _ZTV7S4094C1[];
Class_Descriptor cd_S4094C1 = {  "S4094C1", // class name
  bases_S4094C1, 2,
  &(vtc_S4094C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,44), // object size
  NSPAIRA(_ZTI7S4094C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4094C1),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  S18085C1  {
  void *s18085c1f0[2];
  int s18085c1f1[11];
  void *s18085c1f2;
  int s18085c1f3[3];
  char s18085c1f4;
  void *s18085c1f5;
  int s18085c1f6[3];
  char s18085c1f7;
  void *s18085c1f8;
  int s18085c1f9[3];
  char s18085c1f10;
  void *s18085c1f11;
  int s18085c1f12[3];
  char s18085c1f13;
  void *s18085c1f14;
  int s18085c1f15[3];
  void  mf18085c1(); // _ZN8S18085C19mf18085c1Ev
};
//SIG(1 S18085C1) C1{ m Fp[2] Fi[11] Fp Fi[3] Fc Fp Fi[3] Fc Fp Fi[3] Fc Fp Fi[3] Fc Fp Fi[3]}


void  S18085C1 ::mf18085c1(){}

static void Test_S18085C1()
{
  {
    init_simple_test("S18085C1");
    S18085C1 lv;
    check2(sizeof(lv), ABISELECT(184,148), "sizeof(S18085C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18085C1)");
    check_field_offset(lv, s18085c1f0, 0, "S18085C1.s18085c1f0");
    check_field_offset(lv, s18085c1f1, ABISELECT(16,8), "S18085C1.s18085c1f1");
    check_field_offset(lv, s18085c1f2, ABISELECT(64,52), "S18085C1.s18085c1f2");
    check_field_offset(lv, s18085c1f3, ABISELECT(72,56), "S18085C1.s18085c1f3");
    check_field_offset(lv, s18085c1f4, ABISELECT(84,68), "S18085C1.s18085c1f4");
    check_field_offset(lv, s18085c1f5, ABISELECT(88,72), "S18085C1.s18085c1f5");
    check_field_offset(lv, s18085c1f6, ABISELECT(96,76), "S18085C1.s18085c1f6");
    check_field_offset(lv, s18085c1f7, ABISELECT(108,88), "S18085C1.s18085c1f7");
    check_field_offset(lv, s18085c1f8, ABISELECT(112,92), "S18085C1.s18085c1f8");
    check_field_offset(lv, s18085c1f9, ABISELECT(120,96), "S18085C1.s18085c1f9");
    check_field_offset(lv, s18085c1f10, ABISELECT(132,108), "S18085C1.s18085c1f10");
    check_field_offset(lv, s18085c1f11, ABISELECT(136,112), "S18085C1.s18085c1f11");
    check_field_offset(lv, s18085c1f12, ABISELECT(144,116), "S18085C1.s18085c1f12");
    check_field_offset(lv, s18085c1f13, ABISELECT(156,128), "S18085C1.s18085c1f13");
    check_field_offset(lv, s18085c1f14, ABISELECT(160,132), "S18085C1.s18085c1f14");
    check_field_offset(lv, s18085c1f15, ABISELECT(168,136), "S18085C1.s18085c1f15");
  }
}
static Arrange_To_Call_Me vS18085C1(Test_S18085C1, "S18085C1", ABISELECT(184,148));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19998C2  {
  virtual void  v10(); // _ZN8S19998C23v10Ev
  virtual void  v11(); // _ZN8S19998C23v11Ev
  virtual void  v12(); // _ZN8S19998C23v12Ev
  virtual void  v13(); // _ZN8S19998C23v13Ev
  virtual void  v14(); // _ZN8S19998C23v14Ev
  virtual void  v15(); // _ZN8S19998C23v15Ev
  virtual void  v16(); // _ZN8S19998C23v16Ev
  virtual void  v17(); // _ZN8S19998C23v17Ev
  virtual void  v18(); // _ZN8S19998C23v18Ev
  ~S19998C2(); // tgen
  S19998C2(); // tgen
};
//SIG(-1 S19998C2) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S19998C2 ::v10(){vfunc_called(this, "_ZN8S19998C23v10Ev");}
void  S19998C2 ::v11(){vfunc_called(this, "_ZN8S19998C23v11Ev");}
void  S19998C2 ::v12(){vfunc_called(this, "_ZN8S19998C23v12Ev");}
void  S19998C2 ::v13(){vfunc_called(this, "_ZN8S19998C23v13Ev");}
void  S19998C2 ::v14(){vfunc_called(this, "_ZN8S19998C23v14Ev");}
void  S19998C2 ::v15(){vfunc_called(this, "_ZN8S19998C23v15Ev");}
void  S19998C2 ::v16(){vfunc_called(this, "_ZN8S19998C23v16Ev");}
void  S19998C2 ::v17(){vfunc_called(this, "_ZN8S19998C23v17Ev");}
void  S19998C2 ::v18(){vfunc_called(this, "_ZN8S19998C23v18Ev");}
S19998C2 ::~S19998C2(){ note_dtor("S19998C2", this);} // tgen
S19998C2 ::S19998C2(){ note_ctor("S19998C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19998C2C1Ev();
extern void _ZN8S19998C2D1Ev();
Name_Map name_map_S19998C2[] = {
  NSPAIR(_ZN8S19998C2C1Ev),
  NSPAIR(_ZN8S19998C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19998C2[];
extern void _ZN8S19998C23v10Ev();
extern void _ZN8S19998C23v11Ev();
extern void _ZN8S19998C23v12Ev();
extern void _ZN8S19998C23v13Ev();
extern void _ZN8S19998C23v14Ev();
extern void _ZN8S19998C23v15Ev();
extern void _ZN8S19998C23v16Ev();
extern void _ZN8S19998C23v17Ev();
extern void _ZN8S19998C23v18Ev();
static  VTBL_ENTRY vtc_S19998C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19998C2[0]),
  (VTBL_ENTRY)&_ZN8S19998C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19998C23v11Ev,
  (VTBL_ENTRY)&_ZN8S19998C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19998C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19998C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19998C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19998C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19998C23v17Ev,
  (VTBL_ENTRY)&_ZN8S19998C23v18Ev,
};
extern VTBL_ENTRY _ZTI8S19998C2[];
extern  VTBL_ENTRY _ZTV8S19998C2[];
Class_Descriptor cd_S19998C2 = {  "S19998C2", // class name
  0,0,//no base classes
  &(vtc_S19998C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19998C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19998C2),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  S19998C1  : virtual S19998C2 {
  int s19998c1f0;
  virtual void  v1(); // _ZN8S19998C12v1Ev
  virtual void  v2(); // _ZN8S19998C12v2Ev
  virtual void  v3(); // _ZN8S19998C12v3Ev
  virtual void  v4(); // _ZN8S19998C12v4Ev
  virtual void  v5(); // _ZN8S19998C12v5Ev
  virtual void  v6(); // _ZN8S19998C12v6Ev
  virtual void  v7(); // _ZN8S19998C12v7Ev
  virtual void  v8(); // _ZN8S19998C12v8Ev
  virtual void  v9(); // _ZN8S19998C12v9Ev
  ~S19998C1(); // tgen
  S19998C1(); // tgen
};
//SIG(1 S19998C1) C1{ VBC2{ v10 v11 v12 v13 v14 v15 v16 v17 v18} v1 v2 v3 v4 v5 v6 v7 v8 v9 Fi}


void  S19998C1 ::v1(){vfunc_called(this, "_ZN8S19998C12v1Ev");}
void  S19998C1 ::v2(){vfunc_called(this, "_ZN8S19998C12v2Ev");}
void  S19998C1 ::v3(){vfunc_called(this, "_ZN8S19998C12v3Ev");}
void  S19998C1 ::v4(){vfunc_called(this, "_ZN8S19998C12v4Ev");}
void  S19998C1 ::v5(){vfunc_called(this, "_ZN8S19998C12v5Ev");}
void  S19998C1 ::v6(){vfunc_called(this, "_ZN8S19998C12v6Ev");}
void  S19998C1 ::v7(){vfunc_called(this, "_ZN8S19998C12v7Ev");}
void  S19998C1 ::v8(){vfunc_called(this, "_ZN8S19998C12v8Ev");}
void  S19998C1 ::v9(){vfunc_called(this, "_ZN8S19998C12v9Ev");}
S19998C1 ::~S19998C1(){ note_dtor("S19998C1", this);} // tgen
S19998C1 ::S19998C1(){ note_ctor("S19998C1", this);} // tgen

static void Test_S19998C1()
{
  extern Class_Descriptor cd_S19998C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19998C1, buf);
    S19998C1 *dp, &lv = *(dp=new (buf) S19998C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19998C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19998C1)");
    check_base_class_offset(lv, (S19998C2*), 0, "S19998C1");
    check_field_offset(lv, s19998c1f0, ABISELECT(8,4), "S19998C1.s19998c1f0");
    test_class_info(&lv, &cd_S19998C1);
    dp->~S19998C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19998C1(Test_S19998C1, "S19998C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19998C1C1Ev();
extern void _ZN8S19998C1D1Ev();
Name_Map name_map_S19998C1[] = {
  NSPAIR(_ZN8S19998C1C1Ev),
  NSPAIR(_ZN8S19998C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19998C2;
extern VTBL_ENTRY _ZTI8S19998C2[];
extern  VTBL_ENTRY _ZTV8S19998C2[];
static Base_Class bases_S19998C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19998C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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 _ZTI8S19998C1[];
extern void _ZN8S19998C23v10Ev();
extern void _ZN8S19998C23v11Ev();
extern void _ZN8S19998C23v12Ev();
extern void _ZN8S19998C23v13Ev();
extern void _ZN8S19998C23v14Ev();
extern void _ZN8S19998C23v15Ev();
extern void _ZN8S19998C23v16Ev();
extern void _ZN8S19998C23v17Ev();
extern void _ZN8S19998C23v18Ev();
extern void _ZN8S19998C12v1Ev();
extern void _ZN8S19998C12v2Ev();
extern void _ZN8S19998C12v3Ev();
extern void _ZN8S19998C12v4Ev();
extern void _ZN8S19998C12v5Ev();
extern void _ZN8S19998C12v6Ev();
extern void _ZN8S19998C12v7Ev();
extern void _ZN8S19998C12v8Ev();
extern void _ZN8S19998C12v9Ev();
static  VTBL_ENTRY vtc_S19998C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19998C1[0]),
  (VTBL_ENTRY)&_ZN8S19998C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19998C23v11Ev,
  (VTBL_ENTRY)&_ZN8S19998C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19998C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19998C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19998C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19998C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19998C23v17Ev,
  (VTBL_ENTRY)&_ZN8S19998C23v18Ev,
  (VTBL_ENTRY)&_ZN8S19998C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19998C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19998C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19998C12v4Ev,
  (VTBL_ENTRY)&_ZN8S19998C12v5Ev,
  (VTBL_ENTRY)&_ZN8S19998C12v6Ev,
  (VTBL_ENTRY)&_ZN8S19998C12v7Ev,
  (VTBL_ENTRY)&_ZN8S19998C12v8Ev,
  (VTBL_ENTRY)&_ZN8S19998C12v9Ev,
};
extern VTBL_ENTRY _ZTV8S19998C1[];
static  VTT_ENTRY vtt_S19998C1[] = {
  {&(_ZTV8S19998C1[12]),  12,30},
  {&(_ZTV8S19998C1[12]),  12,30},
};
extern VTBL_ENTRY _ZTI8S19998C1[];
extern  VTBL_ENTRY _ZTV8S19998C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19998C1[];
Class_Descriptor cd_S19998C1 = {  "S19998C1", // class name
  bases_S19998C1, 1,
  &(vtc_S19998C1[0]), // expected_vtbl_contents
  &(vtt_S19998C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19998C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19998C1),30, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19998C1),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20349C2  {
  int s20349c2f0:32;
  char s20349c2f1:4;
  int s20349c2f2[2];
  void *s20349c2f3;
  virtual void  v7(); // _ZN8S20349C22v7Ev
  virtual void  v8(); // _ZN8S20349C22v8Ev
  virtual void  v9(); // _ZN8S20349C22v9Ev
  virtual void  v10(); // _ZN8S20349C23v10Ev
  virtual void  v11(); // _ZN8S20349C23v11Ev
  ~S20349C2(); // tgen
  S20349C2(); // tgen
};
//SIG(-1 S20349C2) C1{ v1 v2 v3 v4 v5 Fi:32 Fc:4 Fi[2] Fp}


void  S20349C2 ::v7(){vfunc_called(this, "_ZN8S20349C22v7Ev");}
void  S20349C2 ::v8(){vfunc_called(this, "_ZN8S20349C22v8Ev");}
void  S20349C2 ::v9(){vfunc_called(this, "_ZN8S20349C22v9Ev");}
void  S20349C2 ::v10(){vfunc_called(this, "_ZN8S20349C23v10Ev");}
void  S20349C2 ::v11(){vfunc_called(this, "_ZN8S20349C23v11Ev");}
S20349C2 ::~S20349C2(){ note_dtor("S20349C2", this);} // tgen
S20349C2 ::S20349C2(){ note_ctor("S20349C2", this);} // tgen

static void Test_S20349C2()
{
  extern Class_Descriptor cd_S20349C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S20349C2, buf);
    S20349C2 *dp, &lv = *(dp=new (buf) S20349C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S20349C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20349C2)");
    set_bf_and_test(lv, s20349c2f0, ABISELECT(8,4), 0, 32, 1, "S20349C2");
    set_bf_and_test(lv, s20349c2f0, ABISELECT(8,4), 0, 32, hide_sll(1LL<<31), "S20349C2");
    set_bf_and_test(lv, s20349c2f1, ABISELECT(12,8), 0, 4, 1, "S20349C2");
    set_bf_and_test(lv, s20349c2f1, ABISELECT(12,8), 0, 4, hide_sll(1LL<<3), "S20349C2");
    check_field_offset(lv, s20349c2f2, ABISELECT(16,12), "S20349C2.s20349c2f2");
    check_field_offset(lv, s20349c2f3, ABISELECT(24,20), "S20349C2.s20349c2f3");
    test_class_info(&lv, &cd_S20349C2);
    dp->~S20349C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20349C2(Test_S20349C2, "S20349C2", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN8S20349C2C1Ev();
extern void _ZN8S20349C2D1Ev();
Name_Map name_map_S20349C2[] = {
  NSPAIR(_ZN8S20349C2C1Ev),
  NSPAIR(_ZN8S20349C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20349C2[];
extern void _ZN8S20349C22v7Ev();
extern void _ZN8S20349C22v8Ev();
extern void _ZN8S20349C22v9Ev();
extern void _ZN8S20349C23v10Ev();
extern void _ZN8S20349C23v11Ev();
static  VTBL_ENTRY vtc_S20349C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20349C2[0]),
  (VTBL_ENTRY)&_ZN8S20349C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20349C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20349C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20349C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20349C23v11Ev,
};
extern VTBL_ENTRY _ZTI8S20349C2[];
extern  VTBL_ENTRY _ZTV8S20349C2[];
Class_Descriptor cd_S20349C2 = {  "S20349C2", // class name
  0,0,//no base classes
  &(vtc_S20349C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI8S20349C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20349C2),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  S20349C1  : virtual S20349C2 {
  void *s20349c1f0;
  short s20349c1f1:16;
  virtual void  v1(); // _ZN8S20349C12v1Ev
  virtual void  v2(); // _ZN8S20349C12v2Ev
  virtual void  v3(); // _ZN8S20349C12v3Ev
  virtual void  v4(); // _ZN8S20349C12v4Ev
  virtual void  v5(); // _ZN8S20349C12v5Ev
  virtual void  v6(); // _ZN8S20349C12v6Ev
  ~S20349C1(); // tgen
  S20349C1(); // tgen
};
//SIG(1 S20349C1) C1{ VBC2{ v7 v8 v9 v10 v11 Fi:32 Fc:4 Fi[2] Fp} v1 v2 v3 v4 v5 v6 Fp Fs:16}


void  S20349C1 ::v1(){vfunc_called(this, "_ZN8S20349C12v1Ev");}
void  S20349C1 ::v2(){vfunc_called(this, "_ZN8S20349C12v2Ev");}
void  S20349C1 ::v3(){vfunc_called(this, "_ZN8S20349C12v3Ev");}
void  S20349C1 ::v4(){vfunc_called(this, "_ZN8S20349C12v4Ev");}
void  S20349C1 ::v5(){vfunc_called(this, "_ZN8S20349C12v5Ev");}
void  S20349C1 ::v6(){vfunc_called(this, "_ZN8S20349C12v6Ev");}
S20349C1 ::~S20349C1(){ note_dtor("S20349C1", this);} // tgen
S20349C1 ::S20349C1(){ note_ctor("S20349C1", this);} // tgen

static void Test_S20349C1()
{
  extern Class_Descriptor cd_S20349C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S20349C1, buf);
    S20349C1 *dp, &lv = *(dp=new (buf) S20349C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S20349C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20349C1)");
    check_base_class_offset(lv, (S20349C2*), ABISELECT(24,12), "S20349C1");
    check_field_offset(lv, s20349c1f0, ABISELECT(8,4), "S20349C1.s20349c1f0");
    set_bf_and_test(lv, s20349c1f1, ABISELECT(16,8), 0, 16, 1, "S20349C1");
    set_bf_and_test(lv, s20349c1f1, ABISELECT(16,8), 0, 16, hide_sll(1LL<<15), "S20349C1");
    test_class_info(&lv, &cd_S20349C1);
    dp->~S20349C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20349C1(Test_S20349C1, "S20349C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN8S20349C1C1Ev();
extern void _ZN8S20349C1D1Ev();
Name_Map name_map_S20349C1[] = {
  NSPAIR(_ZN8S20349C1C1Ev),
  NSPAIR(_ZN8S20349C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20349C2;
extern VTBL_ENTRY _ZTI8S20349C2[];
extern  VTBL_ENTRY _ZTV8S20349C2[];
static Base_Class bases_S20349C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20349C2,    ABISELECT(24,12), //bcp->offset
    9, //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 _ZTI8S20349C1[];
extern void _ZN8S20349C12v1Ev();
extern void _ZN8S20349C12v2Ev();
extern void _ZN8S20349C12v3Ev();
extern void _ZN8S20349C12v4Ev();
extern void _ZN8S20349C12v5Ev();
extern void _ZN8S20349C12v6Ev();
extern void _ZN8S20349C22v7Ev();
extern void _ZN8S20349C22v8Ev();
extern void _ZN8S20349C22v9Ev();
extern void _ZN8S20349C23v10Ev();
extern void _ZN8S20349C23v11Ev();
static  VTBL_ENTRY vtc_S20349C1[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20349C1[0]),
  (VTBL_ENTRY)&_ZN8S20349C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20349C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20349C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20349C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20349C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20349C12v6Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20349C1[0]),
  (VTBL_ENTRY)&_ZN8S20349C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20349C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20349C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20349C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20349C23v11Ev,
};
extern VTBL_ENTRY _ZTV8S20349C1[];
static  VTT_ENTRY vtt_S20349C1[] = {
  {&(_ZTV8S20349C1[3]),  3,21},
  {&(_ZTV8S20349C1[16]),  16,21},
};
extern VTBL_ENTRY _ZTI8S20349C1[];
extern  VTBL_ENTRY _ZTV8S20349C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20349C1[];
Class_Descriptor cd_S20349C1 = {  "S20349C1", // class name
  bases_S20349C1, 1,
  &(vtc_S20349C1[0]), // expected_vtbl_contents
  &(vtt_S20349C1[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI8S20349C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20349C1),21, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20349C1),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9303C2  {
  ::S5266C19_nt s9303c2f0;
  int s9303c2f1[2];
  char s9303c2f2;
  virtual  ~S9303C2(); // _ZN7S9303C2D1Ev
  virtual void  v3(); // _ZN7S9303C22v3Ev
  virtual void  v4(); // _ZN7S9303C22v4Ev
  virtual void  v5(); // _ZN7S9303C22v5Ev
  S9303C2(); // tgen
};
//SIG(-1 S9303C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9303C2 ::~S9303C2(){ note_dtor("S9303C2", this);}
void  S9303C2 ::v3(){vfunc_called(this, "_ZN7S9303C22v3Ev");}
void  S9303C2 ::v4(){vfunc_called(this, "_ZN7S9303C22v4Ev");}
void  S9303C2 ::v5(){vfunc_called(this, "_ZN7S9303C22v5Ev");}
S9303C2 ::S9303C2(){ note_ctor("S9303C2", this);} // tgen

static void Test_S9303C2()
{
  extern Class_Descriptor cd_S9303C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9303C2, buf);
    S9303C2 *dp, &lv = *(dp=new (buf) S9303C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9303C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9303C2)");
    check_field_offset(lv, s9303c2f0, ABISELECT(8,4), "S9303C2.s9303c2f0");
    check_field_offset(lv, s9303c2f1, ABISELECT(24,16), "S9303C2.s9303c2f1");
    check_field_offset(lv, s9303c2f2, ABISELECT(32,24), "S9303C2.s9303c2f2");
    test_class_info(&lv, &cd_S9303C2);
    dp->~S9303C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9303C2(Test_S9303C2, "S9303C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9303C2C1Ev();
extern void _ZN7S9303C2D1Ev();
Name_Map name_map_S9303C2[] = {
  NSPAIR(_ZN7S9303C2C1Ev),
  NSPAIR(_ZN7S9303C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9303C2[];
extern void _ZN7S9303C2D1Ev();
extern void _ZN7S9303C2D0Ev();
extern void _ZN7S9303C22v3Ev();
extern void _ZN7S9303C22v4Ev();
extern void _ZN7S9303C22v5Ev();
static  VTBL_ENTRY vtc_S9303C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9303C2[0]),
  (VTBL_ENTRY)&_ZN7S9303C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9303C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9303C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9303C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9303C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9303C2[];
extern  VTBL_ENTRY _ZTV7S9303C2[];
Class_Descriptor cd_S9303C2 = {  "S9303C2", // class name
  0,0,//no base classes
  &(vtc_S9303C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9303C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9303C2),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  S9303C1  : S9303C2 {
  ::S3765C5_nt s9303c1f0;
  int s9303c1f1;
  virtual  ~S9303C1(); // _ZN7S9303C1D1Ev
  virtual void  v1(); // _ZN7S9303C12v1Ev
  virtual void  v2(); // _ZN7S9303C12v2Ev
  S9303C1(); // tgen
};
//SIG(1 S9303C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 FC5{ m Fp[2]} Fi}


 S9303C1 ::~S9303C1(){ note_dtor("S9303C1", this);}
void  S9303C1 ::v1(){vfunc_called(this, "_ZN7S9303C12v1Ev");}
void  S9303C1 ::v2(){vfunc_called(this, "_ZN7S9303C12v2Ev");}
S9303C1 ::S9303C1(){ note_ctor("S9303C1", this);} // tgen

static void Test_S9303C1()
{
  extern Class_Descriptor cd_S9303C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S9303C1, buf);
    S9303C1 *dp, &lv = *(dp=new (buf) S9303C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S9303C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9303C1)");
    check_base_class_offset(lv, (S9303C2*), 0, "S9303C1");
    check_field_offset(lv, s9303c1f0, ABISELECT(40,28), "S9303C1.s9303c1f0");
    check_field_offset(lv, s9303c1f1, ABISELECT(56,36), "S9303C1.s9303c1f1");
    test_class_info(&lv, &cd_S9303C1);
    dp->~S9303C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9303C1(Test_S9303C1, "S9303C1", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S9303C1C1Ev();
extern void _ZN7S9303C1D1Ev();
Name_Map name_map_S9303C1[] = {
  NSPAIR(_ZN7S9303C1C1Ev),
  NSPAIR(_ZN7S9303C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9303C2;
extern VTBL_ENTRY _ZTI7S9303C2[];
extern  VTBL_ENTRY _ZTV7S9303C2[];
static Base_Class bases_S9303C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9303C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S9303C1[];
extern void _ZN7S9303C1D1Ev();
extern void _ZN7S9303C1D0Ev();
extern void _ZN7S9303C22v3Ev();
extern void _ZN7S9303C22v4Ev();
extern void _ZN7S9303C22v5Ev();
extern void _ZN7S9303C12v1Ev();
extern void _ZN7S9303C12v2Ev();
static  VTBL_ENTRY vtc_S9303C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9303C1[0]),
  (VTBL_ENTRY)&_ZN7S9303C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9303C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9303C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9303C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9303C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9303C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9303C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9303C1[];
extern  VTBL_ENTRY _ZTV7S9303C1[];
Class_Descriptor cd_S9303C1 = {  "S9303C1", // class name
  bases_S9303C1, 1,
  &(vtc_S9303C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S9303C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9303C1),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  S17188C2  {
  int s17188c2f0;
  ::S5266C19_nt s17188c2f1;
  ::S5266C19_nt s17188c2f2;
  ::S5266C19_nt s17188c2f3;
  ::S5266C19_nt s17188c2f4;
  ::S5266C19_nt s17188c2f5;
  ::S5266C19_nt s17188c2f6;
  int s17188c2f7[2];
  ::S5266C19_nt s17188c2f8;
  void  mf17188c2(); // _ZN8S17188C29mf17188c2Ev
};
//SIG(-1 S17188C2) C1{ m Fi FC2{ m Fp Fi FC3{ m}} FC2 FC2 FC2 FC2 FC2 Fi[2] FC2}


void  S17188C2 ::mf17188c2(){}

static void Test_S17188C2()
{
  {
    init_simple_test("S17188C2");
    S17188C2 lv;
    check2(sizeof(lv), ABISELECT(128,96), "sizeof(S17188C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17188C2)");
    check_field_offset(lv, s17188c2f0, 0, "S17188C2.s17188c2f0");
    check_field_offset(lv, s17188c2f1, ABISELECT(8,4), "S17188C2.s17188c2f1");
    check_field_offset(lv, s17188c2f2, ABISELECT(24,16), "S17188C2.s17188c2f2");
    check_field_offset(lv, s17188c2f3, ABISELECT(40,28), "S17188C2.s17188c2f3");
    check_field_offset(lv, s17188c2f4, ABISELECT(56,40), "S17188C2.s17188c2f4");
    check_field_offset(lv, s17188c2f5, ABISELECT(72,52), "S17188C2.s17188c2f5");
    check_field_offset(lv, s17188c2f6, ABISELECT(88,64), "S17188C2.s17188c2f6");
    check_field_offset(lv, s17188c2f7, ABISELECT(104,76), "S17188C2.s17188c2f7");
    check_field_offset(lv, s17188c2f8, ABISELECT(112,84), "S17188C2.s17188c2f8");
  }
}
static Arrange_To_Call_Me vS17188C2(Test_S17188C2, "S17188C2", ABISELECT(128,96));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17188C1  {
  int s17188c1f0[3];
  ::S17188C2 s17188c1f1;
  void  mf17188c1(); // _ZN8S17188C19mf17188c1Ev
};
//SIG(1 S17188C1) C1{ m Fi[3] FC2{ m Fi FC3{ m Fp Fi FC4{ m}} FC3 FC3 FC3 FC3 FC3 Fi[2] FC3}}


void  S17188C1 ::mf17188c1(){}

static void Test_S17188C1()
{
  {
    init_simple_test("S17188C1");
    S17188C1 lv;
    check2(sizeof(lv), ABISELECT(144,108), "sizeof(S17188C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17188C1)");
    check_field_offset(lv, s17188c1f0, 0, "S17188C1.s17188c1f0");
    check_field_offset(lv, s17188c1f1, ABISELECT(16,12), "S17188C1.s17188c1f1");
  }
}
static Arrange_To_Call_Me vS17188C1(Test_S17188C1, "S17188C1", ABISELECT(144,108));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12286C1  {
  int s12286c1f0;
  char s12286c1f1[4];
  ::S11199C3 s12286c1f2;
  __tsi64 s12286c1f3[2];
};
//SIG(1 S12286C1) C1{ Fi Fc[4] FC2{ FL Fi FC3{ FC4{ Fc[20]} Fc[16]} FC5{ Fc[12]} FC6{ Fl}} FL[2]}



static void Test_S12286C1()
{
  {
    init_simple_test("S12286C1");
    S12286C1 lv;
    check2(sizeof(lv), ABISELECT(96,88), "sizeof(S12286C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12286C1)");
    check_field_offset(lv, s12286c1f0, 0, "S12286C1.s12286c1f0");
    check_field_offset(lv, s12286c1f1, 4, "S12286C1.s12286c1f1");
    check_field_offset(lv, s12286c1f2, 8, "S12286C1.s12286c1f2");
    check_field_offset(lv, s12286c1f3, ABISELECT(80,72), "S12286C1.s12286c1f3");
  }
}
static Arrange_To_Call_Me vS12286C1(Test_S12286C1, "S12286C1", ABISELECT(96,88));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20386C2  {
  virtual void  v8(); // _ZN8S20386C22v8Ev
  virtual void  v9(); // _ZN8S20386C22v9Ev
  virtual void  v10(); // _ZN8S20386C23v10Ev
  virtual void  v11(); // _ZN8S20386C23v11Ev
  virtual void  v12(); // _ZN8S20386C23v12Ev
  virtual void  v13(); // _ZN8S20386C23v13Ev
  virtual void  v14(); // _ZN8S20386C23v14Ev
  virtual void  v15(); // _ZN8S20386C23v15Ev
  virtual void  v16(); // _ZN8S20386C23v16Ev
  ~S20386C2(); // tgen
  S20386C2(); // tgen
};
//SIG(-1 S20386C2) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S20386C2 ::v8(){vfunc_called(this, "_ZN8S20386C22v8Ev");}
void  S20386C2 ::v9(){vfunc_called(this, "_ZN8S20386C22v9Ev");}
void  S20386C2 ::v10(){vfunc_called(this, "_ZN8S20386C23v10Ev");}
void  S20386C2 ::v11(){vfunc_called(this, "_ZN8S20386C23v11Ev");}
void  S20386C2 ::v12(){vfunc_called(this, "_ZN8S20386C23v12Ev");}
void  S20386C2 ::v13(){vfunc_called(this, "_ZN8S20386C23v13Ev");}
void  S20386C2 ::v14(){vfunc_called(this, "_ZN8S20386C23v14Ev");}
void  S20386C2 ::v15(){vfunc_called(this, "_ZN8S20386C23v15Ev");}
void  S20386C2 ::v16(){vfunc_called(this, "_ZN8S20386C23v16Ev");}
S20386C2 ::~S20386C2(){ note_dtor("S20386C2", this);} // tgen
S20386C2 ::S20386C2(){ note_ctor("S20386C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20386C2C1Ev();
extern void _ZN8S20386C2D1Ev();
Name_Map name_map_S20386C2[] = {
  NSPAIR(_ZN8S20386C2C1Ev),
  NSPAIR(_ZN8S20386C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20386C2[];
extern void _ZN8S20386C22v8Ev();
extern void _ZN8S20386C22v9Ev();
extern void _ZN8S20386C23v10Ev();
extern void _ZN8S20386C23v11Ev();
extern void _ZN8S20386C23v12Ev();
extern void _ZN8S20386C23v13Ev();
extern void _ZN8S20386C23v14Ev();
extern void _ZN8S20386C23v15Ev();
extern void _ZN8S20386C23v16Ev();
static  VTBL_ENTRY vtc_S20386C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20386C2[0]),
  (VTBL_ENTRY)&_ZN8S20386C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20386C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20386C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20386C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20386C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20386C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20386C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20386C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20386C23v16Ev,
};
extern VTBL_ENTRY _ZTI8S20386C2[];
extern  VTBL_ENTRY _ZTV8S20386C2[];
Class_Descriptor cd_S20386C2 = {  "S20386C2", // class name
  0,0,//no base classes
  &(vtc_S20386C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20386C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20386C2),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  S20386C1  : virtual S20386C2 {
  __tsi64 s20386c1f0[2];
  virtual void  v1(); // _ZN8S20386C12v1Ev
  virtual void  v2(); // _ZN8S20386C12v2Ev
  virtual void  v3(); // _ZN8S20386C12v3Ev
  virtual void  v4(); // _ZN8S20386C12v4Ev
  virtual void  v5(); // _ZN8S20386C12v5Ev
  virtual void  v6(); // _ZN8S20386C12v6Ev
  virtual void  v7(); // _ZN8S20386C12v7Ev
  ~S20386C1(); // tgen
  S20386C1(); // tgen
};
//SIG(1 S20386C1) C1{ VBC2{ v8 v9 v10 v11 v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 FL[2]}


void  S20386C1 ::v1(){vfunc_called(this, "_ZN8S20386C12v1Ev");}
void  S20386C1 ::v2(){vfunc_called(this, "_ZN8S20386C12v2Ev");}
void  S20386C1 ::v3(){vfunc_called(this, "_ZN8S20386C12v3Ev");}
void  S20386C1 ::v4(){vfunc_called(this, "_ZN8S20386C12v4Ev");}
void  S20386C1 ::v5(){vfunc_called(this, "_ZN8S20386C12v5Ev");}
void  S20386C1 ::v6(){vfunc_called(this, "_ZN8S20386C12v6Ev");}
void  S20386C1 ::v7(){vfunc_called(this, "_ZN8S20386C12v7Ev");}
S20386C1 ::~S20386C1(){ note_dtor("S20386C1", this);} // tgen
S20386C1 ::S20386C1(){ note_ctor("S20386C1", this);} // tgen

static void Test_S20386C1()
{
  extern Class_Descriptor cd_S20386C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S20386C1, buf);
    S20386C1 *dp, &lv = *(dp=new (buf) S20386C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S20386C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20386C1)");
    check_base_class_offset(lv, (S20386C2*), 0, "S20386C1");
    check_field_offset(lv, s20386c1f0, ABISELECT(8,4), "S20386C1.s20386c1f0");
    test_class_info(&lv, &cd_S20386C1);
    dp->~S20386C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20386C1(Test_S20386C1, "S20386C1", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN8S20386C1C1Ev();
extern void _ZN8S20386C1D1Ev();
Name_Map name_map_S20386C1[] = {
  NSPAIR(_ZN8S20386C1C1Ev),
  NSPAIR(_ZN8S20386C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20386C2;
extern VTBL_ENTRY _ZTI8S20386C2[];
extern  VTBL_ENTRY _ZTV8S20386C2[];
static Base_Class bases_S20386C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20386C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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 _ZTI8S20386C1[];
extern void _ZN8S20386C22v8Ev();
extern void _ZN8S20386C22v9Ev();
extern void _ZN8S20386C23v10Ev();
extern void _ZN8S20386C23v11Ev();
extern void _ZN8S20386C23v12Ev();
extern void _ZN8S20386C23v13Ev();
extern void _ZN8S20386C23v14Ev();
extern void _ZN8S20386C23v15Ev();
extern void _ZN8S20386C23v16Ev();
extern void _ZN8S20386C12v1Ev();
extern void _ZN8S20386C12v2Ev();
extern void _ZN8S20386C12v3Ev();
extern void _ZN8S20386C12v4Ev();
extern void _ZN8S20386C12v5Ev();
extern void _ZN8S20386C12v6Ev();
extern void _ZN8S20386C12v7Ev();
static  VTBL_ENTRY vtc_S20386C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20386C1[0]),
  (VTBL_ENTRY)&_ZN8S20386C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20386C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20386C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20386C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20386C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20386C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20386C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20386C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20386C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20386C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20386C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20386C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20386C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20386C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20386C12v6Ev,
  (VTBL_ENTRY)&_ZN8S20386C12v7Ev,
};
extern VTBL_ENTRY _ZTV8S20386C1[];
static  VTT_ENTRY vtt_S20386C1[] = {
  {&(_ZTV8S20386C1[12]),  12,28},
  {&(_ZTV8S20386C1[12]),  12,28},
};
extern VTBL_ENTRY _ZTI8S20386C1[];
extern  VTBL_ENTRY _ZTV8S20386C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20386C1[];
Class_Descriptor cd_S20386C1 = {  "S20386C1", // class name
  bases_S20386C1, 1,
  &(vtc_S20386C1[0]), // expected_vtbl_contents
  &(vtt_S20386C1[0]), // expected_vtt_contents
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI8S20386C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20386C1),28, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20386C1),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17552C4_nt  {
  ::S6795C6_nt s17552c4f0;
  void *s17552c4f1;
  void  mf17552c4(); // _ZN11S17552C4_nt9mf17552c4Ev
  virtual  ~S17552C4_nt(); // _ZN11S17552C4_ntD1Ev
  S17552C4_nt(); // tgen
};
//SIG(1 S17552C4_nt) C1{ vd m FC2{ m Fp Fi Fp} Fp}


void  S17552C4_nt ::mf17552c4(){}
 S17552C4_nt ::~S17552C4_nt(){ note_dtor("S17552C4_nt", this);}
S17552C4_nt ::S17552C4_nt(){ note_ctor("S17552C4_nt", this);} // tgen

//skip512 S17552C4_nt

#else // __cplusplus

extern void _ZN11S17552C4_ntC1Ev();
extern void _ZN11S17552C4_ntD1Ev();
Name_Map name_map_S17552C4_nt[] = {
  NSPAIR(_ZN11S17552C4_ntC1Ev),
  NSPAIR(_ZN11S17552C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S17552C4_nt[];
extern void _ZN11S17552C4_ntD1Ev();
extern void _ZN11S17552C4_ntD0Ev();
static  VTBL_ENTRY vtc_S17552C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S17552C4_nt[0]),
  (VTBL_ENTRY)&_ZN11S17552C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S17552C4_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S17552C4_nt[];
VTBL_ENTRY *P__ZTI11S17552C4_nt = _ZTI11S17552C4_nt; 
extern  VTBL_ENTRY _ZTV11S17552C4_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17552C1  {
  void *s17552c1f0;
  ::S1672C15_nt s17552c1f1;
  int s17552c1f2[2];
  ::S17552C4_nt s17552c1f3[100];
  char s17552c1f4;
  void  mf17552c1(); // _ZN8S17552C19mf17552c1Ev
};
//SIG(1 S17552C1) C1{ m Fp FC2{ m FC3{ FL[4]}} Fi[2] FC4{ vd m FC5{ m Fp Fi Fp} Fp}[100] Fc}


void  S17552C1 ::mf17552c1(){}

static void Test_S17552C1()
{
  {
    init_simple_test("S17552C1");
    S17552C1 lv;
    check2(sizeof(lv), ABISELECT(4056,2048), "sizeof(S17552C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17552C1)");
    check_field_offset(lv, s17552c1f0, 0, "S17552C1.s17552c1f0");
    check_field_offset(lv, s17552c1f1, ABISELECT(8,4), "S17552C1.s17552c1f1");
    check_field_offset(lv, s17552c1f2, ABISELECT(40,36), "S17552C1.s17552c1f2");
    check_field_offset(lv, s17552c1f3, ABISELECT(48,44), "S17552C1.s17552c1f3");
    check_field_offset(lv, s17552c1f4, ABISELECT(4048,2044), "S17552C1.s17552c1f4");
  }
}
static Arrange_To_Call_Me vS17552C1(Test_S17552C1, "S17552C1", ABISELECT(4056,2048));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9356C2  {
  ::S5266C19_nt s9356c2f0;
  int s9356c2f1[2];
  char s9356c2f2;
  virtual  ~S9356C2(); // _ZN7S9356C2D1Ev
  virtual void  v3(); // _ZN7S9356C22v3Ev
  virtual void  v4(); // _ZN7S9356C22v4Ev
  virtual void  v5(); // _ZN7S9356C22v5Ev
  S9356C2(); // tgen
};
//SIG(-1 S9356C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9356C2 ::~S9356C2(){ note_dtor("S9356C2", this);}
void  S9356C2 ::v3(){vfunc_called(this, "_ZN7S9356C22v3Ev");}
void  S9356C2 ::v4(){vfunc_called(this, "_ZN7S9356C22v4Ev");}
void  S9356C2 ::v5(){vfunc_called(this, "_ZN7S9356C22v5Ev");}
S9356C2 ::S9356C2(){ note_ctor("S9356C2", this);} // tgen

static void Test_S9356C2()
{
  extern Class_Descriptor cd_S9356C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9356C2, buf);
    S9356C2 *dp, &lv = *(dp=new (buf) S9356C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9356C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9356C2)");
    check_field_offset(lv, s9356c2f0, ABISELECT(8,4), "S9356C2.s9356c2f0");
    check_field_offset(lv, s9356c2f1, ABISELECT(24,16), "S9356C2.s9356c2f1");
    check_field_offset(lv, s9356c2f2, ABISELECT(32,24), "S9356C2.s9356c2f2");
    test_class_info(&lv, &cd_S9356C2);
    dp->~S9356C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9356C2(Test_S9356C2, "S9356C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9356C2C1Ev();
extern void _ZN7S9356C2D1Ev();
Name_Map name_map_S9356C2[] = {
  NSPAIR(_ZN7S9356C2C1Ev),
  NSPAIR(_ZN7S9356C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9356C2[];
extern void _ZN7S9356C2D1Ev();
extern void _ZN7S9356C2D0Ev();
extern void _ZN7S9356C22v3Ev();
extern void _ZN7S9356C22v4Ev();
extern void _ZN7S9356C22v5Ev();
static  VTBL_ENTRY vtc_S9356C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9356C2[0]),
  (VTBL_ENTRY)&_ZN7S9356C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9356C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9356C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9356C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9356C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9356C2[];
extern  VTBL_ENTRY _ZTV7S9356C2[];
Class_Descriptor cd_S9356C2 = {  "S9356C2", // class name
  0,0,//no base classes
  &(vtc_S9356C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9356C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9356C2),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  S9356C1  : S9356C2 {
  void *s9356c1f0;
  ::S5266C19_nt s9356c1f1;
  int s9356c1f2;
  virtual  ~S9356C1(); // _ZN7S9356C1D1Ev
  virtual void  v1(); // _ZN7S9356C12v1Ev
  virtual void  v2(); // _ZN7S9356C12v2Ev
  S9356C1(); // tgen
};
//SIG(1 S9356C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fp FC3 Fi}


 S9356C1 ::~S9356C1(){ note_dtor("S9356C1", this);}
void  S9356C1 ::v1(){vfunc_called(this, "_ZN7S9356C12v1Ev");}
void  S9356C1 ::v2(){vfunc_called(this, "_ZN7S9356C12v2Ev");}
S9356C1 ::S9356C1(){ note_ctor("S9356C1", this);} // tgen

static void Test_S9356C1()
{
  extern Class_Descriptor cd_S9356C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S9356C1, buf);
    S9356C1 *dp, &lv = *(dp=new (buf) S9356C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S9356C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9356C1)");
    check_base_class_offset(lv, (S9356C2*), 0, "S9356C1");
    check_field_offset(lv, s9356c1f0, ABISELECT(40,28), "S9356C1.s9356c1f0");
    check_field_offset(lv, s9356c1f1, ABISELECT(48,32), "S9356C1.s9356c1f1");
    check_field_offset(lv, s9356c1f2, ABISELECT(64,44), "S9356C1.s9356c1f2");
    test_class_info(&lv, &cd_S9356C1);
    dp->~S9356C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9356C1(Test_S9356C1, "S9356C1", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S9356C1C1Ev();
extern void _ZN7S9356C1D1Ev();
Name_Map name_map_S9356C1[] = {
  NSPAIR(_ZN7S9356C1C1Ev),
  NSPAIR(_ZN7S9356C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9356C2;
extern VTBL_ENTRY _ZTI7S9356C2[];
extern  VTBL_ENTRY _ZTV7S9356C2[];
static Base_Class bases_S9356C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9356C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S9356C1[];
extern void _ZN7S9356C1D1Ev();
extern void _ZN7S9356C1D0Ev();
extern void _ZN7S9356C22v3Ev();
extern void _ZN7S9356C22v4Ev();
extern void _ZN7S9356C22v5Ev();
extern void _ZN7S9356C12v1Ev();
extern void _ZN7S9356C12v2Ev();
static  VTBL_ENTRY vtc_S9356C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9356C1[0]),
  (VTBL_ENTRY)&_ZN7S9356C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9356C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9356C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9356C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9356C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9356C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9356C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9356C1[];
extern  VTBL_ENTRY _ZTV7S9356C1[];
Class_Descriptor cd_S9356C1 = {  "S9356C1", // class name
  bases_S9356C1, 1,
  &(vtc_S9356C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S9356C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9356C1),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  S12447C2_nt  {
  int s12447c2f0[2];
};
//SIG(-1 S12447C2_nt) C1{ Fi[2]}



//skip512 S12447C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12447C3_nt  {
  int s12447c3f0;
};
//SIG(-1 S12447C3_nt) C1{ Fi}



//skip512 S12447C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12447C1  {
  int s12447c1f0;
  ::S12447C2_nt s12447c1f1;
  void *s12447c1f2;
  ::S12447C3_nt s12447c1f3;
  void *s12447c1f4;
  int s12447c1f5;
  void *s12447c1f6[2];
  int s12447c1f7[2];
  void *s12447c1f8[2];
  int s12447c1f9;
  void *s12447c1f10;
  int s12447c1f11[2];
  void *s12447c1f12;
};
//SIG(1 S12447C1) C1{ Fi FC2{ Fi[2]} Fp FC3{ Fi} Fp Fi Fp[2] Fi[2] Fp[2] Fi Fp Fi[2] Fp}



static void Test_S12447C1()
{
  {
    init_simple_test("S12447C1");
    S12447C1 lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S12447C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12447C1)");
    check_field_offset(lv, s12447c1f0, 0, "S12447C1.s12447c1f0");
    check_field_offset(lv, s12447c1f1, 4, "S12447C1.s12447c1f1");
    check_field_offset(lv, s12447c1f2, ABISELECT(16,12), "S12447C1.s12447c1f2");
    check_field_offset(lv, s12447c1f3, ABISELECT(24,16), "S12447C1.s12447c1f3");
    check_field_offset(lv, s12447c1f4, ABISELECT(32,20), "S12447C1.s12447c1f4");
    check_field_offset(lv, s12447c1f5, ABISELECT(40,24), "S12447C1.s12447c1f5");
    check_field_offset(lv, s12447c1f6, ABISELECT(48,28), "S12447C1.s12447c1f6");
    check_field_offset(lv, s12447c1f7, ABISELECT(64,36), "S12447C1.s12447c1f7");
    check_field_offset(lv, s12447c1f8, ABISELECT(72,44), "S12447C1.s12447c1f8");
    check_field_offset(lv, s12447c1f9, ABISELECT(88,52), "S12447C1.s12447c1f9");
    check_field_offset(lv, s12447c1f10, ABISELECT(96,56), "S12447C1.s12447c1f10");
    check_field_offset(lv, s12447c1f11, ABISELECT(104,60), "S12447C1.s12447c1f11");
    check_field_offset(lv, s12447c1f12, ABISELECT(112,68), "S12447C1.s12447c1f12");
  }
}
static Arrange_To_Call_Me vS12447C1(Test_S12447C1, "S12447C1", ABISELECT(120,72));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9970C2  {
  virtual  ~S9970C2(); // _ZN7S9970C2D1Ev
  virtual void  v5(); // _ZN7S9970C22v5Ev
  virtual void  v6(); // _ZN7S9970C22v6Ev
  virtual void  v7(); // _ZN7S9970C22v7Ev
  virtual void  v8(); // _ZN7S9970C22v8Ev
  S9970C2(); // tgen
};
//SIG(-1 S9970C2) C1{ vd v1 v2 v3 v4}


 S9970C2 ::~S9970C2(){ note_dtor("S9970C2", this);}
void  S9970C2 ::v5(){vfunc_called(this, "_ZN7S9970C22v5Ev");}
void  S9970C2 ::v6(){vfunc_called(this, "_ZN7S9970C22v6Ev");}
void  S9970C2 ::v7(){vfunc_called(this, "_ZN7S9970C22v7Ev");}
void  S9970C2 ::v8(){vfunc_called(this, "_ZN7S9970C22v8Ev");}
S9970C2 ::S9970C2(){ note_ctor("S9970C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S9970C2C1Ev();
extern void _ZN7S9970C2D1Ev();
Name_Map name_map_S9970C2[] = {
  NSPAIR(_ZN7S9970C2C1Ev),
  NSPAIR(_ZN7S9970C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9970C2[];
extern void _ZN7S9970C2D1Ev();
extern void _ZN7S9970C2D0Ev();
extern void _ZN7S9970C22v5Ev();
extern void _ZN7S9970C22v6Ev();
extern void _ZN7S9970C22v7Ev();
extern void _ZN7S9970C22v8Ev();
static  VTBL_ENTRY vtc_S9970C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9970C2[0]),
  (VTBL_ENTRY)&_ZN7S9970C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9970C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9970C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9970C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9970C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9970C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S9970C2[];
extern  VTBL_ENTRY _ZTV7S9970C2[];
Class_Descriptor cd_S9970C2 = {  "S9970C2", // class name
  0,0,//no base classes
  &(vtc_S9970C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9970C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9970C2),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  S9970C1  : S9970C2 {
  void *s9970c1f0;
  ::S3765C5_nt s9970c1f1;
  int s9970c1f2[6];
  char s9970c1f3;
  int s9970c1f4;
  virtual  ~S9970C1(); // _ZN7S9970C1D1Ev
  virtual void  v1(); // _ZN7S9970C12v1Ev
  virtual void  v2(); // _ZN7S9970C12v2Ev
  virtual void  v3(); // _ZN7S9970C12v3Ev
  virtual void  v4(); // _ZN7S9970C12v4Ev
  S9970C1(); // tgen
};
//SIG(1 S9970C1) C1{ BC2{ vd v5 v6 v7 v8} vd v1 v2 v3 v4 Fp FC3{ m Fp[2]} Fi[6] Fc Fi}


 S9970C1 ::~S9970C1(){ note_dtor("S9970C1", this);}
void  S9970C1 ::v1(){vfunc_called(this, "_ZN7S9970C12v1Ev");}
void  S9970C1 ::v2(){vfunc_called(this, "_ZN7S9970C12v2Ev");}
void  S9970C1 ::v3(){vfunc_called(this, "_ZN7S9970C12v3Ev");}
void  S9970C1 ::v4(){vfunc_called(this, "_ZN7S9970C12v4Ev");}
S9970C1 ::S9970C1(){ note_ctor("S9970C1", this);} // tgen

static void Test_S9970C1()
{
  extern Class_Descriptor cd_S9970C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S9970C1, buf);
    S9970C1 *dp, &lv = *(dp=new (buf) S9970C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S9970C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9970C1)");
    check_base_class_offset(lv, (S9970C2*), 0, "S9970C1");
    check_field_offset(lv, s9970c1f0, ABISELECT(8,4), "S9970C1.s9970c1f0");
    check_field_offset(lv, s9970c1f1, ABISELECT(16,8), "S9970C1.s9970c1f1");
    check_field_offset(lv, s9970c1f2, ABISELECT(32,16), "S9970C1.s9970c1f2");
    check_field_offset(lv, s9970c1f3, ABISELECT(56,40), "S9970C1.s9970c1f3");
    check_field_offset(lv, s9970c1f4, ABISELECT(60,44), "S9970C1.s9970c1f4");
    test_class_info(&lv, &cd_S9970C1);
    dp->~S9970C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9970C1(Test_S9970C1, "S9970C1", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN7S9970C1C1Ev();
extern void _ZN7S9970C1D1Ev();
Name_Map name_map_S9970C1[] = {
  NSPAIR(_ZN7S9970C1C1Ev),
  NSPAIR(_ZN7S9970C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9970C2;
extern VTBL_ENTRY _ZTI7S9970C2[];
extern  VTBL_ENTRY _ZTV7S9970C2[];
static Base_Class bases_S9970C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9970C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S9970C1[];
extern void _ZN7S9970C1D1Ev();
extern void _ZN7S9970C1D0Ev();
extern void _ZN7S9970C22v5Ev();
extern void _ZN7S9970C22v6Ev();
extern void _ZN7S9970C22v7Ev();
extern void _ZN7S9970C22v8Ev();
extern void _ZN7S9970C12v1Ev();
extern void _ZN7S9970C12v2Ev();
extern void _ZN7S9970C12v3Ev();
extern void _ZN7S9970C12v4Ev();
static  VTBL_ENTRY vtc_S9970C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9970C1[0]),
  (VTBL_ENTRY)&_ZN7S9970C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9970C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9970C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9970C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9970C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9970C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9970C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9970C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9970C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9970C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9970C1[];
extern  VTBL_ENTRY _ZTV7S9970C1[];
Class_Descriptor cd_S9970C1 = {  "S9970C1", // class name
  bases_S9970C1, 1,
  &(vtc_S9970C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI7S9970C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9970C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15837C2  {
  ::S5266C19_nt s15837c2f0;
  int s15837c2f1;
  ::S5266C19_nt s15837c2f2;
  ::S5266C19_nt s15837c2f3;
  ::S5266C19_nt s15837c2f4;
  ::S21732C5_nt s15837c2f5;
  char s15837c2f6;
  void  mf15837c2(); // _ZN8S15837C29mf15837c2Ev
};
//SIG(-1 S15837C2) C1{ m FC2{ m Fp Fi FC3{ m}} Fi FC2 FC2 FC2 FC4{ m Fi[5]} Fc}


void  S15837C2 ::mf15837c2(){}

static void Test_S15837C2()
{
  {
    init_simple_test("S15837C2");
    S15837C2 lv;
    check2(sizeof(lv), ABISELECT(96,76), "sizeof(S15837C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15837C2)");
    check_field_offset(lv, s15837c2f0, 0, "S15837C2.s15837c2f0");
    check_field_offset(lv, s15837c2f1, ABISELECT(16,12), "S15837C2.s15837c2f1");
    check_field_offset(lv, s15837c2f2, ABISELECT(24,16), "S15837C2.s15837c2f2");
    check_field_offset(lv, s15837c2f3, ABISELECT(40,28), "S15837C2.s15837c2f3");
    check_field_offset(lv, s15837c2f4, ABISELECT(56,40), "S15837C2.s15837c2f4");
    check_field_offset(lv, s15837c2f5, ABISELECT(72,52), "S15837C2.s15837c2f5");
    check_field_offset(lv, s15837c2f6, ABISELECT(92,72), "S15837C2.s15837c2f6");
  }
}
static Arrange_To_Call_Me vS15837C2(Test_S15837C2, "S15837C2", ABISELECT(96,76));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15837C1  {
  ::S15837C2 s15837c1f0;
  int s15837c1f1;
  void  mf15837c1(); // _ZN8S15837C19mf15837c1Ev
};
//SIG(1 S15837C1) C1{ m FC2{ m FC3{ m Fp Fi FC4{ m}} Fi FC3 FC3 FC3 FC5{ m Fi[5]} Fc} Fi}


void  S15837C1 ::mf15837c1(){}

static void Test_S15837C1()
{
  {
    init_simple_test("S15837C1");
    S15837C1 lv;
    check2(sizeof(lv), ABISELECT(104,80), "sizeof(S15837C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15837C1)");
    check_field_offset(lv, s15837c1f0, 0, "S15837C1.s15837c1f0");
    check_field_offset(lv, s15837c1f1, ABISELECT(96,76), "S15837C1.s15837c1f1");
  }
}
static Arrange_To_Call_Me vS15837C1(Test_S15837C1, "S15837C1", ABISELECT(104,80));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19690C3  : S3589C3 {
  __tsi64 s19690c3f0;
  ::S3589C4 s19690c3f1;
  virtual  ~S19690C3(); // _ZN8S19690C3D1Ev
  S19690C3(); // tgen
};
//SIG(-1 S19690C3) C1{ BC2{ vd m Fc FU3{ m Fc[6]}} vd FL FU3}


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

static void Test_S19690C3()
{
  extern Class_Descriptor cd_S19690C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,8)];
    init_test(&cd_S19690C3, buf);
    S19690C3 *dp, &lv = *(dp=new (buf) S19690C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S19690C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19690C3)");
    check_base_class_offset(lv, (S3589C3*), 0, "S19690C3");
    check_field_offset(lv, s19690c3f0, ABISELECT(16,12), "S19690C3.s19690c3f0");
    check_field_offset(lv, s19690c3f1, ABISELECT(24,20), "S19690C3.s19690c3f1");
    test_class_info(&lv, &cd_S19690C3);
    dp->~S19690C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19690C3(Test_S19690C3, "S19690C3", ABISELECT(32,28));

#else // __cplusplus

extern void _ZN8S19690C3C1Ev();
extern void _ZN8S19690C3D1Ev();
Name_Map name_map_S19690C3[] = {
  NSPAIR(_ZN8S19690C3C1Ev),
  NSPAIR(_ZN8S19690C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
static Base_Class bases_S19690C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S19690C3[];
extern void _ZN8S19690C3D1Ev();
extern void _ZN8S19690C3D0Ev();
static  VTBL_ENTRY vtc_S19690C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19690C3[0]),
  (VTBL_ENTRY)&_ZN8S19690C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19690C3D0Ev,
};
extern VTBL_ENTRY _ZTI8S19690C3[];
extern  VTBL_ENTRY _ZTV8S19690C3[];
Class_Descriptor cd_S19690C3 = {  "S19690C3", // class name
  bases_S19690C3, 1,
  &(vtc_S19690C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,28), // object size
  NSPAIRA(_ZTI8S19690C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19690C3),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  S19690C1  : virtual S3589C13_nt , virtual S19690C3 {
  void *s19690c1f0;
  __tsi64 s19690c1f1;
  virtual  ~S19690C1(); // _ZN8S19690C1D2Ev
  S19690C1(); // tgen
};
//SIG(1 S19690C1) C1{ VBC2{ m FD} VBC3{ BC4{ vd m Fc FU5{ m Fc[6]}} vd FL FU5} vd Fp FL}


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

static void Test_S19690C1()
{
  extern Class_Descriptor cd_S19690C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,15)];
    init_test(&cd_S19690C1, buf);
    S19690C1 *dp, &lv = *(dp=new (buf) S19690C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S19690C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19690C1)");
    check_base_class_offset(lv, (S3589C13_nt*), ABISELECT(32,16), "S19690C1");
    check_base_class_offset(lv, (S3589C3*)(S19690C3*), ABISELECT(48,28), "S19690C1");
    check_base_class_offset(lv, (S19690C3*), ABISELECT(48,28), "S19690C1");
    check_field_offset(lv, s19690c1f0, ABISELECT(8,4), "S19690C1.s19690c1f0");
    check_field_offset(lv, s19690c1f1, ABISELECT(16,8), "S19690C1.s19690c1f1");
    test_class_info(&lv, &cd_S19690C1);
    dp->~S19690C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19690C1(Test_S19690C1, "S19690C1", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN8S19690C1C1Ev();
extern void _ZN8S19690C1D2Ev();
Name_Map name_map_S19690C1[] = {
  NSPAIR(_ZN8S19690C1C1Ev),
  NSPAIR(_ZN8S19690C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C13_nt;
extern VTBL_ENTRY _ZTI11S3589C13_nt[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S19690C3;
extern VTBL_ENTRY _ZTI8S19690C3[];
extern  VTBL_ENTRY _ZTV8S19690C3[];
static Base_Class bases_S19690C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C13_nt,    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
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3589C3,    ABISELECT(48,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
    2, //immediately_derived
  0, 0},
  {&cd_S19690C3,    ABISELECT(48,28), //bcp->offset
    6, //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 _ZTI8S19690C1[];
extern void _ZN8S19690C1D1Ev();
extern void _ZN8S19690C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19690C1D1Ev,_ZTv0_n12_N8S19690C1D1Ev)();
extern void ABISELECT(_ZThn48_N8S19690C1D1Ev,_ZThn28_N8S19690C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19690C1D0Ev,_ZTv0_n12_N8S19690C1D0Ev)();
extern void ABISELECT(_ZThn48_N8S19690C1D0Ev,_ZThn28_N8S19690C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19690C1[] = {
  ABISELECT(48,28),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19690C1[0]),
  (VTBL_ENTRY)&_ZN8S19690C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19690C1D0Ev,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19690C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19690C1D1Ev,_ZTv0_n12_N8S19690C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19690C1D0Ev,_ZTv0_n12_N8S19690C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19690C1[];
static  VTT_ENTRY vtt_S19690C1[] = {
  {&(_ZTV8S19690C1[4]),  4,11},
  {&(_ZTV8S19690C1[9]),  9,11},
};
extern VTBL_ENTRY _ZTI8S19690C1[];
extern  VTBL_ENTRY _ZTV8S19690C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19690C1[];
static VTBL_ENTRY alt_thunk_names128[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19690C1D0Ev,_ZTv0_n12_N8S19690C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19690C1D0Ev,_ZThn28_N8S19690C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19690C1D1Ev,_ZTv0_n12_N8S19690C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19690C1D1Ev,_ZThn28_N8S19690C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19690C1 = {  "S19690C1", // class name
  bases_S19690C1, 3,
  &(vtc_S19690C1[0]), // expected_vtbl_contents
  &(vtt_S19690C1[0]), // expected_vtt_contents
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI8S19690C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19690C1),11, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19690C1),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names128,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7367C3  : S3589C3 {
  __tsi64 s7367c3f0;
  ::S3589C4 s7367c3f1;
  virtual  ~S7367C3(); // _ZN7S7367C3D1Ev
  S7367C3(); // tgen
};
//SIG(-1 S7367C3) C1{ BC2{ vd m Fc FU3{ m Fc[6]}} vd FL FU3}


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

static void Test_S7367C3()
{
  extern Class_Descriptor cd_S7367C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,8)];
    init_test(&cd_S7367C3, buf);
    S7367C3 *dp, &lv = *(dp=new (buf) S7367C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S7367C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7367C3)");
    check_base_class_offset(lv, (S3589C3*), 0, "S7367C3");
    check_field_offset(lv, s7367c3f0, ABISELECT(16,12), "S7367C3.s7367c3f0");
    check_field_offset(lv, s7367c3f1, ABISELECT(24,20), "S7367C3.s7367c3f1");
    test_class_info(&lv, &cd_S7367C3);
    dp->~S7367C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7367C3(Test_S7367C3, "S7367C3", ABISELECT(32,28));

#else // __cplusplus

extern void _ZN7S7367C3C1Ev();
extern void _ZN7S7367C3D1Ev();
Name_Map name_map_S7367C3[] = {
  NSPAIR(_ZN7S7367C3C1Ev),
  NSPAIR(_ZN7S7367C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
static Base_Class bases_S7367C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S7367C3[];
extern void _ZN7S7367C3D1Ev();
extern void _ZN7S7367C3D0Ev();
static  VTBL_ENTRY vtc_S7367C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7367C3[0]),
  (VTBL_ENTRY)&_ZN7S7367C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7367C3D0Ev,
};
extern VTBL_ENTRY _ZTI7S7367C3[];
extern  VTBL_ENTRY _ZTV7S7367C3[];
Class_Descriptor cd_S7367C3 = {  "S7367C3", // class name
  bases_S7367C3, 1,
  &(vtc_S7367C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,28), // object size
  NSPAIRA(_ZTI7S7367C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7367C3),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  S7367C2  : virtual S7367C3 , virtual S3589C3 {
  virtual  ~S7367C2(); // _ZN7S7367C2D2Ev
  S7367C2(); // tgen
};
//SIG(-1 S7367C2) C1{ VBC2{ BC3{ vd m Fc FU4{ m Fc[6]}} vd FL FU4} VBC3 vd}


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

static void Test_S7367C2()
{
  extern Class_Descriptor cd_S7367C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S7367C2, buf);
    S7367C2 *dp, &lv = *(dp=new (buf) S7367C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S7367C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7367C2)");
    check_base_class_offset(lv, (S3589C3*)(S7367C3*), ABISELECT(8,4), "S7367C2");
    check_base_class_offset(lv, (S7367C3*), ABISELECT(8,4), "S7367C2");
    /*is_ambiguous_... S7367C2::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*), ABISELECT(40,32), "S7367C2");
    test_class_info(&lv, &cd_S7367C2);
    dp->~S7367C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7367C2(Test_S7367C2, "S7367C2", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN7S7367C2C1Ev();
extern void _ZN7S7367C2D2Ev();
Name_Map name_map_S7367C2[] = {
  NSPAIR(_ZN7S7367C2C1Ev),
  NSPAIR(_ZN7S7367C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S7367C3;
extern VTBL_ENTRY _ZTI7S7367C3[];
extern  VTBL_ENTRY _ZTV7S7367C3[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
static Base_Class bases_S7367C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    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_S7367C3,    ABISELECT(8,4), //bcp->offset
    6, //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},
  {&cd_S3589C3,    ABISELECT(40,32), //bcp->offset
    11, //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 _ZTI7S7367C2[];
extern void _ZN7S7367C2D1Ev();
extern void _ZN7S7367C2D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7367C2D1Ev,_ZTv0_n12_N7S7367C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7367C2D1Ev,_ZThn4_N7S7367C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7367C2D0Ev,_ZTv0_n12_N7S7367C2D0Ev)();
extern void ABISELECT(_ZThn8_N7S7367C2D0Ev,_ZThn4_N7S7367C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7367C2D1Ev,_ZTv0_n12_N7S7367C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S7367C2D1Ev,_ZThn32_N7S7367C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7367C2D0Ev,_ZTv0_n12_N7S7367C2D0Ev)();
extern void ABISELECT(_ZThn40_N7S7367C2D0Ev,_ZThn32_N7S7367C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7367C2[] = {
  ABISELECT(40,32),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7367C2[0]),
  (VTBL_ENTRY)&_ZN7S7367C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7367C2D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7367C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7367C2D1Ev,_ZTv0_n12_N7S7367C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7367C2D0Ev,_ZTv0_n12_N7S7367C2D0Ev),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S7367C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7367C2D1Ev,_ZTv0_n12_N7S7367C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7367C2D0Ev,_ZTv0_n12_N7S7367C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S7367C2[];
static  VTT_ENTRY vtt_S7367C2[] = {
  {&(_ZTV7S7367C2[4]),  4,16},
  {&(_ZTV7S7367C2[9]),  9,16},
  {&(_ZTV7S7367C2[14]),  14,16},
};
extern VTBL_ENTRY _ZTI7S7367C2[];
extern  VTBL_ENTRY _ZTV7S7367C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7367C2[];
static VTBL_ENTRY alt_thunk_names129[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7367C2D0Ev,_ZTv0_n12_N7S7367C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7367C2D0Ev,_ZThn32_N7S7367C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7367C2D0Ev,_ZThn4_N7S7367C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7367C2D1Ev,_ZTv0_n12_N7S7367C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7367C2D1Ev,_ZThn32_N7S7367C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7367C2D1Ev,_ZThn4_N7S7367C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7367C2 = {  "S7367C2", // class name
  bases_S7367C2, 3,
  &(vtc_S7367C2[0]), // expected_vtbl_contents
  &(vtt_S7367C2[0]), // expected_vtt_contents
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI7S7367C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7367C2),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7367C2),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names129,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7367C1  : S7367C2 {
  int s7367c1f0;
  virtual  ~S7367C1(); // _ZN7S7367C1D2Ev
  S7367C1(); // tgen
};
//SIG(1 S7367C1) C1{ BC2{ VBC3{ BC4{ vd m Fc FU5{ m Fc[6]}} vd FL FU5} VBC4 vd} vd Fi}


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

static void Test_S7367C1()
{
  extern Class_Descriptor cd_S7367C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S7367C1, buf);
    S7367C1 *dp, &lv = *(dp=new (buf) S7367C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S7367C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7367C1)");
    check_base_class_offset(lv, (S3589C3*)(S7367C3*), ABISELECT(16,8), "S7367C1");
    check_base_class_offset(lv, (S7367C3*)(S7367C2*), ABISELECT(16,8), "S7367C1");
    /*is_ambiguous_... S7367C2::S3589C3 */ AMB_check_base_class_offset(lv, (S3589C3*)(S7367C2*), ABISELECT(48,36), "S7367C1");
    check_base_class_offset(lv, (S7367C2*), 0, "S7367C1");
    check_field_offset(lv, s7367c1f0, ABISELECT(8,4), "S7367C1.s7367c1f0");
    test_class_info(&lv, &cd_S7367C1);
    dp->~S7367C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7367C1(Test_S7367C1, "S7367C1", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN7S7367C1C1Ev();
extern void _ZN7S7367C1D2Ev();
Name_Map name_map_S7367C1[] = {
  NSPAIR(_ZN7S7367C1C1Ev),
  NSPAIR(_ZN7S7367C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S7367C3;
extern VTBL_ENTRY _ZTI7S7367C3[];
extern  VTBL_ENTRY _ZTV7S7367C3[];
extern Class_Descriptor cd_S3589C3;
extern VTBL_ENTRY _ZTI7S3589C3[];
extern  VTBL_ENTRY _ZTV7S3589C3[];
extern Class_Descriptor cd_S7367C2;
extern VTBL_ENTRY _ZTI7S7367C2[];
extern  VTBL_ENTRY _ZTV7S7367C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7367C2[];
static Base_Class bases_S7367C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3589C3,    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
  0, 0},
  {&cd_S7367C3,    ABISELECT(16,8), //bcp->offset
    6, //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
    3, //immediately_derived
  0, 1},
  {&cd_S3589C3,    ABISELECT(48,36), //bcp->offset
    11, //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
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7367C2,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7367C1[];
extern void _ZN7S7367C1D1Ev();
extern void _ZN7S7367C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7367C1D1Ev,_ZTv0_n12_N7S7367C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S7367C1D1Ev,_ZThn8_N7S7367C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7367C1D0Ev,_ZTv0_n12_N7S7367C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S7367C1D0Ev,_ZThn8_N7S7367C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7367C1D1Ev,_ZTv0_n12_N7S7367C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S7367C1D1Ev,_ZThn36_N7S7367C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7367C1D0Ev,_ZTv0_n12_N7S7367C1D0Ev)();
extern void ABISELECT(_ZThn48_N7S7367C1D0Ev,_ZThn36_N7S7367C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7367C1[] = {
  ABISELECT(48,36),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7367C1[0]),
  (VTBL_ENTRY)&_ZN7S7367C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7367C1D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7367C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7367C1D1Ev,_ZTv0_n12_N7S7367C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7367C1D0Ev,_ZTv0_n12_N7S7367C1D0Ev),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7367C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7367C1D1Ev,_ZTv0_n12_N7S7367C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7367C1D0Ev,_ZTv0_n12_N7S7367C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7367C1[];
extern void _ZN7S7367C2D1Ev();
extern void _ZN7S7367C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7367C2__7S7367C1[] = {
  ABISELECT(48,36),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7367C2[0]),
  (VTBL_ENTRY)&_ZN7S7367C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7367C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7367C2D1Ev,_ZTv0_n12_N7S7367C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S7367C2D1Ev,_ZThn8_N7S7367C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7367C2D0Ev,_ZTv0_n12_N7S7367C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S7367C2D0Ev,_ZThn8_N7S7367C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7367C3__7S7367C2__7S7367C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7367C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7367C2D1Ev,_ZTv0_n12_N7S7367C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7367C2D0Ev,_ZTv0_n12_N7S7367C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7367C2D1Ev,_ZTv0_n12_N7S7367C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S7367C2D1Ev,_ZThn36_N7S7367C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7367C2D0Ev,_ZTv0_n12_N7S7367C2D0Ev)();
extern void ABISELECT(_ZThn48_N7S7367C2D0Ev,_ZThn36_N7S7367C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3589C3__A1__7S7367C2__7S7367C1[] = {
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7367C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7367C2D1Ev,_ZTv0_n12_N7S7367C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7367C2D0Ev,_ZTv0_n12_N7S7367C2D0Ev),
};
static  VTT_ENTRY vtt_S7367C1[] = {
  {&(_ZTV7S7367C1[4]),  4,16},
  {&(_tg__ZTV7S7367C2__7S7367C1[4]),  4,6},
  {&(_tg__ZTV7S7367C3__7S7367C2__7S7367C1[3]),  3,5},
  {&(_tg__ZTV7S3589C3__A1__7S7367C2__7S7367C1[3]),  3,5},
  {&(_ZTV7S7367C1[9]),  9,16},
  {&(_ZTV7S7367C1[14]),  14,16},
};
extern VTBL_ENTRY _ZTI7S7367C1[];
extern  VTBL_ENTRY _ZTV7S7367C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7367C1[];
static VTBL_ENTRY alt_thunk_names130[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7367C2D0Ev,_ZTv0_n12_N7S7367C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7367C2D0Ev,_ZThn36_N7S7367C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7367C2D0Ev,_ZThn8_N7S7367C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7367C2D1Ev,_ZTv0_n12_N7S7367C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7367C2D1Ev,_ZThn36_N7S7367C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7367C2D1Ev,_ZThn8_N7S7367C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7367C1D0Ev,_ZTv0_n12_N7S7367C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7367C1D0Ev,_ZThn36_N7S7367C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7367C1D0Ev,_ZThn8_N7S7367C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7367C1D1Ev,_ZTv0_n12_N7S7367C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7367C1D1Ev,_ZThn36_N7S7367C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7367C1D1Ev,_ZThn8_N7S7367C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7367C1 = {  "S7367C1", // class name
  bases_S7367C1, 4,
  &(vtc_S7367C1[0]), // expected_vtbl_contents
  &(vtt_S7367C1[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI7S7367C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7367C1),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7367C1),6, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names130,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17467C1  {
  void *s17467c1f0;
  char s17467c1f1[2];
  int s17467c1f2[3];
  ::S5266C19_nt s17467c1f3;
  char s17467c1f4;
  int s17467c1f5;
  void *s17467c1f6;
  char s17467c1f7[2];
  void *s17467c1f8;
  char s17467c1f9;
  void  mf17467c1(); // _ZN8S17467C19mf17467c1Ev
};
//SIG(1 S17467C1) C1{ m Fp Fc[2] Fi[3] FC2{ m Fp Fi FC3{ m}} Fc Fi Fp Fc[2] Fp Fc}


void  S17467C1 ::mf17467c1(){}

static void Test_S17467C1()
{
  {
    init_simple_test("S17467C1");
    S17467C1 lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S17467C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17467C1)");
    check_field_offset(lv, s17467c1f0, 0, "S17467C1.s17467c1f0");
    check_field_offset(lv, s17467c1f1, ABISELECT(8,4), "S17467C1.s17467c1f1");
    check_field_offset(lv, s17467c1f2, ABISELECT(12,8), "S17467C1.s17467c1f2");
    check_field_offset(lv, s17467c1f3, ABISELECT(24,20), "S17467C1.s17467c1f3");
    check_field_offset(lv, s17467c1f4, ABISELECT(40,32), "S17467C1.s17467c1f4");
    check_field_offset(lv, s17467c1f5, ABISELECT(44,36), "S17467C1.s17467c1f5");
    check_field_offset(lv, s17467c1f6, ABISELECT(48,40), "S17467C1.s17467c1f6");
    check_field_offset(lv, s17467c1f7, ABISELECT(56,44), "S17467C1.s17467c1f7");
    check_field_offset(lv, s17467c1f8, ABISELECT(64,48), "S17467C1.s17467c1f8");
    check_field_offset(lv, s17467c1f9, ABISELECT(72,52), "S17467C1.s17467c1f9");
  }
}
static Arrange_To_Call_Me vS17467C1(Test_S17467C1, "S17467C1", ABISELECT(80,56));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9344C2  {
  ::S5266C19_nt s9344c2f0;
  int s9344c2f1[2];
  char s9344c2f2;
  virtual  ~S9344C2(); // _ZN7S9344C2D1Ev
  virtual void  v3(); // _ZN7S9344C22v3Ev
  virtual void  v4(); // _ZN7S9344C22v4Ev
  virtual void  v5(); // _ZN7S9344C22v5Ev
  S9344C2(); // tgen
};
//SIG(-1 S9344C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9344C2 ::~S9344C2(){ note_dtor("S9344C2", this);}
void  S9344C2 ::v3(){vfunc_called(this, "_ZN7S9344C22v3Ev");}
void  S9344C2 ::v4(){vfunc_called(this, "_ZN7S9344C22v4Ev");}
void  S9344C2 ::v5(){vfunc_called(this, "_ZN7S9344C22v5Ev");}
S9344C2 ::S9344C2(){ note_ctor("S9344C2", this);} // tgen

static void Test_S9344C2()
{
  extern Class_Descriptor cd_S9344C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9344C2, buf);
    S9344C2 *dp, &lv = *(dp=new (buf) S9344C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9344C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9344C2)");
    check_field_offset(lv, s9344c2f0, ABISELECT(8,4), "S9344C2.s9344c2f0");
    check_field_offset(lv, s9344c2f1, ABISELECT(24,16), "S9344C2.s9344c2f1");
    check_field_offset(lv, s9344c2f2, ABISELECT(32,24), "S9344C2.s9344c2f2");
    test_class_info(&lv, &cd_S9344C2);
    dp->~S9344C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9344C2(Test_S9344C2, "S9344C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9344C2C1Ev();
extern void _ZN7S9344C2D1Ev();
Name_Map name_map_S9344C2[] = {
  NSPAIR(_ZN7S9344C2C1Ev),
  NSPAIR(_ZN7S9344C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9344C2[];
extern void _ZN7S9344C2D1Ev();
extern void _ZN7S9344C2D0Ev();
extern void _ZN7S9344C22v3Ev();
extern void _ZN7S9344C22v4Ev();
extern void _ZN7S9344C22v5Ev();
static  VTBL_ENTRY vtc_S9344C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9344C2[0]),
  (VTBL_ENTRY)&_ZN7S9344C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9344C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9344C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9344C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9344C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9344C2[];
extern  VTBL_ENTRY _ZTV7S9344C2[];
Class_Descriptor cd_S9344C2 = {  "S9344C2", // class name
  0,0,//no base classes
  &(vtc_S9344C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9344C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9344C2),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  S9344C1  : S9344C2 {
  __tsi64 s9344c1f0;
  virtual  ~S9344C1(); // _ZN7S9344C1D1Ev
  virtual void  v1(); // _ZN7S9344C12v1Ev
  virtual void  v2(); // _ZN7S9344C12v2Ev
  S9344C1(); // tgen
};
//SIG(1 S9344C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 FL}


 S9344C1 ::~S9344C1(){ note_dtor("S9344C1", this);}
void  S9344C1 ::v1(){vfunc_called(this, "_ZN7S9344C12v1Ev");}
void  S9344C1 ::v2(){vfunc_called(this, "_ZN7S9344C12v2Ev");}
S9344C1 ::S9344C1(){ note_ctor("S9344C1", this);} // tgen

static void Test_S9344C1()
{
  extern Class_Descriptor cd_S9344C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S9344C1, buf);
    S9344C1 *dp, &lv = *(dp=new (buf) S9344C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S9344C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9344C1)");
    check_base_class_offset(lv, (S9344C2*), 0, "S9344C1");
    check_field_offset(lv, s9344c1f0, ABISELECT(40,28), "S9344C1.s9344c1f0");
    test_class_info(&lv, &cd_S9344C1);
    dp->~S9344C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9344C1(Test_S9344C1, "S9344C1", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN7S9344C1C1Ev();
extern void _ZN7S9344C1D1Ev();
Name_Map name_map_S9344C1[] = {
  NSPAIR(_ZN7S9344C1C1Ev),
  NSPAIR(_ZN7S9344C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9344C2;
extern VTBL_ENTRY _ZTI7S9344C2[];
extern  VTBL_ENTRY _ZTV7S9344C2[];
static Base_Class bases_S9344C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9344C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S9344C1[];
extern void _ZN7S9344C1D1Ev();
extern void _ZN7S9344C1D0Ev();
extern void _ZN7S9344C22v3Ev();
extern void _ZN7S9344C22v4Ev();
extern void _ZN7S9344C22v5Ev();
extern void _ZN7S9344C12v1Ev();
extern void _ZN7S9344C12v2Ev();
static  VTBL_ENTRY vtc_S9344C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9344C1[0]),
  (VTBL_ENTRY)&_ZN7S9344C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9344C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9344C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9344C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9344C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9344C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9344C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9344C1[];
extern  VTBL_ENTRY _ZTV7S9344C1[];
Class_Descriptor cd_S9344C1 = {  "S9344C1", // class name
  bases_S9344C1, 1,
  &(vtc_S9344C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI7S9344C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9344C1),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  S15804C4_nt  {
  ::S5266C13_nt s15804c4f0;
  void  mf15804c4(); // _ZN11S15804C4_nt9mf15804c4Ev
};
//SIG(-1 S15804C4_nt) C1{ m FC2{ m FL[2]}}


void  S15804C4_nt ::mf15804c4(){}

//skip512 S15804C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15804C1  {
  ::S5266C12_nt s15804c1f0;
  ::S5266C12_nt s15804c1f1;
  ::S5266C12_nt s15804c1f2;
  ::S15804C4_nt s15804c1f3;
  char s15804c1f4;
  int s15804c1f5;
  void  mf15804c1(); // _ZN8S15804C19mf15804c1Ev
};
//SIG(1 S15804C1) C1{ m FC2{ m FC3{ m FL[2]}} FC2 FC2 FC4{ m FC3} Fc Fi}


void  S15804C1 ::mf15804c1(){}

static void Test_S15804C1()
{
  {
    init_simple_test("S15804C1");
    S15804C1 lv;
    check2(sizeof(lv), 72, "sizeof(S15804C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15804C1)");
    check_field_offset(lv, s15804c1f0, 0, "S15804C1.s15804c1f0");
    check_field_offset(lv, s15804c1f1, 16, "S15804C1.s15804c1f1");
    check_field_offset(lv, s15804c1f2, 32, "S15804C1.s15804c1f2");
    check_field_offset(lv, s15804c1f3, 48, "S15804C1.s15804c1f3");
    check_field_offset(lv, s15804c1f4, 64, "S15804C1.s15804c1f4");
    check_field_offset(lv, s15804c1f5, 68, "S15804C1.s15804c1f5");
  }
}
static Arrange_To_Call_Me vS15804C1(Test_S15804C1, "S15804C1", 72);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17233C4  {
  void *s17233c4f0;
  int s17233c4f1;
  virtual  ~S17233C4(); // _ZN8S17233C4D1Ev
  virtual void  v2(); // _ZN8S17233C42v2Ev
  S17233C4(); // tgen
};
//SIG(-1 S17233C4) C1{ vd v1 Fp Fi}


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

static void Test_S17233C4()
{
  extern Class_Descriptor cd_S17233C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S17233C4, buf);
    S17233C4 *dp, &lv = *(dp=new (buf) S17233C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S17233C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17233C4)");
    check_field_offset(lv, s17233c4f0, ABISELECT(8,4), "S17233C4.s17233c4f0");
    check_field_offset(lv, s17233c4f1, ABISELECT(16,8), "S17233C4.s17233c4f1");
    test_class_info(&lv, &cd_S17233C4);
    dp->~S17233C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS17233C4(Test_S17233C4, "S17233C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S17233C4C1Ev();
extern void _ZN8S17233C4D1Ev();
Name_Map name_map_S17233C4[] = {
  NSPAIR(_ZN8S17233C4C1Ev),
  NSPAIR(_ZN8S17233C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S17233C4[];
extern void _ZN8S17233C4D1Ev();
extern void _ZN8S17233C4D0Ev();
extern void _ZN8S17233C42v2Ev();
static  VTBL_ENTRY vtc_S17233C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S17233C4[0]),
  (VTBL_ENTRY)&_ZN8S17233C4D1Ev,
  (VTBL_ENTRY)&_ZN8S17233C4D0Ev,
  (VTBL_ENTRY)&_ZN8S17233C42v2Ev,
};
extern VTBL_ENTRY _ZTI8S17233C4[];
extern  VTBL_ENTRY _ZTV8S17233C4[];
Class_Descriptor cd_S17233C4 = {  "S17233C4", // class name
  0,0,//no base classes
  &(vtc_S17233C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S17233C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S17233C4),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  S17233C3_nt  : S17233C4 {
  void *s17233c3f0;
  virtual void  v1(); // _ZN11S17233C3_nt2v1Ev
  ~S17233C3_nt(); // tgen
  S17233C3_nt(); // tgen
};
//SIG(-1 S17233C3_nt) C1{ BC2{ vd v2 Fp Fi} v1 Fp}


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

//skip512 S17233C3_nt

#else // __cplusplus

extern void _ZN11S17233C3_ntC1Ev();
extern void _ZN11S17233C3_ntD1Ev();
Name_Map name_map_S17233C3_nt[] = {
  NSPAIR(_ZN11S17233C3_ntC1Ev),
  NSPAIR(_ZN11S17233C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S17233C4;
extern VTBL_ENTRY _ZTI8S17233C4[];
extern  VTBL_ENTRY _ZTV8S17233C4[];
static Base_Class bases_S17233C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17233C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI11S17233C3_nt[];
extern void _ZN11S17233C3_ntD1Ev();
extern void _ZN11S17233C3_ntD0Ev();
extern void _ZN8S17233C42v2Ev();
extern void _ZN11S17233C3_nt2v1Ev();
static  VTBL_ENTRY vtc_S17233C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S17233C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S17233C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S17233C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN8S17233C42v2Ev,
  (VTBL_ENTRY)&_ZN11S17233C3_nt2v1Ev,
};
extern VTBL_ENTRY _ZTI11S17233C3_nt[];
VTBL_ENTRY *P__ZTI11S17233C3_nt = _ZTI11S17233C3_nt; 
extern  VTBL_ENTRY _ZTV11S17233C3_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17233C1  {
  int s17233c1f0[4];
  ::S17777C6_nt s17233c1f1;
  void *s17233c1f2;
  int s17233c1f3[2];
  ::S17233C3_nt s17233c1f4;
  void  mf17233c1(); // _ZN8S17233C19mf17233c1Ev
};
//SIG(1 S17233C1) C1{ m Fi[4] FC2{ m Fp} Fp Fi[2] FC3{ BC4{ vd v2 Fp Fi} v1 Fp}}


void  S17233C1 ::mf17233c1(){}

static void Test_S17233C1()
{
  {
    init_simple_test("S17233C1");
    S17233C1 lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S17233C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17233C1)");
    check_field_offset(lv, s17233c1f0, 0, "S17233C1.s17233c1f0");
    check_field_offset(lv, s17233c1f1, 16, "S17233C1.s17233c1f1");
    check_field_offset(lv, s17233c1f2, ABISELECT(24,20), "S17233C1.s17233c1f2");
    check_field_offset(lv, s17233c1f3, ABISELECT(32,24), "S17233C1.s17233c1f3");
    check_field_offset(lv, s17233c1f4, ABISELECT(40,32), "S17233C1.s17233c1f4");
  }
}
static Arrange_To_Call_Me vS17233C1(Test_S17233C1, "S17233C1", ABISELECT(72,48));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16070C1  {
  ::S79C23_nt s16070c1f0;
  ::S79C44 s16070c1f1;
  ::S79C40 s16070c1f2;
  void  mf16070c1(); // _ZN8S16070C19mf16070c1Ev
};
//SIG(1 S16070C1) C1{ m FC2{ m Fi[4]} FC3{ BC4{ BC5{ m Fp Fi[2]}}} FC6{ BC7{ BC5}}}


void  S16070C1 ::mf16070c1(){}

static void Test_S16070C1()
{
  {
    init_simple_test("S16070C1");
    S16070C1 lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S16070C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16070C1)");
    check_field_offset(lv, s16070c1f0, 0, "S16070C1.s16070c1f0");
    check_field_offset(lv, s16070c1f1, 16, "S16070C1.s16070c1f1");
    check_field_offset(lv, s16070c1f2, ABISELECT(32,28), "S16070C1.s16070c1f2");
  }
}
static Arrange_To_Call_Me vS16070C1(Test_S16070C1, "S16070C1", ABISELECT(48,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19019C3  : S5266C29 , S7719C4_nt {
};
//SIG(-1 S19019C3) C1{ BC2{ m} BC3{ m Fc}}



static void Test_S19019C3()
{
  extern Class_Descriptor cd_S19019C3;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S19019C3, buf);
    S19019C3 &lv = *(new (buf) S19019C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S19019C3)");
    check2(__alignof__(lv), 1, "__alignof__(S19019C3)");
    check_base_class_offset(lv, (S5266C29*), 0, "S19019C3");
    check_base_class_offset(lv, (S7719C4_nt*), 0, "S19019C3");
    test_class_info(&lv, &cd_S19019C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19019C3(Test_S19019C3, "S19019C3", 1);

#else // __cplusplus

extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
static Base_Class bases_S19019C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7719C4_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 _ZTI8S19019C3[];
Class_Descriptor cd_S19019C3 = {  "S19019C3", // class name
  bases_S19019C3, 2,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S19019C3),ABISELECT(56,32), //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  S19019C6  : S7719C4_nt , S5266C29 , virtual S5266C26 {
  ~S19019C6(); // tgen
  S19019C6(); // tgen
};
//SIG(-1 S19019C6) C1{ BC2{ m Fc} BC3{ m} VBC4{ m}}


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

static void Test_S19019C6()
{
  extern Class_Descriptor cd_S19019C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19019C6, buf);
    S19019C6 *dp, &lv = *(dp=new (buf) S19019C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19019C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19019C6)");
    check_base_class_offset(lv, (S7719C4_nt*), ABISELECT(8,4), "S19019C6");
    check_base_class_offset(lv, (S5266C29*), 0, "S19019C6");
    check_base_class_offset(lv, (S5266C26*), 0, "S19019C6");
    test_class_info(&lv, &cd_S19019C6);
    dp->~S19019C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19019C6(Test_S19019C6, "S19019C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19019C6C1Ev();
extern void _ZN8S19019C6D1Ev();
Name_Map name_map_S19019C6[] = {
  NSPAIR(_ZN8S19019C6C1Ev),
  NSPAIR(_ZN8S19019C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
static Base_Class bases_S19019C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7719C4_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, 0},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S19019C6[];
static  VTBL_ENTRY vtc_S19019C6[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19019C6[0]),
};
extern VTBL_ENTRY _ZTV8S19019C6[];
static  VTT_ENTRY vtt_S19019C6[] = {
  {&(_ZTV8S19019C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19019C6[];
extern  VTBL_ENTRY _ZTV8S19019C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19019C6[];
Class_Descriptor cd_S19019C6 = {  "S19019C6", // class name
  bases_S19019C6, 3,
  &(vtc_S19019C6[0]), // expected_vtbl_contents
  &(vtt_S19019C6[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19019C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19019C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19019C6),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  S19019C2  : S19019C3 , S5266C29 , S19019C6 {
  __tsi64 s19019c2f0;
  ~S19019C2(); // tgen
  S19019C2(); // tgen
};
//SIG(-1 S19019C2) C1{ BC2{ BC3{ m} BC4{ m Fc}} BC3 BC5{ BC4 BC3 VBC6{ m}} FL}


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

static void Test_S19019C2()
{
  extern Class_Descriptor cd_S19019C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S19019C2, buf);
    S19019C2 *dp, &lv = *(dp=new (buf) S19019C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S19019C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19019C2)");
    check_base_class_offset(lv, (S5266C29*)(S19019C3*), ABISELECT(9,5), "S19019C2");
    check_base_class_offset(lv, (S7719C4_nt*)(S19019C3*), ABISELECT(9,5), "S19019C2");
    check_base_class_offset(lv, (S19019C3*), ABISELECT(9,5), "S19019C2");
    /*is_ambiguous_... S19019C2::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*), ABISELECT(10,6), "S19019C2");
    check_base_class_offset(lv, (S7719C4_nt*)(S19019C6*), ABISELECT(8,4), "S19019C2");
    check_base_class_offset(lv, (S5266C29*)(S19019C6*), 0, "S19019C2");
    check_base_class_offset(lv, (S5266C26*)(S19019C6*), 0, "S19019C2");
    check_base_class_offset(lv, (S19019C6*), 0, "S19019C2");
    check_field_offset(lv, s19019c2f0, ABISELECT(16,8), "S19019C2.s19019c2f0");
    test_class_info(&lv, &cd_S19019C2);
    dp->~S19019C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19019C2(Test_S19019C2, "S19019C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S19019C2C1Ev();
extern void _ZN8S19019C2D1Ev();
Name_Map name_map_S19019C2[] = {
  NSPAIR(_ZN8S19019C2C1Ev),
  NSPAIR(_ZN8S19019C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S19019C3;
extern VTBL_ENTRY _ZTI8S19019C3[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S19019C6;
extern VTBL_ENTRY _ZTI8S19019C6[];
extern  VTBL_ENTRY _ZTV8S19019C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19019C6[];
static Base_Class bases_S19019C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19019C3,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5266C29,    ABISELECT(10,6), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7719C4_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
    7, //immediately_derived
  0, 0},
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19019C6,    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 _ZTI8S19019C2[];
static  VTBL_ENTRY vtc_S19019C2[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19019C2[0]),
};
extern VTBL_ENTRY _ZTV8S19019C2[];
static  VTBL_ENTRY _tg__ZTV8S19019C6__8S19019C2[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19019C6[0]),
};
static  VTT_ENTRY vtt_S19019C2[] = {
  {&(_ZTV8S19019C2[3]),  3,3},
  {&(_tg__ZTV8S19019C6__8S19019C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19019C2[];
extern  VTBL_ENTRY _ZTV8S19019C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19019C2[];
Class_Descriptor cd_S19019C2 = {  "S19019C2", // class name
  bases_S19019C2, 8,
  &(vtc_S19019C2[0]), // expected_vtbl_contents
  &(vtt_S19019C2[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S19019C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19019C2),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19019C2),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19019C1  : virtual S19019C2 {
  ~S19019C1(); // tgen
  S19019C1(); // tgen
};
//SIG(1 S19019C1) C1{ VBC2{ BC3{ BC4{ m} BC5{ m Fc}} BC4 BC6{ BC5 BC4 VBC7{ m}} FL}}


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

static void Test_S19019C1()
{
  extern Class_Descriptor cd_S19019C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19019C1, buf);
    S19019C1 *dp, &lv = *(dp=new (buf) S19019C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19019C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19019C1)");
    check_base_class_offset(lv, (S5266C29*)(S19019C3*)(S19019C2*), ABISELECT(17,9), "S19019C1");
    check_base_class_offset(lv, (S7719C4_nt*)(S19019C3*)(S19019C2*), ABISELECT(17,9), "S19019C1");
    check_base_class_offset(lv, (S19019C3*)(S19019C2*), ABISELECT(17,9), "S19019C1");
    /*is_ambiguous_... S19019C2::S5266C29 */ AMB_check_base_class_offset(lv, (S5266C29*)(S19019C2*), ABISELECT(18,10), "S19019C1");
    check_base_class_offset(lv, (S7719C4_nt*)(S19019C6*)(S19019C2*), ABISELECT(16,8), "S19019C1");
    check_base_class_offset(lv, (S5266C29*)(S19019C6*)(S19019C2*), ABISELECT(8,4), "S19019C1");
    check_base_class_offset(lv, (S5266C26*)(S19019C6*)(S19019C2*), 0, "S19019C1");
    check_base_class_offset(lv, (S19019C6*)(S19019C2*), ABISELECT(8,4), "S19019C1");
    check_base_class_offset(lv, (S19019C2*), ABISELECT(8,4), "S19019C1");
    test_class_info(&lv, &cd_S19019C1);
    dp->~S19019C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19019C1(Test_S19019C1, "S19019C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S19019C1C1Ev();
extern void _ZN8S19019C1D1Ev();
Name_Map name_map_S19019C1[] = {
  NSPAIR(_ZN8S19019C1C1Ev),
  NSPAIR(_ZN8S19019C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S19019C3;
extern VTBL_ENTRY _ZTI8S19019C3[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S5266C26;
extern VTBL_ENTRY _ZTI8S5266C26[];
extern Class_Descriptor cd_S19019C6;
extern VTBL_ENTRY _ZTI8S19019C6[];
extern  VTBL_ENTRY _ZTV8S19019C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19019C6[];
extern Class_Descriptor cd_S19019C2;
extern VTBL_ENTRY _ZTI8S19019C2[];
extern  VTBL_ENTRY _ZTV8S19019C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19019C2[];
static Base_Class bases_S19019C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    ABISELECT(17,9), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_nt,    ABISELECT(17,9), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19019C3,    ABISELECT(17,9), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5266C29,    ABISELECT(18,10), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7719C4_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
    7, //immediately_derived
  0, 0},
  {&cd_S5266C29,    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
    7, //immediately_derived
  0, 0},
  {&cd_S5266C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19019C6,    ABISELECT(8,4), //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
    1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19019C2,    ABISELECT(8,4), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19019C1[];
static  VTBL_ENTRY vtc_S19019C1[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19019C1[0]),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19019C1[0]),
};
extern VTBL_ENTRY _ZTV8S19019C1[];
static  VTBL_ENTRY _tg__ZTV8S19019C2__8S19019C1[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19019C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19019C68S19019C2__8S19019C1[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19019C6[0]),
};
static  VTT_ENTRY vtt_S19019C1[] = {
  {&(_ZTV8S19019C1[4]),  4,7},
  {&(_ZTV8S19019C1[7]),  7,7},
  {&(_tg__ZTV8S19019C2__8S19019C1[3]),  3,3},
  {&(_tg__ZTV8S19019C68S19019C2__8S19019C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19019C1[];
extern  VTBL_ENTRY _ZTV8S19019C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19019C1[];
Class_Descriptor cd_S19019C1 = {  "S19019C1", // class name
  bases_S19019C1, 9,
  &(vtc_S19019C1[0]), // expected_vtbl_contents
  &(vtt_S19019C1[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S19019C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19019C1),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19019C1),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  S17449C1  {
  void *s17449c1f0;
  char s17449c1f1;
  int s17449c1f2[2];
  ::S5266C19_nt s17449c1f3;
  int s17449c1f4;
  ::S3765C5_nt s17449c1f5;
  int s17449c1f6;
  void  mf17449c1(); // _ZN8S17449C19mf17449c1Ev
};
//SIG(1 S17449C1) C1{ m Fp Fc Fi[2] FC2{ m Fp Fi FC3{ m}} Fi FC4{ m Fp[2]} Fi}


void  S17449C1 ::mf17449c1(){}

static void Test_S17449C1()
{
  {
    init_simple_test("S17449C1");
    S17449C1 lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S17449C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17449C1)");
    check_field_offset(lv, s17449c1f0, 0, "S17449C1.s17449c1f0");
    check_field_offset(lv, s17449c1f1, ABISELECT(8,4), "S17449C1.s17449c1f1");
    check_field_offset(lv, s17449c1f2, ABISELECT(12,8), "S17449C1.s17449c1f2");
    check_field_offset(lv, s17449c1f3, ABISELECT(24,16), "S17449C1.s17449c1f3");
    check_field_offset(lv, s17449c1f4, ABISELECT(40,28), "S17449C1.s17449c1f4");
    check_field_offset(lv, s17449c1f5, ABISELECT(48,32), "S17449C1.s17449c1f5");
    check_field_offset(lv, s17449c1f6, ABISELECT(64,40), "S17449C1.s17449c1f6");
  }
}
static Arrange_To_Call_Me vS17449C1(Test_S17449C1, "S17449C1", ABISELECT(72,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20325C2_nt  {
  int s20325c2f0;
  virtual  ~S20325C2_nt(); // _ZN11S20325C2_ntD1Ev
  virtual void  v6(); // _ZN11S20325C2_nt2v6Ev
  virtual void  v7(); // _ZN11S20325C2_nt2v7Ev
  S20325C2_nt(); // tgen
};
//SIG(-1 S20325C2_nt) C1{ vd v1 v2 Fi}


 S20325C2_nt ::~S20325C2_nt(){ note_dtor("S20325C2_nt", this);}
void  S20325C2_nt ::v6(){vfunc_called(this, "_ZN11S20325C2_nt2v6Ev");}
void  S20325C2_nt ::v7(){vfunc_called(this, "_ZN11S20325C2_nt2v7Ev");}
S20325C2_nt ::S20325C2_nt(){ note_ctor("S20325C2_nt", this);} // tgen

//skip512 S20325C2_nt

#else // __cplusplus

extern void _ZN11S20325C2_ntC1Ev();
extern void _ZN11S20325C2_ntD1Ev();
Name_Map name_map_S20325C2_nt[] = {
  NSPAIR(_ZN11S20325C2_ntC1Ev),
  NSPAIR(_ZN11S20325C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20325C2_nt[];
extern void _ZN11S20325C2_ntD1Ev();
extern void _ZN11S20325C2_ntD0Ev();
extern void _ZN11S20325C2_nt2v6Ev();
extern void _ZN11S20325C2_nt2v7Ev();
static  VTBL_ENTRY vtc_S20325C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20325C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S20325C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20325C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S20325C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S20325C2_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI11S20325C2_nt[];
VTBL_ENTRY *P__ZTI11S20325C2_nt = _ZTI11S20325C2_nt; 
extern  VTBL_ENTRY _ZTV11S20325C2_nt[];
Class_Descriptor cd_S20325C2_nt = {  "S20325C2_nt", // class name
  0,0,//no base classes
  &(vtc_S20325C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI11S20325C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S20325C2_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

union  S20325C3  {
  long double s20325c3f0;
  void  mf20325c3(); // _ZN8S20325C39mf20325c3Ev
};
//SIG(1 S20325C3) U1{ m FD}

#endif // __cplusplus
#ifdef __cplusplus

struct  S20325C1  : virtual S20325C2_nt {
  int s20325c1f0;
  ::S20325C3 s20325c1f1;
  int s20325c1f2;
  virtual  ~S20325C1(); // _ZN8S20325C1D2Ev
  virtual void  v1(); // _ZN8S20325C12v1Ev
  virtual void  v2(); // _ZN8S20325C12v2Ev
  virtual void  v3(); // _ZN8S20325C12v3Ev
  virtual void  v4(); // _ZN8S20325C12v4Ev
  virtual void  v5(); // _ZN8S20325C12v5Ev
  S20325C1(); // tgen
};
//SIG(1 S20325C1) C1{ VBC2{ vd v6 v7 Fi} vd v1 v2 v3 v4 v5 Fi FU3{ m FD} Fi}


 S20325C1 ::~S20325C1(){ note_dtor("S20325C1", this);}
void  S20325C1 ::v1(){vfunc_called(this, "_ZN8S20325C12v1Ev");}
void  S20325C1 ::v2(){vfunc_called(this, "_ZN8S20325C12v2Ev");}
void  S20325C1 ::v3(){vfunc_called(this, "_ZN8S20325C12v3Ev");}
void  S20325C1 ::v4(){vfunc_called(this, "_ZN8S20325C12v4Ev");}
void  S20325C1 ::v5(){vfunc_called(this, "_ZN8S20325C12v5Ev");}
S20325C1 ::S20325C1(){ note_ctor("S20325C1", this);} // tgen

static void Test_S20325C1()
{
  extern Class_Descriptor cd_S20325C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,9)];
    init_test(&cd_S20325C1, buf);
    S20325C1 *dp, &lv = *(dp=new (buf) S20325C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20325C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20325C1)");
    check_base_class_offset(lv, (S20325C2_nt*), ABISELECT(40,24), "S20325C1");
    check_field_offset(lv, s20325c1f0, ABISELECT(8,4), "S20325C1.s20325c1f0");
    check_field_offset(lv, s20325c1f1, ABISELECT(16,8), "S20325C1.s20325c1f1");
    check_field_offset(lv, s20325c1f2, ABISELECT(32,20), "S20325C1.s20325c1f2");
    test_class_info(&lv, &cd_S20325C1);
    dp->~S20325C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20325C1(Test_S20325C1, "S20325C1", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S20325C1C1Ev();
extern void _ZN8S20325C1D2Ev();
Name_Map name_map_S20325C1[] = {
  NSPAIR(_ZN8S20325C1C1Ev),
  NSPAIR(_ZN8S20325C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20325C2_nt;
extern VTBL_ENTRY _ZTI11S20325C2_nt[];
extern  VTBL_ENTRY _ZTV11S20325C2_nt[];
static Base_Class bases_S20325C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20325C2_nt,    ABISELECT(40,24), //bcp->offset
    10, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S20325C1[];
extern void _ZN8S20325C1D1Ev();
extern void _ZN8S20325C1D0Ev();
extern void _ZN8S20325C12v1Ev();
extern void _ZN8S20325C12v2Ev();
extern void _ZN8S20325C12v3Ev();
extern void _ZN8S20325C12v4Ev();
extern void _ZN8S20325C12v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S20325C1D1Ev,_ZTv0_n12_N8S20325C1D1Ev)();
extern void ABISELECT(_ZThn40_N8S20325C1D1Ev,_ZThn24_N8S20325C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20325C1D0Ev,_ZTv0_n12_N8S20325C1D0Ev)();
extern void ABISELECT(_ZThn40_N8S20325C1D0Ev,_ZThn24_N8S20325C1D0Ev)() __attribute__((weak));
extern void _ZN11S20325C2_nt2v6Ev();
extern void _ZN11S20325C2_nt2v7Ev();
static  VTBL_ENTRY vtc_S20325C1[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20325C1[0]),
  (VTBL_ENTRY)&_ZN8S20325C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20325C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20325C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20325C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20325C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20325C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20325C12v5Ev,
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20325C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20325C1D1Ev,_ZTv0_n12_N8S20325C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20325C1D0Ev,_ZTv0_n12_N8S20325C1D0Ev),
  (VTBL_ENTRY)&_ZN11S20325C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S20325C2_nt2v7Ev,
};
extern VTBL_ENTRY _ZTV8S20325C1[];
static  VTT_ENTRY vtt_S20325C1[] = {
  {&(_ZTV8S20325C1[3]),  3,19},
  {&(_ZTV8S20325C1[15]),  15,19},
};
extern VTBL_ENTRY _ZTI8S20325C1[];
extern  VTBL_ENTRY _ZTV8S20325C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20325C1[];
static VTBL_ENTRY alt_thunk_names131[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20325C1D0Ev,_ZTv0_n12_N8S20325C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20325C1D0Ev,_ZThn24_N8S20325C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20325C1D1Ev,_ZTv0_n12_N8S20325C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20325C1D1Ev,_ZThn24_N8S20325C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20325C1 = {  "S20325C1", // class name
  bases_S20325C1, 1,
  &(vtc_S20325C1[0]), // expected_vtbl_contents
  &(vtt_S20325C1[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S20325C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20325C1),19, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20325C1),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names131,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8892C2_nt  {
  void *s8892c2f0[2];
  virtual  ~S8892C2_nt(); // _ZN10S8892C2_ntD1Ev
  virtual void  v2(); // _ZN10S8892C2_nt2v2Ev
  virtual void  v3(); // _ZN10S8892C2_nt2v3Ev
  S8892C2_nt(); // tgen
};
//SIG(-1 S8892C2_nt) C1{ vd v1 v2 Fp[2]}


 S8892C2_nt ::~S8892C2_nt(){ note_dtor("S8892C2_nt", this);}
void  S8892C2_nt ::v2(){vfunc_called(this, "_ZN10S8892C2_nt2v2Ev");}
void  S8892C2_nt ::v3(){vfunc_called(this, "_ZN10S8892C2_nt2v3Ev");}
S8892C2_nt ::S8892C2_nt(){ note_ctor("S8892C2_nt", this);} // tgen

//skip512 S8892C2_nt

#else // __cplusplus

extern void _ZN10S8892C2_ntC1Ev();
extern void _ZN10S8892C2_ntD1Ev();
Name_Map name_map_S8892C2_nt[] = {
  NSPAIR(_ZN10S8892C2_ntC1Ev),
  NSPAIR(_ZN10S8892C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8892C2_nt[];
extern void _ZN10S8892C2_ntD1Ev();
extern void _ZN10S8892C2_ntD0Ev();
extern void _ZN10S8892C2_nt2v2Ev();
extern void _ZN10S8892C2_nt2v3Ev();
static  VTBL_ENTRY vtc_S8892C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8892C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8892C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8892C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8892C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S8892C2_nt2v3Ev,
};
extern VTBL_ENTRY _ZTI10S8892C2_nt[];
VTBL_ENTRY *P__ZTI10S8892C2_nt = _ZTI10S8892C2_nt; 
extern  VTBL_ENTRY _ZTV10S8892C2_nt[];
Class_Descriptor cd_S8892C2_nt = {  "S8892C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8892C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI10S8892C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8892C2_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  S8892C1  : S8892C2_nt {
  ::S17777C6_nt s8892c1f0;
  ::S9307C6 s8892c1f1;
  virtual  ~S8892C1(); // _ZN7S8892C1D1Ev
  virtual void  v1(); // _ZN7S8892C12v1Ev
  S8892C1(); // tgen
};
//SIG(1 S8892C1) C1{ BC2{ vd v2 v3 Fp[2]} vd v1 FC3{ m Fp} FC4{ Fc[961] FL}}


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

static void Test_S8892C1()
{
  extern Class_Descriptor cd_S8892C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(127,248)];
    init_test(&cd_S8892C1, buf);
    S8892C1 *dp, &lv = *(dp=new (buf) S8892C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1008,988), "sizeof(S8892C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8892C1)");
    check_base_class_offset(lv, (S8892C2_nt*), 0, "S8892C1");
    check_field_offset(lv, s8892c1f0, ABISELECT(24,12), "S8892C1.s8892c1f0");
    check_field_offset(lv, s8892c1f1, ABISELECT(32,16), "S8892C1.s8892c1f1");
    test_class_info(&lv, &cd_S8892C1);
    dp->~S8892C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8892C1(Test_S8892C1, "S8892C1", ABISELECT(1008,988));

#else // __cplusplus

extern void _ZN7S8892C1C1Ev();
extern void _ZN7S8892C1D1Ev();
Name_Map name_map_S8892C1[] = {
  NSPAIR(_ZN7S8892C1C1Ev),
  NSPAIR(_ZN7S8892C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8892C2_nt;
extern VTBL_ENTRY _ZTI10S8892C2_nt[];
extern  VTBL_ENTRY _ZTV10S8892C2_nt[];
static Base_Class bases_S8892C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8892C2_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 _ZTI7S8892C1[];
extern void _ZN7S8892C1D1Ev();
extern void _ZN7S8892C1D0Ev();
extern void _ZN10S8892C2_nt2v2Ev();
extern void _ZN10S8892C2_nt2v3Ev();
extern void _ZN7S8892C12v1Ev();
static  VTBL_ENTRY vtc_S8892C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8892C1[0]),
  (VTBL_ENTRY)&_ZN7S8892C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8892C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8892C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S8892C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN7S8892C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8892C1[];
extern  VTBL_ENTRY _ZTV7S8892C1[];
Class_Descriptor cd_S8892C1 = {  "S8892C1", // class name
  bases_S8892C1, 1,
  &(vtc_S8892C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1008,988), // object size
  NSPAIRA(_ZTI7S8892C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8892C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12388C1  {
  int s12388c1f0;
  ::S11199C4_nt s12388c1f1;
  ::S11199C6_nt s12388c1f2;
  int s12388c1f3;
  void *s12388c1f4;
  int s12388c1f5[3];
};
//SIG(1 S12388C1) C1{ Fi FC2{ FC3{ Fc[20]} Fc[16]} FC4{ Fc[12]} Fi Fp Fi[3]}



static void Test_S12388C1()
{
  {
    init_simple_test("S12388C1");
    S12388C1 lv;
    check2(sizeof(lv), ABISELECT(80,72), "sizeof(S12388C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12388C1)");
    check_field_offset(lv, s12388c1f0, 0, "S12388C1.s12388c1f0");
    check_field_offset(lv, s12388c1f1, 4, "S12388C1.s12388c1f1");
    check_field_offset(lv, s12388c1f2, 40, "S12388C1.s12388c1f2");
    check_field_offset(lv, s12388c1f3, 52, "S12388C1.s12388c1f3");
    check_field_offset(lv, s12388c1f4, 56, "S12388C1.s12388c1f4");
    check_field_offset(lv, s12388c1f5, ABISELECT(64,60), "S12388C1.s12388c1f5");
  }
}
static Arrange_To_Call_Me vS12388C1(Test_S12388C1, "S12388C1", ABISELECT(80,72));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15293C1  {
  ::S79C39_nt s15293c1f0;
  ::S79C44 s15293c1f1;
  int s15293c1f2;
  void  mf15293c1(); // _ZN8S15293C19mf15293c1Ev
};
//SIG(1 S15293C1) C1{ m FC2{ BC3{ BC4{ BC5{ m Fp Fi[2]}}}} FC6{ BC7{ BC5}} Fi}


void  S15293C1 ::mf15293c1(){}

static void Test_S15293C1()
{
  {
    init_simple_test("S15293C1");
    S15293C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S15293C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15293C1)");
    check_field_offset(lv, s15293c1f0, 0, "S15293C1.s15293c1f0");
    check_field_offset(lv, s15293c1f1, ABISELECT(16,12), "S15293C1.s15293c1f1");
    check_field_offset(lv, s15293c1f2, ABISELECT(32,24), "S15293C1.s15293c1f2");
  }
}
static Arrange_To_Call_Me vS15293C1(Test_S15293C1, "S15293C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8340C3_nt  {
  void *s8340c3f0[2];
};
//SIG(-1 S8340C3_nt) C1{ Fp[2]}



//skip512 S8340C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8340C1  : S19905C19 {
  int s8340c1f0[2];
  void *s8340c1f1[2];
  short s8340c1f2;
  int s8340c1f3;
  char s8340c1f4;
  int s8340c1f5;
  ::S8340C3_nt s8340c1f6;
  virtual  ~S8340C1(); // _ZN7S8340C1D1Ev
  S8340C1(); // tgen
};
//SIG(1 S8340C1) C1{ BC2{ vd m} vd Fi[2] Fp[2] Fs Fi Fc Fi FC3{ Fp[2]}}


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

static void Test_S8340C1()
{
  extern Class_Descriptor cd_S8340C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S8340C1, buf);
    S8340C1 *dp, &lv = *(dp=new (buf) S8340C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S8340C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8340C1)");
    check_base_class_offset(lv, (S19905C19*), 0, "S8340C1");
    check_field_offset(lv, s8340c1f0, ABISELECT(8,4), "S8340C1.s8340c1f0");
    check_field_offset(lv, s8340c1f1, ABISELECT(16,12), "S8340C1.s8340c1f1");
    check_field_offset(lv, s8340c1f2, ABISELECT(32,20), "S8340C1.s8340c1f2");
    check_field_offset(lv, s8340c1f3, ABISELECT(36,24), "S8340C1.s8340c1f3");
    check_field_offset(lv, s8340c1f4, ABISELECT(40,28), "S8340C1.s8340c1f4");
    check_field_offset(lv, s8340c1f5, ABISELECT(44,32), "S8340C1.s8340c1f5");
    check_field_offset(lv, s8340c1f6, ABISELECT(48,36), "S8340C1.s8340c1f6");
    test_class_info(&lv, &cd_S8340C1);
    dp->~S8340C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8340C1(Test_S8340C1, "S8340C1", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S8340C1C1Ev();
extern void _ZN7S8340C1D1Ev();
Name_Map name_map_S8340C1[] = {
  NSPAIR(_ZN7S8340C1C1Ev),
  NSPAIR(_ZN7S8340C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19905C19;
extern VTBL_ENTRY _ZTI9S19905C19[];
extern  VTBL_ENTRY _ZTV9S19905C19[];
static Base_Class bases_S8340C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19905C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8340C1[];
extern void _ZN7S8340C1D1Ev();
extern void _ZN7S8340C1D0Ev();
static  VTBL_ENTRY vtc_S8340C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8340C1[0]),
  (VTBL_ENTRY)&_ZN7S8340C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8340C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8340C1[];
extern  VTBL_ENTRY _ZTV7S8340C1[];
Class_Descriptor cd_S8340C1 = {  "S8340C1", // class name
  bases_S8340C1, 1,
  &(vtc_S8340C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S8340C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8340C1),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  S21716C1  {
  void *s21716c1f0;
  ::S1672C15_nt s21716c1f1;
  int s21716c1f2;
  void *s21716c1f3;
  int s21716c1f4;
  void *s21716c1f5[4];
  char s21716c1f6;
  int s21716c1f7;
  void  mf21716c1(); // _ZN8S21716C19mf21716c1Ev
  virtual  ~S21716C1(); // _ZN8S21716C1D1Ev
  S21716C1(); // tgen
};
//SIG(1 S21716C1) C1{ vd m Fp FC2{ m FC3{ FL[4]}} Fi Fp Fi Fp[4] Fc Fi}


void  S21716C1 ::mf21716c1(){}
 S21716C1 ::~S21716C1(){ note_dtor("S21716C1", this);}
S21716C1 ::S21716C1(){ note_ctor("S21716C1", this);} // tgen

static void Test_S21716C1()
{
  extern Class_Descriptor cd_S21716C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S21716C1, buf);
    S21716C1 *dp, &lv = *(dp=new (buf) S21716C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S21716C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21716C1)");
    check_field_offset(lv, s21716c1f0, ABISELECT(8,4), "S21716C1.s21716c1f0");
    check_field_offset(lv, s21716c1f1, ABISELECT(16,8), "S21716C1.s21716c1f1");
    check_field_offset(lv, s21716c1f2, ABISELECT(48,40), "S21716C1.s21716c1f2");
    check_field_offset(lv, s21716c1f3, ABISELECT(56,44), "S21716C1.s21716c1f3");
    check_field_offset(lv, s21716c1f4, ABISELECT(64,48), "S21716C1.s21716c1f4");
    check_field_offset(lv, s21716c1f5, ABISELECT(72,52), "S21716C1.s21716c1f5");
    check_field_offset(lv, s21716c1f6, ABISELECT(104,68), "S21716C1.s21716c1f6");
    check_field_offset(lv, s21716c1f7, ABISELECT(108,72), "S21716C1.s21716c1f7");
    test_class_info(&lv, &cd_S21716C1);
    dp->~S21716C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21716C1(Test_S21716C1, "S21716C1", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN8S21716C1C1Ev();
extern void _ZN8S21716C1D1Ev();
Name_Map name_map_S21716C1[] = {
  NSPAIR(_ZN8S21716C1C1Ev),
  NSPAIR(_ZN8S21716C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21716C1[];
extern void _ZN8S21716C1D1Ev();
extern void _ZN8S21716C1D0Ev();
static  VTBL_ENTRY vtc_S21716C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21716C1[0]),
  (VTBL_ENTRY)&_ZN8S21716C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21716C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21716C1[];
extern  VTBL_ENTRY _ZTV8S21716C1[];
Class_Descriptor cd_S21716C1 = {  "S21716C1", // class name
  0,0,//no base classes
  &(vtc_S21716C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI8S21716C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21716C1),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  S16894C2  {
  ::S6961C7 s16894c2f0;
  ::S6961C7 s16894c2f1;
  int s16894c2f2[2];
  void  mf16894c2(); // _ZN8S16894C29mf16894c2Ev
};
//SIG(-1 S16894C2) C1{ m FC2{ BC3{ m Fp Fi[2]}} FC2 Fi[2]}


void  S16894C2 ::mf16894c2(){}

static void Test_S16894C2()
{
  {
    init_simple_test("S16894C2");
    S16894C2 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S16894C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16894C2)");
    check_field_offset(lv, s16894c2f0, 0, "S16894C2.s16894c2f0");
    check_field_offset(lv, s16894c2f1, ABISELECT(16,12), "S16894C2.s16894c2f1");
    check_field_offset(lv, s16894c2f2, ABISELECT(32,24), "S16894C2.s16894c2f2");
  }
}
static Arrange_To_Call_Me vS16894C2(Test_S16894C2, "S16894C2", ABISELECT(40,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16894C1  {
  int s16894c1f0;
  void *s16894c1f1;
  ::S16894C2 s16894c1f2;
  void  mf16894c1(); // _ZN8S16894C19mf16894c1Ev
};
//SIG(1 S16894C1) C1{ m Fi Fp FC2{ m FC3{ BC4{ m Fp Fi[2]}} FC3 Fi[2]}}


void  S16894C1 ::mf16894c1(){}

static void Test_S16894C1()
{
  {
    init_simple_test("S16894C1");
    S16894C1 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S16894C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16894C1)");
    check_field_offset(lv, s16894c1f0, 0, "S16894C1.s16894c1f0");
    check_field_offset(lv, s16894c1f1, ABISELECT(8,4), "S16894C1.s16894c1f1");
    check_field_offset(lv, s16894c1f2, ABISELECT(16,8), "S16894C1.s16894c1f2");
  }
}
static Arrange_To_Call_Me vS16894C1(Test_S16894C1, "S16894C1", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10525C1  {
  unsigned char s10525c1f0:1;
  char s10525c1f1:3;
  char s10525c1f2:4;
  char s10525c1f3:8;
  unsigned char s10525c1f4:1;
  char s10525c1f5:7;
  char s10525c1f6:8;
  unsigned char s10525c1f7:1;
  char s10525c1f8:7;
};
//SIG(1 S10525C1) C1{ Fc:1 Fc:3 Fc:4 Fc:8 Fc:1 Fc:7 Fc:8 Fc:1 Fc:7}



static void Test_S10525C1()
{
  {
    init_simple_test("S10525C1");
    static S10525C1 lv;
    check2(sizeof(lv), 5, "sizeof(S10525C1)");
    check2(__alignof__(lv), 1, "__alignof__(S10525C1)");
    set_bf_and_test(lv, s10525c1f0, 0, 0, 1, 1, "S10525C1");
    set_bf_and_test(lv, s10525c1f1, 0, 1, 3, 1, "S10525C1");
    set_bf_and_test(lv, s10525c1f1, 0, 1, 3, hide_sll(1LL<<2), "S10525C1");
    set_bf_and_test(lv, s10525c1f2, 0, 4, 4, 1, "S10525C1");
    set_bf_and_test(lv, s10525c1f2, 0, 4, 4, hide_sll(1LL<<3), "S10525C1");
    set_bf_and_test(lv, s10525c1f3, 1, 0, 8, 1, "S10525C1");
    set_bf_and_test(lv, s10525c1f3, 1, 0, 8, hide_sll(1LL<<7), "S10525C1");
    set_bf_and_test(lv, s10525c1f4, 2, 0, 1, 1, "S10525C1");
    set_bf_and_test(lv, s10525c1f5, 2, 1, 7, 1, "S10525C1");
    set_bf_and_test(lv, s10525c1f5, 2, 1, 7, hide_sll(1LL<<6), "S10525C1");
    set_bf_and_test(lv, s10525c1f6, 3, 0, 8, 1, "S10525C1");
    set_bf_and_test(lv, s10525c1f6, 3, 0, 8, hide_sll(1LL<<7), "S10525C1");
    set_bf_and_test(lv, s10525c1f7, 4, 0, 1, 1, "S10525C1");
    set_bf_and_test(lv, s10525c1f8, 4, 1, 7, 1, "S10525C1");
    set_bf_and_test(lv, s10525c1f8, 4, 1, 7, hide_sll(1LL<<6), "S10525C1");
  }
}
static Arrange_To_Call_Me vS10525C1(Test_S10525C1, "S10525C1", 5);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16236C1  {
  ::S5266C19_nt s16236c1f0;
  ::S5266C19_nt s16236c1f1;
  short s16236c1f2;
  ::S17777C6_nt s16236c1f3[3];
  int s16236c1f4;
  void  mf16236c1(); // _ZN8S16236C19mf16236c1Ev
};
//SIG(1 S16236C1) C1{ m FC2{ m Fp Fi FC3{ m}} FC2 Fs FC4{ m Fp}[3] Fi}


void  S16236C1 ::mf16236c1(){}

static void Test_S16236C1()
{
  {
    init_simple_test("S16236C1");
    S16236C1 lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S16236C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16236C1)");
    check_field_offset(lv, s16236c1f0, 0, "S16236C1.s16236c1f0");
    check_field_offset(lv, s16236c1f1, ABISELECT(16,12), "S16236C1.s16236c1f1");
    check_field_offset(lv, s16236c1f2, ABISELECT(32,24), "S16236C1.s16236c1f2");
    check_field_offset(lv, s16236c1f3, ABISELECT(40,28), "S16236C1.s16236c1f3");
    check_field_offset(lv, s16236c1f4, ABISELECT(64,40), "S16236C1.s16236c1f4");
  }
}
static Arrange_To_Call_Me vS16236C1(Test_S16236C1, "S16236C1", ABISELECT(72,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2591C2  : S7719C17_nt {
  int s2591c2f0;
  virtual  ~S2591C2(); // _ZN7S2591C2D1Ev
  virtual void  v5(); // _ZN7S2591C22v5Ev
  virtual void  v6(); // _ZN7S2591C22v6Ev
  virtual void  v7(); // _ZN7S2591C22v7Ev
  virtual void  v8(); // _ZN7S2591C22v8Ev
  S2591C2(); // tgen
};
//SIG(-1 S2591C2) C1{ BC2{ m Fi} vd v1 v2 v3 v4 Fi}


 S2591C2 ::~S2591C2(){ note_dtor("S2591C2", this);}
void  S2591C2 ::v5(){vfunc_called(this, "_ZN7S2591C22v5Ev");}
void  S2591C2 ::v6(){vfunc_called(this, "_ZN7S2591C22v6Ev");}
void  S2591C2 ::v7(){vfunc_called(this, "_ZN7S2591C22v7Ev");}
void  S2591C2 ::v8(){vfunc_called(this, "_ZN7S2591C22v8Ev");}
S2591C2 ::S2591C2(){ note_ctor("S2591C2", this);} // tgen

static void Test_S2591C2()
{
  extern Class_Descriptor cd_S2591C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2591C2, buf);
    S2591C2 *dp, &lv = *(dp=new (buf) S2591C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2591C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2591C2)");
    check_base_class_offset(lv, (S7719C17_nt*), ABISELECT(8,4), "S2591C2");
    check_field_offset(lv, s2591c2f0, ABISELECT(12,8), "S2591C2.s2591c2f0");
    test_class_info(&lv, &cd_S2591C2);
    dp->~S2591C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2591C2(Test_S2591C2, "S2591C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2591C2C1Ev();
extern void _ZN7S2591C2D1Ev();
Name_Map name_map_S2591C2[] = {
  NSPAIR(_ZN7S2591C2C1Ev),
  NSPAIR(_ZN7S2591C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7719C17_nt;
extern VTBL_ENTRY _ZTI11S7719C17_nt[];
static Base_Class bases_S2591C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7719C17_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, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2591C2[];
extern void _ZN7S2591C2D1Ev();
extern void _ZN7S2591C2D0Ev();
extern void _ZN7S2591C22v5Ev();
extern void _ZN7S2591C22v6Ev();
extern void _ZN7S2591C22v7Ev();
extern void _ZN7S2591C22v8Ev();
static  VTBL_ENTRY vtc_S2591C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2591C2[0]),
  (VTBL_ENTRY)&_ZN7S2591C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2591C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2591C22v5Ev,
  (VTBL_ENTRY)&_ZN7S2591C22v6Ev,
  (VTBL_ENTRY)&_ZN7S2591C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2591C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S2591C2[];
extern  VTBL_ENTRY _ZTV7S2591C2[];
Class_Descriptor cd_S2591C2 = {  "S2591C2", // class name
  bases_S2591C2, 1,
  &(vtc_S2591C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2591C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S2591C2),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  S2591C1  : S2591C2 {
  virtual void  v1(); // _ZN7S2591C12v1Ev
  virtual void  v2(); // _ZN7S2591C12v2Ev
  virtual void  v3(); // _ZN7S2591C12v3Ev
  virtual void  v4(); // _ZN7S2591C12v4Ev
  ~S2591C1(); // tgen
  S2591C1(); // tgen
};
//SIG(1 S2591C1) C1{ BC2{ BC3{ m Fi} vd v5 v6 v7 v8 Fi} v1 v2 v3 v4}


void  S2591C1 ::v1(){vfunc_called(this, "_ZN7S2591C12v1Ev");}
void  S2591C1 ::v2(){vfunc_called(this, "_ZN7S2591C12v2Ev");}
void  S2591C1 ::v3(){vfunc_called(this, "_ZN7S2591C12v3Ev");}
void  S2591C1 ::v4(){vfunc_called(this, "_ZN7S2591C12v4Ev");}
S2591C1 ::~S2591C1(){ note_dtor("S2591C1", this);} // tgen
S2591C1 ::S2591C1(){ note_ctor("S2591C1", this);} // tgen

static void Test_S2591C1()
{
  extern Class_Descriptor cd_S2591C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2591C1, buf);
    S2591C1 *dp, &lv = *(dp=new (buf) S2591C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2591C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2591C1)");
    check_base_class_offset(lv, (S7719C17_nt*)(S2591C2*), ABISELECT(8,4), "S2591C1");
    check_base_class_offset(lv, (S2591C2*), 0, "S2591C1");
    test_class_info(&lv, &cd_S2591C1);
    dp->~S2591C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2591C1(Test_S2591C1, "S2591C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2591C1C1Ev();
extern void _ZN7S2591C1D1Ev();
Name_Map name_map_S2591C1[] = {
  NSPAIR(_ZN7S2591C1C1Ev),
  NSPAIR(_ZN7S2591C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7719C17_nt;
extern VTBL_ENTRY _ZTI11S7719C17_nt[];
extern Class_Descriptor cd_S2591C2;
extern VTBL_ENTRY _ZTI7S2591C2[];
extern  VTBL_ENTRY _ZTV7S2591C2[];
static Base_Class bases_S2591C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7719C17_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_S2591C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2591C1[];
extern void _ZN7S2591C1D1Ev();
extern void _ZN7S2591C1D0Ev();
extern void _ZN7S2591C22v5Ev();
extern void _ZN7S2591C22v6Ev();
extern void _ZN7S2591C22v7Ev();
extern void _ZN7S2591C22v8Ev();
extern void _ZN7S2591C12v1Ev();
extern void _ZN7S2591C12v2Ev();
extern void _ZN7S2591C12v3Ev();
extern void _ZN7S2591C12v4Ev();
static  VTBL_ENTRY vtc_S2591C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2591C1[0]),
  (VTBL_ENTRY)&_ZN7S2591C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2591C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2591C22v5Ev,
  (VTBL_ENTRY)&_ZN7S2591C22v6Ev,
  (VTBL_ENTRY)&_ZN7S2591C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2591C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2591C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2591C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2591C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2591C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2591C1[];
extern  VTBL_ENTRY _ZTV7S2591C1[];
Class_Descriptor cd_S2591C1 = {  "S2591C1", // class name
  bases_S2591C1, 2,
  &(vtc_S2591C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2591C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2591C1),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  S16627C1  {
  int s16627c1f0;
  ::S79C44 s16627c1f1;
  ::S15924C4_nt s16627c1f2;
  void  mf16627c1(); // _ZN8S16627C19mf16627c1Ev
};
//SIG(1 S16627C1) C1{ m Fi FC2{ BC3{ BC4{ m Fp Fi[2]}}} FC5{ m Fp Fi}}


void  S16627C1 ::mf16627c1(){}

static void Test_S16627C1()
{
  {
    init_simple_test("S16627C1");
    S16627C1 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S16627C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16627C1)");
    check_field_offset(lv, s16627c1f0, 0, "S16627C1.s16627c1f0");
    check_field_offset(lv, s16627c1f1, ABISELECT(8,4), "S16627C1.s16627c1f1");
    check_field_offset(lv, s16627c1f2, ABISELECT(24,16), "S16627C1.s16627c1f2");
  }
}
static Arrange_To_Call_Me vS16627C1(Test_S16627C1, "S16627C1", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11615C2_nt  {
  int s11615c2f0[3];
};
//SIG(-1 S11615C2_nt) C1{ Fi[3]}



//skip512 S11615C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11615C1  {
  ::S11615C2_nt s11615c1f0;
  ::S11615C2_nt s11615c1f1;
  char s11615c1f2[12];
  int s11615c1f3[2];
  char s11615c1f4[4];
  long s11615c1f5;
  char s11615c1f6[8];
};
//SIG(1 S11615C1) C1{ FC2{ Fi[3]} FC2 Fc[12] Fi[2] Fc[4] Fl Fc[8]}



static void Test_S11615C1()
{
  {
    init_simple_test("S11615C1");
    S11615C1 lv;
    check2(sizeof(lv), ABISELECT(64,60), "sizeof(S11615C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11615C1)");
    check_field_offset(lv, s11615c1f0, 0, "S11615C1.s11615c1f0");
    check_field_offset(lv, s11615c1f1, 12, "S11615C1.s11615c1f1");
    check_field_offset(lv, s11615c1f2, 24, "S11615C1.s11615c1f2");
    check_field_offset(lv, s11615c1f3, 36, "S11615C1.s11615c1f3");
    check_field_offset(lv, s11615c1f4, 44, "S11615C1.s11615c1f4");
    check_field_offset(lv, s11615c1f5, 48, "S11615C1.s11615c1f5");
    check_field_offset(lv, s11615c1f6, ABISELECT(56,52), "S11615C1.s11615c1f6");
  }
}
static Arrange_To_Call_Me vS11615C1(Test_S11615C1, "S11615C1", ABISELECT(64,60));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17058C1  {
  int s17058c1f0[2];
  char s17058c1f1;
  long s17058c1f2;
  ::S1671C15_nt s17058c1f3;
  ::S7719C17_nt s17058c1f4;
  void  mf17058c1(); // _ZN8S17058C19mf17058c1Ev
};
//SIG(1 S17058C1) C1{ m Fi[2] Fc Fl FC2{ m FC3{ Fl[4]}} FC4{ m Fi}}


void  S17058C1 ::mf17058c1(){}

static void Test_S17058C1()
{
  {
    init_simple_test("S17058C1");
    S17058C1 lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S17058C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17058C1)");
    check_field_offset(lv, s17058c1f0, 0, "S17058C1.s17058c1f0");
    check_field_offset(lv, s17058c1f1, 8, "S17058C1.s17058c1f1");
    check_field_offset(lv, s17058c1f2, ABISELECT(16,12), "S17058C1.s17058c1f2");
    check_field_offset(lv, s17058c1f3, ABISELECT(24,16), "S17058C1.s17058c1f3");
    check_field_offset(lv, s17058c1f4, ABISELECT(56,32), "S17058C1.s17058c1f4");
  }
}
static Arrange_To_Call_Me vS17058C1(Test_S17058C1, "S17058C1", ABISELECT(64,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8116C1  : S1679C4_nt {
  ::S5266C19_nt s8116c1f0;
  int s8116c1f1;
  void *s8116c1f2;
  virtual  ~S8116C1(); // _ZN7S8116C1D1Ev
  S8116C1(); // tgen
};
//SIG(1 S8116C1) C1{ BC2{ vd m Fi} vd FC3{ m Fp Fi FC4{ m}} Fi Fp}


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

static void Test_S8116C1()
{
  extern Class_Descriptor cd_S8116C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S8116C1, buf);
    S8116C1 *dp, &lv = *(dp=new (buf) S8116C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S8116C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8116C1)");
    check_base_class_offset(lv, (S1679C4_nt*), 0, "S8116C1");
    check_field_offset(lv, s8116c1f0, ABISELECT(16,8), "S8116C1.s8116c1f0");
    check_field_offset(lv, s8116c1f1, ABISELECT(32,20), "S8116C1.s8116c1f1");
    check_field_offset(lv, s8116c1f2, ABISELECT(40,24), "S8116C1.s8116c1f2");
    test_class_info(&lv, &cd_S8116C1);
    dp->~S8116C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8116C1(Test_S8116C1, "S8116C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S8116C1C1Ev();
extern void _ZN7S8116C1D1Ev();
Name_Map name_map_S8116C1[] = {
  NSPAIR(_ZN7S8116C1C1Ev),
  NSPAIR(_ZN7S8116C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1679C4_nt;
extern VTBL_ENTRY _ZTI10S1679C4_nt[];
extern  VTBL_ENTRY _ZTV10S1679C4_nt[];
static Base_Class bases_S8116C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1679C4_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 _ZTI7S8116C1[];
extern void _ZN7S8116C1D1Ev();
extern void _ZN7S8116C1D0Ev();
static  VTBL_ENTRY vtc_S8116C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8116C1[0]),
  (VTBL_ENTRY)&_ZN7S8116C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8116C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8116C1[];
extern  VTBL_ENTRY _ZTV7S8116C1[];
Class_Descriptor cd_S8116C1 = {  "S8116C1", // class name
  bases_S8116C1, 1,
  &(vtc_S8116C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S8116C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8116C1),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  S14135C1  {
  void *s14135c1f0;
  ::S16894C2 s14135c1f1;
};
//SIG(1 S14135C1) C1{ Fp FC2{ m FC3{ BC4{ m Fp Fi[2]}} FC3 Fi[2]}}



static void Test_S14135C1()
{
  {
    init_simple_test("S14135C1");
    S14135C1 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S14135C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14135C1)");
    check_field_offset(lv, s14135c1f0, 0, "S14135C1.s14135c1f0");
    check_field_offset(lv, s14135c1f1, ABISELECT(8,4), "S14135C1.s14135c1f1");
  }
}
static Arrange_To_Call_Me vS14135C1(Test_S14135C1, "S14135C1", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21749C1  {
  void *s21749c1f0;
  int s21749c1f1;
  ::S5266C19_nt s21749c1f2;
  void *s21749c1f3;
  int s21749c1f4[5];
  void  mf21749c1(); // _ZN8S21749C19mf21749c1Ev
  virtual  ~S21749C1(); // _ZN8S21749C1D1Ev
  S21749C1(); // tgen
};
//SIG(1 S21749C1) C1{ vd m Fp Fi FC2{ m Fp Fi FC3{ m}} Fp Fi[5]}


void  S21749C1 ::mf21749c1(){}
 S21749C1 ::~S21749C1(){ note_dtor("S21749C1", this);}
S21749C1 ::S21749C1(){ note_ctor("S21749C1", this);} // tgen

static void Test_S21749C1()
{
  extern Class_Descriptor cd_S21749C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S21749C1, buf);
    S21749C1 *dp, &lv = *(dp=new (buf) S21749C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S21749C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21749C1)");
    check_field_offset(lv, s21749c1f0, ABISELECT(8,4), "S21749C1.s21749c1f0");
    check_field_offset(lv, s21749c1f1, ABISELECT(16,8), "S21749C1.s21749c1f1");
    check_field_offset(lv, s21749c1f2, ABISELECT(24,12), "S21749C1.s21749c1f2");
    check_field_offset(lv, s21749c1f3, ABISELECT(40,24), "S21749C1.s21749c1f3");
    check_field_offset(lv, s21749c1f4, ABISELECT(48,28), "S21749C1.s21749c1f4");
    test_class_info(&lv, &cd_S21749C1);
    dp->~S21749C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21749C1(Test_S21749C1, "S21749C1", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN8S21749C1C1Ev();
extern void _ZN8S21749C1D1Ev();
Name_Map name_map_S21749C1[] = {
  NSPAIR(_ZN8S21749C1C1Ev),
  NSPAIR(_ZN8S21749C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21749C1[];
extern void _ZN8S21749C1D1Ev();
extern void _ZN8S21749C1D0Ev();
static  VTBL_ENTRY vtc_S21749C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21749C1[0]),
  (VTBL_ENTRY)&_ZN8S21749C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21749C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21749C1[];
extern  VTBL_ENTRY _ZTV8S21749C1[];
Class_Descriptor cd_S21749C1 = {  "S21749C1", // class name
  0,0,//no base classes
  &(vtc_S21749C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI8S21749C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21749C1),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  S12776C1  {
  int s12776c1f0;
  void *s12776c1f1[3];
  int s12776c1f2[2];
  void *s12776c1f3[2];
  int s12776c1f4[5];
  ::S3041C4_nt s12776c1f5;
};
//SIG(1 S12776C1) C1{ Fi Fp[3] Fi[2] Fp[2] Fi[5] FC2{ Fl[4]}}



static void Test_S12776C1()
{
  {
    init_simple_test("S12776C1");
    S12776C1 lv;
    check2(sizeof(lv), ABISELECT(112,68), "sizeof(S12776C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12776C1)");
    check_field_offset(lv, s12776c1f0, 0, "S12776C1.s12776c1f0");
    check_field_offset(lv, s12776c1f1, ABISELECT(8,4), "S12776C1.s12776c1f1");
    check_field_offset(lv, s12776c1f2, ABISELECT(32,16), "S12776C1.s12776c1f2");
    check_field_offset(lv, s12776c1f3, ABISELECT(40,24), "S12776C1.s12776c1f3");
    check_field_offset(lv, s12776c1f4, ABISELECT(56,32), "S12776C1.s12776c1f4");
    check_field_offset(lv, s12776c1f5, ABISELECT(80,52), "S12776C1.s12776c1f5");
  }
}
static Arrange_To_Call_Me vS12776C1(Test_S12776C1, "S12776C1", ABISELECT(112,68));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20326C2  {
  __tsi64 s20326c2f0;
  int s20326c2f1;
  virtual  ~S20326C2(); // _ZN8S20326C2D1Ev
  virtual void  v6(); // _ZN8S20326C22v6Ev
  virtual void  v7(); // _ZN8S20326C22v7Ev
  S20326C2(); // tgen
};
//SIG(-1 S20326C2) C1{ vd v1 v2 FL Fi}


 S20326C2 ::~S20326C2(){ note_dtor("S20326C2", this);}
void  S20326C2 ::v6(){vfunc_called(this, "_ZN8S20326C22v6Ev");}
void  S20326C2 ::v7(){vfunc_called(this, "_ZN8S20326C22v7Ev");}
S20326C2 ::S20326C2(){ note_ctor("S20326C2", this);} // tgen

static void Test_S20326C2()
{
  extern Class_Descriptor cd_S20326C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20326C2, buf);
    S20326C2 *dp, &lv = *(dp=new (buf) S20326C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20326C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20326C2)");
    check_field_offset(lv, s20326c2f0, ABISELECT(8,4), "S20326C2.s20326c2f0");
    check_field_offset(lv, s20326c2f1, ABISELECT(16,12), "S20326C2.s20326c2f1");
    test_class_info(&lv, &cd_S20326C2);
    dp->~S20326C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20326C2(Test_S20326C2, "S20326C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S20326C2C1Ev();
extern void _ZN8S20326C2D1Ev();
Name_Map name_map_S20326C2[] = {
  NSPAIR(_ZN8S20326C2C1Ev),
  NSPAIR(_ZN8S20326C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20326C2[];
extern void _ZN8S20326C2D1Ev();
extern void _ZN8S20326C2D0Ev();
extern void _ZN8S20326C22v6Ev();
extern void _ZN8S20326C22v7Ev();
static  VTBL_ENTRY vtc_S20326C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20326C2[0]),
  (VTBL_ENTRY)&_ZN8S20326C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20326C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20326C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20326C22v7Ev,
};
extern VTBL_ENTRY _ZTI8S20326C2[];
extern  VTBL_ENTRY _ZTV8S20326C2[];
Class_Descriptor cd_S20326C2 = {  "S20326C2", // class name
  0,0,//no base classes
  &(vtc_S20326C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S20326C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20326C2),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  S20326C1  : virtual S20326C2 {
  long double s20326c1f0;
  virtual void  v1(); // _ZN8S20326C12v1Ev
  virtual void  v2(); // _ZN8S20326C12v2Ev
  virtual void  v3(); // _ZN8S20326C12v3Ev
  virtual void  v4(); // _ZN8S20326C12v4Ev
  virtual void  v5(); // _ZN8S20326C12v5Ev
  ~S20326C1(); // tgen
  S20326C1(); // tgen
};
//SIG(1 S20326C1) C1{ VBC2{ vd v6 v7 FL Fi} v1 v2 v3 v4 v5 FD}


void  S20326C1 ::v1(){vfunc_called(this, "_ZN8S20326C12v1Ev");}
void  S20326C1 ::v2(){vfunc_called(this, "_ZN8S20326C12v2Ev");}
void  S20326C1 ::v3(){vfunc_called(this, "_ZN8S20326C12v3Ev");}
void  S20326C1 ::v4(){vfunc_called(this, "_ZN8S20326C12v4Ev");}
void  S20326C1 ::v5(){vfunc_called(this, "_ZN8S20326C12v5Ev");}
S20326C1 ::~S20326C1(){ note_dtor("S20326C1", this);} // tgen
S20326C1 ::S20326C1(){ note_ctor("S20326C1", this);} // tgen

static void Test_S20326C1()
{
  extern Class_Descriptor cd_S20326C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,9)];
    init_test(&cd_S20326C1, buf);
    S20326C1 *dp, &lv = *(dp=new (buf) S20326C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20326C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20326C1)");
    check_base_class_offset(lv, (S20326C2*), ABISELECT(32,16), "S20326C1");
    check_field_offset(lv, s20326c1f0, ABISELECT(16,4), "S20326C1.s20326c1f0");
    test_class_info(&lv, &cd_S20326C1);
    dp->~S20326C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20326C1(Test_S20326C1, "S20326C1", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S20326C1C1Ev();
extern void _ZN8S20326C1D1Ev();
Name_Map name_map_S20326C1[] = {
  NSPAIR(_ZN8S20326C1C1Ev),
  NSPAIR(_ZN8S20326C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20326C2;
extern VTBL_ENTRY _ZTI8S20326C2[];
extern  VTBL_ENTRY _ZTV8S20326C2[];
static Base_Class bases_S20326C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20326C2,    ABISELECT(32,16), //bcp->offset
    10, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S20326C1[];
extern void _ZN8S20326C12v1Ev();
extern void _ZN8S20326C12v2Ev();
extern void _ZN8S20326C12v3Ev();
extern void _ZN8S20326C12v4Ev();
extern void _ZN8S20326C12v5Ev();
extern void _ZN8S20326C1D1Ev();
extern void _ZN8S20326C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20326C1D1Ev,_ZTv0_n12_N8S20326C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S20326C1D1Ev,_ZThn16_N8S20326C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20326C1D0Ev,_ZTv0_n12_N8S20326C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S20326C1D0Ev,_ZThn16_N8S20326C1D0Ev)() __attribute__((weak));
extern void _ZN8S20326C22v6Ev();
extern void _ZN8S20326C22v7Ev();
static  VTBL_ENTRY vtc_S20326C1[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20326C1[0]),
  (VTBL_ENTRY)&_ZN8S20326C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20326C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20326C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20326C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20326C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20326C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20326C1D0Ev,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20326C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20326C1D1Ev,_ZTv0_n12_N8S20326C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20326C1D0Ev,_ZTv0_n12_N8S20326C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20326C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20326C22v7Ev,
};
extern VTBL_ENTRY _ZTV8S20326C1[];
static  VTT_ENTRY vtt_S20326C1[] = {
  {&(_ZTV8S20326C1[3]),  3,19},
  {&(_ZTV8S20326C1[15]),  15,19},
};
extern VTBL_ENTRY _ZTI8S20326C1[];
extern  VTBL_ENTRY _ZTV8S20326C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20326C1[];
static VTBL_ENTRY alt_thunk_names132[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20326C1D0Ev,_ZTv0_n12_N8S20326C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20326C1D0Ev,_ZThn16_N8S20326C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20326C1D1Ev,_ZTv0_n12_N8S20326C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20326C1D1Ev,_ZThn16_N8S20326C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20326C1 = {  "S20326C1", // class name
  bases_S20326C1, 1,
  &(vtc_S20326C1[0]), // expected_vtbl_contents
  &(vtt_S20326C1[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S20326C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20326C1),19, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20326C1),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names132,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6565C2  {
  virtual void  v2(); // _ZN7S6565C22v2Ev
  virtual void  v3(); // _ZN7S6565C22v3Ev
  virtual void  v4(); // _ZN7S6565C22v4Ev
  virtual void  v5(); // _ZN7S6565C22v5Ev
  virtual void  v6(); // _ZN7S6565C22v6Ev
  virtual void  v7(); // _ZN7S6565C22v7Ev
  virtual void  v8(); // _ZN7S6565C22v8Ev
  virtual void  v9(); // _ZN7S6565C22v9Ev
  virtual void  v10(); // _ZN7S6565C23v10Ev
  ~S6565C2(); // tgen
  S6565C2(); // tgen
};
//SIG(-1 S6565C2) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S6565C2 ::v2(){vfunc_called(this, "_ZN7S6565C22v2Ev");}
void  S6565C2 ::v3(){vfunc_called(this, "_ZN7S6565C22v3Ev");}
void  S6565C2 ::v4(){vfunc_called(this, "_ZN7S6565C22v4Ev");}
void  S6565C2 ::v5(){vfunc_called(this, "_ZN7S6565C22v5Ev");}
void  S6565C2 ::v6(){vfunc_called(this, "_ZN7S6565C22v6Ev");}
void  S6565C2 ::v7(){vfunc_called(this, "_ZN7S6565C22v7Ev");}
void  S6565C2 ::v8(){vfunc_called(this, "_ZN7S6565C22v8Ev");}
void  S6565C2 ::v9(){vfunc_called(this, "_ZN7S6565C22v9Ev");}
void  S6565C2 ::v10(){vfunc_called(this, "_ZN7S6565C23v10Ev");}
S6565C2 ::~S6565C2(){ note_dtor("S6565C2", this);} // tgen
S6565C2 ::S6565C2(){ note_ctor("S6565C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6565C2C1Ev();
extern void _ZN7S6565C2D1Ev();
Name_Map name_map_S6565C2[] = {
  NSPAIR(_ZN7S6565C2C1Ev),
  NSPAIR(_ZN7S6565C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6565C2[];
extern void _ZN7S6565C22v2Ev();
extern void _ZN7S6565C22v3Ev();
extern void _ZN7S6565C22v4Ev();
extern void _ZN7S6565C22v5Ev();
extern void _ZN7S6565C22v6Ev();
extern void _ZN7S6565C22v7Ev();
extern void _ZN7S6565C22v8Ev();
extern void _ZN7S6565C22v9Ev();
extern void _ZN7S6565C23v10Ev();
static  VTBL_ENTRY vtc_S6565C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6565C2[0]),
  (VTBL_ENTRY)&_ZN7S6565C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6565C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6565C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6565C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6565C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6565C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6565C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6565C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6565C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S6565C2[];
extern  VTBL_ENTRY _ZTV7S6565C2[];
Class_Descriptor cd_S6565C2 = {  "S6565C2", // class name
  0,0,//no base classes
  &(vtc_S6565C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6565C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6565C2),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  S6565C1  : S6565C2 {
  virtual  ~S6565C1(); // _ZN7S6565C1D1Ev
  virtual void  v1(); // _ZN7S6565C12v1Ev
  S6565C1(); // tgen
};
//SIG(1 S6565C1) C1{ BC2{ v2 v3 v4 v5 v6 v7 v8 v9 v10} vd v1}


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

static void Test_S6565C1()
{
  extern Class_Descriptor cd_S6565C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6565C1, buf);
    S6565C1 *dp, &lv = *(dp=new (buf) S6565C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6565C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6565C1)");
    check_base_class_offset(lv, (S6565C2*), 0, "S6565C1");
    test_class_info(&lv, &cd_S6565C1);
    dp->~S6565C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6565C1(Test_S6565C1, "S6565C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6565C1C1Ev();
extern void _ZN7S6565C1D1Ev();
Name_Map name_map_S6565C1[] = {
  NSPAIR(_ZN7S6565C1C1Ev),
  NSPAIR(_ZN7S6565C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6565C2;
extern VTBL_ENTRY _ZTI7S6565C2[];
extern  VTBL_ENTRY _ZTV7S6565C2[];
static Base_Class bases_S6565C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6565C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S6565C1[];
extern void _ZN7S6565C22v2Ev();
extern void _ZN7S6565C22v3Ev();
extern void _ZN7S6565C22v4Ev();
extern void _ZN7S6565C22v5Ev();
extern void _ZN7S6565C22v6Ev();
extern void _ZN7S6565C22v7Ev();
extern void _ZN7S6565C22v8Ev();
extern void _ZN7S6565C22v9Ev();
extern void _ZN7S6565C23v10Ev();
extern void _ZN7S6565C1D1Ev();
extern void _ZN7S6565C1D0Ev();
extern void _ZN7S6565C12v1Ev();
static  VTBL_ENTRY vtc_S6565C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6565C1[0]),
  (VTBL_ENTRY)&_ZN7S6565C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6565C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6565C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6565C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6565C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6565C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6565C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6565C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6565C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6565C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6565C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6565C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S6565C1[];
extern  VTBL_ENTRY _ZTV7S6565C1[];
Class_Descriptor cd_S6565C1 = {  "S6565C1", // class name
  bases_S6565C1, 1,
  &(vtc_S6565C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6565C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6565C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20088C2_nt  {
  virtual void  v2(); // _ZN11S20088C2_nt2v2Ev
  virtual void  v3(); // _ZN11S20088C2_nt2v3Ev
  ~S20088C2_nt(); // tgen
  S20088C2_nt(); // tgen
};
//SIG(-1 S20088C2_nt) C1{ v1 v2}


void  S20088C2_nt ::v2(){vfunc_called(this, "_ZN11S20088C2_nt2v2Ev");}
void  S20088C2_nt ::v3(){vfunc_called(this, "_ZN11S20088C2_nt2v3Ev");}
S20088C2_nt ::~S20088C2_nt(){ note_dtor("S20088C2_nt", this);} // tgen
S20088C2_nt ::S20088C2_nt(){ note_ctor("S20088C2_nt", this);} // tgen

//skip512 S20088C2_nt

#else // __cplusplus

extern void _ZN11S20088C2_ntC1Ev();
extern void _ZN11S20088C2_ntD1Ev();
Name_Map name_map_S20088C2_nt[] = {
  NSPAIR(_ZN11S20088C2_ntC1Ev),
  NSPAIR(_ZN11S20088C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20088C2_nt[];
extern void _ZN11S20088C2_nt2v2Ev();
extern void _ZN11S20088C2_nt2v3Ev();
static  VTBL_ENTRY vtc_S20088C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20088C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S20088C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S20088C2_nt2v3Ev,
};
extern VTBL_ENTRY _ZTI11S20088C2_nt[];
VTBL_ENTRY *P__ZTI11S20088C2_nt = _ZTI11S20088C2_nt; 
extern  VTBL_ENTRY _ZTV11S20088C2_nt[];
Class_Descriptor cd_S20088C2_nt = {  "S20088C2_nt", // class name
  0,0,//no base classes
  &(vtc_S20088C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S20088C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S20088C2_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  S20088C3  {
  __tsi64 s20088c3f0;
  int s20088c3f1;
  virtual  ~S20088C3(); // _ZN8S20088C3D1Ev
  virtual void  v4(); // _ZN8S20088C32v4Ev
  virtual void  v5(); // _ZN8S20088C32v5Ev
  S20088C3(); // tgen
};
//SIG(-1 S20088C3) C1{ vd v1 v2 FL Fi}


 S20088C3 ::~S20088C3(){ note_dtor("S20088C3", this);}
void  S20088C3 ::v4(){vfunc_called(this, "_ZN8S20088C32v4Ev");}
void  S20088C3 ::v5(){vfunc_called(this, "_ZN8S20088C32v5Ev");}
S20088C3 ::S20088C3(){ note_ctor("S20088C3", this);} // tgen

static void Test_S20088C3()
{
  extern Class_Descriptor cd_S20088C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20088C3, buf);
    S20088C3 *dp, &lv = *(dp=new (buf) S20088C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20088C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20088C3)");
    check_field_offset(lv, s20088c3f0, ABISELECT(8,4), "S20088C3.s20088c3f0");
    check_field_offset(lv, s20088c3f1, ABISELECT(16,12), "S20088C3.s20088c3f1");
    test_class_info(&lv, &cd_S20088C3);
    dp->~S20088C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20088C3(Test_S20088C3, "S20088C3", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S20088C3C1Ev();
extern void _ZN8S20088C3D1Ev();
Name_Map name_map_S20088C3[] = {
  NSPAIR(_ZN8S20088C3C1Ev),
  NSPAIR(_ZN8S20088C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20088C3[];
extern void _ZN8S20088C3D1Ev();
extern void _ZN8S20088C3D0Ev();
extern void _ZN8S20088C32v4Ev();
extern void _ZN8S20088C32v5Ev();
static  VTBL_ENTRY vtc_S20088C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20088C3[0]),
  (VTBL_ENTRY)&_ZN8S20088C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20088C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20088C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20088C32v5Ev,
};
extern VTBL_ENTRY _ZTI8S20088C3[];
extern  VTBL_ENTRY _ZTV8S20088C3[];
Class_Descriptor cd_S20088C3 = {  "S20088C3", // class name
  0,0,//no base classes
  &(vtc_S20088C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S20088C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20088C3),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  S20088C1  : virtual S20088C2_nt , virtual S20088C3 {
  virtual  ~S20088C1(); // _ZN8S20088C1D2Ev
  virtual void  v1(); // _ZN8S20088C12v1Ev
  S20088C1(); // tgen
};
//SIG(1 S20088C1) C1{ VBC2{ v2 v3} VBC3{ vd v4 v5 FL Fi} vd v1}


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

static void Test_S20088C1()
{
  extern Class_Descriptor cd_S20088C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S20088C1, buf);
    S20088C1 *dp, &lv = *(dp=new (buf) S20088C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S20088C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20088C1)");
    check_base_class_offset(lv, (S20088C2_nt*), 0, "S20088C1");
    check_base_class_offset(lv, (S20088C3*), ABISELECT(8,4), "S20088C1");
    test_class_info(&lv, &cd_S20088C1);
    dp->~S20088C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20088C1(Test_S20088C1, "S20088C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S20088C1C1Ev();
extern void _ZN8S20088C1D2Ev();
Name_Map name_map_S20088C1[] = {
  NSPAIR(_ZN8S20088C1C1Ev),
  NSPAIR(_ZN8S20088C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20088C2_nt;
extern VTBL_ENTRY _ZTI11S20088C2_nt[];
extern  VTBL_ENTRY _ZTV11S20088C2_nt[];
extern Class_Descriptor cd_S20088C3;
extern VTBL_ENTRY _ZTI8S20088C3[];
extern  VTBL_ENTRY _ZTV8S20088C3[];
static Base_Class bases_S20088C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20088C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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_S20088C3,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S20088C1[];
extern void _ZN11S20088C2_nt2v2Ev();
extern void _ZN11S20088C2_nt2v3Ev();
extern void _ZN8S20088C1D1Ev();
extern void _ZN8S20088C1D0Ev();
extern void _ZN8S20088C12v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S20088C1D1Ev,_ZTv0_n12_N8S20088C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20088C1D1Ev,_ZThn4_N8S20088C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20088C1D0Ev,_ZTv0_n12_N8S20088C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S20088C1D0Ev,_ZThn4_N8S20088C1D0Ev)() __attribute__((weak));
extern void _ZN8S20088C32v4Ev();
extern void _ZN8S20088C32v5Ev();
static  VTBL_ENTRY vtc_S20088C1[] = {
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20088C1[0]),
  (VTBL_ENTRY)&_ZN11S20088C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S20088C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN8S20088C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20088C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20088C12v1Ev,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20088C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20088C1D1Ev,_ZTv0_n12_N8S20088C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20088C1D0Ev,_ZTv0_n12_N8S20088C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20088C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20088C32v5Ev,
};
extern VTBL_ENTRY _ZTV8S20088C1[];
static  VTT_ENTRY vtt_S20088C1[] = {
  {&(_ZTV8S20088C1[6]),  6,20},
  {&(_ZTV8S20088C1[6]),  6,20},
  {&(_ZTV8S20088C1[16]),  16,20},
};
extern VTBL_ENTRY _ZTI8S20088C1[];
extern  VTBL_ENTRY _ZTV8S20088C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20088C1[];
static VTBL_ENTRY alt_thunk_names133[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20088C1D0Ev,_ZTv0_n12_N8S20088C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20088C1D0Ev,_ZThn4_N8S20088C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20088C1D1Ev,_ZTv0_n12_N8S20088C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20088C1D1Ev,_ZThn4_N8S20088C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20088C1 = {  "S20088C1", // class name
  bases_S20088C1, 2,
  &(vtc_S20088C1[0]), // expected_vtbl_contents
  &(vtt_S20088C1[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S20088C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20088C1),20, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20088C1),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names133,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9093C2_nt  {
  virtual  ~S9093C2_nt(); // _ZN10S9093C2_ntD1Ev
  virtual void  v2(); // _ZN10S9093C2_nt2v2Ev
  S9093C2_nt(); // tgen
};
//SIG(-1 S9093C2_nt) C1{ vd v1}


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

//skip512 S9093C2_nt

#else // __cplusplus

extern void _ZN10S9093C2_ntC1Ev();
extern void _ZN10S9093C2_ntD1Ev();
Name_Map name_map_S9093C2_nt[] = {
  NSPAIR(_ZN10S9093C2_ntC1Ev),
  NSPAIR(_ZN10S9093C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S9093C2_nt[];
extern void _ZN10S9093C2_ntD1Ev();
extern void _ZN10S9093C2_ntD0Ev();
extern void _ZN10S9093C2_nt2v2Ev();
static  VTBL_ENTRY vtc_S9093C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S9093C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S9093C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S9093C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S9093C2_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI10S9093C2_nt[];
VTBL_ENTRY *P__ZTI10S9093C2_nt = _ZTI10S9093C2_nt; 
extern  VTBL_ENTRY _ZTV10S9093C2_nt[];
Class_Descriptor cd_S9093C2_nt = {  "S9093C2_nt", // class name
  0,0,//no base classes
  &(vtc_S9093C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S9093C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S9093C2_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  S9093C1  : S9093C2_nt {
  void *s9093c1f0;
  ::S5266C38_nt s9093c1f1;
  virtual  ~S9093C1(); // _ZN7S9093C1D1Ev
  virtual void  v1(); // _ZN7S9093C12v1Ev
  S9093C1(); // tgen
};
//SIG(1 S9093C1) C1{ BC2{ vd v2} vd v1 Fp FC3{ m FC4{ m FL}}}


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

static void Test_S9093C1()
{
  extern Class_Descriptor cd_S9093C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S9093C1, buf);
    S9093C1 *dp, &lv = *(dp=new (buf) S9093C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S9093C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9093C1)");
    check_base_class_offset(lv, (S9093C2_nt*), 0, "S9093C1");
    check_field_offset(lv, s9093c1f0, ABISELECT(8,4), "S9093C1.s9093c1f0");
    check_field_offset(lv, s9093c1f1, ABISELECT(16,8), "S9093C1.s9093c1f1");
    test_class_info(&lv, &cd_S9093C1);
    dp->~S9093C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9093C1(Test_S9093C1, "S9093C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S9093C1C1Ev();
extern void _ZN7S9093C1D1Ev();
Name_Map name_map_S9093C1[] = {
  NSPAIR(_ZN7S9093C1C1Ev),
  NSPAIR(_ZN7S9093C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9093C2_nt;
extern VTBL_ENTRY _ZTI10S9093C2_nt[];
extern  VTBL_ENTRY _ZTV10S9093C2_nt[];
static Base_Class bases_S9093C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9093C2_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 _ZTI7S9093C1[];
extern void _ZN7S9093C1D1Ev();
extern void _ZN7S9093C1D0Ev();
extern void _ZN10S9093C2_nt2v2Ev();
extern void _ZN7S9093C12v1Ev();
static  VTBL_ENTRY vtc_S9093C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9093C1[0]),
  (VTBL_ENTRY)&_ZN7S9093C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9093C1D0Ev,
  (VTBL_ENTRY)&_ZN10S9093C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S9093C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S9093C1[];
extern  VTBL_ENTRY _ZTV7S9093C1[];
Class_Descriptor cd_S9093C1 = {  "S9093C1", // class name
  bases_S9093C1, 1,
  &(vtc_S9093C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S9093C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9093C1),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  S4346C3_nt  {
  void *s4346c3f0;
  virtual  ~S4346C3_nt(); // _ZN10S4346C3_ntD1Ev
  virtual void  v2(); // _ZN10S4346C3_nt2v2Ev
  virtual void  v3(); // _ZN10S4346C3_nt2v3Ev
  S4346C3_nt(); // tgen
};
//SIG(-1 S4346C3_nt) C1{ vd v1 v2 Fp}


 S4346C3_nt ::~S4346C3_nt(){ note_dtor("S4346C3_nt", this);}
void  S4346C3_nt ::v2(){vfunc_called(this, "_ZN10S4346C3_nt2v2Ev");}
void  S4346C3_nt ::v3(){vfunc_called(this, "_ZN10S4346C3_nt2v3Ev");}
S4346C3_nt ::S4346C3_nt(){ note_ctor("S4346C3_nt", this);} // tgen

//skip512 S4346C3_nt

#else // __cplusplus

extern void _ZN10S4346C3_ntC1Ev();
extern void _ZN10S4346C3_ntD1Ev();
Name_Map name_map_S4346C3_nt[] = {
  NSPAIR(_ZN10S4346C3_ntC1Ev),
  NSPAIR(_ZN10S4346C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4346C3_nt[];
extern void _ZN10S4346C3_ntD1Ev();
extern void _ZN10S4346C3_ntD0Ev();
extern void _ZN10S4346C3_nt2v2Ev();
extern void _ZN10S4346C3_nt2v3Ev();
static  VTBL_ENTRY vtc_S4346C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4346C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S4346C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4346C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4346C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S4346C3_nt2v3Ev,
};
extern VTBL_ENTRY _ZTI10S4346C3_nt[];
VTBL_ENTRY *P__ZTI10S4346C3_nt = _ZTI10S4346C3_nt; 
extern  VTBL_ENTRY _ZTV10S4346C3_nt[];
Class_Descriptor cd_S4346C3_nt = {  "S4346C3_nt", // class name
  0,0,//no base classes
  &(vtc_S4346C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S4346C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4346C3_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  S4346C2  : S4346C3_nt {
  void *s4346c2f0;
  virtual  ~S4346C2(); // _ZN7S4346C2D1Ev
  virtual void  v4(); // _ZN7S4346C22v4Ev
  S4346C2(); // tgen
};
//SIG(-1 S4346C2) C1{ BC2{ vd v2 v3 Fp} vd v1 Fp}


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

static void Test_S4346C2()
{
  extern Class_Descriptor cd_S4346C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S4346C2, buf);
    S4346C2 *dp, &lv = *(dp=new (buf) S4346C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S4346C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4346C2)");
    check_base_class_offset(lv, (S4346C3_nt*), 0, "S4346C2");
    check_field_offset(lv, s4346c2f0, ABISELECT(16,8), "S4346C2.s4346c2f0");
    test_class_info(&lv, &cd_S4346C2);
    dp->~S4346C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4346C2(Test_S4346C2, "S4346C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S4346C2C1Ev();
extern void _ZN7S4346C2D1Ev();
Name_Map name_map_S4346C2[] = {
  NSPAIR(_ZN7S4346C2C1Ev),
  NSPAIR(_ZN7S4346C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4346C3_nt;
extern VTBL_ENTRY _ZTI10S4346C3_nt[];
extern  VTBL_ENTRY _ZTV10S4346C3_nt[];
static Base_Class bases_S4346C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4346C3_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 _ZTI7S4346C2[];
extern void _ZN7S4346C2D1Ev();
extern void _ZN7S4346C2D0Ev();
extern void _ZN10S4346C3_nt2v2Ev();
extern void _ZN10S4346C3_nt2v3Ev();
extern void _ZN7S4346C22v4Ev();
static  VTBL_ENTRY vtc_S4346C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4346C2[0]),
  (VTBL_ENTRY)&_ZN7S4346C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4346C2D0Ev,
  (VTBL_ENTRY)&_ZN10S4346C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S4346C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN7S4346C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S4346C2[];
extern  VTBL_ENTRY _ZTV7S4346C2[];
Class_Descriptor cd_S4346C2 = {  "S4346C2", // class name
  bases_S4346C2, 1,
  &(vtc_S4346C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S4346C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4346C2),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  S4346C1  : S4346C2 {
  int s4346c1f0;
  virtual void  v1(); // _ZN7S4346C12v1Ev
  ~S4346C1(); // tgen
  S4346C1(); // tgen
};
//SIG(1 S4346C1) C1{ BC2{ BC3{ vd v2 v3 Fp} vd v4 Fp} v1 Fi}


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

static void Test_S4346C1()
{
  extern Class_Descriptor cd_S4346C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S4346C1, buf);
    S4346C1 *dp, &lv = *(dp=new (buf) S4346C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S4346C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4346C1)");
    check_base_class_offset(lv, (S4346C3_nt*)(S4346C2*), 0, "S4346C1");
    check_base_class_offset(lv, (S4346C2*), 0, "S4346C1");
    check_field_offset(lv, s4346c1f0, ABISELECT(24,12), "S4346C1.s4346c1f0");
    test_class_info(&lv, &cd_S4346C1);
    dp->~S4346C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4346C1(Test_S4346C1, "S4346C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S4346C1C1Ev();
extern void _ZN7S4346C1D1Ev();
Name_Map name_map_S4346C1[] = {
  NSPAIR(_ZN7S4346C1C1Ev),
  NSPAIR(_ZN7S4346C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4346C3_nt;
extern VTBL_ENTRY _ZTI10S4346C3_nt[];
extern  VTBL_ENTRY _ZTV10S4346C3_nt[];
extern Class_Descriptor cd_S4346C2;
extern VTBL_ENTRY _ZTI7S4346C2[];
extern  VTBL_ENTRY _ZTV7S4346C2[];
static Base_Class bases_S4346C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4346C3_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_S4346C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4346C1[];
extern void _ZN7S4346C1D1Ev();
extern void _ZN7S4346C1D0Ev();
extern void _ZN10S4346C3_nt2v2Ev();
extern void _ZN10S4346C3_nt2v3Ev();
extern void _ZN7S4346C22v4Ev();
extern void _ZN7S4346C12v1Ev();
static  VTBL_ENTRY vtc_S4346C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4346C1[0]),
  (VTBL_ENTRY)&_ZN7S4346C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4346C1D0Ev,
  (VTBL_ENTRY)&_ZN10S4346C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S4346C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN7S4346C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4346C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4346C1[];
extern  VTBL_ENTRY _ZTV7S4346C1[];
Class_Descriptor cd_S4346C1 = {  "S4346C1", // class name
  bases_S4346C1, 2,
  &(vtc_S4346C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S4346C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4346C1),8, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17737C1  {
  void *s17737c1f0;
  int s17737c1f1;
  void *s17737c1f2;
  int s17737c1f3;
  void *s17737c1f4;
  int s17737c1f5;
  void *s17737c1f6;
  int s17737c1f7;
  void *s17737c1f8;
  int s17737c1f9[2];
  void  mf17737c1(); // _ZN8S17737C19mf17737c1Ev
};
//SIG(1 S17737C1) C1{ m Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi[2]}


void  S17737C1 ::mf17737c1(){}

static void Test_S17737C1()
{
  {
    init_simple_test("S17737C1");
    S17737C1 lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S17737C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17737C1)");
    check_field_offset(lv, s17737c1f0, 0, "S17737C1.s17737c1f0");
    check_field_offset(lv, s17737c1f1, ABISELECT(8,4), "S17737C1.s17737c1f1");
    check_field_offset(lv, s17737c1f2, ABISELECT(16,8), "S17737C1.s17737c1f2");
    check_field_offset(lv, s17737c1f3, ABISELECT(24,12), "S17737C1.s17737c1f3");
    check_field_offset(lv, s17737c1f4, ABISELECT(32,16), "S17737C1.s17737c1f4");
    check_field_offset(lv, s17737c1f5, ABISELECT(40,20), "S17737C1.s17737c1f5");
    check_field_offset(lv, s17737c1f6, ABISELECT(48,24), "S17737C1.s17737c1f6");
    check_field_offset(lv, s17737c1f7, ABISELECT(56,28), "S17737C1.s17737c1f7");
    check_field_offset(lv, s17737c1f8, ABISELECT(64,32), "S17737C1.s17737c1f8");
    check_field_offset(lv, s17737c1f9, ABISELECT(72,36), "S17737C1.s17737c1f9");
  }
}
static Arrange_To_Call_Me vS17737C1(Test_S17737C1, "S17737C1", ABISELECT(80,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6331C1  : S5266C29 {
  char s6331c1f0[192];
  int s6331c1f1[146];
  void *s6331c1f2;
  int s6331c1f3;
  virtual  ~S6331C1(); // _ZN7S6331C1D1Ev
  virtual void  v1(); // _ZN7S6331C12v1Ev
  S6331C1(); // tgen
};
//SIG(1 S6331C1) C1{ BC2{ m} vd v1 Fc[192] Fi[146] Fp Fi}


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

static void Test_S6331C1()
{
  extern Class_Descriptor cd_S6331C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(101,198)];
    init_test(&cd_S6331C1, buf);
    S6331C1 *dp, &lv = *(dp=new (buf) S6331C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(800,788), "sizeof(S6331C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6331C1)");
    check_base_class_offset(lv, (S5266C29*), 0, "S6331C1");
    check_field_offset(lv, s6331c1f0, ABISELECT(8,4), "S6331C1.s6331c1f0");
    check_field_offset(lv, s6331c1f1, ABISELECT(200,196), "S6331C1.s6331c1f1");
    check_field_offset(lv, s6331c1f2, ABISELECT(784,780), "S6331C1.s6331c1f2");
    check_field_offset(lv, s6331c1f3, ABISELECT(792,784), "S6331C1.s6331c1f3");
    test_class_info(&lv, &cd_S6331C1);
    dp->~S6331C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6331C1(Test_S6331C1, "S6331C1", ABISELECT(800,788));

#else // __cplusplus

extern void _ZN7S6331C1C1Ev();
extern void _ZN7S6331C1D1Ev();
Name_Map name_map_S6331C1[] = {
  NSPAIR(_ZN7S6331C1C1Ev),
  NSPAIR(_ZN7S6331C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
static Base_Class bases_S6331C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S6331C1[];
extern void _ZN7S6331C1D1Ev();
extern void _ZN7S6331C1D0Ev();
extern void _ZN7S6331C12v1Ev();
static  VTBL_ENTRY vtc_S6331C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6331C1[0]),
  (VTBL_ENTRY)&_ZN7S6331C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6331C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6331C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S6331C1[];
extern  VTBL_ENTRY _ZTV7S6331C1[];
Class_Descriptor cd_S6331C1 = {  "S6331C1", // class name
  bases_S6331C1, 1,
  &(vtc_S6331C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(800,788), // object size
  NSPAIRA(_ZTI7S6331C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6331C1),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  S11237C1  {
  ::S11199C4_nt s11237c1f0;
  int s11237c1f1;
  char s11237c1f2[128];
};
//SIG(1 S11237C1) C1{ FC2{ FC3{ Fc[20]} Fc[16]} Fi Fc[128]}



static void Test_S11237C1()
{
  {
    init_simple_test("S11237C1");
    S11237C1 lv;
    check2(sizeof(lv), 168, "sizeof(S11237C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11237C1)");
    check_field_offset(lv, s11237c1f0, 0, "S11237C1.s11237c1f0");
    check_field_offset(lv, s11237c1f1, 36, "S11237C1.s11237c1f1");
    check_field_offset(lv, s11237c1f2, 40, "S11237C1.s11237c1f2");
  }
}
static Arrange_To_Call_Me vS11237C1(Test_S11237C1, "S11237C1", 168);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18848C1  {
  int s18848c1f0;
  short s18848c1f1;
  virtual  ~S18848C1(); // _ZN8S18848C1D1Ev
  virtual void  v1(); // _ZN8S18848C12v1Ev
  virtual void  v2(); // _ZN8S18848C12v2Ev
  virtual void  v3(); // _ZN8S18848C12v3Ev
  virtual void  v4(); // _ZN8S18848C12v4Ev
  virtual void  v5(); // _ZN8S18848C12v5Ev
  virtual void  v6(); // _ZN8S18848C12v6Ev
  virtual void  v7(); // _ZN8S18848C12v7Ev
  virtual void  v8(); // _ZN8S18848C12v8Ev
  S18848C1(); // tgen
};
//SIG(1 S18848C1) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fs}


 S18848C1 ::~S18848C1(){ note_dtor("S18848C1", this);}
void  S18848C1 ::v1(){vfunc_called(this, "_ZN8S18848C12v1Ev");}
void  S18848C1 ::v2(){vfunc_called(this, "_ZN8S18848C12v2Ev");}
void  S18848C1 ::v3(){vfunc_called(this, "_ZN8S18848C12v3Ev");}
void  S18848C1 ::v4(){vfunc_called(this, "_ZN8S18848C12v4Ev");}
void  S18848C1 ::v5(){vfunc_called(this, "_ZN8S18848C12v5Ev");}
void  S18848C1 ::v6(){vfunc_called(this, "_ZN8S18848C12v6Ev");}
void  S18848C1 ::v7(){vfunc_called(this, "_ZN8S18848C12v7Ev");}
void  S18848C1 ::v8(){vfunc_called(this, "_ZN8S18848C12v8Ev");}
S18848C1 ::S18848C1(){ note_ctor("S18848C1", this);} // tgen

static void Test_S18848C1()
{
  extern Class_Descriptor cd_S18848C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S18848C1, buf);
    S18848C1 *dp, &lv = *(dp=new (buf) S18848C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S18848C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18848C1)");
    check_field_offset(lv, s18848c1f0, ABISELECT(8,4), "S18848C1.s18848c1f0");
    check_field_offset(lv, s18848c1f1, ABISELECT(12,8), "S18848C1.s18848c1f1");
    test_class_info(&lv, &cd_S18848C1);
    dp->~S18848C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18848C1(Test_S18848C1, "S18848C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S18848C1C1Ev();
extern void _ZN8S18848C1D1Ev();
Name_Map name_map_S18848C1[] = {
  NSPAIR(_ZN8S18848C1C1Ev),
  NSPAIR(_ZN8S18848C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18848C1[];
extern void _ZN8S18848C1D1Ev();
extern void _ZN8S18848C1D0Ev();
extern void _ZN8S18848C12v1Ev();
extern void _ZN8S18848C12v2Ev();
extern void _ZN8S18848C12v3Ev();
extern void _ZN8S18848C12v4Ev();
extern void _ZN8S18848C12v5Ev();
extern void _ZN8S18848C12v6Ev();
extern void _ZN8S18848C12v7Ev();
extern void _ZN8S18848C12v8Ev();
static  VTBL_ENTRY vtc_S18848C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18848C1[0]),
  (VTBL_ENTRY)&_ZN8S18848C1D1Ev,
  (VTBL_ENTRY)&_ZN8S18848C1D0Ev,
  (VTBL_ENTRY)&_ZN8S18848C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18848C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18848C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18848C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18848C12v5Ev,
  (VTBL_ENTRY)&_ZN8S18848C12v6Ev,
  (VTBL_ENTRY)&_ZN8S18848C12v7Ev,
  (VTBL_ENTRY)&_ZN8S18848C12v8Ev,
};
extern VTBL_ENTRY _ZTI8S18848C1[];
extern  VTBL_ENTRY _ZTV8S18848C1[];
Class_Descriptor cd_S18848C1 = {  "S18848C1", // class name
  0,0,//no base classes
  &(vtc_S18848C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S18848C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18848C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8209C1  : S6795C8_nt {
  ::S3765C5_nt s8209c1f0[64];
  virtual  ~S8209C1(); // _ZN7S8209C1D1Ev
  S8209C1(); // tgen
};
//SIG(1 S8209C1) C1{ BC2{ vd m Fp} vd FC3{ m Fp[2]}[64]}


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

static void Test_S8209C1()
{
  extern Class_Descriptor cd_S8209C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[131];
    init_test(&cd_S8209C1, buf);
    S8209C1 *dp, &lv = *(dp=new (buf) S8209C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1040,520), "sizeof(S8209C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8209C1)");
    check_base_class_offset(lv, (S6795C8_nt*), 0, "S8209C1");
    check_field_offset(lv, s8209c1f0, ABISELECT(16,8), "S8209C1.s8209c1f0");
    test_class_info(&lv, &cd_S8209C1);
    dp->~S8209C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8209C1(Test_S8209C1, "S8209C1", ABISELECT(1040,520));

#else // __cplusplus

extern void _ZN7S8209C1C1Ev();
extern void _ZN7S8209C1D1Ev();
Name_Map name_map_S8209C1[] = {
  NSPAIR(_ZN7S8209C1C1Ev),
  NSPAIR(_ZN7S8209C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6795C8_nt;
extern VTBL_ENTRY _ZTI10S6795C8_nt[];
extern  VTBL_ENTRY _ZTV10S6795C8_nt[];
static Base_Class bases_S8209C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6795C8_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 _ZTI7S8209C1[];
extern void _ZN7S8209C1D1Ev();
extern void _ZN7S8209C1D0Ev();
static  VTBL_ENTRY vtc_S8209C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8209C1[0]),
  (VTBL_ENTRY)&_ZN7S8209C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8209C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8209C1[];
extern  VTBL_ENTRY _ZTV7S8209C1[];
Class_Descriptor cd_S8209C1 = {  "S8209C1", // class name
  bases_S8209C1, 1,
  &(vtc_S8209C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1040,520), // object size
  NSPAIRA(_ZTI7S8209C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8209C1),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  S4347C3  {
  void *s4347c3f0;
  virtual  ~S4347C3(); // _ZN7S4347C3D1Ev
  virtual void  v2(); // _ZN7S4347C32v2Ev
  virtual void  v3(); // _ZN7S4347C32v3Ev
  S4347C3(); // tgen
};
//SIG(-1 S4347C3) C1{ vd v1 v2 Fp}


 S4347C3 ::~S4347C3(){ note_dtor("S4347C3", this);}
void  S4347C3 ::v2(){vfunc_called(this, "_ZN7S4347C32v2Ev");}
void  S4347C3 ::v3(){vfunc_called(this, "_ZN7S4347C32v3Ev");}
S4347C3 ::S4347C3(){ note_ctor("S4347C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S4347C3C1Ev();
extern void _ZN7S4347C3D1Ev();
Name_Map name_map_S4347C3[] = {
  NSPAIR(_ZN7S4347C3C1Ev),
  NSPAIR(_ZN7S4347C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4347C3[];
extern void _ZN7S4347C3D1Ev();
extern void _ZN7S4347C3D0Ev();
extern void _ZN7S4347C32v2Ev();
extern void _ZN7S4347C32v3Ev();
static  VTBL_ENTRY vtc_S4347C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4347C3[0]),
  (VTBL_ENTRY)&_ZN7S4347C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4347C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4347C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4347C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S4347C3[];
extern  VTBL_ENTRY _ZTV7S4347C3[];
Class_Descriptor cd_S4347C3 = {  "S4347C3", // class name
  0,0,//no base classes
  &(vtc_S4347C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4347C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4347C3),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  S4347C2  : S4347C3 {
  void *s4347c2f0;
  virtual  ~S4347C2(); // _ZN7S4347C2D1Ev
  virtual void  v4(); // _ZN7S4347C22v4Ev
  S4347C2(); // tgen
};
//SIG(-1 S4347C2) C1{ BC2{ vd v2 v3 Fp} vd v1 Fp}


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

static void Test_S4347C2()
{
  extern Class_Descriptor cd_S4347C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S4347C2, buf);
    S4347C2 *dp, &lv = *(dp=new (buf) S4347C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S4347C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4347C2)");
    check_base_class_offset(lv, (S4347C3*), 0, "S4347C2");
    check_field_offset(lv, s4347c2f0, ABISELECT(16,8), "S4347C2.s4347c2f0");
    test_class_info(&lv, &cd_S4347C2);
    dp->~S4347C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4347C2(Test_S4347C2, "S4347C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S4347C2C1Ev();
extern void _ZN7S4347C2D1Ev();
Name_Map name_map_S4347C2[] = {
  NSPAIR(_ZN7S4347C2C1Ev),
  NSPAIR(_ZN7S4347C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4347C3;
extern VTBL_ENTRY _ZTI7S4347C3[];
extern  VTBL_ENTRY _ZTV7S4347C3[];
static Base_Class bases_S4347C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4347C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4347C2[];
extern void _ZN7S4347C2D1Ev();
extern void _ZN7S4347C2D0Ev();
extern void _ZN7S4347C32v2Ev();
extern void _ZN7S4347C32v3Ev();
extern void _ZN7S4347C22v4Ev();
static  VTBL_ENTRY vtc_S4347C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4347C2[0]),
  (VTBL_ENTRY)&_ZN7S4347C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4347C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4347C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4347C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4347C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S4347C2[];
extern  VTBL_ENTRY _ZTV7S4347C2[];
Class_Descriptor cd_S4347C2 = {  "S4347C2", // class name
  bases_S4347C2, 1,
  &(vtc_S4347C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S4347C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4347C2),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  S4347C1  : S4347C2 {
  virtual void  v1(); // _ZN7S4347C12v1Ev
  ~S4347C1(); // tgen
  S4347C1(); // tgen
};
//SIG(1 S4347C1) C1{ BC2{ BC3{ vd v2 v3 Fp} vd v4 Fp} v1}


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

static void Test_S4347C1()
{
  extern Class_Descriptor cd_S4347C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S4347C1, buf);
    S4347C1 *dp, &lv = *(dp=new (buf) S4347C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S4347C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4347C1)");
    check_base_class_offset(lv, (S4347C3*)(S4347C2*), 0, "S4347C1");
    check_base_class_offset(lv, (S4347C2*), 0, "S4347C1");
    test_class_info(&lv, &cd_S4347C1);
    dp->~S4347C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4347C1(Test_S4347C1, "S4347C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S4347C1C1Ev();
extern void _ZN7S4347C1D1Ev();
Name_Map name_map_S4347C1[] = {
  NSPAIR(_ZN7S4347C1C1Ev),
  NSPAIR(_ZN7S4347C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4347C3;
extern VTBL_ENTRY _ZTI7S4347C3[];
extern  VTBL_ENTRY _ZTV7S4347C3[];
extern Class_Descriptor cd_S4347C2;
extern VTBL_ENTRY _ZTI7S4347C2[];
extern  VTBL_ENTRY _ZTV7S4347C2[];
static Base_Class bases_S4347C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4347C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4347C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4347C1[];
extern void _ZN7S4347C1D1Ev();
extern void _ZN7S4347C1D0Ev();
extern void _ZN7S4347C32v2Ev();
extern void _ZN7S4347C32v3Ev();
extern void _ZN7S4347C22v4Ev();
extern void _ZN7S4347C12v1Ev();
static  VTBL_ENTRY vtc_S4347C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4347C1[0]),
  (VTBL_ENTRY)&_ZN7S4347C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4347C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4347C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4347C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4347C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4347C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4347C1[];
extern  VTBL_ENTRY _ZTV7S4347C1[];
Class_Descriptor cd_S4347C1 = {  "S4347C1", // class name
  bases_S4347C1, 2,
  &(vtc_S4347C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S4347C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4347C1),8, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17918C2  {
  int s17918c2f0[2];
  char s17918c2f1[1420];
  int s17918c2f2;
};
//SIG(-1 S17918C2) C1{ Fi[2] Fc[1420] Fi}



static void Test_S17918C2()
{
  {
    init_simple_test("S17918C2");
    S17918C2 lv;
    check2(sizeof(lv), 1432, "sizeof(S17918C2)");
    check2(__alignof__(lv), 4, "__alignof__(S17918C2)");
    check_field_offset(lv, s17918c2f0, 0, "S17918C2.s17918c2f0");
    check_field_offset(lv, s17918c2f1, 8, "S17918C2.s17918c2f1");
    check_field_offset(lv, s17918c2f2, 1428, "S17918C2.s17918c2f2");
  }
}
static Arrange_To_Call_Me vS17918C2(Test_S17918C2, "S17918C2", 1432);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17918C1  {
  void *s17918c1f0[2];
  ::S17918C2 s17918c1f1;
  void  mf17918c1(); // _ZN8S17918C19mf17918c1Ev
};
//SIG(1 S17918C1) C1{ m Fp[2] FC2{ Fi[2] Fc[1420] Fi}}


void  S17918C1 ::mf17918c1(){}

static void Test_S17918C1()
{
  {
    init_simple_test("S17918C1");
    S17918C1 lv;
    check2(sizeof(lv), ABISELECT(1448,1440), "sizeof(S17918C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17918C1)");
    check_field_offset(lv, s17918c1f0, 0, "S17918C1.s17918c1f0");
    check_field_offset(lv, s17918c1f1, ABISELECT(16,8), "S17918C1.s17918c1f1");
  }
}
static Arrange_To_Call_Me vS17918C1(Test_S17918C1, "S17918C1", ABISELECT(1448,1440));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6775C2  {
  virtual  ~S6775C2(); // _ZN7S6775C2D1Ev
  virtual void  v3(); // _ZN7S6775C22v3Ev
  virtual void  v4(); // _ZN7S6775C22v4Ev
  S6775C2(); // tgen
};
//SIG(-1 S6775C2) C1{ vd v1 v2}


 S6775C2 ::~S6775C2(){ note_dtor("S6775C2", this);}
void  S6775C2 ::v3(){vfunc_called(this, "_ZN7S6775C22v3Ev");}
void  S6775C2 ::v4(){vfunc_called(this, "_ZN7S6775C22v4Ev");}
S6775C2 ::S6775C2(){ note_ctor("S6775C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6775C2C1Ev();
extern void _ZN7S6775C2D1Ev();
Name_Map name_map_S6775C2[] = {
  NSPAIR(_ZN7S6775C2C1Ev),
  NSPAIR(_ZN7S6775C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6775C2[];
extern void _ZN7S6775C2D1Ev();
extern void _ZN7S6775C2D0Ev();
extern void _ZN7S6775C22v3Ev();
extern void _ZN7S6775C22v4Ev();
static  VTBL_ENTRY vtc_S6775C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6775C2[0]),
  (VTBL_ENTRY)&_ZN7S6775C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6775C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6775C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6775C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S6775C2[];
extern  VTBL_ENTRY _ZTV7S6775C2[];
Class_Descriptor cd_S6775C2 = {  "S6775C2", // class name
  0,0,//no base classes
  &(vtc_S6775C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6775C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6775C2),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  S6775C1  : S6775C2 {
  void *s6775c1f0[8];
  int s6775c1f1;
  virtual  ~S6775C1(); // _ZN7S6775C1D1Ev
  virtual void  v1(); // _ZN7S6775C12v1Ev
  virtual void  v2(); // _ZN7S6775C12v2Ev
  S6775C1(); // tgen
};
//SIG(1 S6775C1) C1{ BC2{ vd v3 v4} vd v1 v2 Fp[8] Fi}


 S6775C1 ::~S6775C1(){ note_dtor("S6775C1", this);}
void  S6775C1 ::v1(){vfunc_called(this, "_ZN7S6775C12v1Ev");}
void  S6775C1 ::v2(){vfunc_called(this, "_ZN7S6775C12v2Ev");}
S6775C1 ::S6775C1(){ note_ctor("S6775C1", this);} // tgen

static void Test_S6775C1()
{
  extern Class_Descriptor cd_S6775C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[11];
    init_test(&cd_S6775C1, buf);
    S6775C1 *dp, &lv = *(dp=new (buf) S6775C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S6775C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6775C1)");
    check_base_class_offset(lv, (S6775C2*), 0, "S6775C1");
    check_field_offset(lv, s6775c1f0, ABISELECT(8,4), "S6775C1.s6775c1f0");
    check_field_offset(lv, s6775c1f1, ABISELECT(72,36), "S6775C1.s6775c1f1");
    test_class_info(&lv, &cd_S6775C1);
    dp->~S6775C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6775C1(Test_S6775C1, "S6775C1", ABISELECT(80,40));

#else // __cplusplus

extern void _ZN7S6775C1C1Ev();
extern void _ZN7S6775C1D1Ev();
Name_Map name_map_S6775C1[] = {
  NSPAIR(_ZN7S6775C1C1Ev),
  NSPAIR(_ZN7S6775C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6775C2;
extern VTBL_ENTRY _ZTI7S6775C2[];
extern  VTBL_ENTRY _ZTV7S6775C2[];
static Base_Class bases_S6775C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6775C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S6775C1[];
extern void _ZN7S6775C1D1Ev();
extern void _ZN7S6775C1D0Ev();
extern void _ZN7S6775C22v3Ev();
extern void _ZN7S6775C22v4Ev();
extern void _ZN7S6775C12v1Ev();
extern void _ZN7S6775C12v2Ev();
static  VTBL_ENTRY vtc_S6775C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6775C1[0]),
  (VTBL_ENTRY)&_ZN7S6775C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6775C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6775C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6775C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6775C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6775C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S6775C1[];
extern  VTBL_ENTRY _ZTV7S6775C1[];
Class_Descriptor cd_S6775C1 = {  "S6775C1", // class name
  bases_S6775C1, 1,
  &(vtc_S6775C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,40), // object size
  NSPAIRA(_ZTI7S6775C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6775C1),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  S18867C1  {
  int s18867c1f0;
  void *s18867c1f1[7];
  virtual  ~S18867C1(); // _ZN8S18867C1D1Ev
  virtual void  v1(); // _ZN8S18867C12v1Ev
  virtual void  v2(); // _ZN8S18867C12v2Ev
  virtual void  v3(); // _ZN8S18867C12v3Ev
  virtual void  v4(); // _ZN8S18867C12v4Ev
  virtual void  v5(); // _ZN8S18867C12v5Ev
  virtual void  v6(); // _ZN8S18867C12v6Ev
  S18867C1(); // tgen
};
//SIG(1 S18867C1) C1{ vd v1 v2 v3 v4 v5 v6 Fi Fp[7]}


 S18867C1 ::~S18867C1(){ note_dtor("S18867C1", this);}
void  S18867C1 ::v1(){vfunc_called(this, "_ZN8S18867C12v1Ev");}
void  S18867C1 ::v2(){vfunc_called(this, "_ZN8S18867C12v2Ev");}
void  S18867C1 ::v3(){vfunc_called(this, "_ZN8S18867C12v3Ev");}
void  S18867C1 ::v4(){vfunc_called(this, "_ZN8S18867C12v4Ev");}
void  S18867C1 ::v5(){vfunc_called(this, "_ZN8S18867C12v5Ev");}
void  S18867C1 ::v6(){vfunc_called(this, "_ZN8S18867C12v6Ev");}
S18867C1 ::S18867C1(){ note_ctor("S18867C1", this);} // tgen

static void Test_S18867C1()
{
  extern Class_Descriptor cd_S18867C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S18867C1, buf);
    S18867C1 *dp, &lv = *(dp=new (buf) S18867C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S18867C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18867C1)");
    check_field_offset(lv, s18867c1f0, ABISELECT(8,4), "S18867C1.s18867c1f0");
    check_field_offset(lv, s18867c1f1, ABISELECT(16,8), "S18867C1.s18867c1f1");
    test_class_info(&lv, &cd_S18867C1);
    dp->~S18867C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18867C1(Test_S18867C1, "S18867C1", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN8S18867C1C1Ev();
extern void _ZN8S18867C1D1Ev();
Name_Map name_map_S18867C1[] = {
  NSPAIR(_ZN8S18867C1C1Ev),
  NSPAIR(_ZN8S18867C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18867C1[];
extern void _ZN8S18867C1D1Ev();
extern void _ZN8S18867C1D0Ev();
extern void _ZN8S18867C12v1Ev();
extern void _ZN8S18867C12v2Ev();
extern void _ZN8S18867C12v3Ev();
extern void _ZN8S18867C12v4Ev();
extern void _ZN8S18867C12v5Ev();
extern void _ZN8S18867C12v6Ev();
static  VTBL_ENTRY vtc_S18867C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18867C1[0]),
  (VTBL_ENTRY)&_ZN8S18867C1D1Ev,
  (VTBL_ENTRY)&_ZN8S18867C1D0Ev,
  (VTBL_ENTRY)&_ZN8S18867C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18867C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18867C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18867C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18867C12v5Ev,
  (VTBL_ENTRY)&_ZN8S18867C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S18867C1[];
extern  VTBL_ENTRY _ZTV8S18867C1[];
Class_Descriptor cd_S18867C1 = {  "S18867C1", // class name
  0,0,//no base classes
  &(vtc_S18867C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI8S18867C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18867C1),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  S18056C2  {
  int s18056c2f0[2];
  void *s18056c2f1;
  int s18056c2f2;
  void  mf18056c2(); // _ZN8S18056C29mf18056c2Ev
  virtual  ~S18056C2(); // _ZN8S18056C2D1Ev
  S18056C2(); // tgen
};
//SIG(-1 S18056C2) C1{ vd m Fi[2] Fp Fi}


void  S18056C2 ::mf18056c2(){}
 S18056C2 ::~S18056C2(){ note_dtor("S18056C2", this);}
S18056C2 ::S18056C2(){ note_ctor("S18056C2", this);} // tgen

static void Test_S18056C2()
{
  extern Class_Descriptor cd_S18056C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S18056C2, buf);
    S18056C2 *dp, &lv = *(dp=new (buf) S18056C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S18056C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18056C2)");
    check_field_offset(lv, s18056c2f0, ABISELECT(8,4), "S18056C2.s18056c2f0");
    check_field_offset(lv, s18056c2f1, ABISELECT(16,12), "S18056C2.s18056c2f1");
    check_field_offset(lv, s18056c2f2, ABISELECT(24,16), "S18056C2.s18056c2f2");
    test_class_info(&lv, &cd_S18056C2);
    dp->~S18056C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18056C2(Test_S18056C2, "S18056C2", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S18056C2C1Ev();
extern void _ZN8S18056C2D1Ev();
Name_Map name_map_S18056C2[] = {
  NSPAIR(_ZN8S18056C2C1Ev),
  NSPAIR(_ZN8S18056C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18056C2[];
extern void _ZN8S18056C2D1Ev();
extern void _ZN8S18056C2D0Ev();
static  VTBL_ENTRY vtc_S18056C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18056C2[0]),
  (VTBL_ENTRY)&_ZN8S18056C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18056C2D0Ev,
};
extern VTBL_ENTRY _ZTI8S18056C2[];
extern  VTBL_ENTRY _ZTV8S18056C2[];
Class_Descriptor cd_S18056C2 = {  "S18056C2", // class name
  0,0,//no base classes
  &(vtc_S18056C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S18056C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18056C2),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  S18056C1  {
  void *s18056c1f0[2];
  ::S18056C2 s18056c1f1;
  void  mf18056c1(); // _ZN8S18056C19mf18056c1Ev
};
//SIG(1 S18056C1) C1{ m Fp[2] FC2{ vd m Fi[2] Fp Fi}}


void  S18056C1 ::mf18056c1(){}

static void Test_S18056C1()
{
  {
    init_simple_test("S18056C1");
    S18056C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S18056C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18056C1)");
    check_field_offset(lv, s18056c1f0, 0, "S18056C1.s18056c1f0");
    check_field_offset(lv, s18056c1f1, ABISELECT(16,8), "S18056C1.s18056c1f1");
  }
}
static Arrange_To_Call_Me vS18056C1(Test_S18056C1, "S18056C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10909C1  {
  char s10909c1f0[4];
  int s10909c1f1[3];
  char s10909c1f2[16];
  __tsi64 s10909c1f3;
  char s10909c1f4[16];
};
//SIG(1 S10909C1) C1{ Fc[4] Fi[3] Fc[16] FL Fc[16]}



static void Test_S10909C1()
{
  {
    init_simple_test("S10909C1");
    S10909C1 lv;
    check2(sizeof(lv), 56, "sizeof(S10909C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10909C1)");
    check_field_offset(lv, s10909c1f0, 0, "S10909C1.s10909c1f0");
    check_field_offset(lv, s10909c1f1, 4, "S10909C1.s10909c1f1");
    check_field_offset(lv, s10909c1f2, 16, "S10909C1.s10909c1f2");
    check_field_offset(lv, s10909c1f3, 32, "S10909C1.s10909c1f3");
    check_field_offset(lv, s10909c1f4, 40, "S10909C1.s10909c1f4");
  }
}
static Arrange_To_Call_Me vS10909C1(Test_S10909C1, "S10909C1", 56);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17192C1  {
  int s17192c1f0[3];
  ::S5266C19_nt s17192c1f1;
  void  mf17192c1(); // _ZN8S17192C19mf17192c1Ev
};
//SIG(1 S17192C1) C1{ m Fi[3] FC2{ m Fp Fi FC3{ m}}}


void  S17192C1 ::mf17192c1(){}

static void Test_S17192C1()
{
  {
    init_simple_test("S17192C1");
    S17192C1 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S17192C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17192C1)");
    check_field_offset(lv, s17192c1f0, 0, "S17192C1.s17192c1f0");
    check_field_offset(lv, s17192c1f1, ABISELECT(16,12), "S17192C1.s17192c1f1");
  }
}
static Arrange_To_Call_Me vS17192C1(Test_S17192C1, "S17192C1", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6023C2  {
  void *s6023c2f0[2];
  int s6023c2f1[3];
  char s6023c2f2[16];
  void  mf6023c2(); // _ZN7S6023C28mf6023c2Ev
};
//SIG(-1 S6023C2) C1{ m Fp[2] Fi[3] Fc[16]}


void  S6023C2 ::mf6023c2(){}

static void Test_S6023C2()
{
  {
    init_simple_test("S6023C2");
    S6023C2 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S6023C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6023C2)");
    check_field_offset(lv, s6023c2f0, 0, "S6023C2.s6023c2f0");
    check_field_offset(lv, s6023c2f1, ABISELECT(16,8), "S6023C2.s6023c2f1");
    check_field_offset(lv, s6023c2f2, ABISELECT(28,20), "S6023C2.s6023c2f2");
  }
}
static Arrange_To_Call_Me vS6023C2(Test_S6023C2, "S6023C2", ABISELECT(48,36));

#else // __cplusplus

Class_Descriptor cd_S6023C2 = {  "S6023C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(48,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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6023C1  : S6023C2 {
  int s6023c1f0;
};
//SIG(1 S6023C1) C1{ BC2{ m Fp[2] Fi[3] Fc[16]} Fi}



static void Test_S6023C1()
{
  extern Class_Descriptor cd_S6023C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S6023C1, buf);
    S6023C1 &lv = *(new (buf) S6023C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S6023C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6023C1)");
    check_base_class_offset(lv, (S6023C2*), 0, "S6023C1");
    check_field_offset(lv, s6023c1f0, ABISELECT(48,36), "S6023C1.s6023c1f0");
    test_class_info(&lv, &cd_S6023C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6023C1(Test_S6023C1, "S6023C1", ABISELECT(56,40));

#else // __cplusplus

extern Class_Descriptor cd_S6023C2;
static Base_Class bases_S6023C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6023C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S6023C1 = {  "S6023C1", // class name
  bases_S6023C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(56,40), // 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  S9197C2  {
  void *s9197c2f0;
  virtual  ~S9197C2(); // _ZN7S9197C2D1Ev
  virtual void  v3(); // _ZN7S9197C22v3Ev
  virtual void  v4(); // _ZN7S9197C22v4Ev
  S9197C2(); // tgen
};
//SIG(-1 S9197C2) C1{ vd v1 v2 Fp}


 S9197C2 ::~S9197C2(){ note_dtor("S9197C2", this);}
void  S9197C2 ::v3(){vfunc_called(this, "_ZN7S9197C22v3Ev");}
void  S9197C2 ::v4(){vfunc_called(this, "_ZN7S9197C22v4Ev");}
S9197C2 ::S9197C2(){ note_ctor("S9197C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S9197C2C1Ev();
extern void _ZN7S9197C2D1Ev();
Name_Map name_map_S9197C2[] = {
  NSPAIR(_ZN7S9197C2C1Ev),
  NSPAIR(_ZN7S9197C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9197C2[];
extern void _ZN7S9197C2D1Ev();
extern void _ZN7S9197C2D0Ev();
extern void _ZN7S9197C22v3Ev();
extern void _ZN7S9197C22v4Ev();
static  VTBL_ENTRY vtc_S9197C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9197C2[0]),
  (VTBL_ENTRY)&_ZN7S9197C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9197C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9197C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9197C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S9197C2[];
extern  VTBL_ENTRY _ZTV7S9197C2[];
Class_Descriptor cd_S9197C2 = {  "S9197C2", // class name
  0,0,//no base classes
  &(vtc_S9197C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S9197C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9197C2),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  S9197C1  : S9197C2 {
  void *s9197c1f0;
  virtual  ~S9197C1(); // _ZN7S9197C1D1Ev
  virtual void  v1(); // _ZN7S9197C12v1Ev
  virtual void  v2(); // _ZN7S9197C12v2Ev
  S9197C1(); // tgen
};
//SIG(1 S9197C1) C1{ BC2{ vd v3 v4 Fp} vd v1 v2 Fp}


 S9197C1 ::~S9197C1(){ note_dtor("S9197C1", this);}
void  S9197C1 ::v1(){vfunc_called(this, "_ZN7S9197C12v1Ev");}
void  S9197C1 ::v2(){vfunc_called(this, "_ZN7S9197C12v2Ev");}
S9197C1 ::S9197C1(){ note_ctor("S9197C1", this);} // tgen

static void Test_S9197C1()
{
  extern Class_Descriptor cd_S9197C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S9197C1, buf);
    S9197C1 *dp, &lv = *(dp=new (buf) S9197C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S9197C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9197C1)");
    check_base_class_offset(lv, (S9197C2*), 0, "S9197C1");
    check_field_offset(lv, s9197c1f0, ABISELECT(16,8), "S9197C1.s9197c1f0");
    test_class_info(&lv, &cd_S9197C1);
    dp->~S9197C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9197C1(Test_S9197C1, "S9197C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S9197C1C1Ev();
extern void _ZN7S9197C1D1Ev();
Name_Map name_map_S9197C1[] = {
  NSPAIR(_ZN7S9197C1C1Ev),
  NSPAIR(_ZN7S9197C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9197C2;
extern VTBL_ENTRY _ZTI7S9197C2[];
extern  VTBL_ENTRY _ZTV7S9197C2[];
static Base_Class bases_S9197C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9197C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S9197C1[];
extern void _ZN7S9197C1D1Ev();
extern void _ZN7S9197C1D0Ev();
extern void _ZN7S9197C22v3Ev();
extern void _ZN7S9197C22v4Ev();
extern void _ZN7S9197C12v1Ev();
extern void _ZN7S9197C12v2Ev();
static  VTBL_ENTRY vtc_S9197C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9197C1[0]),
  (VTBL_ENTRY)&_ZN7S9197C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9197C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9197C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9197C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9197C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9197C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9197C1[];
extern  VTBL_ENTRY _ZTV7S9197C1[];
Class_Descriptor cd_S9197C1 = {  "S9197C1", // class name
  bases_S9197C1, 1,
  &(vtc_S9197C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S9197C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9197C1),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  S14546C1  {
  void *s14546c1f0[2];
  int s14546c1f1[3];
  void *s14546c1f2[2];
  int s14546c1f3[4];
  void *s14546c1f4;
};
//SIG(1 S14546C1) C1{ Fp[2] Fi[3] Fp[2] Fi[4] Fp}



static void Test_S14546C1()
{
  {
    init_simple_test("S14546C1");
    S14546C1 lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S14546C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14546C1)");
    check_field_offset(lv, s14546c1f0, 0, "S14546C1.s14546c1f0");
    check_field_offset(lv, s14546c1f1, ABISELECT(16,8), "S14546C1.s14546c1f1");
    check_field_offset(lv, s14546c1f2, ABISELECT(32,20), "S14546C1.s14546c1f2");
    check_field_offset(lv, s14546c1f3, ABISELECT(48,28), "S14546C1.s14546c1f3");
    check_field_offset(lv, s14546c1f4, ABISELECT(64,44), "S14546C1.s14546c1f4");
  }
}
static Arrange_To_Call_Me vS14546C1(Test_S14546C1, "S14546C1", ABISELECT(72,48));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17887C2  {
  char s17887c2f0[162];
  int s17887c2f1;
  char s17887c2f2;
};
//SIG(-1 S17887C2) C1{ Fc[162] Fi Fc}



static void Test_S17887C2()
{
  {
    init_simple_test("S17887C2");
    S17887C2 lv;
    check2(sizeof(lv), 172, "sizeof(S17887C2)");
    check2(__alignof__(lv), 4, "__alignof__(S17887C2)");
    check_field_offset(lv, s17887c2f0, 0, "S17887C2.s17887c2f0");
    check_field_offset(lv, s17887c2f1, 164, "S17887C2.s17887c2f1");
    check_field_offset(lv, s17887c2f2, 168, "S17887C2.s17887c2f2");
  }
}
static Arrange_To_Call_Me vS17887C2(Test_S17887C2, "S17887C2", 172);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17887C1  {
  void *s17887c1f0[2];
  ::S17887C2 s17887c1f1;
  void  mf17887c1(); // _ZN8S17887C19mf17887c1Ev
};
//SIG(1 S17887C1) C1{ m Fp[2] FC2{ Fc[162] Fi Fc}}


void  S17887C1 ::mf17887c1(){}

static void Test_S17887C1()
{
  {
    init_simple_test("S17887C1");
    S17887C1 lv;
    check2(sizeof(lv), ABISELECT(192,180), "sizeof(S17887C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17887C1)");
    check_field_offset(lv, s17887c1f0, 0, "S17887C1.s17887c1f0");
    check_field_offset(lv, s17887c1f1, ABISELECT(16,8), "S17887C1.s17887c1f1");
  }
}
static Arrange_To_Call_Me vS17887C1(Test_S17887C1, "S17887C1", ABISELECT(192,180));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S12890C2  {
  void *s12890c2f0;
  void *s12890c2f1;
  void *s12890c2f2;
  void *s12890c2f3;
  int s12890c2f4;
  void *s12890c2f5;
};
//SIG(1 S12890C2) U1{ Fp Fp Fp Fp Fi Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S12890C1  {
  int s12890c1f0;
  ::S12890C2 s12890c1f1;
};
//SIG(1 S12890C1) C1{ Fi FU2{ Fp Fp Fp Fp Fi Fp}}



static void Test_S12890C1()
{
  {
    init_simple_test("S12890C1");
    S12890C1 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S12890C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12890C1)");
    check_field_offset(lv, s12890c1f0, 0, "S12890C1.s12890c1f0");
    check_field_offset(lv, s12890c1f1, ABISELECT(8,4), "S12890C1.s12890c1f1");
  }
}
static Arrange_To_Call_Me vS12890C1(Test_S12890C1, "S12890C1", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6024C1  : S6023C2 {
};
//SIG(1 S6024C1) C1{ BC2{ m Fp[2] Fi[3] Fc[16]}}



static void Test_S6024C1()
{
  extern Class_Descriptor cd_S6024C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S6024C1, buf);
    S6024C1 &lv = *(new (buf) S6024C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S6024C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6024C1)");
    check_base_class_offset(lv, (S6023C2*), 0, "S6024C1");
    test_class_info(&lv, &cd_S6024C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6024C1(Test_S6024C1, "S6024C1", ABISELECT(48,36));

#else // __cplusplus

extern Class_Descriptor cd_S6023C2;
static Base_Class bases_S6024C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6023C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S6024C1 = {  "S6024C1", // class name
  bases_S6024C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(48,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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17414C1  {
  __tsi64 s17414c1f0[3];
  void *s17414c1f1[2];
  __tsi64 s17414c1f2;
  ::S11199C7_nt s17414c1f3;
  void  mf17414c1(); // _ZN8S17414C19mf17414c1Ev
};
//SIG(1 S17414C1) C1{ m FL[3] Fp[2] FL FC2{ Fl}}


void  S17414C1 ::mf17414c1(){}

static void Test_S17414C1()
{
  {
    init_simple_test("S17414C1");
    S17414C1 lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S17414C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17414C1)");
    check_field_offset(lv, s17414c1f0, 0, "S17414C1.s17414c1f0");
    check_field_offset(lv, s17414c1f1, 24, "S17414C1.s17414c1f1");
    check_field_offset(lv, s17414c1f2, ABISELECT(40,32), "S17414C1.s17414c1f2");
    check_field_offset(lv, s17414c1f3, ABISELECT(48,40), "S17414C1.s17414c1f3");
  }
}
static Arrange_To_Call_Me vS17414C1(Test_S17414C1, "S17414C1", ABISELECT(56,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12928C1  {
  int s12928c1f0:4;
  int s12928c1f1:2;
  int s12928c1f2:2;
  int s12928c1f3:3;
  short s12928c1f4:3;
};
//SIG(1 S12928C1) C1{ Fi:4 Fi:2 Fi:2 Fi:3 Fs:3}



static void Test_S12928C1()
{
  {
    init_simple_test("S12928C1");
    static S12928C1 lv;
    check2(sizeof(lv), 4, "sizeof(S12928C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12928C1)");
    set_bf_and_test(lv, s12928c1f0, 0, 0, 4, 1, "S12928C1");
    set_bf_and_test(lv, s12928c1f0, 0, 0, 4, hide_sll(1LL<<3), "S12928C1");
    set_bf_and_test(lv, s12928c1f1, 0, 4, 2, 1, "S12928C1");
    set_bf_and_test(lv, s12928c1f1, 0, 4, 2, hide_sll(1LL<<1), "S12928C1");
    set_bf_and_test(lv, s12928c1f2, 0, 6, 2, 1, "S12928C1");
    set_bf_and_test(lv, s12928c1f2, 0, 6, 2, hide_sll(1LL<<1), "S12928C1");
    set_bf_and_test(lv, s12928c1f3, 1, 0, 3, 1, "S12928C1");
    set_bf_and_test(lv, s12928c1f3, 1, 0, 3, hide_sll(1LL<<2), "S12928C1");
    set_bf_and_test(lv, s12928c1f4, 1, 3, 3, 1, "S12928C1");
    set_bf_and_test(lv, s12928c1f4, 1, 3, 3, hide_sll(1LL<<2), "S12928C1");
  }
}
static Arrange_To_Call_Me vS12928C1(Test_S12928C1, "S12928C1", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18786C1  {
  void *s18786c1f0[3];
  virtual void  v1(); // _ZN8S18786C12v1Ev
  virtual void  v2(); // _ZN8S18786C12v2Ev
  virtual void  v3(); // _ZN8S18786C12v3Ev
  virtual void  v4(); // _ZN8S18786C12v4Ev
  virtual void  v5(); // _ZN8S18786C12v5Ev
  virtual void  v6(); // _ZN8S18786C12v6Ev
  ~S18786C1(); // tgen
  S18786C1(); // tgen
};
//SIG(1 S18786C1) C1{ v1 v2 v3 v4 v5 v6 Fp[3]}


void  S18786C1 ::v1(){vfunc_called(this, "_ZN8S18786C12v1Ev");}
void  S18786C1 ::v2(){vfunc_called(this, "_ZN8S18786C12v2Ev");}
void  S18786C1 ::v3(){vfunc_called(this, "_ZN8S18786C12v3Ev");}
void  S18786C1 ::v4(){vfunc_called(this, "_ZN8S18786C12v4Ev");}
void  S18786C1 ::v5(){vfunc_called(this, "_ZN8S18786C12v5Ev");}
void  S18786C1 ::v6(){vfunc_called(this, "_ZN8S18786C12v6Ev");}
S18786C1 ::~S18786C1(){ note_dtor("S18786C1", this);} // tgen
S18786C1 ::S18786C1(){ note_ctor("S18786C1", this);} // tgen

static void Test_S18786C1()
{
  extern Class_Descriptor cd_S18786C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S18786C1, buf);
    S18786C1 *dp, &lv = *(dp=new (buf) S18786C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S18786C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18786C1)");
    check_field_offset(lv, s18786c1f0, ABISELECT(8,4), "S18786C1.s18786c1f0");
    test_class_info(&lv, &cd_S18786C1);
    dp->~S18786C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18786C1(Test_S18786C1, "S18786C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S18786C1C1Ev();
extern void _ZN8S18786C1D1Ev();
Name_Map name_map_S18786C1[] = {
  NSPAIR(_ZN8S18786C1C1Ev),
  NSPAIR(_ZN8S18786C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18786C1[];
extern void _ZN8S18786C12v1Ev();
extern void _ZN8S18786C12v2Ev();
extern void _ZN8S18786C12v3Ev();
extern void _ZN8S18786C12v4Ev();
extern void _ZN8S18786C12v5Ev();
extern void _ZN8S18786C12v6Ev();
static  VTBL_ENTRY vtc_S18786C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18786C1[0]),
  (VTBL_ENTRY)&_ZN8S18786C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18786C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18786C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18786C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18786C12v5Ev,
  (VTBL_ENTRY)&_ZN8S18786C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S18786C1[];
extern  VTBL_ENTRY _ZTV8S18786C1[];
Class_Descriptor cd_S18786C1 = {  "S18786C1", // class name
  0,0,//no base classes
  &(vtc_S18786C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S18786C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18786C1),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  S10666C1  {
  char s10666c1f0[2];
  int s10666c1f1[2];
  char s10666c1f2[5];
  int s10666c1f3[2];
};
//SIG(1 S10666C1) C1{ Fc[2] Fi[2] Fc[5] Fi[2]}



static void Test_S10666C1()
{
  {
    init_simple_test("S10666C1");
    S10666C1 lv;
    check2(sizeof(lv), 28, "sizeof(S10666C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10666C1)");
    check_field_offset(lv, s10666c1f0, 0, "S10666C1.s10666c1f0");
    check_field_offset(lv, s10666c1f1, 4, "S10666C1.s10666c1f1");
    check_field_offset(lv, s10666c1f2, 12, "S10666C1.s10666c1f2");
    check_field_offset(lv, s10666c1f3, 20, "S10666C1.s10666c1f3");
  }
}
static Arrange_To_Call_Me vS10666C1(Test_S10666C1, "S10666C1", 28);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18774C1  {
  __tsi64 s18774c1f0[5];
  virtual void  v1(); // _ZN8S18774C12v1Ev
  virtual void  v2(); // _ZN8S18774C12v2Ev
  virtual void  v3(); // _ZN8S18774C12v3Ev
  virtual void  v4(); // _ZN8S18774C12v4Ev
  virtual void  v5(); // _ZN8S18774C12v5Ev
  virtual void  v6(); // _ZN8S18774C12v6Ev
  ~S18774C1(); // tgen
  S18774C1(); // tgen
};
//SIG(1 S18774C1) C1{ v1 v2 v3 v4 v5 v6 FL[5]}


void  S18774C1 ::v1(){vfunc_called(this, "_ZN8S18774C12v1Ev");}
void  S18774C1 ::v2(){vfunc_called(this, "_ZN8S18774C12v2Ev");}
void  S18774C1 ::v3(){vfunc_called(this, "_ZN8S18774C12v3Ev");}
void  S18774C1 ::v4(){vfunc_called(this, "_ZN8S18774C12v4Ev");}
void  S18774C1 ::v5(){vfunc_called(this, "_ZN8S18774C12v5Ev");}
void  S18774C1 ::v6(){vfunc_called(this, "_ZN8S18774C12v6Ev");}
S18774C1 ::~S18774C1(){ note_dtor("S18774C1", this);} // tgen
S18774C1 ::S18774C1(){ note_ctor("S18774C1", this);} // tgen

static void Test_S18774C1()
{
  extern Class_Descriptor cd_S18774C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,12)];
    init_test(&cd_S18774C1, buf);
    S18774C1 *dp, &lv = *(dp=new (buf) S18774C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,44), "sizeof(S18774C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18774C1)");
    check_field_offset(lv, s18774c1f0, ABISELECT(8,4), "S18774C1.s18774c1f0");
    test_class_info(&lv, &cd_S18774C1);
    dp->~S18774C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18774C1(Test_S18774C1, "S18774C1", ABISELECT(48,44));

#else // __cplusplus

extern void _ZN8S18774C1C1Ev();
extern void _ZN8S18774C1D1Ev();
Name_Map name_map_S18774C1[] = {
  NSPAIR(_ZN8S18774C1C1Ev),
  NSPAIR(_ZN8S18774C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18774C1[];
extern void _ZN8S18774C12v1Ev();
extern void _ZN8S18774C12v2Ev();
extern void _ZN8S18774C12v3Ev();
extern void _ZN8S18774C12v4Ev();
extern void _ZN8S18774C12v5Ev();
extern void _ZN8S18774C12v6Ev();
static  VTBL_ENTRY vtc_S18774C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18774C1[0]),
  (VTBL_ENTRY)&_ZN8S18774C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18774C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18774C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18774C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18774C12v5Ev,
  (VTBL_ENTRY)&_ZN8S18774C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S18774C1[];
extern  VTBL_ENTRY _ZTV8S18774C1[];
Class_Descriptor cd_S18774C1 = {  "S18774C1", // class name
  0,0,//no base classes
  &(vtc_S18774C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,44), // object size
  NSPAIRA(_ZTI8S18774C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18774C1),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  S16009C1  {
  ::S79C8_nt s16009c1f0;
  int s16009c1f1;
  void *s16009c1f2;
  int s16009c1f3;
  void  mf16009c1(); // _ZN8S16009C19mf16009c1Ev
};
//SIG(1 S16009C1) C1{ m FC2{ m Fi[2]} Fi Fp Fi}


void  S16009C1 ::mf16009c1(){}

static void Test_S16009C1()
{
  {
    init_simple_test("S16009C1");
    S16009C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S16009C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16009C1)");
    check_field_offset(lv, s16009c1f0, 0, "S16009C1.s16009c1f0");
    check_field_offset(lv, s16009c1f1, 8, "S16009C1.s16009c1f1");
    check_field_offset(lv, s16009c1f2, ABISELECT(16,12), "S16009C1.s16009c1f2");
    check_field_offset(lv, s16009c1f3, ABISELECT(24,16), "S16009C1.s16009c1f3");
  }
}
static Arrange_To_Call_Me vS16009C1(Test_S16009C1, "S16009C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21643C1  {
  int s21643c1f0[2];
  char s21643c1f1[256];
  int s21643c1f2;
  void  mf21643c1(); // _ZN8S21643C19mf21643c1Ev
  virtual  ~S21643C1(); // _ZN8S21643C1D1Ev
  S21643C1(); // tgen
};
//SIG(1 S21643C1) C1{ vd m Fi[2] Fc[256] Fi}


void  S21643C1 ::mf21643c1(){}
 S21643C1 ::~S21643C1(){ note_dtor("S21643C1", this);}
S21643C1 ::S21643C1(){ note_ctor("S21643C1", this);} // tgen

static void Test_S21643C1()
{
  extern Class_Descriptor cd_S21643C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,69)];
    init_test(&cd_S21643C1, buf);
    S21643C1 *dp, &lv = *(dp=new (buf) S21643C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,272), "sizeof(S21643C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21643C1)");
    check_field_offset(lv, s21643c1f0, ABISELECT(8,4), "S21643C1.s21643c1f0");
    check_field_offset(lv, s21643c1f1, ABISELECT(16,12), "S21643C1.s21643c1f1");
    check_field_offset(lv, s21643c1f2, ABISELECT(272,268), "S21643C1.s21643c1f2");
    test_class_info(&lv, &cd_S21643C1);
    dp->~S21643C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21643C1(Test_S21643C1, "S21643C1", ABISELECT(280,272));

#else // __cplusplus

extern void _ZN8S21643C1C1Ev();
extern void _ZN8S21643C1D1Ev();
Name_Map name_map_S21643C1[] = {
  NSPAIR(_ZN8S21643C1C1Ev),
  NSPAIR(_ZN8S21643C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21643C1[];
extern void _ZN8S21643C1D1Ev();
extern void _ZN8S21643C1D0Ev();
static  VTBL_ENTRY vtc_S21643C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21643C1[0]),
  (VTBL_ENTRY)&_ZN8S21643C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21643C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21643C1[];
extern  VTBL_ENTRY _ZTV8S21643C1[];
Class_Descriptor cd_S21643C1 = {  "S21643C1", // class name
  0,0,//no base classes
  &(vtc_S21643C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,272), // object size
  NSPAIRA(_ZTI8S21643C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21643C1),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  S19201C2  : S5266C29 , S7719C4_nt {
};
//SIG(-1 S19201C2) C1{ BC2{ m} BC3{ m Fc}}



static void Test_S19201C2()
{
  extern Class_Descriptor cd_S19201C2;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S19201C2, buf);
    S19201C2 &lv = *(new (buf) S19201C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S19201C2)");
    check2(__alignof__(lv), 1, "__alignof__(S19201C2)");
    check_base_class_offset(lv, (S5266C29*), 0, "S19201C2");
    check_base_class_offset(lv, (S7719C4_nt*), 0, "S19201C2");
    test_class_info(&lv, &cd_S19201C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19201C2(Test_S19201C2, "S19201C2", 1);

#else // __cplusplus

extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
static Base_Class bases_S19201C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7719C4_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 _ZTI8S19201C2[];
Class_Descriptor cd_S19201C2 = {  "S19201C2", // class name
  bases_S19201C2, 2,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S19201C2),ABISELECT(56,32), //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  S19201C1  : virtual S19201C2 {
  ~S19201C1(); // tgen
  S19201C1(); // tgen
};
//SIG(1 S19201C1) C1{ VBC2{ BC3{ m} BC4{ m Fc}}}


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

static void Test_S19201C1()
{
  extern Class_Descriptor cd_S19201C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19201C1, buf);
    S19201C1 *dp, &lv = *(dp=new (buf) S19201C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19201C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19201C1)");
    check_base_class_offset(lv, (S5266C29*)(S19201C2*), ABISELECT(8,4), "S19201C1");
    check_base_class_offset(lv, (S7719C4_nt*)(S19201C2*), ABISELECT(8,4), "S19201C1");
    check_base_class_offset(lv, (S19201C2*), ABISELECT(8,4), "S19201C1");
    test_class_info(&lv, &cd_S19201C1);
    dp->~S19201C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19201C1(Test_S19201C1, "S19201C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19201C1C1Ev();
extern void _ZN8S19201C1D1Ev();
Name_Map name_map_S19201C1[] = {
  NSPAIR(_ZN8S19201C1C1Ev),
  NSPAIR(_ZN8S19201C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
extern Class_Descriptor cd_S19201C2;
extern VTBL_ENTRY _ZTI8S19201C2[];
static Base_Class bases_S19201C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    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
    2, //immediately_derived
  0, 0},
  {&cd_S7719C4_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
    2, //immediately_derived
  0, 0},
  {&cd_S19201C2,    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 _ZTI8S19201C1[];
static  VTBL_ENTRY vtc_S19201C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19201C1[0]),
};
extern VTBL_ENTRY _ZTV8S19201C1[];
static  VTT_ENTRY vtt_S19201C1[] = {
  {&(_ZTV8S19201C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19201C1[];
extern  VTBL_ENTRY _ZTV8S19201C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19201C1[];
Class_Descriptor cd_S19201C1 = {  "S19201C1", // class name
  bases_S19201C1, 3,
  &(vtc_S19201C1[0]), // expected_vtbl_contents
  &(vtt_S19201C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19201C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19201C1),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19201C1),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  S17605C1  {
  void *s17605c1f0;
  ::S7719C17_nt s17605c1f1;
  int s17605c1f2[10];
  void  mf17605c1(); // _ZN8S17605C19mf17605c1Ev
};
//SIG(1 S17605C1) C1{ m Fp FC2{ m Fi} Fi[10]}


void  S17605C1 ::mf17605c1(){}

static void Test_S17605C1()
{
  {
    init_simple_test("S17605C1");
    S17605C1 lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S17605C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17605C1)");
    check_field_offset(lv, s17605c1f0, 0, "S17605C1.s17605c1f0");
    check_field_offset(lv, s17605c1f1, ABISELECT(8,4), "S17605C1.s17605c1f1");
    check_field_offset(lv, s17605c1f2, ABISELECT(12,8), "S17605C1.s17605c1f2");
  }
}
static Arrange_To_Call_Me vS17605C1(Test_S17605C1, "S17605C1", ABISELECT(56,48));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18879C1  {
  __tsi64 s18879c1f0;
  virtual  ~S18879C1(); // _ZN8S18879C1D1Ev
  virtual void  v1(); // _ZN8S18879C12v1Ev
  virtual void  v2(); // _ZN8S18879C12v2Ev
  virtual void  v3(); // _ZN8S18879C12v3Ev
  virtual void  v4(); // _ZN8S18879C12v4Ev
  virtual void  v5(); // _ZN8S18879C12v5Ev
  S18879C1(); // tgen
};
//SIG(1 S18879C1) C1{ vd v1 v2 v3 v4 v5 FL}


 S18879C1 ::~S18879C1(){ note_dtor("S18879C1", this);}
void  S18879C1 ::v1(){vfunc_called(this, "_ZN8S18879C12v1Ev");}
void  S18879C1 ::v2(){vfunc_called(this, "_ZN8S18879C12v2Ev");}
void  S18879C1 ::v3(){vfunc_called(this, "_ZN8S18879C12v3Ev");}
void  S18879C1 ::v4(){vfunc_called(this, "_ZN8S18879C12v4Ev");}
void  S18879C1 ::v5(){vfunc_called(this, "_ZN8S18879C12v5Ev");}
S18879C1 ::S18879C1(){ note_ctor("S18879C1", this);} // tgen

static void Test_S18879C1()
{
  extern Class_Descriptor cd_S18879C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S18879C1, buf);
    S18879C1 *dp, &lv = *(dp=new (buf) S18879C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S18879C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18879C1)");
    check_field_offset(lv, s18879c1f0, ABISELECT(8,4), "S18879C1.s18879c1f0");
    test_class_info(&lv, &cd_S18879C1);
    dp->~S18879C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18879C1(Test_S18879C1, "S18879C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S18879C1C1Ev();
extern void _ZN8S18879C1D1Ev();
Name_Map name_map_S18879C1[] = {
  NSPAIR(_ZN8S18879C1C1Ev),
  NSPAIR(_ZN8S18879C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18879C1[];
extern void _ZN8S18879C1D1Ev();
extern void _ZN8S18879C1D0Ev();
extern void _ZN8S18879C12v1Ev();
extern void _ZN8S18879C12v2Ev();
extern void _ZN8S18879C12v3Ev();
extern void _ZN8S18879C12v4Ev();
extern void _ZN8S18879C12v5Ev();
static  VTBL_ENTRY vtc_S18879C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18879C1[0]),
  (VTBL_ENTRY)&_ZN8S18879C1D1Ev,
  (VTBL_ENTRY)&_ZN8S18879C1D0Ev,
  (VTBL_ENTRY)&_ZN8S18879C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18879C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18879C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18879C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18879C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S18879C1[];
extern  VTBL_ENTRY _ZTV8S18879C1[];
Class_Descriptor cd_S18879C1 = {  "S18879C1", // class name
  0,0,//no base classes
  &(vtc_S18879C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S18879C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18879C1),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  S18679C1  {
  __tsi64 s18679c1f0;
  void *s18679c1f1;
  int s18679c1f2;
  virtual void  v1(); // _ZN8S18679C12v1Ev
  virtual void  v2(); // _ZN8S18679C12v2Ev
  virtual void  v3(); // _ZN8S18679C12v3Ev
  virtual void  v4(); // _ZN8S18679C12v4Ev
  ~S18679C1(); // tgen
  S18679C1(); // tgen
};
//SIG(1 S18679C1) C1{ v1 v2 v3 v4 FL Fp Fi}


void  S18679C1 ::v1(){vfunc_called(this, "_ZN8S18679C12v1Ev");}
void  S18679C1 ::v2(){vfunc_called(this, "_ZN8S18679C12v2Ev");}
void  S18679C1 ::v3(){vfunc_called(this, "_ZN8S18679C12v3Ev");}
void  S18679C1 ::v4(){vfunc_called(this, "_ZN8S18679C12v4Ev");}
S18679C1 ::~S18679C1(){ note_dtor("S18679C1", this);} // tgen
S18679C1 ::S18679C1(){ note_ctor("S18679C1", this);} // tgen

static void Test_S18679C1()
{
  extern Class_Descriptor cd_S18679C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S18679C1, buf);
    S18679C1 *dp, &lv = *(dp=new (buf) S18679C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S18679C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18679C1)");
    check_field_offset(lv, s18679c1f0, ABISELECT(8,4), "S18679C1.s18679c1f0");
    check_field_offset(lv, s18679c1f1, ABISELECT(16,12), "S18679C1.s18679c1f1");
    check_field_offset(lv, s18679c1f2, ABISELECT(24,16), "S18679C1.s18679c1f2");
    test_class_info(&lv, &cd_S18679C1);
    dp->~S18679C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18679C1(Test_S18679C1, "S18679C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S18679C1C1Ev();
extern void _ZN8S18679C1D1Ev();
Name_Map name_map_S18679C1[] = {
  NSPAIR(_ZN8S18679C1C1Ev),
  NSPAIR(_ZN8S18679C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18679C1[];
extern void _ZN8S18679C12v1Ev();
extern void _ZN8S18679C12v2Ev();
extern void _ZN8S18679C12v3Ev();
extern void _ZN8S18679C12v4Ev();
static  VTBL_ENTRY vtc_S18679C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18679C1[0]),
  (VTBL_ENTRY)&_ZN8S18679C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18679C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18679C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18679C12v4Ev,
};
extern VTBL_ENTRY _ZTI8S18679C1[];
extern  VTBL_ENTRY _ZTV8S18679C1[];
Class_Descriptor cd_S18679C1 = {  "S18679C1", // class name
  0,0,//no base classes
  &(vtc_S18679C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S18679C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18679C1),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  S10749C1  {
  char s10749c1f0[21];
  int s10749c1f1[2];
  char s10749c1f2[33];
};
//SIG(1 S10749C1) C1{ Fc[21] Fi[2] Fc[33]}



static void Test_S10749C1()
{
  {
    init_simple_test("S10749C1");
    S10749C1 lv;
    check2(sizeof(lv), 68, "sizeof(S10749C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10749C1)");
    check_field_offset(lv, s10749c1f0, 0, "S10749C1.s10749c1f0");
    check_field_offset(lv, s10749c1f1, 24, "S10749C1.s10749c1f1");
    check_field_offset(lv, s10749c1f2, 32, "S10749C1.s10749c1f2");
  }
}
static Arrange_To_Call_Me vS10749C1(Test_S10749C1, "S10749C1", 68);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19653C1  : virtual S7719C4_nt {
  ::S7719C4_nt s19653c1f0;
  void *s19653c1f1;
  int s19653c1f2;
  ~S19653C1(); // tgen
  S19653C1(); // tgen
};
//SIG(1 S19653C1) C1{ VBC2{ m Fc} FC2 Fp Fi}


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

static void Test_S19653C1()
{
  extern Class_Descriptor cd_S19653C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19653C1, buf);
    S19653C1 *dp, &lv = *(dp=new (buf) S19653C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19653C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19653C1)");
    check_base_class_offset(lv, (S7719C4_nt*), ABISELECT(28,16), "S19653C1");
    check_field_offset(lv, s19653c1f0, ABISELECT(8,4), "S19653C1.s19653c1f0");
    check_field_offset(lv, s19653c1f1, ABISELECT(16,8), "S19653C1.s19653c1f1");
    check_field_offset(lv, s19653c1f2, ABISELECT(24,12), "S19653C1.s19653c1f2");
    test_class_info(&lv, &cd_S19653C1);
    dp->~S19653C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19653C1(Test_S19653C1, "S19653C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S19653C1C1Ev();
extern void _ZN8S19653C1D1Ev();
Name_Map name_map_S19653C1[] = {
  NSPAIR(_ZN8S19653C1C1Ev),
  NSPAIR(_ZN8S19653C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7719C4_nt;
extern VTBL_ENTRY _ZTI10S7719C4_nt[];
static Base_Class bases_S19653C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7719C4_nt,    ABISELECT(28,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, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19653C1[];
static  VTBL_ENTRY vtc_S19653C1[] = {
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19653C1[0]),
};
extern VTBL_ENTRY _ZTV8S19653C1[];
static  VTT_ENTRY vtt_S19653C1[] = {
  {&(_ZTV8S19653C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19653C1[];
extern  VTBL_ENTRY _ZTV8S19653C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19653C1[];
Class_Descriptor cd_S19653C1 = {  "S19653C1", // class name
  bases_S19653C1, 1,
  &(vtc_S19653C1[0]), // expected_vtbl_contents
  &(vtt_S19653C1[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S19653C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19653C1),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19653C1),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  S11933C2  {
  short s11933c2f0[3];
  long s11933c2f1;
};
//SIG(-1 S11933C2) C1{ Fs[3] Fl}



static void Test_S11933C2()
{
  {
    init_simple_test("S11933C2");
    S11933C2 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S11933C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11933C2)");
    check_field_offset(lv, s11933c2f0, 0, "S11933C2.s11933c2f0");
    check_field_offset(lv, s11933c2f1, 8, "S11933C2.s11933c2f1");
  }
}
static Arrange_To_Call_Me vS11933C2(Test_S11933C2, "S11933C2", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11933C1  {
  ::S11933C2 s11933c1f0;
  void *s11933c1f1[6];
};
//SIG(1 S11933C1) C1{ FC2{ Fs[3] Fl} Fp[6]}



static void Test_S11933C1()
{
  {
    init_simple_test("S11933C1");
    S11933C1 lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S11933C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11933C1)");
    check_field_offset(lv, s11933c1f0, 0, "S11933C1.s11933c1f0");
    check_field_offset(lv, s11933c1f1, ABISELECT(16,12), "S11933C1.s11933c1f1");
  }
}
static Arrange_To_Call_Me vS11933C1(Test_S11933C1, "S11933C1", ABISELECT(64,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14727C1  {
  void *s14727c1f0[7];
  char s14727c1f1[14];
  void *s14727c1f2[9];
};
//SIG(1 S14727C1) C1{ Fp[7] Fc[14] Fp[9]}



static void Test_S14727C1()
{
  {
    init_simple_test("S14727C1");
    S14727C1 lv;
    check2(sizeof(lv), ABISELECT(144,80), "sizeof(S14727C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14727C1)");
    check_field_offset(lv, s14727c1f0, 0, "S14727C1.s14727c1f0");
    check_field_offset(lv, s14727c1f1, ABISELECT(56,28), "S14727C1.s14727c1f1");
    check_field_offset(lv, s14727c1f2, ABISELECT(72,44), "S14727C1.s14727c1f2");
  }
}
static Arrange_To_Call_Me vS14727C1(Test_S14727C1, "S14727C1", ABISELECT(144,80));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6081C1  : S17777C6_nt {
  __tsi64 s6081c1f0;
  virtual void  v1(); // _ZN7S6081C12v1Ev
  virtual void  v2(); // _ZN7S6081C12v2Ev
  ~S6081C1(); // tgen
  S6081C1(); // tgen
};
//SIG(1 S6081C1) C1{ BC2{ m Fp} v1 v2 FL}


void  S6081C1 ::v1(){vfunc_called(this, "_ZN7S6081C12v1Ev");}
void  S6081C1 ::v2(){vfunc_called(this, "_ZN7S6081C12v2Ev");}
S6081C1 ::~S6081C1(){ note_dtor("S6081C1", this);} // tgen
S6081C1 ::S6081C1(){ note_ctor("S6081C1", this);} // tgen

static void Test_S6081C1()
{
  extern Class_Descriptor cd_S6081C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S6081C1, buf);
    S6081C1 *dp, &lv = *(dp=new (buf) S6081C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S6081C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6081C1)");
    check_base_class_offset(lv, (S17777C6_nt*), ABISELECT(8,4), "S6081C1");
    check_field_offset(lv, s6081c1f0, ABISELECT(16,8), "S6081C1.s6081c1f0");
    test_class_info(&lv, &cd_S6081C1);
    dp->~S6081C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6081C1(Test_S6081C1, "S6081C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S6081C1C1Ev();
extern void _ZN7S6081C1D1Ev();
Name_Map name_map_S6081C1[] = {
  NSPAIR(_ZN7S6081C1C1Ev),
  NSPAIR(_ZN7S6081C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S17777C6_nt;
extern VTBL_ENTRY _ZTI11S17777C6_nt[];
static Base_Class bases_S6081C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17777C6_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, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6081C1[];
extern void _ZN7S6081C12v1Ev();
extern void _ZN7S6081C12v2Ev();
static  VTBL_ENTRY vtc_S6081C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6081C1[0]),
  (VTBL_ENTRY)&_ZN7S6081C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6081C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S6081C1[];
extern  VTBL_ENTRY _ZTV7S6081C1[];
Class_Descriptor cd_S6081C1 = {  "S6081C1", // class name
  bases_S6081C1, 1,
  &(vtc_S6081C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S6081C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S6081C1),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  S13868C1  {
  long s13868c1f0;
  short s13868c1f1;
  char s13868c1f2[6];
  void *s13868c1f3;
  int s13868c1f4;
};
//SIG(1 S13868C1) C1{ Fl Fs Fc[6] Fp Fi}



static void Test_S13868C1()
{
  {
    init_simple_test("S13868C1");
    S13868C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S13868C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13868C1)");
    check_field_offset(lv, s13868c1f0, 0, "S13868C1.s13868c1f0");
    check_field_offset(lv, s13868c1f1, ABISELECT(8,4), "S13868C1.s13868c1f1");
    check_field_offset(lv, s13868c1f2, ABISELECT(10,6), "S13868C1.s13868c1f2");
    check_field_offset(lv, s13868c1f3, ABISELECT(16,12), "S13868C1.s13868c1f3");
    check_field_offset(lv, s13868c1f4, ABISELECT(24,16), "S13868C1.s13868c1f4");
  }
}
static Arrange_To_Call_Me vS13868C1(Test_S13868C1, "S13868C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14540C1  {
  void *s14540c1f0[2];
  int s14540c1f1[2];
  void *s14540c1f2[2];
};
//SIG(1 S14540C1) C1{ Fp[2] Fi[2] Fp[2]}



static void Test_S14540C1()
{
  {
    init_simple_test("S14540C1");
    S14540C1 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S14540C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14540C1)");
    check_field_offset(lv, s14540c1f0, 0, "S14540C1.s14540c1f0");
    check_field_offset(lv, s14540c1f1, ABISELECT(16,8), "S14540C1.s14540c1f1");
    check_field_offset(lv, s14540c1f2, ABISELECT(24,16), "S14540C1.s14540c1f2");
  }
}
static Arrange_To_Call_Me vS14540C1(Test_S14540C1, "S14540C1", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17119C1  {
  int s17119c1f0[2];
  __tsi64 s17119c1f1;
  int s17119c1f2[7];
  void  mf17119c1(); // _ZN8S17119C19mf17119c1Ev
};
//SIG(1 S17119C1) C1{ m Fi[2] FL Fi[7]}


void  S17119C1 ::mf17119c1(){}

static void Test_S17119C1()
{
  {
    init_simple_test("S17119C1");
    S17119C1 lv;
    check2(sizeof(lv), ABISELECT(48,44), "sizeof(S17119C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17119C1)");
    check_field_offset(lv, s17119c1f0, 0, "S17119C1.s17119c1f0");
    check_field_offset(lv, s17119c1f1, 8, "S17119C1.s17119c1f1");
    check_field_offset(lv, s17119c1f2, 16, "S17119C1.s17119c1f2");
  }
}
static Arrange_To_Call_Me vS17119C1(Test_S17119C1, "S17119C1", ABISELECT(48,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21682C1  {
  int s21682c1f0[4];
  char s21682c1f1[3];
  void  mf21682c1(); // _ZN8S21682C19mf21682c1Ev
  virtual  ~S21682C1(); // _ZN8S21682C1D1Ev
  S21682C1(); // tgen
};
//SIG(1 S21682C1) C1{ vd m Fi[4] Fc[3]}


void  S21682C1 ::mf21682c1(){}
 S21682C1 ::~S21682C1(){ note_dtor("S21682C1", this);}
S21682C1 ::S21682C1(){ note_ctor("S21682C1", this);} // tgen

static void Test_S21682C1()
{
  extern Class_Descriptor cd_S21682C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S21682C1, buf);
    S21682C1 *dp, &lv = *(dp=new (buf) S21682C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S21682C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21682C1)");
    check_field_offset(lv, s21682c1f0, ABISELECT(8,4), "S21682C1.s21682c1f0");
    check_field_offset(lv, s21682c1f1, ABISELECT(24,20), "S21682C1.s21682c1f1");
    test_class_info(&lv, &cd_S21682C1);
    dp->~S21682C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21682C1(Test_S21682C1, "S21682C1", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN8S21682C1C1Ev();
extern void _ZN8S21682C1D1Ev();
Name_Map name_map_S21682C1[] = {
  NSPAIR(_ZN8S21682C1C1Ev),
  NSPAIR(_ZN8S21682C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21682C1[];
extern void _ZN8S21682C1D1Ev();
extern void _ZN8S21682C1D0Ev();
static  VTBL_ENTRY vtc_S21682C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21682C1[0]),
  (VTBL_ENTRY)&_ZN8S21682C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21682C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21682C1[];
extern  VTBL_ENTRY _ZTV8S21682C1[];
Class_Descriptor cd_S21682C1 = {  "S21682C1", // class name
  0,0,//no base classes
  &(vtc_S21682C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI8S21682C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21682C1),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  S17003C1  {
  unsigned int s17003c1f0:1;
  unsigned int s17003c1f1:1;
  unsigned int s17003c1f2:1;
  void  mf17003c1(); // _ZN8S17003C19mf17003c1Ev
};
//SIG(1 S17003C1) C1{ m Fi:1 Fi:1 Fi:1}


void  S17003C1 ::mf17003c1(){}

static void Test_S17003C1()
{
  {
    init_simple_test("S17003C1");
    static S17003C1 lv;
    check2(sizeof(lv), 4, "sizeof(S17003C1)");
    check2(__alignof__(lv), 4, "__alignof__(S17003C1)");
    set_bf_and_test(lv, s17003c1f0, 0, 0, 1, 1, "S17003C1");
    set_bf_and_test(lv, s17003c1f1, 0, 1, 1, 1, "S17003C1");
    set_bf_and_test(lv, s17003c1f2, 0, 2, 1, 1, "S17003C1");
  }
}
static Arrange_To_Call_Me vS17003C1(Test_S17003C1, "S17003C1", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12082C1  {
  ::S79C31_nt s12082c1f0;
  ::S79C31_nt s12082c1f1;
};
//SIG(1 S12082C1) C1{ FC2{ m Fi[3]} FC2}



static void Test_S12082C1()
{
  {
    init_simple_test("S12082C1");
    S12082C1 lv;
    check2(sizeof(lv), 24, "sizeof(S12082C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12082C1)");
    check_field_offset(lv, s12082c1f0, 0, "S12082C1.s12082c1f0");
    check_field_offset(lv, s12082c1f1, 12, "S12082C1.s12082c1f1");
  }
}
static Arrange_To_Call_Me vS12082C1(Test_S12082C1, "S12082C1", 24);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6312C1  : S5266C29 {
  int s6312c1f0;
  char s6312c1f1;
  virtual  ~S6312C1(); // _ZN7S6312C1D1Ev
  S6312C1(); // tgen
};
//SIG(1 S6312C1) C1{ BC2{ m} vd Fi Fc}


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

static void Test_S6312C1()
{
  extern Class_Descriptor cd_S6312C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S6312C1, buf);
    S6312C1 *dp, &lv = *(dp=new (buf) S6312C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S6312C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6312C1)");
    check_base_class_offset(lv, (S5266C29*), 0, "S6312C1");
    check_field_offset(lv, s6312c1f0, ABISELECT(8,4), "S6312C1.s6312c1f0");
    check_field_offset(lv, s6312c1f1, ABISELECT(12,8), "S6312C1.s6312c1f1");
    test_class_info(&lv, &cd_S6312C1);
    dp->~S6312C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6312C1(Test_S6312C1, "S6312C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S6312C1C1Ev();
extern void _ZN7S6312C1D1Ev();
Name_Map name_map_S6312C1[] = {
  NSPAIR(_ZN7S6312C1C1Ev),
  NSPAIR(_ZN7S6312C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
static Base_Class bases_S6312C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S6312C1[];
extern void _ZN7S6312C1D1Ev();
extern void _ZN7S6312C1D0Ev();
static  VTBL_ENTRY vtc_S6312C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6312C1[0]),
  (VTBL_ENTRY)&_ZN7S6312C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6312C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S6312C1[];
extern  VTBL_ENTRY _ZTV7S6312C1[];
Class_Descriptor cd_S6312C1 = {  "S6312C1", // class name
  bases_S6312C1, 1,
  &(vtc_S6312C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S6312C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6312C1),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  S14312C1  {
  void *s14312c1f0;
  int s14312c1f1[2];
  short s14312c1f2[8];
};
//SIG(1 S14312C1) C1{ Fp Fi[2] Fs[8]}



static void Test_S14312C1()
{
  {
    init_simple_test("S14312C1");
    S14312C1 lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S14312C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14312C1)");
    check_field_offset(lv, s14312c1f0, 0, "S14312C1.s14312c1f0");
    check_field_offset(lv, s14312c1f1, ABISELECT(8,4), "S14312C1.s14312c1f1");
    check_field_offset(lv, s14312c1f2, ABISELECT(16,12), "S14312C1.s14312c1f2");
  }
}
static Arrange_To_Call_Me vS14312C1(Test_S14312C1, "S14312C1", ABISELECT(32,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5812C1  : S79C8_nt {
  virtual void  v1(); // _ZN7S5812C12v1Ev
  ~S5812C1(); // tgen
  S5812C1(); // tgen
};
//SIG(1 S5812C1) C1{ BC2{ m Fi[2]} v1}


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

static void Test_S5812C1()
{
  extern Class_Descriptor cd_S5812C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S5812C1, buf);
    S5812C1 *dp, &lv = *(dp=new (buf) S5812C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S5812C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5812C1)");
    check_base_class_offset(lv, (S79C8_nt*), ABISELECT(8,4), "S5812C1");
    test_class_info(&lv, &cd_S5812C1);
    dp->~S5812C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5812C1(Test_S5812C1, "S5812C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S5812C1C1Ev();
extern void _ZN7S5812C1D1Ev();
Name_Map name_map_S5812C1[] = {
  NSPAIR(_ZN7S5812C1C1Ev),
  NSPAIR(_ZN7S5812C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S79C8_nt;
extern VTBL_ENTRY _ZTI8S79C8_nt[];
static Base_Class bases_S5812C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S79C8_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, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5812C1[];
extern void _ZN7S5812C12v1Ev();
static  VTBL_ENTRY vtc_S5812C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5812C1[0]),
  (VTBL_ENTRY)&_ZN7S5812C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S5812C1[];
extern  VTBL_ENTRY _ZTV7S5812C1[];
Class_Descriptor cd_S5812C1 = {  "S5812C1", // class name
  bases_S5812C1, 1,
  &(vtc_S5812C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S5812C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S5812C1),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  S17206C1  {
  int s17206c1f0[3];
  void *s17206c1f1;
  __tsi64 s17206c1f2;
  void  mf17206c1(); // _ZN8S17206C19mf17206c1Ev
};
//SIG(1 S17206C1) C1{ m Fi[3] Fp FL}


void  S17206C1 ::mf17206c1(){}

static void Test_S17206C1()
{
  {
    init_simple_test("S17206C1");
    S17206C1 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S17206C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17206C1)");
    check_field_offset(lv, s17206c1f0, 0, "S17206C1.s17206c1f0");
    check_field_offset(lv, s17206c1f1, ABISELECT(16,12), "S17206C1.s17206c1f1");
    check_field_offset(lv, s17206c1f2, ABISELECT(24,16), "S17206C1.s17206c1f2");
  }
}
static Arrange_To_Call_Me vS17206C1(Test_S17206C1, "S17206C1", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16928C1  {
  int s16928c1f0;
  void *s16928c1f1;
  int s16928c1f2;
  void *s16928c1f3;
  void  mf16928c1(); // _ZN8S16928C19mf16928c1Ev
};
//SIG(1 S16928C1) C1{ m Fi Fp Fi Fp}


void  S16928C1 ::mf16928c1(){}

static void Test_S16928C1()
{
  {
    init_simple_test("S16928C1");
    S16928C1 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S16928C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16928C1)");
    check_field_offset(lv, s16928c1f0, 0, "S16928C1.s16928c1f0");
    check_field_offset(lv, s16928c1f1, ABISELECT(8,4), "S16928C1.s16928c1f1");
    check_field_offset(lv, s16928c1f2, ABISELECT(16,8), "S16928C1.s16928c1f2");
    check_field_offset(lv, s16928c1f3, ABISELECT(24,12), "S16928C1.s16928c1f3");
  }
}
static Arrange_To_Call_Me vS16928C1(Test_S16928C1, "S16928C1", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10816C1  {
  char s10816c1f0[32];
  int s10816c1f1;
  void *s10816c1f2;
};
//SIG(1 S10816C1) C1{ Fc[32] Fi Fp}



static void Test_S10816C1()
{
  {
    init_simple_test("S10816C1");
    S10816C1 lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S10816C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10816C1)");
    check_field_offset(lv, s10816c1f0, 0, "S10816C1.s10816c1f0");
    check_field_offset(lv, s10816c1f1, 32, "S10816C1.s10816c1f1");
    check_field_offset(lv, s10816c1f2, ABISELECT(40,36), "S10816C1.s10816c1f2");
  }
}
static Arrange_To_Call_Me vS10816C1(Test_S10816C1, "S10816C1", ABISELECT(48,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13528C1  {
  int s13528c1f0[5];
  char s13528c1f1[12];
};
//SIG(1 S13528C1) C1{ Fi[5] Fc[12]}



static void Test_S13528C1()
{
  {
    init_simple_test("S13528C1");
    S13528C1 lv;
    check2(sizeof(lv), 32, "sizeof(S13528C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13528C1)");
    check_field_offset(lv, s13528c1f0, 0, "S13528C1.s13528c1f0");
    check_field_offset(lv, s13528c1f1, 20, "S13528C1.s13528c1f1");
  }
}
static Arrange_To_Call_Me vS13528C1(Test_S13528C1, "S13528C1", 32);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10664C1  {
  char s10664c1f0[2];
  int s10664c1f1;
  __tsi64 s10664c1f2;
};
//SIG(1 S10664C1) C1{ Fc[2] Fi FL}



static void Test_S10664C1()
{
  {
    init_simple_test("S10664C1");
    S10664C1 lv;
    check2(sizeof(lv), 16, "sizeof(S10664C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10664C1)");
    check_field_offset(lv, s10664c1f0, 0, "S10664C1.s10664c1f0");
    check_field_offset(lv, s10664c1f1, 4, "S10664C1.s10664c1f1");
    check_field_offset(lv, s10664c1f2, 8, "S10664C1.s10664c1f2");
  }
}
static Arrange_To_Call_Me vS10664C1(Test_S10664C1, "S10664C1", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17031C1  {
  int s17031c1f0[11];
  char s17031c1f1;
  void  mf17031c1(); // _ZN8S17031C19mf17031c1Ev
};
//SIG(1 S17031C1) C1{ m Fi[11] Fc}


void  S17031C1 ::mf17031c1(){}

static void Test_S17031C1()
{
  {
    init_simple_test("S17031C1");
    S17031C1 lv;
    check2(sizeof(lv), 48, "sizeof(S17031C1)");
    check2(__alignof__(lv), 4, "__alignof__(S17031C1)");
    check_field_offset(lv, s17031c1f0, 0, "S17031C1.s17031c1f0");
    check_field_offset(lv, s17031c1f1, 44, "S17031C1.s17031c1f1");
  }
}
static Arrange_To_Call_Me vS17031C1(Test_S17031C1, "S17031C1", 48);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6316C1  : S5266C29 {
  int s6316c1f0;
  virtual  ~S6316C1(); // _ZN7S6316C1D1Ev
  S6316C1(); // tgen
};
//SIG(1 S6316C1) C1{ BC2{ m} vd Fi}


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

static void Test_S6316C1()
{
  extern Class_Descriptor cd_S6316C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6316C1, buf);
    S6316C1 *dp, &lv = *(dp=new (buf) S6316C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6316C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6316C1)");
    check_base_class_offset(lv, (S5266C29*), 0, "S6316C1");
    check_field_offset(lv, s6316c1f0, ABISELECT(8,4), "S6316C1.s6316c1f0");
    test_class_info(&lv, &cd_S6316C1);
    dp->~S6316C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6316C1(Test_S6316C1, "S6316C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6316C1C1Ev();
extern void _ZN7S6316C1D1Ev();
Name_Map name_map_S6316C1[] = {
  NSPAIR(_ZN7S6316C1C1Ev),
  NSPAIR(_ZN7S6316C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5266C29;
extern VTBL_ENTRY _ZTI8S5266C29[];
static Base_Class bases_S6316C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5266C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S6316C1[];
extern void _ZN7S6316C1D1Ev();
extern void _ZN7S6316C1D0Ev();
static  VTBL_ENTRY vtc_S6316C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6316C1[0]),
  (VTBL_ENTRY)&_ZN7S6316C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6316C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S6316C1[];
extern  VTBL_ENTRY _ZTV7S6316C1[];
Class_Descriptor cd_S6316C1 = {  "S6316C1", // class name
  bases_S6316C1, 1,
  &(vtc_S6316C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6316C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6316C1),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  S17319C1  {
  __tsi64 s17319c1f0;
  char s17319c1f1;
  __tsi64 s17319c1f2;
  void  mf17319c1(); // _ZN8S17319C19mf17319c1Ev
};
//SIG(1 S17319C1) C1{ m FL Fc FL}


void  S17319C1 ::mf17319c1(){}

static void Test_S17319C1()
{
  {
    init_simple_test("S17319C1");
    S17319C1 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S17319C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17319C1)");
    check_field_offset(lv, s17319c1f0, 0, "S17319C1.s17319c1f0");
    check_field_offset(lv, s17319c1f1, 8, "S17319C1.s17319c1f1");
    check_field_offset(lv, s17319c1f2, ABISELECT(16,12), "S17319C1.s17319c1f2");
  }
}
static Arrange_To_Call_Me vS17319C1(Test_S17319C1, "S17319C1", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21639C1  {
  int  :0;
  void  mf21639c1(); // _ZN8S21639C19mf21639c1Ev
  virtual  ~S21639C1(); // _ZN8S21639C1D1Ev
  S21639C1(); // tgen
};
//SIG(1 S21639C1) C1{ vd m Fi:0}


void  S21639C1 ::mf21639c1(){}
 S21639C1 ::~S21639C1(){ note_dtor("S21639C1", this);}
S21639C1 ::S21639C1(){ note_ctor("S21639C1", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S21639C1C1Ev();
extern void _ZN8S21639C1D1Ev();
Name_Map name_map_S21639C1[] = {
  NSPAIR(_ZN8S21639C1C1Ev),
  NSPAIR(_ZN8S21639C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21639C1[];
extern void _ZN8S21639C1D1Ev();
extern void _ZN8S21639C1D0Ev();
static  VTBL_ENTRY vtc_S21639C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21639C1[0]),
  (VTBL_ENTRY)&_ZN8S21639C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21639C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21639C1[];
extern  VTBL_ENTRY _ZTV8S21639C1[];
Class_Descriptor cd_S21639C1 = {  "S21639C1", // class name
  0,0,//no base classes
  &(vtc_S21639C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S21639C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21639C1),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  S18947C1  {
  int s18947c1f0;
  virtual  ~S18947C1(); // _ZN8S18947C1D1Ev
  virtual void  v1(); // _ZN8S18947C12v1Ev
  S18947C1(); // tgen
};
//SIG(1 S18947C1) C1{ vd v1 Fi}


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

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

#else // __cplusplus

extern void _ZN8S18947C1C1Ev();
extern void _ZN8S18947C1D1Ev();
Name_Map name_map_S18947C1[] = {
  NSPAIR(_ZN8S18947C1C1Ev),
  NSPAIR(_ZN8S18947C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18947C1[];
extern void _ZN8S18947C1D1Ev();
extern void _ZN8S18947C1D0Ev();
extern void _ZN8S18947C12v1Ev();
static  VTBL_ENTRY vtc_S18947C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18947C1[0]),
  (VTBL_ENTRY)&_ZN8S18947C1D1Ev,
  (VTBL_ENTRY)&_ZN8S18947C1D0Ev,
  (VTBL_ENTRY)&_ZN8S18947C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S18947C1[];
extern  VTBL_ENTRY _ZTV8S18947C1[];
Class_Descriptor cd_S18947C1 = {  "S18947C1", // class name
  0,0,//no base classes
  &(vtc_S18947C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S18947C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18947C1),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  S13486C1  {
  int s13486c1f0[4];
  __tsi64 s13486c1f1;
};
//SIG(1 S13486C1) C1{ Fi[4] FL}



static void Test_S13486C1()
{
  {
    init_simple_test("S13486C1");
    S13486C1 lv;
    check2(sizeof(lv), 24, "sizeof(S13486C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13486C1)");
    check_field_offset(lv, s13486c1f0, 0, "S13486C1.s13486c1f0");
    check_field_offset(lv, s13486c1f1, 16, "S13486C1.s13486c1f1");
  }
}
static Arrange_To_Call_Me vS13486C1(Test_S13486C1, "S13486C1", 24);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14569C1  {
  void *s14569c1f0[20];
};
//SIG(1 S14569C1) C1{ Fp[20]}



static void Test_S14569C1()
{
  {
    init_simple_test("S14569C1");
    S14569C1 lv;
    check2(sizeof(lv), ABISELECT(160,80), "sizeof(S14569C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14569C1)");
    check_field_offset(lv, s14569c1f0, 0, "S14569C1.s14569c1f0");
  }
}
static Arrange_To_Call_Me vS14569C1(Test_S14569C1, "S14569C1", ABISELECT(160,80));

#else // __cplusplus

#endif // __cplusplus

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

